fix build and ensure we install needed runtime components
authorEric Andersen <andersen@codepoet.org>
Sun, 14 Jan 2007 23:26:15 +0000 (23:26 -0000)
committerEric Andersen <andersen@codepoet.org>
Sun, 14 Jan 2007 23:26:15 +0000 (23:26 -0000)
13 files changed:
package/libgtk2/000_gtk+-2.0.6-exportsymbols.patch [new file with mode: 0644]
package/libgtk2/000_gtk+-2.2.0-buildfix-immodule.patch [new file with mode: 0644]
package/libgtk2/002_xpmico.patch [new file with mode: 0644]
package/libgtk2/007_password_char.patch [new file with mode: 0644]
package/libgtk2/0815_ia32-hack.patch [new file with mode: 0644]
package/libgtk2/gdk-pixbuf.loaders [new file with mode: 0644]
package/libgtk2/gtk.immodules [new file with mode: 0644]
package/libgtk2/gtklabel-resize-patch [deleted file]
package/libgtk2/gtklabel-resize.patch [new file with mode: 0644]
package/libgtk2/libgtk2.mk
package/libgtk2/odd-include-problem.patch [new file with mode: 0644]
package/libgtk2/pangoxft2.10.6.diff [deleted file]
package/libgtk2/run-iconcache.patch

diff --git a/package/libgtk2/000_gtk+-2.0.6-exportsymbols.patch b/package/libgtk2/000_gtk+-2.0.6-exportsymbols.patch
new file mode 100644 (file)
index 0000000..7364736
--- /dev/null
@@ -0,0 +1,26 @@
+diff -ruN gtk+-2.0.6.orig/configure gtk+-2.0.6/configure
+--- gtk+-2.0.6.orig/configure  2002-08-31 03:49:07.000000000 +0900
++++ gtk+-2.0.6/configure       2002-08-31 03:52:45.000000000 +0900
+@@ -7904,7 +7904,8 @@
+ if test "$os_win32" != yes; then
+     # libtool option to control which symbols are exported
+     # right now, symbols starting with _ are not exported
+-    LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^[^_].*"'
++    # Disabled until -export-symbols-regex works (RH patch)
++    LIBTOOL_EXPORT_OPTIONS=
+ else
+     # We currently use .def files on Windows (for gdk-pixbuf, gdk and gtk)
+     LIBTOOL_EXPORT_OPTIONS=
+diff -ruN gtk+-2.0.6.orig/configure.in gtk+-2.0.6/configure.in
+--- gtk+-2.0.6.orig/configure.in       2002-08-31 03:49:07.000000000 +0900
++++ gtk+-2.0.6/configure.in    2002-08-31 03:51:22.000000000 +0900
+@@ -273,7 +273,8 @@
+ if test "$os_win32" != yes; then
+     # libtool option to control which symbols are exported
+     # right now, symbols starting with _ are not exported
+-    LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^[[^_]].*"'
++    # Disabled until -export-symbols-regex works (RH patch)
++    LIBTOOL_EXPORT_OPTIONS=
+ else
+     # We currently use .def files on Windows (for gdk-pixbuf, gdk and gtk)
+     LIBTOOL_EXPORT_OPTIONS=
diff --git a/package/libgtk2/000_gtk+-2.2.0-buildfix-immodule.patch b/package/libgtk2/000_gtk+-2.2.0-buildfix-immodule.patch
new file mode 100644 (file)
index 0000000..5d80daf
--- /dev/null
@@ -0,0 +1,33 @@
+diff -ruN gtk+-2.2.0.orig/modules/input/Makefile.am gtk+-2.2.0/modules/input/Makefile.am
+--- gtk+-2.2.0.orig/modules/input/Makefile.am  2003-01-06 23:40:37.000000000 +0900
++++ gtk+-2.2.0/modules/input/Makefile.am       2003-01-06 23:46:35.000000000 +0900
+@@ -118,7 +118,12 @@
+       im-viqr.la
+ gtk.immodules: Makefile.am $(module_LTLIBRARIES)
+-      $(top_builddir)/gtk/gtk-query-immodules-2.0 $(module_LTLIBRARIES) > gtk.immodules
++      @if $(RUN_QUERY_IMMODULES_TEST) ; then \
++        $(top_builddir)/gtk/gtk-query-immodules-2.0 $(module_LTLIBRARIES) > gtk.immodules ; \
++      else \
++        touch $@ ; \
++      fi
++
+ CLEANFILES = gtk.immodules
+diff -ruN gtk+-2.2.0.orig/modules/input/Makefile.in gtk+-2.2.0/modules/input/Makefile.in
+--- gtk+-2.2.0.orig/modules/input/Makefile.in  2003-01-06 23:39:08.000000000 +0900
++++ gtk+-2.2.0/modules/input/Makefile.in       2003-01-06 23:46:44.000000000 +0900
+@@ -785,7 +785,11 @@
+       rm -f $(DESTDIR)$(sysconfdir)/gtk-2.0/gtk.immodules
+ gtk.immodules: Makefile.am $(module_LTLIBRARIES)
+-      $(top_builddir)/gtk/gtk-query-immodules-2.0 $(module_LTLIBRARIES) > gtk.immodules
++      @if $(RUN_QUERY_IMMODULES_TEST) ; then \
++        $(top_builddir)/gtk/gtk-query-immodules-2.0 $(module_LTLIBRARIES) > gtk.immodules ; \
++      else \
++        touch $@ ; \
++      fi
+ @CROSS_COMPILING_FALSE@all-local: gtk.immodules
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/package/libgtk2/002_xpmico.patch b/package/libgtk2/002_xpmico.patch
new file mode 100644 (file)
index 0000000..21500db
--- /dev/null
@@ -0,0 +1,18 @@
+diff -Nur gtk+-2.4.9.orig/gdk-pixbuf/io-ico.c gtk+-2.4.9/gdk-pixbuf/io-ico.c
+--- gtk+-2.4.9.orig/gdk-pixbuf/io-ico.c        2004-08-25 18:52:18.000000000 +0200
++++ gtk+-2.4.9/gdk-pixbuf/io-ico.c     2004-09-15 00:40:17.000000000 +0200
+@@ -210,6 +210,14 @@
+       
+       State->HeaderSize = 6 + IconCount*16;
++      if (State->HeaderSize < 0) {
++              g_set_error (error,
++                           GDK_PIXBUF_ERROR,
++                           GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
++                           _("Invalid header in icon"));
++              return;
++      }
++
+       if (State->HeaderSize>State->BytesInHeaderBuf) {
+               guchar *tmp=g_try_realloc(State->HeaderBuf,State->HeaderSize);
+               if (!tmp) {
diff --git a/package/libgtk2/007_password_char.patch b/package/libgtk2/007_password_char.patch
new file mode 100644 (file)
index 0000000..ed13570
--- /dev/null
@@ -0,0 +1,33 @@
+--- gtk+-2.8.10/gtk/gtkentry.c.set-invisible-char-to-bullet    2006-01-19 15:12:18.000000000 -0500
++++ gtk+-2.8.10/gtk/gtkentry.c 2006-01-19 15:36:51.000000000 -0500
+@@ -542,7 +542,7 @@
+                                    g_param_spec_unichar ("invisible-char",
+                                                        P_("Invisible character"),
+                                                        P_("The character to use when masking entry contents (in \"password mode\")"),
+-                                                       '*',
++                                                       (gunichar) 0x25cf,
+                                                        GTK_PARAM_READWRITE));
+   g_object_class_install_property (gobject_class,
+@@ -1000,7 +1000,7 @@
+   entry->editable = TRUE;
+   entry->visible = TRUE;
+-  entry->invisible_char = '*';
++  entry->invisible_char = (gunichar) 0x25cf;
+   entry->dnd_position = -1;
+   entry->width_chars = -1;
+   entry->is_cell_renderer = FALSE;
+@@ -4019,9 +4019,9 @@
+  * gtk_entry_set_visibility() has been called to set text visibility
+  * to %FALSE. i.e. this is the character used in "password mode" to
+  * show the user how many characters have been typed. The default
+- * invisible char is an asterisk ('*').  If you set the invisible char
+- * to 0, then the user will get no feedback at all; there will be
+- * no text on the screen as they type.
++ * invisible char is a small bullet (Unicode character 2022). If you
++ * set the invisible char to 0, then the user will get no feedback at
++ * all; there will be no text on the screen as they type.
+  * 
+  **/
+ void
diff --git a/package/libgtk2/0815_ia32-hack.patch b/package/libgtk2/0815_ia32-hack.patch
new file mode 100644 (file)
index 0000000..fb10d85
--- /dev/null
@@ -0,0 +1,123 @@
+--- gtk+-2.8.13/gdk-pixbuf/gdk-pixbuf-io.c~    2005-10-03 17:11:49.000000000 +0200
++++ gtk+-2.8.13/gdk-pixbuf/gdk-pixbuf-io.c     2006-03-01 20:33:36.524552192 +0100
+@@ -32,6 +32,7 @@
+ #ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
++#include <sys/utsname.h>
+ #include "gdk-pixbuf-private.h"
+ #include "gdk-pixbuf-io.h"
+@@ -276,8 +277,21 @@
+   gchar *result = g_strdup (g_getenv ("GDK_PIXBUF_MODULE_FILE"));
+   if (!result)
+-        result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gdk-pixbuf.loaders", NULL);
++#if defined(__linux__) && defined (__i386__)
++      {
++        struct utsname uts;
++        uname(&uts);
++        result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gdk-pixbuf.loaders.32", NULL);
++        if (strcmp("x86_64", uts.machine) || access(result, R_OK))
++          {
++            g_free(result);
++            result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gdk-pixbuf.loaders", NULL);
++          }
++      }
++#else
++        result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gdk-pixbuf.loaders", NULL);
++#endif
+   return result;
+ }
+--- gtk+-2.8.13/gtk/gtkprivate.h~      2005-03-22 03:14:55.000000000 +0100
++++ gtk+-2.8.13/gtk/gtkprivate.h       2006-03-01 19:51:42.510740384 +0100
+@@ -96,6 +96,13 @@
+ #endif /* G_OS_WIN32 */
++#if defined(__linux__) && defined (__i386__)
++const gchar *_gtk_get_libdir ();
++
++#undef GTK_LIBDIR
++#define GTK_LIBDIR _gtk_get_libdir ()
++#endif
++
+ gboolean _gtk_fnmatch (const char *pattern,
+                      const char *string,
+                      gboolean    no_leading_period);
+--- gtk+-2.8.13/gtk/gtkmain.c~ 2005-12-06 17:14:30.000000000 +0100
++++ gtk+-2.8.13/gtk/gtkmain.c  2006-03-01 20:36:05.175953744 +0100
+@@ -42,6 +42,7 @@
+ #include <unistd.h>
+ #endif
+ #include <sys/types.h>                /* For uid_t, gid_t */
++#include <sys/utsname.h>
+ #ifdef G_OS_WIN32
+ #define STRICT
+@@ -336,6 +337,28 @@
+ #endif /* G_OS_WIN32 */
++#if defined(__linux__) && defined (__i386__)
++const gchar *
++_gtk_get_libdir (void)
++{
++  static char *gtk_libdir = NULL;
++  if (gtk_libdir == NULL)
++    {
++#if defined(__linux__) && defined (__i386__)
++      struct utsname uts;
++
++      uname(&uts);
++      if (!strcmp("x86_64", uts.machine)
++        && !access("/usr/lib32/gtk-2.0", R_OK|X_OK))
++      gtk_libdir = "/usr/lib32";
++      else
++#endif
++      gtk_libdir = "/usr/lib";
++    }
++  return gtk_libdir;
++}
++#endif
++
+ static gboolean do_setlocale = TRUE;
+ /**
+--- gtk+-2.8.13/gtk/gtkrc.c~   2005-11-23 15:24:51.000000000 +0100
++++ gtk+-2.8.13/gtk/gtkrc.c    2006-03-01 20:33:25.952159440 +0100
+@@ -38,6 +38,10 @@
+ #include <string.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#ifdef HAVE_UNISTD_H
++#include <unistd.h>
++#endif
++#include <sys/utsname.h>
+ #include <glib.h>
+@@ -364,7 +368,21 @@
+       if (im_module_file)
+       result = g_strdup (im_module_file);
+       else
++#if defined(__linux__) && defined (__i386__)
++      {
++        struct utsname uts;
++
++        uname(&uts);
++        result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gtk.immodules.32", NULL);
++        if (strcmp("x86_64", uts.machine) || access(result, R_OK))
++          {
++            g_free(result);
++            result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gtk.immodules", NULL);
++          }
++      }
++#else
+       result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gtk.immodules", NULL);
++#endif
+     }
+   return result;
diff --git a/package/libgtk2/gdk-pixbuf.loaders b/package/libgtk2/gdk-pixbuf.loaders
new file mode 100644 (file)
index 0000000..435e63e
--- /dev/null
@@ -0,0 +1,107 @@
+# GdkPixbuf Image Loader Modules file
+# Automatically generated file, do not edit
+# Created by gdk-pixbuf-query-loaders from gtk+-2.10.7
+#
+# LoaderDir = /lib/gtk-2.0/2.10.0/loaders
+#
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-png.so"
+"png" 5 "gtk20" "The PNG image format"
+"image/png" ""
+"png" ""
+"\211PNG\r\n\032\n" "" 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-jpeg.so"
+"jpeg" 5 "gtk20" "The JPEG image format"
+"image/jpeg" ""
+"jpeg" "jpe" "jpg" ""
+"\377\330" "" 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-gif.so"
+"gif" 4 "gtk20" "The GIF image format"
+"image/gif" ""
+"gif" ""
+"GIF8" "" 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-ico.so"
+"ico" 5 "gtk20" "The ICO image format"
+"image/x-icon" ""
+"ico" "cur" ""
+"  \001   " "zz znz" 100
+"  \002   " "zz znz" 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-ani.so"
+"ani" 4 "gtk20" "The ANI image format"
+"application/x-navi-animation" ""
+"ani" ""
+"RIFF    ACON" "    xxxx    " 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-ras.so"
+"ras" 4 "gtk20" "The Sun raster image format"
+"image/x-cmu-raster" "image/x-sun-raster" ""
+"ras" ""
+"Y\246j\225" "" 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-xpm.so"
+"xpm" 4 "gtk20" "The XPM image format"
+"image/x-xpixmap" ""
+"xpm" ""
+"/* XPM */" "" 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-tiff.so"
+"tiff" 1 "gtk20" "The TIFF image format"
+"image/tiff" ""
+"tiff" "tif" ""
+"MM *" "  z " 100
+"II* " "   z" 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-pnm.so"
+"pnm" 4 "gtk20" "The PNM/PBM/PGM/PPM image format family"
+"image/x-portable-anymap" "image/x-portable-bitmap" "image/x-portable-graymap" "image/x-portable-pixmap" ""
+"pnm" "pbm" "pgm" "ppm" ""
+"P1" "" 100
+"P2" "" 100
+"P3" "" 100
+"P4" "" 100
+"P5" "" 100
+"P6" "" 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-bmp.so"
+"bmp" 5 "gtk20" "The BMP image format"
+"image/bmp" "image/x-bmp" "image/x-MS-bmp" ""
+"bmp" ""
+"BM" "" 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-wbmp.so"
+"wbmp" 4 "gtk20" "The WBMP image format"
+"image/vnd.wap.wbmp" ""
+"wbmp" ""
+" " "z" 1
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-xbm.so"
+"xbm" 4 "gtk20" "The XBM image format"
+"image/x-xbitmap" ""
+"xbm" ""
+"#define " "" 100
+"/*" "" 50
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-tga.so"
+"tga" 4 "gtk20" "The Targa image format"
+"image/x-tga" ""
+"tga" "targa" ""
+" \001\001" "x  " 100
+" \001\t" "x  " 100
+"  \002" "xz " 99
+"  \003" "xz " 100
+"  \n" "xz " 100
+"  \013" "xz " 100
+
+"/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-pcx.so"
+"pcx" 4 "gtk20" "The PCX image format"
+"image/x-pcx" ""
+"pcx" ""
+"\n \001" "" 100
+"\n\002\001" "" 100
+"\n\003\001" "" 100
+"\n\004\001" "" 100
+"\n\005\001" "" 100
+
diff --git a/package/libgtk2/gtk.immodules b/package/libgtk2/gtk.immodules
new file mode 100644 (file)
index 0000000..81ff67d
--- /dev/null
@@ -0,0 +1,35 @@
+# GTK+ Input Method Modules file
+# Automatically generated file, do not edit
+# Created by gtk-query-immodules-2.0 from gtk+-2.10.7
+#
+#
+"/lib/gtk-2.0/2.10.0/immodules/im-xim.so" 
+"xim" "X Input Method" "gtk20" "/usr/share/locale" "ko:ja:th:zh" 
+
+"/lib/gtk-2.0/2.10.0/immodules/im-am-et.so" 
+"am_et" "Amharic (EZ+)" "gtk20" "/usr/share/locale" "am" 
+
+"/lib/gtk-2.0/2.10.0/immodules/im-cedilla.so" 
+"cedilla" "Cedilla" "gtk20" "/usr/share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa" 
+
+"/lib/gtk-2.0/2.10.0/immodules/im-cyrillic-translit.so" 
+"cyrillic_translit" "Cyrillic (Transliterated)" "gtk20" "/usr/share/locale" "" 
+
+"/lib/gtk-2.0/2.10.0/immodules/im-inuktitut.so" 
+"inuktitut" "Inuktitut (Transliterated)" "gtk20" "/usr/share/locale" "iu" 
+
+"/lib/gtk-2.0/2.10.0/immodules/im-ipa.so" 
+"ipa" "IPA" "gtk20" "/usr/share/locale" "" 
+
+"/lib/gtk-2.0/2.10.0/immodules/im-thai.so" 
+"thai" "Thai-Lao" "gtk+" "/usr/share/locale" "lo:th" 
+
+"/lib/gtk-2.0/2.10.0/immodules/im-ti-er.so" 
+"ti_er" "Tigrigna-Eritrean (EZ+)" "gtk20" "/usr/share/locale" "ti" 
+
+"/lib/gtk-2.0/2.10.0/immodules/im-ti-et.so" 
+"ti_et" "Tigrigna-Ethiopian (EZ+)" "gtk20" "/usr/share/locale" "ti" 
+
+"/lib/gtk-2.0/2.10.0/immodules/im-viqr.so" 
+"viqr" "Vietnamese (VIQR)" "gtk20" "/usr/share/locale" "vi" 
+
diff --git a/package/libgtk2/gtklabel-resize-patch b/package/libgtk2/gtklabel-resize-patch
deleted file mode 100644 (file)
index df29656..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.4.3/gtk/gtklabel.c~ 2004-06-11 13:50:34.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtklabel.c  2004-07-05 13:33:57.000000000 +0100
-@@ -1623,6 +1623,7 @@
-   /* We have to clear the layout, fonts etc. may have changed */
-   gtk_label_clear_layout (label);
-+  gtk_widget_queue_resize (GTK_WIDGET (label));
- }
- static void 
diff --git a/package/libgtk2/gtklabel-resize.patch b/package/libgtk2/gtklabel-resize.patch
new file mode 100644 (file)
index 0000000..df29656
--- /dev/null
@@ -0,0 +1,10 @@
+--- gtk+-2.4.3/gtk/gtklabel.c~ 2004-06-11 13:50:34.000000000 +0100
++++ gtk+-2.4.3/gtk/gtklabel.c  2004-07-05 13:33:57.000000000 +0100
+@@ -1623,6 +1623,7 @@
+   /* We have to clear the layout, fonts etc. may have changed */
+   gtk_label_clear_layout (label);
++  gtk_widget_queue_resize (GTK_WIDGET (label));
+ }
+ static void 
index 78845973c14a46fae4fe4906c7bd5fc434ab88da..8c3384b23a289e3a4eb646ccc5d5185c4e484af8 100644 (file)
@@ -10,22 +10,7 @@ LIBGTK2_CAT:=$(BZCAT)
 LIBGTK2_DIR:=$(BUILD_DIR)/gtk+-$(LIBGTK2_VERSION)
 LIBGTK2_BINARY:=libgtk-x11-2.0.a
 
-
-$(DL_DIR)/$(LIBGTK2_SOURCE):
-        $(WGET) -P $(DL_DIR) $(LIBGTK2_SITE)/$(LIBGTK2_SOURCE)
-
-libgtk2-source: $(DL_DIR)/$(LIBGTK2_SOURCE)
-
-$(LIBGTK2_DIR)/.unpacked: $(DL_DIR)/$(LIBGTK2_SOURCE)
-       $(LIBGTK2_CAT) $(DL_DIR)/$(LIBGTK2_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
-       toolchain/patch-kernel.sh $(LIBGTK2_DIR) package/libgtk2/ \*.patch*
-       $(CONFIG_UPDATE) $(LIBGTK2_DIR)
-       touch $(LIBGTK2_DIR)/.unpacked
-
-$(LIBGTK2_DIR)/.configured: $(LIBGTK2_DIR)/.unpacked
-       (cd $(LIBGTK2_DIR); rm -rf config.cache; \
-               $(TARGET_CONFIGURE_OPTS) \
-               GLIB_CONFIG=$(STAGING_DIR)/bin/glib-config \
+LIBGTK2_BUILD_ENV=$(TARGET_CONFIGURE_OPTS) \
                ac_cv_func_mmap_fixed_mapped=yes \
                ac_cv_func_posix_getpwuid_r=yes \
                glib_cv_stack_grows=no \
@@ -84,7 +69,28 @@ $(LIBGTK2_DIR)/.configured: $(LIBGTK2_DIR)/.unpacked
                ac_use_included_regex=no \
                gl_cv_c_restrict=no \
                ac_cv_path_GLIB_GENMARSHAL=/usr/bin/glib-genmarshal \
-               ac_cv_path_CUPS_CONFIG=no \
+               ac_cv_path_CUPS_CONFIG=no
+
+
+$(DL_DIR)/$(LIBGTK2_SOURCE):
+        $(WGET) -P $(DL_DIR) $(LIBGTK2_SITE)/$(LIBGTK2_SOURCE)
+
+libgtk2-source: $(DL_DIR)/$(LIBGTK2_SOURCE)
+
+$(LIBGTK2_DIR)/.unpacked: $(DL_DIR)/$(LIBGTK2_SOURCE)
+       $(LIBGTK2_CAT) $(DL_DIR)/$(LIBGTK2_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
+       toolchain/patch-kernel.sh $(LIBGTK2_DIR) package/libgtk2/ \*.patch*
+       $(CONFIG_UPDATE) $(LIBGTK2_DIR)
+       touch $(LIBGTK2_DIR)/.unpacked
+
+$(LIBGTK2_DIR)/.configured: $(LIBGTK2_DIR)/.unpacked
+       # The following is an truely evil hack!
+       # I dont yet understand why configure is not doing this right
+       # TODO: also remove 'odd-include-problem.patch' when this is fixed
+       $(SED) "s,^GDK_DEP_CFLAGS=.*,GDK_DEP_CFLAGS=\'-pthread -I$(STAGING_DIR)/include/glib-2.0 -I$(STAGING_DIR)/lib/glib-2.0/include -I$(STAGING_DIR)/include/pango-1.0 -I$(STAGING_DIR)/include/cairo\',g" $(LIBGTK2_DIR)/configure
+       $(SED) "s,^GDK_DEP_LIBS=.*,GDK_DEP_LIBS=\'-L/home/andersen/SVN/buildroot/build_i686/staging_dir/lib -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lfontconfig -lXext -lXrender -lX11 -lXinerama -lXrandr -lXcursor -lXfixes -lXft -lm\',g" $(LIBGTK2_DIR)/configure
+       (cd $(LIBGTK2_DIR); rm -rf config.cache; \
+               $(LIBGTK2_BUILD_ENV) \
                ./configure \
                --target=$(GNU_TARGET_NAME) \
                --host=$(GNU_TARGET_NAME) \
@@ -104,37 +110,20 @@ $(LIBGTK2_DIR)/.configured: $(LIBGTK2_DIR)/.unpacked
                --enable-shared \
                --enable-static \
                --with-x \
-               --x-includes=$(STAGING_DIR)/usr/X11R6/include \
-               --x-libraries=$(STAGING_DIR)/usr/X11R6/lib \
+               --x-includes=$(STAGING_DIR)/include \
+               --x-libraries=$(STAGING_DIR)/lib \
                --disable-glibtest \
                --enable-explicit-deps=no \
                --disable-debug \
-               --disable-glibtest \
-               --disable-xim \
-               --with-gdktarget=x11 \
        );
        touch $(LIBGTK2_DIR)/.configured
 
 $(LIBGTK2_DIR)/gtk/.libs/$(LIBGTK2_BINARY): $(LIBGTK2_DIR)/.configured
-       $(MAKE) CC=$(TARGET_CC) -C $(LIBGTK2_DIR)
+       $(LIBGTK2_BUILD_ENV) $(MAKE) CC=$(TARGET_CC) -C $(LIBGTK2_DIR)
        touch -c $(LIBGTK2_DIR)/gtk/.libs/$(LIBGTK2_BINARY)
 
 $(STAGING_DIR)/lib/$(LIBGTK2_BINARY): $(LIBGTK2_DIR)/gtk/.libs/$(LIBGTK2_BINARY)
-       $(MAKE) prefix=$(STAGING_DIR) \
-           exec_prefix=$(STAGING_DIR) \
-           bindir=$(STAGING_DIR)/bin \
-           sbindir=$(STAGING_DIR)/sbin \
-           libexecdir=$(STAGING_DIR)/bin \
-           datadir=$(STAGING_DIR)/share \
-           sysconfdir=$(STAGING_DIR)/etc \
-           sharedstatedir=$(STAGING_DIR)/com \
-           localstatedir=$(STAGING_DIR)/var \
-           libdir=$(STAGING_DIR)/lib \
-           includedir=$(STAGING_DIR)/include \
-           oldincludedir=$(STAGING_DIR)/include \
-           infodir=$(STAGING_DIR)/info \
-           mandir=$(STAGING_DIR)/man \
-           -C $(LIBGTK2_DIR) install;
+       $(MAKE) DESTDIR=$(STAGING_DIR) -C $(LIBGTK2_DIR) install;
        touch -c $(STAGING_DIR)/lib/$(LIBGTK2_BINARY)
 
 $(TARGET_DIR)/lib/libgtk-x11-2.0.so.0: $(STAGING_DIR)/lib/$(LIBGTK2_BINARY)
@@ -144,6 +133,21 @@ $(TARGET_DIR)/lib/libgtk-x11-2.0.so.0: $(STAGING_DIR)/lib/$(LIBGTK2_BINARY)
        cp -a $(STAGING_DIR)/lib/libgdk*-2.0.so.0* $(TARGET_DIR)/lib/
        $(STRIP) --strip-unneeded $(TARGET_DIR)/lib/libgtk-x11-2.0.so.0*
        $(STRIP) --strip-unneeded $(TARGET_DIR)/lib/libgdk*-2.0.so.0*
+       mkdir -p $(TARGET_DIR)/lib/gtk-2.0/2.10.0/engines
+       cp -a  $(STAGING_DIR)/lib/gtk-2.0/2.10.0/engines/*.so \
+               $(TARGET_DIR)/lib/gtk-2.0/2.10.0/engines/
+       mkdir -p $(TARGET_DIR)/lib/gtk-2.0/2.10.0/printbackends
+       cp -a  $(STAGING_DIR)/lib/gtk-2.0/2.10.0/printbackends/*.so \
+               $(TARGET_DIR)/lib/gtk-2.0/2.10.0/printbackends/
+       mkdir -p $(TARGET_DIR)/lib/gtk-2.0/2.10.0/immodules
+       cp -a  $(STAGING_DIR)/lib/gtk-2.0/2.10.0/immodules/*.so \
+               $(TARGET_DIR)/lib/gtk-2.0/2.10.0/immodules/
+       mkdir -p $(TARGET_DIR)/lib/gtk-2.0/2.10.0/loaders
+       cp -a  $(STAGING_DIR)/lib/gtk-2.0/2.10.0/loaders/*.so \
+               $(TARGET_DIR)/lib/gtk-2.0/2.10.0/loaders/
+       mkdir -p $(TARGET_DIR)/etc/gtk-2.0
+       cp package/libgtk2/gdk-pixbuf.loaders $(TARGET_DIR)/etc/gtk-2.0
+       cp package/libgtk2/gtk.immodules $(TARGET_DIR)/etc/gtk-2.0
        touch -c $(TARGET_DIR)/lib/libgtk-x11-2.0.so.0
 
 libgtk2: uclibc png jpeg tiff xorg libglib2 \
diff --git a/package/libgtk2/odd-include-problem.patch b/package/libgtk2/odd-include-problem.patch
new file mode 100644 (file)
index 0000000..264149f
--- /dev/null
@@ -0,0 +1,84 @@
+--- gtk+-2.10.7/gdk/Makefile.am.orig   2007-01-05 11:42:47.000000000 -0700
++++ gtk+-2.10.7/gdk/Makefile.am        2007-01-14 02:47:46.000000000 -0700
+@@ -26,7 +26,8 @@
+       -I$(top_builddir)/gdk           \
+       -I$(top_srcdir)/gdk-pixbuf      \
+       -DGDK_PIXBUF_DISABLE_DEPRECATED \
+-      $(GTK_DEBUG_FLAGS)              \
++      $(GTK_DEBUG_FLAGS)              \
++      $(GTK_DEP_CFLAGS)               \
+       $(GDK_DEP_CFLAGS)
+ gtarget=$(gdktarget)
+--- gtk+-2.10.7/gdk/Makefile.in.orig   2007-01-05 11:44:15.000000000 -0700
++++ gtk+-2.10.7/gdk/Makefile.in        2007-01-14 02:48:02.000000000 -0700
+@@ -323,7 +323,8 @@
+       -I$(top_builddir)/gdk           \
+       -I$(top_srcdir)/gdk-pixbuf      \
+       -DGDK_PIXBUF_DISABLE_DEPRECATED \
+-      $(GTK_DEBUG_FLAGS)              \
++      $(GTK_DEBUG_FLAGS)              \
++      $(GTK_DEP_CFLAGS)               \
+       $(GDK_DEP_CFLAGS)
+--- gtk+-2.10.6/gdk/x11/Makefile.am.orig       2007-01-14 01:56:44.000000000 -0700
++++ gtk+-2.10.6/gdk/x11/Makefile.am    2007-01-14 01:57:09.000000000 -0700
+@@ -9,7 +9,8 @@
+       -I$(top_srcdir)/gdk             \
+       -I$(top_builddir)/gdk           \
+       -DGDK_PIXBUF_DISABLE_DEPRECATED \
+-      $(GTK_DEBUG_FLAGS)              \
++      $(GTK_DEBUG_FLAGS)              \
++      $(GTK_DEP_CFLAGS)               \
+       $(GDK_DEP_CFLAGS)
+ LDADDS = $(GDK_DEP_LIBS)
+--- gtk+-2.10.7/gdk/x11/Makefile.in.orig       2007-01-14 02:40:58.000000000 -0700
++++ gtk+-2.10.7/gdk/x11/Makefile.in    2007-01-14 02:41:30.000000000 -0700
+@@ -305,7 +305,8 @@
+       -I$(top_srcdir)/gdk             \
+       -I$(top_builddir)/gdk           \
+       -DGDK_PIXBUF_DISABLE_DEPRECATED \
+-      $(GTK_DEBUG_FLAGS)              \
++      $(GTK_DEBUG_FLAGS)              \
++      $(GTK_DEP_CFLAGS)               \
+       $(GDK_DEP_CFLAGS)
+--- gtk+-2.10.7/gtk/Makefile.am.orig   2007-01-14 15:19:59.000000000 -0700
++++ gtk+-2.10.7/gtk/Makefile.am        2007-01-14 15:21:58.000000000 -0700
+@@ -36,6 +36,7 @@
+       -DGTK_FILE_SYSTEM_ENABLE_UNSUPPORTED            \
+       -DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED          \
+       $(GTK_DEBUG_FLAGS)                              \
++      $(GDK_DEP_CFLAGS)                               \
+       $(GTK_DEP_CFLAGS)                               \
+       $(gtk_clipboard_dnd_c_sources_CFLAGS)
+@@ -106,6 +107,7 @@
+ libadd =                                                              \
+       $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la  \
+       $(top_builddir)/gdk/$(gdktargetlib)                             \
++      $(GDK_DEP_LIBS)                                                 \
+       $(GTK_DEP_LIBS)
+ if OS_UNIX
+--- gtk+-2.10.7/gtk/Makefile.in.orig   2007-01-14 15:20:06.000000000 -0700
++++ gtk+-2.10.7/gtk/Makefile.in        2007-01-14 15:21:46.000000000 -0700
+@@ -344,6 +344,7 @@
+       -DGTK_FILE_SYSTEM_ENABLE_UNSUPPORTED            \
+       -DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED          \
+       $(GTK_DEBUG_FLAGS)                              \
++      $(GDK_DEP_CFLAGS)                               \
+       $(GTK_DEP_CFLAGS)                               \
+       $(gtk_clipboard_dnd_c_sources_CFLAGS)
+@@ -370,6 +371,7 @@
+ libadd = \
+       $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la  \
+       $(top_builddir)/gdk/$(gdktargetlib)                             \
++      $(GDK_DEP_LIBS)                                                 \
+       $(GTK_DEP_LIBS)\
+ $(am__append_3)
diff --git a/package/libgtk2/pangoxft2.10.6.diff b/package/libgtk2/pangoxft2.10.6.diff
deleted file mode 100644 (file)
index 63828ce..0000000
+++ /dev/null
@@ -1,2456 +0,0 @@
-http://mail.gnome.org/archives/performance-list/2006-October/msg00063.html
-
-From: Xan Lópe
-To: ext Matt Hoosier
-Cc: performance-list gnome org
-Subject: Re: [patch] Remove pangocairo from Gtk+ 2.8.20
-Date: Mon, 30 Oct 2006 14:31:56 +0200
-Hi,
-
-I've upgraded your patch against GTK+ 2.10.6, and we are getting great
-performance figures compared to GTK+ 2.10.6 with pangocairo too
-(basically at the level of GTK+ 2.6.10 again). Right now I'm working on
-a python/cairo script to get some nice graphics from a torture test
-session with several GTK+s, hope to get it ready soon.
-
-Index: gtk+-2.10.6/configure.in
-===================================================================
---- gtk+-2.10.6.orig/configure.in      2006-10-30 12:59:28.000000000 +0000
-+++ gtk+-2.10.6/configure.in   2006-10-30 12:59:30.000000000 +0000
-@@ -1435,7 +1435,7 @@
- if test "x$gdktarget" = "xwin32"; then
-       PANGO_PACKAGES="pangowin32 pangocairo"
- else
--      PANGO_PACKAGES="pango pangocairo"
-+      PANGO_PACKAGES="pango pangocairo pangoxft"
- fi
- AC_MSG_CHECKING(Pango flags)
-Index: gtk+-2.10.6/gdk/gdkaliasdef.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkaliasdef.c 2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkaliasdef.c      2006-10-30 12:59:30.000000000 +0000
-@@ -1799,9 +1799,6 @@
- #undef gdk_pango_context_get 
- extern __typeof (gdk_pango_context_get) gdk_pango_context_get __attribute((alias("IA__gdk_pango_context_get"), visibility("default")));
--#undef gdk_pango_context_get_for_screen 
--extern __typeof (gdk_pango_context_get_for_screen) gdk_pango_context_get_for_screen __attribute((alias("IA__gdk_pango_context_get_for_screen"), visibility("default")));
--
- #ifndef GDK_DISABLE_DEPRECATED
- #undef gdk_pango_context_set_colormap 
- extern __typeof (gdk_pango_context_set_colormap) gdk_pango_context_set_colormap __attribute((alias("IA__gdk_pango_context_set_colormap"), visibility("default")));
-@@ -1836,6 +1833,13 @@
- #endif
- #endif
-+#if IN_HEADER(__GDK_PANGO_H__)
-+#if IN_FILE(__GDK_PANGO_X11_C__)
-+#undef gdk_pango_context_get_for_screen 
-+extern __typeof (gdk_pango_context_get_for_screen) gdk_pango_context_get_for_screen __attribute((alias("IA__gdk_pango_context_get_for_screen"), visibility("default")));
-+
-+#endif
-+#endif
- #if IN_HEADER(__GDK_PIXBUF_H__)
- #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__)
- #undef gdk_pixbuf_get_from_drawable 
-Index: gtk+-2.10.6/gdk/gdkalias.h
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkalias.h    2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkalias.h 2006-10-30 12:59:30.000000000 +0000
-@@ -1796,9 +1796,6 @@
- extern __typeof (gdk_pango_context_get) IA__gdk_pango_context_get __attribute((visibility("hidden")));
- #define gdk_pango_context_get IA__gdk_pango_context_get
--extern __typeof (gdk_pango_context_get_for_screen) IA__gdk_pango_context_get_for_screen __attribute((visibility("hidden")));
--#define gdk_pango_context_get_for_screen IA__gdk_pango_context_get_for_screen
--
- #ifndef GDK_DISABLE_DEPRECATED
- extern __typeof (gdk_pango_context_set_colormap) IA__gdk_pango_context_set_colormap __attribute((visibility("hidden")));
- #define gdk_pango_context_set_colormap IA__gdk_pango_context_set_colormap
-@@ -1833,6 +1830,13 @@
- #endif
- #endif
-+#if IN_HEADER(__GDK_PANGO_H__)
-+#if IN_FILE(__GDK_PANGO_X11_C__)
-+extern __typeof (gdk_pango_context_get_for_screen) IA__gdk_pango_context_get_for_screen __attribute((visibility("hidden")));
-+#define gdk_pango_context_get_for_screen IA__gdk_pango_context_get_for_screen
-+
-+#endif
-+#endif
- #if IN_HEADER(__GDK_PIXBUF_H__)
- #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__)
- extern __typeof (gdk_pixbuf_get_from_drawable) IA__gdk_pixbuf_get_from_drawable __attribute((visibility("hidden")));
-Index: gtk+-2.10.6/gdk/gdkdraw.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkdraw.c     2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkdraw.c  2006-10-30 12:59:30.000000000 +0000
-@@ -909,9 +909,9 @@
- {
-   g_return_if_fail (GDK_IS_DRAWABLE (drawable));
-   g_return_if_fail (GDK_IS_GC (gc));
--  
--  real_draw_glyphs (drawable, gc, NULL, font,
--                  x, y, glyphs);
-+
-+
-+  GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs (drawable, gc, font, x, y, glyphs);
- }
- /**
-@@ -949,8 +949,9 @@
-   g_return_if_fail (GDK_IS_DRAWABLE (drawable));
-   g_return_if_fail (GDK_IS_GC (gc));
--  real_draw_glyphs (drawable, gc, matrix, font,
--                  x / PANGO_SCALE, y / PANGO_SCALE, glyphs);
-+  if (GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs_transformed)
-+    GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs_transformed (drawable, gc, matrix,
-+                                                              font, x, y, glyphs);
- }
- /**
-@@ -974,28 +975,12 @@
-                    GdkTrapezoid   *trapezoids,
-                    gint            n_trapezoids)
- {
--  cairo_t *cr;
--  int i;
--
-   g_return_if_fail (GDK_IS_DRAWABLE (drawable));
-   g_return_if_fail (GDK_IS_GC (gc));
-   g_return_if_fail (n_trapezoids == 0 || trapezoids != NULL);
--  cr = gdk_cairo_create (drawable);
--  _gdk_gc_update_context (gc, cr, NULL, NULL, TRUE);
--  
--  for (i = 0; i < n_trapezoids; i++)
--    {
--      cairo_move_to (cr, trapezoids[i].x11, trapezoids[i].y1);
--      cairo_line_to (cr, trapezoids[i].x21, trapezoids[i].y1);
--      cairo_line_to (cr, trapezoids[i].x22, trapezoids[i].y2);
--      cairo_line_to (cr, trapezoids[i].x21, trapezoids[i].y2);
--      cairo_close_path (cr);
--    }
--
--  cairo_fill (cr);
--
--  cairo_destroy (cr);
-+  GDK_DRAWABLE_GET_CLASS (drawable)->draw_trapezoids (drawable, gc,
-+                                                    trapezoids, n_trapezoids);
- }
- /**
-Index: gtk+-2.10.6/gdk/gdkpango.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkpango.c    2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkpango.c 2006-10-30 12:59:30.000000000 +0000
-@@ -50,19 +50,34 @@
-   GdkBitmap *stipple[MAX_RENDER_PART + 1];
-   gboolean embossed;
--  cairo_t *cr;
--  PangoRenderPart last_part;
-+  /* When switching between the normal and shadow copies when
-+   * drawing shadows we can get unexpected recursion into the
-+   * drawing functions; the 'in_emboss' flag guards against that.
-+   */
-+  gboolean in_emboss;
-   /* Current target */
-   GdkDrawable *drawable;
-   GdkGC *base_gc;
-   gboolean gc_changed;
-+    
-+  /* Cached GC, derived from base_gc */
-+  GdkGC *gc;
-+  PangoColor gc_color;
-+  gboolean gc_color_set;
-+  GdkBitmap *gc_stipple;
-+  
-+  /* we accumulate trapezoids for the same PangoRenderPart */
-+  GArray *trapezoids;
-+  PangoRenderPart trapezoid_part;
- };
- static PangoAttrType gdk_pango_attr_stipple_type;
- static PangoAttrType gdk_pango_attr_embossed_type;
-+static void flush_trapezoids (GdkPangoRenderer *gdk_renderer);
-+
- enum {
-   PROP_0,
-   PROP_SCREEN
-@@ -77,6 +92,10 @@
-   GdkPangoRendererPrivate *priv = gdk_renderer->priv;
-   int i;
-+  if (priv->gc)
-+    g_object_unref (priv->gc);
-+  if (priv->gc_stipple)
-+    g_object_unref (priv->gc_stipple);
-   if (priv->base_gc)
-     g_object_unref (priv->base_gc);
-   if (priv->drawable)
-@@ -86,6 +105,8 @@
-     if (priv->stipple[i])
-       g_object_unref (priv->stipple[i]);
-+  g_array_free (priv->trapezoids, TRUE);
-+    
-   G_OBJECT_CLASS (gdk_pango_renderer_parent_class)->finalize (object);
- }
-@@ -112,25 +133,6 @@
-   return object;
- }
--/* Adjusts matrix and color for the renderer to draw the secondary
-- * "shadow" copy for embossed text */
--static void
--emboss_context (cairo_t *cr)
--{
--  cairo_matrix_t tmp_matrix;
--
--  /* The gymnastics here to adjust the matrix are because we want
--   * to offset by +1,+1 in device-space, not in user-space,
--   * so we can't just draw the layout at x + 1, y + 1
--   */
--  cairo_get_matrix (cr, &tmp_matrix);
--  tmp_matrix.x0 += 1.0;
--  tmp_matrix.y0 += 1.0;
--  cairo_set_matrix (cr, &tmp_matrix);
--
--  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
--}
--
- static inline gboolean
- color_equal (PangoColor *c1, PangoColor *c2)
- {
-@@ -146,74 +148,154 @@
-   return FALSE;
- }
--static cairo_t *
--get_cairo_context (GdkPangoRenderer *gdk_renderer,
--                 PangoRenderPart   part)
-+/* Adjusts matrix and color for the renderer to draw the secondar
-+ * "shadow" copy for embossed text */
-+static void
-+emboss_renderer (PangoRenderer   *renderer,
-+               PangoRenderPart  part,
-+               PangoMatrix    **save_matrix,
-+               PangoColor     **save_color)
-+{
-+  GdkPangoRendererPrivate *priv = GDK_PANGO_RENDERER(renderer)->priv;
-+  static const PangoColor white = { 0xffff, 0xffff, 0xffff };
-+  PangoMatrix tmp_matrix = PANGO_MATRIX_INIT;
-+
-+  priv->in_emboss = TRUE;
-+  
-+  *save_color = pango_renderer_get_color (renderer, part);
-+  if (*save_color)
-+    *save_color = pango_color_copy (*save_color);
-+  
-+  *save_matrix = renderer->matrix;
-+  if (*save_matrix)
-+    {
-+      *save_matrix = pango_matrix_copy (*save_matrix);
-+      tmp_matrix = **save_matrix;
-+    }
-+  
-+  /* The gymnastics here to adjust the matrix are because we want
-+   * to offset by +1,+1 in device-space, not in user-space,
-+   * so we can't just draw the layout at x + 1, y + 1
-+   */
-+  tmp_matrix.x0 += 1;
-+  tmp_matrix.y0 += 1;
-+  
-+  pango_renderer_set_matrix (renderer, &tmp_matrix);
-+  pango_renderer_set_color (renderer, part, &white);
-+}
-+
-+/* Restores from emboss_renderer() */
-+static void
-+unemboss_renderer (PangoRenderer   *renderer,
-+                 PangoRenderPart  part,
-+                 PangoMatrix    **save_matrix,
-+                 PangoColor     **save_color)
-+{
-+  GdkPangoRendererPrivate *priv = GDK_PANGO_RENDERER(renderer)->priv;
-+  pango_renderer_set_matrix (renderer, *save_matrix);
-+  pango_renderer_set_color (renderer, part, *save_color);
-+
-+  if (*save_matrix)
-+    pango_matrix_free (*save_matrix);
-+  if (*save_color)
-+    pango_color_free (*save_color);
-+
-+  priv->in_emboss = FALSE;
-+}
-+
-+/* Gets the GC for drawing @part. This make involve copying the base GC
-+ * for the renderer, in which case we keep a one-GC cache. */
-+static GdkGC *
-+get_gc (GdkPangoRenderer *gdk_renderer,
-+      PangoRenderPart   part)
- {
-   PangoRenderer *renderer = PANGO_RENDERER (gdk_renderer);
-+  PangoColor *color;
-+  GdkBitmap *stipple;
-   GdkPangoRendererPrivate *priv = gdk_renderer->priv;
--  if (!priv->cr)
-+  color = pango_renderer_get_color (renderer, part);
-+
-+  if (part <= MAX_RENDER_PART)
-+    stipple = priv->stipple[part];
-+  else
-+    stipple = NULL;
-+
-+  if (!color && !stipple)     /* nothing override, use base_gc */
-+    return priv->base_gc;
-+  else
-     {
--      const PangoMatrix *matrix;
-+      gboolean new_stipple = FALSE;
-+      gboolean new_color = FALSE;
-       
--      priv->cr = gdk_cairo_create (priv->drawable);
-+      if (stipple != priv->gc_stipple)
-+      new_stipple = TRUE;
--      matrix = pango_renderer_get_matrix (renderer);
--      if (matrix)
-+      if ((priv->gc_color_set && !color) ||
-+        (!priv->gc_color_set && color) ||
-+        priv->gc_color.red != color->red ||
-+        priv->gc_color.green != color->green ||
-+        priv->gc_color.blue != color->blue)
-+      new_color = TRUE;
-+      
-+      if (!priv->gc)
-       {
--        cairo_matrix_t cairo_matrix;
--        
--        cairo_matrix_init (&cairo_matrix,
--                           matrix->xx, matrix->yx,
--                           matrix->xy, matrix->yy,
--                           matrix->x0, matrix->y0);
--        cairo_set_matrix (priv->cr, &cairo_matrix);
-+        priv->gc = gdk_gc_new (priv->drawable);
-+        gdk_gc_copy (priv->gc, priv->base_gc);
-+      }
-+      else if (new_color && priv->gc_color_set && !color)
-+      {
-+        /* We have to recopy the original GC onto the cached GC
-+         * to get the default color */
-+        new_stipple = TRUE;
-+        gdk_gc_copy (priv->gc, priv->base_gc);
-+      }
-+      else if (new_stipple && priv->gc_stipple && !stipple)
-+      {
-+        /* Similarly, we need to make a new copy to restore to the
-+         * default stipple state (the caller may have set a stipple
-+         * on the GC, and even if not, gdk_gc_set_stipple (gc, NULL)
-+         * doesn't work currently to restore to the default X stipple) */
-+        new_color = TRUE;
-+        gdk_gc_copy (priv->gc, priv->base_gc);
-       }
--    }
--
--  if (part != priv->last_part)
--    {
--      PangoColor *pango_color;
--      GdkColor *color;
--      GdkColor tmp_color;
--      gboolean changed;
--      pango_color = pango_renderer_get_color (renderer, part);
--      
--      if (priv->last_part != -1)
--      changed = priv->gc_changed ||
--        priv->stipple[priv->last_part] != priv->stipple[part] ||
--        !color_equal (pango_color,
--                      pango_renderer_get_color (renderer, priv->last_part));
--      else
--      changed = TRUE;
--      
--      if (changed)
-+      if (new_color)
-       {
--        if (pango_color)
-+        if (color)
-           {
--            tmp_color.red = pango_color->red;
--            tmp_color.green = pango_color->green;
--            tmp_color.blue = pango_color->blue;
-+            GdkColor gdk_color;
-+
-+            gdk_color.red = color->red;
-+            gdk_color.green = color->green;
-+            gdk_color.blue = color->blue;
-             
--            color = &tmp_color;
-+            gdk_gc_set_rgb_fg_color (priv->gc, &gdk_color);
-+
-+            priv->gc_color = *color;
-+            priv->gc_color_set = TRUE;
-           }
-         else
--          color = NULL;
-+          priv->gc_color_set = FALSE;
-+      }
--        _gdk_gc_update_context (priv->base_gc,
--                                priv->cr,
--                                color,
--                                priv->stipple[part],
--                                priv->gc_changed);
-+      if (new_stipple)
-+      {
-+        if (priv->gc_stipple)
-+          g_object_unref (priv->gc_stipple);
-+
-+        if (stipple)
-+          {
-+            gdk_gc_set_stipple (priv->gc, stipple);
-+            gdk_gc_set_fill (priv->gc, GDK_STIPPLED);
-+            priv->gc_stipple = g_object_ref (stipple);
-+          }
-+        else
-+          priv->gc_stipple = NULL;
-       }
--      priv->last_part = part;
--      priv->gc_changed = FALSE;
-+      return priv->gc;
-     }
--
--  return priv->cr;
- }
- static void
-@@ -225,133 +307,78 @@
- {
-   GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
-   GdkPangoRendererPrivate *priv = gdk_renderer->priv;
--  cairo_t *cr;
--  cr = get_cairo_context (gdk_renderer, 
--                        PANGO_RENDER_PART_FOREGROUND);
-+  flush_trapezoids (gdk_renderer);
--  if (priv->embossed)
-+  if (!priv->in_emboss && priv->embossed)
-     {
--      cairo_save (cr);
--      emboss_context (cr);
--      cairo_move_to (cr, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE);
--      pango_cairo_show_glyph_string (cr, font, glyphs);
--      cairo_restore (cr);
--    }
--  
--  cairo_move_to (cr, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE);
--  pango_cairo_show_glyph_string (cr, font, glyphs);
--}
--
--/* Draws an error underline that looks like one of:
-- *              H       E                H
-- *     /\      /\      /\        /\      /\               -
-- *   A/  \    /  \    /  \     A/  \    /  \              |
-- *    \   \  /    \  /   /D     \   \  /    \             |
-- *     \   \/  C   \/   /        \   \/   C  \            | height = HEIGHT_SQUARES * square
-- *      \      /\  F   /          \  F   /\   \           | 
-- *       \    /  \    /            \    /  \   \G         |
-- *        \  /    \  /              \  /    \  /          |
-- *         \/      \/                \/      \/           -
-- *         B                         B       
-- *    |----|
-- *   unit_width = (HEIGHT_SQUARES - 1) * square
-- *
-- * The x, y, width, height passed in give the desired bounding box;
-- * x/width are adjusted to make the underline a integer number of units
-- * wide.
-- */
--#define HEIGHT_SQUARES 2.5
-+      PangoMatrix *save_matrix;
-+      PangoColor *save_color;
--/* Cut-and-pasted between here and pango/pango/pangocairo-render.c */
-+      emboss_renderer (renderer, PANGO_RENDER_PART_FOREGROUND, &save_matrix, &save_color);
-+      gdk_draw_glyphs_transformed (priv->drawable,
-+                                 get_gc (gdk_renderer, PANGO_RENDER_PART_FOREGROUND),
-+                                 renderer->matrix, font, x, y, glyphs);
-+      unemboss_renderer (renderer, PANGO_RENDER_PART_FOREGROUND, &save_matrix, &save_color);
-+    }
-+
-+  gdk_draw_glyphs_transformed (priv->drawable,
-+                             get_gc (gdk_renderer, PANGO_RENDER_PART_FOREGROUND),
-+                             renderer->matrix, font, x, y, glyphs);
-+}
-+
-+/* Outputs any pending trapezoids, we do this when the part or
-+ * part color changes, when we are about to draw text, etc. */
- static void
--draw_error_underline (cairo_t *cr,
--                    double  x,
--                    double  y,
--                    double  width,
--                    double  height)
--{
--  double square = height / HEIGHT_SQUARES;
--  double unit_width = (HEIGHT_SQUARES - 1) * square;
--  int width_units = (width + unit_width / 2) / unit_width;
--  double y_top, y_bottom;
--  int i;
-+flush_trapezoids (GdkPangoRenderer *gdk_renderer)
-+{
-+  GdkPangoRendererPrivate *priv = gdk_renderer->priv;
--  x += (width - width_units * unit_width) / 2;
--  width = width_units * unit_width;
-+  if (!priv->trapezoids || priv->trapezoids->len == 0)
-+    return;
--  y_top = y;
--  y_bottom = y + height;
--  
--  /* Bottom of squiggle */
--  cairo_move_to (cr, x - square / 2, y_top + square / 2); /* A */
--  for (i = 0; i < width_units; i += 2)
--    {
--      double x_middle = x + (i + 1) * unit_width;
--      double x_right = x + (i + 2) * unit_width;
--    
--      cairo_line_to (cr, x_middle, y_bottom); /* B */
--      
--      if (i + 1 == width_units)
--      /* Nothing */;
--      else if (i + 2 == width_units)
--      cairo_line_to (cr, x_right + square / 2, y_top + square / 2); /* D */
--      else
--      cairo_line_to (cr, x_right, y_top + square); /* C */
--    }
--  
--  /* Top of squiggle */
--  for (i -= 2; i >= 0; i -= 2)
--    {
--      double x_left = x + i * unit_width;
--      double x_middle = x + (i + 1) * unit_width;
--      double x_right = x + (i + 2) * unit_width;
--      
--      if (i + 1 == width_units)
--      cairo_line_to (cr, x_middle + square / 2, y_bottom - square / 2); /* G */
--      else {
--      if (i + 2 == width_units)
--        cairo_line_to (cr, x_right, y_top); /* E */
--      cairo_line_to (cr, x_middle, y_bottom - square); /* F */
--      }
--      
--      cairo_line_to (cr, x_left, y_top);   /* H */
--    }
-+  gdk_draw_trapezoids (priv->drawable,
-+                     get_gc (gdk_renderer, priv->trapezoid_part),
-+                     (GdkTrapezoid *)priv->trapezoids->data,
-+                     priv->trapezoids->len);
--  cairo_close_path (cr);
--  cairo_fill (cr);
-+  g_array_set_size (priv->trapezoids, 0);
- }
-+/* Draws a single trapezoid ... we don't draw it immediately, but rather
-+ * cache it to join together with other trapezoids that form part of the
-+ * same logical shape */
- static void
--gdk_pango_renderer_draw_rectangle (PangoRenderer    *renderer,
--                                 PangoRenderPart   part,
--                                 int               x,
--                                 int               y,
--                                 int               width,
--                                 int               height)
-+gdk_pango_renderer_draw_trapezoid (PangoRenderer   *renderer,
-+                                 PangoRenderPart  part,
-+                                 double           y1,
-+                                 double           x11,
-+                                 double           x21,
-+                                 double           y2,
-+                                 double           x12,
-+                                 double           x22)
- {
-   GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
--  GdkPangoRendererPrivate *priv = gdk_renderer->priv;
--  cairo_t *cr;
--  
--  cr = get_cairo_context (gdk_renderer, part);
--
--  if (priv->embossed && part != PANGO_RENDER_PART_BACKGROUND)
--    {
--      cairo_save (cr);
--      emboss_context (cr);
--      cairo_rectangle (cr,
--                     (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
--                     (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
-+  GdkTrapezoid trap;
--      cairo_fill (cr);
--      cairo_restore (cr);
--    }
-+  if (!gdk_renderer->priv->trapezoids)
-+    gdk_renderer->priv->trapezoids = g_array_new (FALSE, FALSE,
-+                                                sizeof (GdkTrapezoid));
-+  
-+  if (gdk_renderer->priv->trapezoids->len > 0 &&
-+      gdk_renderer->priv->trapezoid_part != part)
-+    flush_trapezoids (gdk_renderer);
-+  
-+  gdk_renderer->priv->trapezoid_part = part;
-+
-+  trap.y1 = y1;
-+  trap.x11 = x11 / 2;
-+  trap.x21 = x21;
-+  trap.y2 = y2;
-+  trap.x12 = x12;
-+  trap.x22 = x22;
--  cairo_rectangle (cr,
--                 (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
--                 (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
--  cairo_fill (cr);
-+  g_array_append_val (gdk_renderer->priv->trapezoids, trap);
- }
- static void
-@@ -363,23 +390,51 @@
- {
-   GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
-   GdkPangoRendererPrivate *priv = gdk_renderer->priv;
--  cairo_t *cr;
--  
--  cr = get_cairo_context (gdk_renderer, PANGO_RENDER_PART_UNDERLINE);
--  
--  if (priv->embossed)
-+
-+  if (!priv->in_emboss && priv->embossed)
-     {
--      cairo_save (cr);
--      emboss_context (cr);
--      draw_error_underline (cr,
--                          (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
--                          (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
--      cairo_restore (cr);
-+      PangoMatrix *save_matrix;
-+      PangoColor *save_color;
-+
-+      emboss_renderer (renderer, PANGO_RENDER_PART_UNDERLINE, &save_matrix, &save_color);
-+      PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_error_underline (renderer,
-+                                                                                  x, y, width, height);
-+      unemboss_renderer (renderer, PANGO_RENDER_PART_UNDERLINE, &save_matrix, &save_color);
-     }
--  draw_error_underline (cr,
--                      (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
--                      (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
-+  PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_error_underline (renderer,
-+                                                                              x, y, width, height);
-+}
-+
-+/* We can't handle embossing at the level of trapezoids, because when an
-+ * underline is split into multiple trapezoids, the normal and shadow
-+ * trapezoids will be drawn mixed together. Instead, we have to emboss
-+ * and entire rectangle or error underline
-+ */
-+static void
-+gdk_pango_renderer_draw_rectangle (PangoRenderer    *renderer,
-+                                 PangoRenderPart   part,
-+                                 int               x,
-+                                 int               y,
-+                                 int               width,
-+                                 int               height)
-+{
-+  GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
-+  GdkPangoRendererPrivate *priv = gdk_renderer->priv;
-+
-+  if (!priv->in_emboss && priv->embossed && part != PANGO_RENDER_PART_BACKGROUND)
-+    {
-+      PangoMatrix *save_matrix;
-+      PangoColor *save_color;
-+
-+      emboss_renderer (renderer, part, &save_matrix, &save_color);
-+      PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_rectangle (renderer, part,
-+                                                                            x, y, width, height);
-+      unemboss_renderer (renderer, part, &save_matrix, &save_color);
-+    }
-+
-+  PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_rectangle (renderer, part,
-+                                                                        x, y, width, height);
- }
- static void
-@@ -388,8 +443,8 @@
- {
-   GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
--  if (gdk_renderer->priv->last_part == part)
--    gdk_renderer->priv->last_part = (PangoRenderPart)-1;
-+  if (part == gdk_renderer->priv->trapezoid_part)
-+    flush_trapezoids (gdk_renderer);
- }
- static void
-@@ -410,13 +465,8 @@
- {
-   GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
-   GdkPangoRendererPrivate *priv = gdk_renderer->priv;
--
--  if (priv->cr)
--    {
--      cairo_destroy (priv->cr);
--      priv->cr = NULL;
--    }
--  priv->last_part = (PangoRenderPart)-1;
-+    
-+  flush_trapezoids (gdk_renderer);
- }
- static void
-@@ -515,7 +565,6 @@
-                                               GDK_TYPE_PANGO_RENDERER,
-                                               GdkPangoRendererPrivate);
--  renderer->priv->last_part = (PangoRenderPart)-1;
-   renderer->priv->gc_changed = TRUE;
- }
-@@ -527,6 +576,7 @@
-   PangoRendererClass *renderer_class = PANGO_RENDERER_CLASS (klass);
-   
-   renderer_class->draw_glyphs = gdk_pango_renderer_draw_glyphs;
-+  renderer_class->draw_trapezoid = gdk_pango_renderer_draw_trapezoid;
-   renderer_class->draw_rectangle = gdk_pango_renderer_draw_rectangle;
-   renderer_class->draw_error_underline = gdk_pango_renderer_draw_error_underline;
-   renderer_class->part_changed = gdk_pango_renderer_part_changed;
-@@ -647,6 +697,8 @@
-   priv = gdk_renderer->priv;
-   
-+  flush_trapezoids (gdk_renderer);
-+    
-   if (priv->drawable != drawable)
-     {
-       if (priv->drawable)
-@@ -681,6 +733,8 @@
-   priv = gdk_renderer->priv;
-   
-+  flush_trapezoids (gdk_renderer);
-+    
-   if (priv->base_gc != gc)
-     {
-       if (priv->base_gc)
-@@ -689,6 +743,20 @@
-       if (priv->base_gc)
-       g_object_ref (priv->base_gc);
-+      if (priv->gc)
-+      {
-+        g_object_unref (priv->gc);
-+        priv->gc = NULL;
-+      }
-+        
-+      priv->gc_color_set = FALSE;
-+
-+      if (priv->gc_stipple)
-+      {
-+        g_object_unref (priv->gc_stipple);
-+        priv->gc_stipple = NULL;
-+      }
-+        
-       priv->gc_changed = TRUE;
-     }
- }
-@@ -1414,50 +1482,5 @@
-   return gdk_pango_context_get_for_screen (gdk_screen_get_default ());
- }
--/**
-- * gdk_pango_context_get_for_screen:
-- * @screen: the #GdkScreen for which the context is to be created.
-- * 
-- * Creates a #PangoContext for @screen.
-- *
-- * The context must be freed when you're finished with it.
-- * 
-- * When using GTK+, normally you should use gtk_widget_get_pango_context()
-- * instead of this function, to get the appropriate context for
-- * the widget you intend to render text onto.
-- * 
-- * The newly created context will have the default font options
-- * (see #cairo_font_options_t) for the screen; if these options
-- * change it will not be updated. Using gtk_widget_get_pango_context()
-- * is more convenient if you want to keep a context around and track
-- * changes to the screen's font rendering settings.
-- * 
-- * Return value: a new #PangoContext for @screen
-- *
-- * Since: 2.2
-- **/
--PangoContext *
--gdk_pango_context_get_for_screen (GdkScreen *screen)
--{
--  PangoFontMap *fontmap;
--  PangoContext *context;
--  const cairo_font_options_t *options;
--  double dpi;
--  
--  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
--
--  fontmap = pango_cairo_font_map_get_default ();
--  
--  context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
--
--  options = gdk_screen_get_font_options (screen);
--  pango_cairo_context_set_font_options (context, options);
--
--  dpi = gdk_screen_get_resolution (screen);
--  pango_cairo_context_set_resolution (context, dpi);
--
--  return context;
--}
--
- #define __GDK_PANGO_C__
- #include "gdkaliasdef.c"
-Index: gtk+-2.10.6/gdk/gdk.symbols
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdk.symbols   2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdk.symbols        2006-10-30 12:59:30.000000000 +0000
-@@ -861,7 +861,6 @@
- gdk_pango_attr_embossed_new
- gdk_pango_attr_stipple_new
- gdk_pango_context_get
--gdk_pango_context_get_for_screen
- #ifndef GDK_DISABLE_DEPRECATED
- gdk_pango_context_set_colormap
- #endif
-@@ -877,6 +876,12 @@
- #endif
- #endif
-+#if IN_HEADER(__GDK_PANGO_H__)
-+#if IN_FILE(__GDK_PANGO_X11_C__)
-+gdk_pango_context_get_for_screen
-+#endif
-+#endif
-+
- #if IN_HEADER(__GDK_PIXBUF_H__)
- #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__)
- gdk_pixbuf_get_from_drawable
-Index: gtk+-2.10.6/gdk/gdkwindow.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkwindow.c   2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkwindow.c        2006-10-30 12:59:30.000000000 +0000
-@@ -1834,9 +1834,14 @@
-     }
-   else
-     {
--      method->cr = cairo_create (paint->surface);
-+      /*method->cr = cairo_create (paint->surface);
--      gdk_cairo_set_source_color (method->cr, &private->bg_color);
-+      gdk_cairo_set_source_color (method->cr, &private->bg_color);*/
-+      GdkGC *gc = _gdk_drawable_get_scratch_gc (paint->pixmap, FALSE);
-+
-+      gdk_gc_set_foreground (gc, &(private->bg_color));
-+      
-+      method->gc = g_object_ref (gc);
-     }
- }
-Index: gtk+-2.10.6/gdk/x11/gdkdisplay-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkdisplay-x11.c  2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkdisplay-x11.c       2006-10-30 12:59:30.000000000 +0000
-@@ -190,7 +190,8 @@
-   display_x11->leader_window_title_set = FALSE;
-   display_x11->have_render = GDK_UNKNOWN;
--
-+  display_x11->have_render_with_trapezoids = GDK_UNKNOWN;
-+  
- #ifdef HAVE_XFIXES
-   if (XFixesQueryExtension (display_x11->xdisplay, 
-                           &display_x11->xfixes_event_base, 
-Index: gtk+-2.10.6/gdk/x11/gdkdisplay-x11.h
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkdisplay-x11.h  2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkdisplay-x11.h       2006-10-30 12:59:30.000000000 +0000
-@@ -78,6 +78,7 @@
-   gboolean use_xshm;
-   gboolean have_shm_pixmaps;
-   GdkTristate have_render;
-+  GdkTristate have_render_with_trapezoids;
-   gboolean have_xfixes;
-   gint xfixes_event_base;
-Index: gtk+-2.10.6/gdk/x11/gdkdrawable-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkdrawable-x11.c 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkdrawable-x11.c      2006-10-30 12:59:30.000000000 +0000
-@@ -26,6 +26,8 @@
- #include <config.h>
-+#include <pango/pangoxft.h>
-+
- #include "gdkx.h"
- #include "gdkregion-generic.h"
-@@ -106,7 +108,21 @@
-                                   GdkGC          *gc,
-                                   GdkPoint       *points,
-                                   gint            npoints);
--
-+                                      
-+static void gdk_x11_draw_glyphs             (GdkDrawable      *drawable,
-+                                           GdkGC            *gc,
-+                                           PangoFont        *font,
-+                                           gint              x,
-+                                           gint              y,
-+                                           PangoGlyphString *glyphs);
-+static void gdk_x11_draw_glyphs_transformed (GdkDrawable      *drawable,
-+                                           GdkGC            *gc,
-+                                           PangoMatrix      *matrix,
-+                                           PangoFont        *font,
-+                                           gint              x,
-+                                           gint              y,
-+                                           PangoGlyphString *glyphs);
-+                                               
- static void gdk_x11_draw_image     (GdkDrawable     *drawable,
-                                     GdkGC           *gc,
-                                     GdkImage        *image,
-@@ -129,6 +145,11 @@
-                                   gint             x_dither,
-                                   gint             y_dither);
-+static void gdk_x11_draw_trapezoids (GdkDrawable     *drawable,
-+                                   GdkGC           *gc,
-+                                   GdkTrapezoid    *trapezoids,
-+                                   gint             n_trapezoids);
-+
- static cairo_surface_t *gdk_x11_ref_cairo_surface (GdkDrawable *drawable);
-      
- static void gdk_x11_set_colormap   (GdkDrawable    *drawable,
-@@ -163,8 +184,11 @@
-   drawable_class->draw_points = gdk_x11_draw_points;
-   drawable_class->draw_segments = gdk_x11_draw_segments;
-   drawable_class->draw_lines = gdk_x11_draw_lines;
-+  drawable_class->draw_glyphs = gdk_x11_draw_glyphs;
-+  drawable_class->draw_glyphs_transformed = gdk_x11_draw_glyphs_transformed;
-   drawable_class->draw_image = gdk_x11_draw_image;
-   drawable_class->draw_pixbuf = gdk_x11_draw_pixbuf;
-+  drawable_class->draw_trapezoids = gdk_x11_draw_trapezoids;
-   
-   drawable_class->ref_cairo_surface = gdk_x11_ref_cairo_surface;
-@@ -327,6 +351,72 @@
-   return x11display->have_render == GDK_YES;
- }
-+gboolean
-+_gdk_x11_have_render_with_trapezoids (GdkDisplay *display)
-+{
-+  Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-+  GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
-+
-+  if (x11display->have_render_with_trapezoids == GDK_UNKNOWN)
-+    {
-+      x11display->have_render_with_trapezoids = GDK_NO;
-+      if (_gdk_x11_have_render (display))
-+      {
-+        /*
-+         * Require protocol >= 0.4 for CompositeTrapezoids support.
-+         */
-+        int major_version, minor_version;
-+      
-+#define XRENDER_TETRAPEZOIDS_MAJOR 0
-+#define XRENDER_TETRAPEZOIDS_MINOR 4
-+      
-+        if (XRenderQueryVersion (xdisplay, &major_version,
-+                                 &minor_version))
-+          if ((major_version == XRENDER_TETRAPEZOIDS_MAJOR) &&
-+              (minor_version >= XRENDER_TETRAPEZOIDS_MINOR))
-+            x11display->have_render_with_trapezoids = GDK_YES;
-+      }
-+    }
-+
-+  return x11display->have_render_with_trapezoids == GDK_YES;
-+}
-+
-+static XftDraw *
-+gdk_x11_drawable_get_xft_draw (GdkDrawable *drawable)
-+{
-+  GdkDrawableImplX11 *impl = GDK_DRAWABLE_IMPL_X11 (drawable);
-+
-+   if (impl->xft_draw == NULL)
-+    {
-+      GdkColormap *colormap = gdk_drawable_get_colormap (drawable);
-+      
-+      if (colormap)
-+      {
-+          GdkVisual *visual;
-+
-+          visual = gdk_colormap_get_visual (colormap);
-+      
-+          impl->xft_draw = XftDrawCreate (GDK_SCREEN_XDISPLAY (impl->screen), impl->xid,
-+                                        GDK_VISUAL_XVISUAL (visual), GDK_COLORMAP_XCOLORMAP (colormap));
-+      }
-+      else if (gdk_drawable_get_depth (drawable) == 1)
-+      {
-+        impl->xft_draw = XftDrawCreateBitmap (GDK_SCREEN_XDISPLAY (impl->screen), impl->xid);
-+      }
-+      else
-+        {
-+        g_warning ("Using Xft rendering requires the drawable argument to\n"
-+                   "have a specified colormap. All windows have a colormap,\n"
-+                   "however, pixmaps only have colormap by default if they\n"
-+                   "were created with a non-NULL window argument. Otherwise\n"
-+                   "a colormap must be set on them with gdk_drawable_set_colormap");
-+        return NULL;
-+        }
-+    }
-+
-+   return impl->xft_draw;
-+}
-+
- static Picture
- gdk_x11_drawable_get_picture (GdkDrawable *drawable)
- {
-@@ -393,6 +483,57 @@
-     }
- }
-+static void
-+gdk_x11_drawable_update_xft_clip (GdkDrawable *drawable,
-+                                 GdkGC       *gc)
-+{
-+  XftDraw *xft_draw = gdk_x11_drawable_get_xft_draw (drawable);
-+  GdkRegion *clip_region = _gdk_gc_get_clip_region (gc);
-+    
-+  if (gc && clip_region)
-+    {
-+      GdkRegionBox *boxes = clip_region->rects;
-+      gint n_boxes = clip_region->numRects;
-+#if 0                         /* Until XftDrawSetClipRectangles is there */
-+      XRectangle *rects = g_new (XRectangle, n_boxes);
-+      int i;
-+
-+      for (i=0; i < n_boxes; i++)
-+      {
-+        rects[i].x = CLAMP (boxes[i].x1 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT);
-+        rects[i].y = CLAMP (boxes[i].y1 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT);
-+        rects[i].width = CLAMP (boxes[i].x2 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT) - rects[i].x;
-+        rects[i].height = CLAMP (boxes[i].y2 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT) - rects[i].y;
-+      }
-+      XftDrawSetClipRectangles (xft_draw, 0, 0, rects, n_boxes);
-+
-+      g_free (rects);
-+#else
-+      Region xregion = XCreateRegion ();
-+      int i;
-+ 
-+      for (i=0; i < n_boxes; i++)
-+      {
-+        XRectangle rect;
-+        
-+        rect.x = CLAMP (boxes[i].x1 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT);
-+        rect.y = CLAMP (boxes[i].y1 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT);
-+        rect.width = CLAMP (boxes[i].x2 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT) - rect.x;
-+        rect.height = CLAMP (boxes[i].y2 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT) - rect.y;
-+        
-+        XUnionRectWithRegion (&rect, xregion, xregion);
-+      }
-+      
-+      XftDrawSetClip (xft_draw, xregion);
-+      XDestroyRegion (xregion);
-+#endif      
-+    }
-+  else
-+    {
-+      XftDrawSetClip (xft_draw, NULL);
-+    }
-+}
-+
- /*****************************************************
-  * X11 specific implementations of generic functions *
-  *****************************************************/
-@@ -780,6 +921,45 @@
- }
- static void
-+gdk_x11_draw_glyphs (GdkDrawable      *drawable,
-+                   GdkGC            *gc,
-+                   PangoFont        *font,
-+                   gint              x,
-+                   gint              y,
-+                   PangoGlyphString *glyphs)
-+{
-+  gdk_x11_draw_glyphs_transformed (drawable, gc, NULL,
-+                                 font,
-+                                 x * PANGO_SCALE,
-+                                 y * PANGO_SCALE,
-+                                 glyphs);
-+}
-+
-+static void
-+gdk_x11_draw_glyphs_transformed (GdkDrawable      *drawable,
-+                               GdkGC            *gc,
-+                               PangoMatrix      *matrix,
-+                               PangoFont        *font,
-+                               gint              x,
-+                               gint              y,
-+                               PangoGlyphString *glyphs)
-+{
-+  GdkDrawableImplX11 *impl;
-+  PangoRenderer *renderer;
-+
-+  impl = GDK_DRAWABLE_IMPL_X11 (drawable);
-+
-+  g_return_if_fail (PANGO_XFT_IS_FONT (font));
-+
-+  renderer = _gdk_x11_renderer_get (drawable, gc);
-+  if (matrix)
-+    pango_renderer_set_matrix (renderer, matrix);
-+  pango_renderer_draw_glyphs (renderer, font, glyphs, x, y);
-+  if (matrix)
-+    pango_renderer_set_matrix (renderer, NULL);
-+}
-+
-+static void
- gdk_x11_draw_image     (GdkDrawable     *drawable,
-                         GdkGC           *gc,
-                         GdkImage        *image,
-@@ -1444,6 +1624,47 @@
- }
- static void
-+gdk_x11_draw_trapezoids (GdkDrawable  *drawable,
-+                       GdkGC        *gc,
-+                       GdkTrapezoid *trapezoids,
-+                       gint          n_trapezoids)
-+{
-+  GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-+  GdkDisplay *display = gdk_screen_get_display (screen);
-+  XTrapezoid *xtrapezoids;
-+  gint i;
-+
-+  if (!_gdk_x11_have_render_with_trapezoids (display))
-+    {
-+      GdkDrawable *wrapper = GDK_DRAWABLE_IMPL_X11 (drawable)->wrapper;
-+      GDK_DRAWABLE_CLASS (_gdk_drawable_impl_x11_parent_class)->draw_trapezoids (wrapper, gc,
-+                                                        trapezoids, n_trapezoids);
-+      return;
-+    }
-+
-+  xtrapezoids = g_new (XTrapezoid, n_trapezoids);
-+
-+  for (i = 0; i < n_trapezoids; i++)
-+    {
-+      xtrapezoids[i].top = XDoubleToFixed (trapezoids[i].y1);
-+      xtrapezoids[i].bottom = XDoubleToFixed (trapezoids[i].y2);
-+      xtrapezoids[i].left.p1.x = XDoubleToFixed (trapezoids[i].x11);
-+      xtrapezoids[i].left.p1.y = XDoubleToFixed (trapezoids[i].y1);
-+      xtrapezoids[i].left.p2.x = XDoubleToFixed (trapezoids[i].x12);
-+      xtrapezoids[i].left.p2.y = XDoubleToFixed (trapezoids[i].y2);
-+      xtrapezoids[i].right.p1.x = XDoubleToFixed (trapezoids[i].x21);
-+      xtrapezoids[i].right.p1.y = XDoubleToFixed (trapezoids[i].y1);
-+      xtrapezoids[i].right.p2.x = XDoubleToFixed (trapezoids[i].x22);
-+      xtrapezoids[i].right.p2.y = XDoubleToFixed (trapezoids[i].y2);
-+    }
-+
-+  _gdk_x11_drawable_draw_xtrapezoids (drawable, gc,
-+                                    xtrapezoids, n_trapezoids);
-+  
-+  g_free (xtrapezoids);
-+}
-+
-+static void
- gdk_x11_cairo_surface_destroy (void *data)
- {
-   GdkDrawableImplX11 *impl = data;
-@@ -1498,5 +1719,89 @@
-   return impl->cairo_surface;
- }
-+void
-+_gdk_x11_drawable_draw_xtrapezoids (GdkDrawable      *drawable,
-+                                  GdkGC            *gc,
-+                                  XTrapezoid       *xtrapezoids,
-+                                  int               n_trapezoids)
-+{
-+  GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-+  GdkDisplay *display = gdk_screen_get_display (screen);
-+  GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
-+   
-+  XftDraw *draw;
-+
-+  if (!_gdk_x11_have_render_with_trapezoids (display))
-+    {
-+      /* This is the case of drawing the borders of the unknown glyph box
-+       * without render on the display, we need to feed it back to
-+       * fallback code. Not efficient, but doesn't matter.
-+       */
-+      GdkTrapezoid *trapezoids = g_new (GdkTrapezoid, n_trapezoids);
-+      int i;
-+
-+      for (i = 0; i < n_trapezoids; i++)
-+      {
-+        trapezoids[i].y1 = XFixedToDouble (xtrapezoids[i].top);
-+        trapezoids[i].y2 = XFixedToDouble (xtrapezoids[i].bottom);
-+        trapezoids[i].x11 = XFixedToDouble (xtrapezoids[i].left.p1.x);
-+        trapezoids[i].x12 = XFixedToDouble (xtrapezoids[i].left.p2.x);
-+        trapezoids[i].x21 = XFixedToDouble (xtrapezoids[i].right.p1.x);
-+        trapezoids[i].x22 = XFixedToDouble (xtrapezoids[i].right.p2.x);
-+      }
-+
-+      gdk_x11_draw_trapezoids (drawable, gc, trapezoids, n_trapezoids);
-+      g_free (trapezoids);
-+
-+      return;
-+    }
-+
-+  gdk_x11_drawable_update_xft_clip (drawable, gc);
-+  draw = gdk_x11_drawable_get_xft_draw (drawable);
-+
-+  if (!x11display->mask_format)
-+    x11display->mask_format = XRenderFindStandardFormat (x11display->xdisplay,
-+                                                       PictStandardA8);
-+
-+  XRenderCompositeTrapezoids (x11display->xdisplay, PictOpOver,
-+                            _gdk_x11_gc_get_fg_picture (gc),
-+                            XftDrawPicture (draw),
-+                            x11display->mask_format,
-+                            - gc->ts_x_origin, - gc->ts_y_origin,
-+                            xtrapezoids, n_trapezoids);
-+}
-+
-+void
-+_gdk_x11_drawable_draw_xft_glyphs (GdkDrawable      *drawable,
-+                                 GdkGC            *gc,
-+                                 XftFont          *xft_font,
-+                                 XftGlyphSpec     *glyphs,
-+                                 gint              n_glyphs)
-+{
-+  GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-+  GdkDisplay *display = gdk_screen_get_display (screen);
-+  GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
-+  XftDraw *draw;
-+   
-+  gdk_x11_drawable_update_xft_clip (drawable, gc);
-+  draw = gdk_x11_drawable_get_xft_draw (drawable);
-+
-+  if (_gdk_x11_have_render (display))
-+    {
-+      XftGlyphSpecRender (x11display->xdisplay, PictOpOver,
-+                        _gdk_x11_gc_get_fg_picture (gc),
-+                        xft_font,
-+                        XftDrawPicture (draw),
-+                        - gc->ts_x_origin, - gc->ts_y_origin,
-+                        glyphs, n_glyphs);
-+    }
-+  else
-+    {
-+      XftColor color;
-+      
-+      _gdk_gc_x11_get_fg_xft_color (gc, &color);
-+      XftDrawGlyphSpec (draw, &color, xft_font, glyphs, n_glyphs);
-+    }
-+}
- #define __GDK_DRAWABLE_X11_C__
- #include "gdkaliasdef.c"
-Index: gtk+-2.10.6/gdk/x11/gdkdrawable-x11.h
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkdrawable-x11.h 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkdrawable-x11.h      2006-10-30 12:59:30.000000000 +0000
-@@ -33,6 +33,7 @@
- #include <X11/Xlib.h>
- #include <X11/extensions/Xrender.h>
-+#include <X11/Xft/Xft.h>
- G_BEGIN_DECLS
-@@ -68,6 +69,8 @@
-   Window xid;
-   GdkScreen *screen;
-+  XftDraw *xft_draw;
-+      
-   Picture picture;
-   cairo_surface_t *cairo_surface;
- };
-@@ -92,7 +95,15 @@
- /* Note that the following take GdkDrawableImplX11, not the wrapper drawable */
- void _gdk_x11_drawable_finish           (GdkDrawable  *drawable);
- void _gdk_x11_drawable_update_size      (GdkDrawable  *drawable);
--
-+void _gdk_x11_drawable_draw_xtrapezoids (GdkDrawable  *drawable,
-+                                       GdkGC        *gc,
-+                                       XTrapezoid   *xtrapezoids,
-+                                       int           n_trapezoids);
-+void _gdk_x11_drawable_draw_xft_glyphs  (GdkDrawable  *drawable,
-+                                       GdkGC        *gc,
-+                                       XftFont      *xft_font,
-+                                       XftGlyphSpec *glyphs,
-+                                       gint          n_glyphs);
- G_END_DECLS
- #endif /* __GDK_DRAWABLE_X11_H__ */
-Index: gtk+-2.10.6/gdk/x11/gdkgc-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkgc-x11.c       2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkgc-x11.c    2006-10-30 12:59:30.000000000 +0000
-@@ -80,7 +80,10 @@
- gdk_gc_x11_finalize (GObject *object)
- {
-   GdkGCX11 *x11_gc = GDK_GC_X11 (object);
--  
-+
-+  if (x11_gc->fg_picture != None)
-+    XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), x11_gc->fg_picture);
-+      
-   XFreeGC (GDK_GC_XDISPLAY (x11_gc), GDK_GC_XGC (x11_gc));
-   G_OBJECT_CLASS (_gdk_gc_x11_parent_class)->finalize (object);
-@@ -110,7 +113,7 @@
-   private->dirty_mask = 0;
-   private->have_clip_mask = FALSE;
--    
-+      
-   private->screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-   private->depth = gdk_drawable_get_depth (drawable);
-@@ -339,6 +342,18 @@
- }
- static void
-+clear_fg_picture (GdkGC *gc)
-+{
-+  GdkGCX11 *x11_gc = GDK_GC_X11 (gc);
-+
-+  if (x11_gc->fg_picture != None)
-+    {
-+      XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), x11_gc->fg_picture);
-+      x11_gc->fg_picture = None;
-+    }
-+}
-+
-+static void
- gdk_x11_gc_set_values (GdkGC           *gc,
-                      GdkGCValues     *values,
-                      GdkGCValuesMask  values_mask)
-@@ -367,6 +382,29 @@
-       x11_gc->have_clip_mask = values->clip_mask != NULL;
-     }
-+  if (values_mask & GDK_GC_BACKGROUND)
-+    {
-+      if (_gdk_gc_get_fill (gc) == GDK_OPAQUE_STIPPLED)
-+          clear_fg_picture (gc);
-+    }
-+
-+  if (values_mask & GDK_GC_FILL)
-+    {
-+      clear_fg_picture (gc);
-+    }
-+    
-+  if (values_mask & GDK_GC_STIPPLE)
-+    {
-+      if (_gdk_gc_get_fill (gc) == GDK_STIPPLED || _gdk_gc_get_fill (gc) == GDK_OPAQUE_STIPPLED)
-+        clear_fg_picture (gc);
-+    }
-+  
-+  if (values_mask & GDK_GC_TILE)
-+    {
-+      if (_gdk_gc_get_fill (gc) == GDK_TILED)
-+      clear_fg_picture (gc);
-+    }
-+    
-   gdk_x11_gc_values_to_xvalues (values, values_mask, &xvalues, &xvalues_mask);
-   XChangeGC (GDK_GC_XDISPLAY (gc),
-@@ -642,6 +680,8 @@
-   x11_dst_gc->dirty_mask = x11_src_gc->dirty_mask;
-   x11_dst_gc->have_clip_region = x11_src_gc->have_clip_region;
-   x11_dst_gc->have_clip_mask = x11_src_gc->have_clip_mask;
-+    
-+  clear_fg_picture (dst_gc);
- }
- /**
-@@ -701,5 +741,359 @@
-   return gc_x11->xgc;
- }
-+/* Various bits of the below are roughly cribbed from XFree86
-+ * lib/Xft/xftdraw.c, Copyright 2000, Keith Packard
-+ */
-+
-+static XRenderPictFormat *
-+foreground_format (GdkGC *gc)
-+{
-+  XRenderPictFormat pf;
-+
-+  pf.type = PictTypeDirect;
-+  pf.depth = 32;
-+  pf.direct.redMask = 0xff;
-+  pf.direct.greenMask = 0xff;
-+  pf.direct.blueMask = 0xff;
-+  pf.direct.alphaMask = 0xff;
-+
-+  return XRenderFindFormat (GDK_GC_XDISPLAY (gc),
-+                          (PictFormatType |
-+                           PictFormatDepth |
-+                           PictFormatRedMask |
-+                           PictFormatGreenMask |
-+                           PictFormatBlueMask |
-+                           PictFormatAlphaMask),
-+                          &pf,
-+                          0);
-+}
-+
-+static Picture
-+make_fg_tile_picture (GdkGC *gc)
-+{
-+  GdkGCX11 *x11_gc = GDK_GC_X11 (gc);
-+  GdkVisual *visual = gdk_drawable_get_visual (_gdk_gc_get_tile (gc));
-+  XRenderPictFormat *format = NULL;
-+
-+  if (visual)
-+    {
-+      format = XRenderFindVisualFormat (GDK_GC_XDISPLAY (gc),
-+                                      GDK_VISUAL_XVISUAL (visual));
-+    }
-+  else if (x11_gc->depth == 1)
-+    {
-+      format = XRenderFindStandardFormat (GDK_GC_XDISPLAY (gc),
-+                                        PictStandardA1);
-+    }
-+
-+  if (format)
-+    {
-+      XRenderPictureAttributes pa;
-+      pa.repeat = True;
-+
-+      return XRenderCreatePicture (GDK_GC_XDISPLAY (gc), 
-+                                 GDK_PIXMAP_XID (_gdk_gc_get_tile (gc)),
-+                                 format,
-+                                 CPRepeat, &pa);
-+    }
-+
-+  return None;
-+}
-+
-+static Picture
-+make_stipple_picture (GdkGC *gc)
-+{
-+  XRenderPictFormat *format = NULL;
-+  XRenderPictureAttributes pa;
-+  
-+  format = XRenderFindStandardFormat (GDK_GC_XDISPLAY (gc),
-+                                    PictStandardA1);
-+
-+  pa.repeat = True;
-+  return XRenderCreatePicture (GDK_GC_XDISPLAY (gc), 
-+                             GDK_PIXMAP_XID (_gdk_gc_get_stipple (gc)),
-+                             format,
-+                             CPRepeat, &pa);
-+}
-+
-+static Picture
-+make_color_picture (GdkGC        *gc,
-+                  XRenderColor *color)
-+{
-+  GdkGCX11 *x11_gc = GDK_GC_X11 (gc);
-+  XRenderPictureAttributes pa;
-+  XRenderPictFormat *pix_format = foreground_format (gc);
-+  Pixmap pix;
-+  Picture picture;
-+  
-+  if (!pix_format)
-+    return None;
-+  
-+  pix = XCreatePixmap (GDK_GC_XDISPLAY (gc),
-+                     GDK_SCREEN_XROOTWIN (x11_gc->screen),
-+                     1, 1, pix_format->depth);
-+  pa.repeat = True;
-+  picture = XRenderCreatePicture (GDK_GC_XDISPLAY (gc),
-+                                pix,
-+                                pix_format,
-+                                CPRepeat, &pa);
-+  XFreePixmap (GDK_GC_XDISPLAY (gc), pix);
-+  
-+  XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc, 
-+                      picture, color,
-+                      0, 0, 1, 1);
-+
-+  return picture;
-+}
-+
-+static void
-+get_bg_color (GdkGC        *gc,
-+            XRenderColor *render_color)
-+{
-+  GdkColormap *cmap;
-+  
-+  cmap = gdk_gc_get_colormap (gc);
-+
-+  if (cmap)
-+    {
-+      GdkColor color;
-+      
-+      gdk_colormap_query_color (cmap, _gdk_gc_get_bg_pixel (gc), &color);
-+      
-+      render_color->alpha = 0xffff;
-+      render_color->red = color.red;
-+      render_color->green = color.green;
-+      render_color->blue = color.blue;
-+    }
-+  else                                /* Not worth warning, just use black */
-+    {
-+      render_color->alpha = 0xffff;
-+      render_color->red = 0;
-+      render_color->green = 0;
-+      render_color->blue = 0;
-+    }
-+}
-+
-+/**
-+ * _gdk_x11_gc_get_fg_picture:
-+ * @gc: a #GdkGC
-+ * 
-+ * Gets a Xrender Picture object suitable for being the source
-+ * drawable for drawing with the foreground the graphics context.
-+ * 
-+ * Return value: a Picture, owned by the GC; this cannot be
-+ *   used over subsequent modification of the GC.
-+ **/
-+Picture
-+_gdk_x11_gc_get_fg_picture (GdkGC *gc)
-+{
-+  GdkGCX11 *x11_gc;
-+  gboolean new = FALSE;
-+  XftColor xftcolor;
-+  GdkFill fill;
-+  int width, height;
-+  
-+  g_return_val_if_fail (GDK_IS_GC_X11 (gc), None);
-+
-+  if (!_gdk_x11_have_render (GDK_GC_DISPLAY (gc)))
-+    return None;
-+
-+  x11_gc = GDK_GC_X11 (gc);
-+
-+  fill = GDK_SOLID;
-+  width = 1;
-+  height = 1;
-+  
-+  switch (_gdk_gc_get_fill (gc))
-+    {
-+    case GDK_SOLID:
-+      break;
-+    case GDK_TILED:
-+      if (_gdk_gc_get_tile (gc))
-+      {
-+        if (!x11_gc->fg_picture)
-+          x11_gc->fg_picture = make_fg_tile_picture (gc);
-+
-+        if (x11_gc->fg_picture != None)
-+          return x11_gc->fg_picture;
-+      }
-+      break;
-+    case GDK_STIPPLED:
-+    case GDK_OPAQUE_STIPPLED:
-+      if (_gdk_gc_get_stipple (gc))
-+      {
-+        gdk_drawable_get_size (_gdk_gc_get_stipple (gc), &width, &height);
-+        fill = _gdk_gc_get_fill (gc);
-+      }
-+      break;
-+    }
-+  
-+  if (x11_gc->fg_picture == None)
-+    {
-+      XRenderPictureAttributes pa;
-+      XRenderPictFormat *pix_format = foreground_format (gc);
-+      Pixmap pix;
-+
-+      if (!pix_format)
-+      return None;
-+
-+      pix = XCreatePixmap (GDK_GC_XDISPLAY (gc), 
-+                         GDK_SCREEN_XROOTWIN (x11_gc->screen),
-+                         width, height, pix_format->depth);
-+      pa.repeat = True;
-+      x11_gc->fg_picture = XRenderCreatePicture (GDK_GC_XDISPLAY (gc), 
-+                                               pix,
-+                                               pix_format,
-+                                               CPRepeat, &pa);
-+      XFreePixmap (GDK_GC_XDISPLAY (gc), pix);
-+      
-+      new = TRUE;
-+    }
-+
-+  _gdk_gc_x11_get_fg_xft_color (gc, &xftcolor);
-+  
-+  if (x11_gc->fg_picture_color.alpha != 0xffff ||
-+      x11_gc->fg_picture_color.red != xftcolor.color.red ||
-+      x11_gc->fg_picture_color.green != xftcolor.color.green ||
-+      x11_gc->fg_picture_color.blue != xftcolor.color.blue)
-+    {
-+      x11_gc->fg_picture_color.alpha = 0xffff;
-+      x11_gc->fg_picture_color.red = xftcolor.color.red;
-+      x11_gc->fg_picture_color.green = xftcolor.color.green;
-+      x11_gc->fg_picture_color.blue = xftcolor.color.blue;
-+
-+      new = TRUE;
-+    }
-+
-+  switch (fill)
-+    {
-+    case GDK_SOLID:
-+      XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc, 
-+                          x11_gc->fg_picture, &x11_gc->fg_picture_color,
-+                          0, 0, width, height);
-+      break;
-+    case GDK_STIPPLED:
-+      {
-+      Picture stipple_picture = make_stipple_picture (gc);
-+      
-+      XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc, 
-+                            x11_gc->fg_picture, &x11_gc->fg_picture_color,
-+                            0, 0, width, height);
-+      XRenderComposite (GDK_GC_XDISPLAY (gc),
-+                        PictOpInReverse,
-+                        stipple_picture, None, x11_gc->fg_picture,
-+                        0, 0, 0, 0, 0, 0, width, height);
-+      
-+      XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), stipple_picture);
-+      }
-+      break;
-+    case GDK_OPAQUE_STIPPLED:
-+      {
-+      XRenderColor bg_color;
-+
-+      Picture stipple_picture = make_stipple_picture (gc);
-+      Picture fg_picture = make_color_picture (gc, &x11_gc->fg_picture_color);
-+
-+      get_bg_color (gc, &bg_color);
-+      
-+      XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc, 
-+                            x11_gc->fg_picture, &bg_color,
-+                            0, 0, width, height);
-+      XRenderComposite (GDK_GC_XDISPLAY (gc),
-+                        PictOpOver,
-+                        fg_picture, stipple_picture, x11_gc->fg_picture,
-+                        0, 0, 0, 0, 0, 0, width, height);
-+
-+      XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), stipple_picture);
-+      XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), fg_picture);
-+      }
-+      break;
-+    case GDK_TILED:
-+      g_assert_not_reached ();        /* handled above */
-+      break;
-+    }
-+
-+  return x11_gc->fg_picture;
-+}
-+
-+/**
-+ * _gdk_gc_x11_get_fg_xft_color:
-+ * @gc: a #GdkGC
-+ * @xftcolor: location to store the color
-+ * 
-+ * Gets the foreground color of the GC as a XftColor.
-+ **/
-+void
-+_gdk_gc_x11_get_fg_xft_color (GdkGC    *gc,
-+                            XftColor *xftcolor)
-+{
-+  GdkGCX11 *x11_gc;
-+  GdkColormap *cmap;
-+  GdkColor color;
-+  
-+  g_return_if_fail (GDK_IS_GC_X11 (gc));
-+
-+  x11_gc = GDK_GC_X11 (gc);
-+
-+  cmap = gdk_gc_get_colormap (gc);
-+
-+  xftcolor->pixel = _gdk_gc_get_fg_pixel (gc);
-+
-+  if (cmap)
-+    {
-+      gdk_colormap_query_color (cmap, xftcolor->pixel, &color);
-+      xftcolor->color.alpha = 0xffff;
-+      xftcolor->color.red = color.red;
-+      xftcolor->color.green = color.green;
-+      xftcolor->color.blue = color.blue;
-+    }
-+  else if (x11_gc->depth == 1)
-+    {
-+      /* Drawing with Xft on a bitmap is a bit bizzare; it
-+       * takes alpha >= 0x8000 to mean 'set to 1' and
-+       * alpha < 0x8000 to mean 'set to 0'.
-+       */
-+      if (xftcolor->pixel)
-+        {
-+        xftcolor->color.red = 0xffff;
-+        xftcolor->color.green = 0xffff;
-+        xftcolor->color.blue = 0xffff;
-+        xftcolor->color.alpha = 0xffff;
-+      }
-+      else
-+        {
-+        xftcolor->color.red = 0;
-+        xftcolor->color.green = 0;
-+        xftcolor->color.blue = 0;
-+        xftcolor->color.alpha = 0;
-+      }
-+    }
-+  else
-+    {
-+      g_warning ("Using Xft rendering requires the GC argument to have a\n"
-+               "specified colormap. If the GC was created for a drawable\n"
-+               "with a colormap, the colormap will be set on the GC\n"
-+               "automatically. Otherwise, a colormap must be set on it with"
-+               "gdk_gc_set_colormap");
-+    }
-+}
-+
-+void
-+_gdk_windowing_gc_get_foreground (GdkGC    *gc,
-+                                GdkColor *color)
-+{
-+  GdkColormap *cmap;
-+  
-+  g_return_if_fail (GDK_IS_GC_X11 (gc));
-+
-+  color->pixel = _gdk_gc_get_fg_pixel (gc);
-+
-+  cmap = gdk_gc_get_colormap (gc);
-+
-+  if (cmap)
-+    gdk_colormap_query_color (cmap, _gdk_gc_get_fg_pixel (gc), color);
-+  else
-+    g_warning ("No colormap in _gdk_windowing_gc_get_foreground");
-+}
- #define __GDK_GC_X11_C__
- #include "gdkaliasdef.c"
-Index: gtk+-2.10.6/gdk/x11/gdkprivate-x11.h
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkprivate-x11.h  2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkprivate-x11.h       2006-10-30 12:59:30.000000000 +0000
-@@ -63,6 +63,9 @@
-   guint have_clip_region : 1;
-   guint have_clip_mask : 1;
-   guint depth : 8;
-+    
-+  Picture fg_picture;
-+  XRenderColor fg_picture_color; 
- };
- struct _GdkGCX11Class
-@@ -102,6 +105,11 @@
- GType _gdk_gc_x11_get_type (void);
- gboolean _gdk_x11_have_render           (GdkDisplay *display);
-+gboolean _gdk_x11_have_render_with_trapezoids (GdkDisplay *display);
-+
-+Picture  _gdk_x11_gc_get_fg_picture   (GdkGC      *gc);
-+void     _gdk_gc_x11_get_fg_xft_color (GdkGC      *gc,
-+                                     XftColor   *xftcolor);
- GdkGC *_gdk_x11_gc_new                  (GdkDrawable     *drawable,
-                                        GdkGCValues     *values,
-Index: gtk+-2.10.6/gdk/x11/gdkwindow-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkwindow-x11.c   2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkwindow-x11.c        2006-10-30 12:59:30.000000000 +0000
-@@ -1114,7 +1114,8 @@
- {
-   GdkWindowObject *private = (GdkWindowObject *)window;
-   GdkToplevelX11 *toplevel;
--  
-+  GdkDrawableImplX11 *draw_impl;
-+      
-   g_return_if_fail (GDK_IS_WINDOW (window));
-   _gdk_selection_window_destroyed (window);
-@@ -1126,6 +1127,11 @@
-   if (toplevel)
-     gdk_toplevel_x11_free_contents (GDK_WINDOW_DISPLAY (window), toplevel);
-+  draw_impl = GDK_DRAWABLE_IMPL_X11 (private->impl);
-+    
-+  if (draw_impl->xft_draw)
-+    XftDrawDestroy (draw_impl->xft_draw);
-+  
-   _gdk_x11_drawable_finish (private->impl);
-   if (!recursing && !foreign_destroy)
-Index: gtk+-2.10.6/gdk/x11/Makefile.am
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/Makefile.am       2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/Makefile.am    2006-10-30 12:59:30.000000000 +0000
-@@ -37,6 +37,7 @@
-       gdkinput.c              \
-       gdkkeys-x11.c           \
-       gdkmain-x11.c           \
-+      gdkpango-x11.c          \
-       gdkpixmap-x11.c         \
-       gdkpixmap-x11.h         \
-       gdkproperty-x11.c       \
-Index: gtk+-2.10.6/gtk/gtkcalendar.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkcalendar.c 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkcalendar.c      2006-10-30 12:59:30.000000000 +0000
-@@ -1821,7 +1821,7 @@
-     }
- }
--\f
-+
- /****************************************
-  *              Repainting              *
-  ****************************************/
-@@ -1831,7 +1831,7 @@
- {
-   GtkWidget *widget = GTK_WIDGET (calendar);
-   GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
--  cairo_t *cr;
-+  GdkGC *gc;
-   char buffer[255];
-   int x, y;
-   gint header_width;
-@@ -1849,7 +1849,7 @@
-   else
-     year_left = !priv->year_before;
--  cr = gdk_cairo_create (priv->header_win);
-+  gc = calendar->gc;
-   
-   header_width = widget->allocation.width - 2 * widget->style->xthickness;
-   
-@@ -1902,9 +1902,9 @@
-                         - (max_year_width - logical_rect.width)/2);
-   
--  gdk_cairo_set_source_color (cr, HEADER_FG_COLOR (GTK_WIDGET (calendar)));
--  cairo_move_to (cr, x, y);
--  pango_cairo_show_layout (cr, layout);
-+  gdk_gc_set_foreground (gc, HEADER_FG_COLOR (GTK_WIDGET (calendar)));
-+  gdk_draw_layout (priv->header_win, gc, x, y, layout);
-+  
-   
-   /* Draw month */
-   g_snprintf (buffer, sizeof (buffer), "%s", default_monthname[calendar->month]);
-@@ -1924,19 +1924,19 @@
-     else
-     x = 3 + priv->arrow_width + (max_month_width - logical_rect.width)/2;
--  cairo_move_to (cr, x, y);
--  pango_cairo_show_layout (cr, layout);
--
-+  gdk_draw_layout (priv->header_win, gc, x, y, layout);
-+  
-+  gdk_gc_set_foreground (gc, BACKGROUND_COLOR (GTK_WIDGET (calendar)));
-+  
-   g_object_unref (layout);
--  cairo_destroy (cr);
- }
- static void
- calendar_paint_day_names (GtkCalendar *calendar)
- {
-   GtkWidget *widget = GTK_WIDGET (calendar);
-+  GdkGC *gc;
-   GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
--  cairo_t *cr;
-   char buffer[255];
-   int day,i;
-   int day_width, cal_width;
-@@ -1946,8 +1946,7 @@
-   gint focus_padding;
-   gint focus_width;
-   
--  cr = gdk_cairo_create (priv->day_name_win);
--  
-+  gc = calendar->gc;
-   gtk_widget_style_get (GTK_WIDGET (widget),
-                       "focus-line-width", &focus_width,
-                       "focus-padding", &focus_padding,
-@@ -1961,22 +1960,19 @@
-    * Draw rectangles as inverted background for the labels.
-    */
--  gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget));
--  cairo_rectangle (cr,
--                 CALENDAR_MARGIN, CALENDAR_MARGIN,
--                 cal_width-CALENDAR_MARGIN * 2,
--                 priv->day_name_h - CALENDAR_MARGIN);
--  cairo_fill (cr);
--  
-+  gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (widget));
-+  gdk_draw_rectangle (priv->day_name_win, gc, TRUE,
-+                    CALENDAR_MARGIN, CALENDAR_MARGIN,
-+                    cal_width-CALENDAR_MARGIN * 2,
-+                    priv->day_name_h - CALENDAR_MARGIN);
-+    
-   if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
--    {
--      cairo_rectangle (cr, 
--                     CALENDAR_MARGIN,
--                     priv->day_name_h - CALENDAR_YSEP,
--                     priv->week_width - CALENDAR_YSEP - CALENDAR_MARGIN,
--                     CALENDAR_YSEP);
--      cairo_fill (cr);
--    }
-+    gdk_draw_rectangle (priv->day_name_win, gc, TRUE,
-+                      CALENDAR_MARGIN,
-+                      priv->day_name_h - CALENDAR_YSEP,
-+                      priv->week_width - CALENDAR_YSEP - CALENDAR_MARGIN,
-+                      CALENDAR_YSEP);
-+  
-   
-   /*
-    * Write the labels
-@@ -1984,7 +1980,7 @@
-   layout = gtk_widget_create_pango_layout (widget, NULL);
--  gdk_cairo_set_source_color (cr, SELECTED_FG_COLOR (widget));
-+  gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (widget));
-   for (i = 0; i < 7; i++)
-     {
-       if (gtk_widget_get_direction (GTK_WIDGET (calendar)) == GTK_TEXT_DIR_RTL)
-@@ -1997,19 +1993,18 @@
-       pango_layout_set_text (layout, buffer, -1);
-       pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
--      cairo_move_to (cr, 
--                   (CALENDAR_MARGIN +
--                    + (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ?
--                       (priv->week_width + (priv->week_width ? CALENDAR_XSEP : 0))
--                       : 0)
--                    + day_wid_sep * i
--                    + (day_width - logical_rect.width)/2),
--                   CALENDAR_MARGIN + focus_width + focus_padding + logical_rect.y);
--      pango_cairo_show_layout (cr, layout);
-+      gdk_draw_layout (priv->day_name_win, gc, 
-+                     (CALENDAR_MARGIN +
-+                      + (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ?
-+                         (priv->week_width + (priv->week_width ? CALENDAR_XSEP : 0))
-+                         : 0)
-+                      + day_wid_sep * i
-+                      + (day_width - logical_rect.width)/2),
-+                     CALENDAR_MARGIN + focus_width + focus_padding + logical_rect.y,
-+                     layout);
-     }
-   
-   g_object_unref (layout);
--  cairo_destroy (cr);
- }
- static void
-@@ -2017,7 +2012,7 @@
- {
-   GtkWidget *widget = GTK_WIDGET (calendar);
-   GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
--  cairo_t *cr;
-+  GdkGC *gc;
-   gint row, week = 0, year;
-   gint x_loc;
-   char buffer[32];
-@@ -2027,7 +2022,7 @@
-   gint focus_padding;
-   gint focus_width;
-   
--  cr = gdk_cairo_create (priv->week_win);
-+  gc = calendar->gc;
-   
-   gtk_widget_style_get (GTK_WIDGET (widget),
-                       "focus-line-width", &focus_width,
-@@ -2038,20 +2033,20 @@
-    * Draw a rectangle as inverted background for the labels.
-    */
--  gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget));
-+  gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (widget));
-   if (priv->day_name_win)
--    cairo_rectangle (cr, 
--                   CALENDAR_MARGIN,
--                   0,
--                   priv->week_width - CALENDAR_MARGIN,
--                   priv->main_h - CALENDAR_MARGIN);
-+    gdk_draw_rectangle (priv->week_win, gc, TRUE,
-+                      CALENDAR_MARGIN,
-+                      0,
-+                      priv->week_width - CALENDAR_MARGIN,
-+                      priv->main_h - CALENDAR_MARGIN);
-   else
--    cairo_rectangle (cr,
--                   CALENDAR_MARGIN,
--                   CALENDAR_MARGIN,
--                   priv->week_width - CALENDAR_MARGIN,
--                   priv->main_h - 2 * CALENDAR_MARGIN);
--  cairo_fill (cr);
-+    gdk_draw_rectangle (priv->week_win, gc, TRUE,
-+                      CALENDAR_MARGIN,
-+                      CALENDAR_MARGIN,
-+                      priv->week_width - CALENDAR_MARGIN,
-+                      priv->main_h - 2 * CALENDAR_MARGIN);
-+  
-   
-   /*
-    * Write the labels
-@@ -2059,7 +2054,7 @@
-   
-   layout = gtk_widget_create_pango_layout (widget, NULL);
-   
--  gdk_cairo_set_source_color (cr, SELECTED_FG_COLOR (widget));
-+  gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (widget));
-   day_height = calendar_row_height (calendar);
-   for (row = 0; row < 6; row++)
-     {
-@@ -2095,12 +2090,10 @@
-              - logical_rect.width
-              - CALENDAR_XSEP - focus_padding - focus_width);
--      cairo_move_to (cr, x_loc, y_loc);
--      pango_cairo_show_layout (cr, layout);
-+      gdk_draw_layout (priv->week_win, gc, x_loc, y_loc, layout);
-     }
-   
-   g_object_unref (layout);
--  cairo_destroy (cr);
- }
- static void
-@@ -2149,7 +2142,7 @@
- {
-   GtkWidget *widget = GTK_WIDGET (calendar);
-   GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
--  cairo_t *cr;
-+  GdkGC *gc;
-   GdkColor *text_color;
-   gchar buffer[32];
-   gint day;
-@@ -2162,7 +2155,7 @@
-   g_return_if_fail (row < 6);
-   g_return_if_fail (col < 7);
--  cr = gdk_cairo_create (priv->main_win);
-+  gc = calendar->gc;
-   day = calendar->day[row][col];
-@@ -2170,11 +2163,11 @@
-   
-   if (calendar->day_month[row][col] == MONTH_PREV)
-     {
--      text_color = PREV_MONTH_COLOR (widget);
-+      gdk_gc_set_foreground (gc, PREV_MONTH_COLOR (GTK_WIDGET (calendar)));
-     } 
-   else if (calendar->day_month[row][col] == MONTH_NEXT)
-     {
--      text_color =  NEXT_MONTH_COLOR (widget);
-+      gdk_gc_set_foreground (gc, NEXT_MONTH_COLOR (GTK_WIDGET (calendar)));
-     } 
-   else 
-     {
-@@ -2188,16 +2181,16 @@
- #endif     
-       if (calendar->selected_day == day)
-       {
--        gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget));
--        gdk_cairo_rectangle (cr, &day_rect);
--        cairo_fill (cr);
-+        gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (GTK_WIDGET (calendar)));
-+        gdk_draw_rectangle (priv->main_win, gc, TRUE, day_rect.x, day_rect.y,
-+                            day_rect.width, day_rect.height);
-       }
-       if (calendar->selected_day == day)
--      text_color = SELECTED_FG_COLOR (widget);
-+      gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (GTK_WIDGET (calendar)));
-       else if (calendar->marked_date[day-1])
--      text_color = MARKED_COLOR (widget);
-+      gdk_gc_set_foreground (gc, MARKED_COLOR  (GTK_WIDGET (calendar)));
-       else
--      text_color = NORMAL_DAY_COLOR (widget);
-+      gdk_gc_set_foreground (gc, NORMAL_DAY_COLOR (GTK_WIDGET (calendar)));
-     }
-   /* Translators: this defines whether the day numbers should use
-@@ -2219,16 +2212,13 @@
-   x_loc -= logical_rect.width;
-   y_loc = day_rect.y + (day_rect.height - logical_rect.height) / 2;
-   
--  gdk_cairo_set_source_color (cr, text_color);
--  cairo_move_to (cr, x_loc, y_loc);
--  pango_cairo_show_layout (cr, layout);
-+  gdk_draw_layout (priv->main_win, gc,
-+                 x_loc, y_loc, layout);
-     
-   if (calendar->marked_date[day-1]
-       && calendar->day_month[row][col] == MONTH_CURRENT)
--    {
--      cairo_move_to (cr, x_loc - 1, y_loc);
--      pango_cairo_show_layout (cr, layout);
--    }
-+    gdk_draw_layout (priv->main_win, gc,
-+                   x_loc-1, y_loc, layout);
-   if (GTK_WIDGET_HAS_FOCUS (calendar) 
-       && calendar->focus_row == row && calendar->focus_col == col)
-@@ -2253,7 +2243,6 @@
-     }
-   g_object_unref (layout);
--  cairo_destroy (cr);
- }
- static void
-Index: gtk+-2.10.6/gtk/gtkentry.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkentry.c    2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkentry.c 2006-10-30 12:59:30.000000000 +0000
-@@ -3333,7 +3333,6 @@
-   if (GTK_WIDGET_DRAWABLE (entry))
-     {
-       PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE);
--      cairo_t *cr;
-       gint x, y;
-       gint start_pos, end_pos;
-       
-@@ -3341,56 +3340,60 @@
-       
-       get_layout_position (entry, &x, &y);
--      cr = gdk_cairo_create (entry->text_area);
--
--      cairo_move_to (cr, x, y);
--      gdk_cairo_set_source_color (cr, &widget->style->text [widget->state]);
--      pango_cairo_show_layout (cr, layout);
--
-+      gdk_draw_layout (entry->text_area, widget->style->text_gc [widget->state],       
-+                       x, y,
-+                     layout);
-+        
-       if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos))
-       {
-         gint *ranges;
-         gint n_ranges, i;
-           PangoRectangle logical_rect;
--        GdkColor *selection_color, *text_color;
-+        GdkGC *selection_gc, *text_gc;
-           GtkBorder inner_border;
--
-+          GdkRegion *clip_region;
-+            
-         pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
-         gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges);
-         if (GTK_WIDGET_HAS_FOCUS (entry))
-           {
--            selection_color = &widget->style->base [GTK_STATE_SELECTED];
--            text_color = &widget->style->text [GTK_STATE_SELECTED];
-+            selection_gc = widget->style->base_gc [GTK_STATE_SELECTED];
-+            text_gc = widget->style->text_gc [GTK_STATE_SELECTED];
-           }
-         else
-           {
--            selection_color = &widget->style->base [GTK_STATE_ACTIVE];
--            text_color = &widget->style->text [GTK_STATE_ACTIVE];
-+            selection_gc = widget->style->base_gc [GTK_STATE_ACTIVE];
-+            text_gc = widget->style->text_gc [GTK_STATE_ACTIVE];
-           }
--
-+          
-+          clip_region = gdk_region_new ();
-           _gtk_entry_effective_inner_border (entry, &inner_border);
-         for (i = 0; i < n_ranges; ++i)
--          cairo_rectangle (cr,
--                           inner_border.left - entry->scroll_offset + ranges[2 * i],
--                           y,
--                           ranges[2 * i + 1],
--                           logical_rect.height);
-+          {
-+            GdkRectangle rect;
--        cairo_clip (cr);
--        
--        gdk_cairo_set_source_color (cr, selection_color);
--        cairo_paint (cr);
-+            rect.x = inner_border.left - entry->scroll_offset + ranges[2 * i];
-+            rect.y = y;
-+            rect.width = ranges[2 * i + 1];
-+            rect.height = logical_rect.height;
-+              
-+            gdk_draw_rectangle (entry->text_area, selection_gc, TRUE,
-+                                rect.x, rect.y, rect.width, rect.height);
--        cairo_move_to (cr, x, y);
--        gdk_cairo_set_source_color (cr, text_color);
--        pango_cairo_show_layout (cr, layout);
-+            gdk_region_union_with_rect (clip_region, &rect);
-+          }
-         
-+        gdk_gc_set_clip_region (text_gc, clip_region);
-+        gdk_draw_layout (entry->text_area, text_gc, 
-+                         x, y,
-+                         layout);
-+        gdk_gc_set_clip_region (text_gc, NULL);
-+        
-+        gdk_region_destroy (clip_region);
-         g_free (ranges);
-       }
--
--      cairo_destroy (cr);
-     }
- }
-Index: gtk+-2.10.6/gtk/gtkwidget.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkwidget.c   2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkwidget.c        2006-10-30 12:59:30.000000000 +0000
-@@ -5445,7 +5445,8 @@
-       GdkScreen *screen;
-       update_pango_context (widget, context);
--
-+/* TODO: Figure out the proper way to handle this in a pangoxft setting
-+        
-       screen = gtk_widget_get_screen_unchecked (widget);
-       if (screen)
-       {
-@@ -5453,7 +5454,7 @@
-                                             gdk_screen_get_resolution (screen));
-         pango_cairo_context_set_font_options (context,
-                                               gdk_screen_get_font_options (screen));
--      }
-+      }*/
-     }
- }
-Index: gtk+-2.10.6/gdk/x11/gdkpango-x11.c
-===================================================================
---- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkpango-x11.c 2006-10-30 12:59:30.000000000 +0000
-@@ -0,0 +1,174 @@
-+/* GDK - The GIMP Drawing Kit
-+ * Copyright (C) 2000 Red Hat, Inc. 
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+#include <config.h>
-+#include <stdlib.h>
-+
-+#include "gdkx.h"
-+#include "gdkdisplay-x11.h"
-+#include "gdkpango.h"
-+#include <pango/pangoxft.h>
-+#include <pango/pangoxft-render.h>
-+#include "gdkalias.h"
-+
-+#include <math.h>
-+
-+typedef struct _GdkX11Renderer      GdkX11Renderer;
-+typedef struct _GdkX11RendererClass GdkX11RendererClass;
-+
-+#define GDK_TYPE_X11_RENDERER            (_gdk_x11_renderer_get_type())
-+#define GDK_X11_RENDERER(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_X11_RENDERER, GdkX11Renderer))
-+#define GDK_IS_X11_RENDERER(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_X11_RENDERER))
-+#define GDK_X11_RENDERER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_X11_RENDERER, GdkX11RendererClass))
-+#define GDK_IS_X11_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_X11_RENDERER))
-+#define GDK_X11_RENDERER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_X11_RENDERER, GdkX11RendererClass))
-+
-+#define MAX_RENDER_PART  PANGO_RENDER_PART_STRIKETHROUGH
-+
-+struct _GdkX11Renderer
-+{
-+  PangoXftRenderer parent_instance;
-+
-+  XRenderPictFormat *mask_format;
-+  
-+  GdkDrawable *drawable;
-+  GdkGC *gc;
-+};
-+
-+struct _GdkX11RendererClass
-+{
-+  PangoXftRendererClass parent_class;
-+};
-+
-+G_DEFINE_TYPE (GdkX11Renderer, _gdk_x11_renderer, PANGO_TYPE_XFT_RENDERER)
-+
-+static void
-+gdk_x11_renderer_finalize (GObject *object)
-+{
-+  G_OBJECT_CLASS (_gdk_x11_renderer_parent_class)->finalize (object);
-+}
-+     
-+static void
-+gdk_x11_renderer_composite_trapezoids (PangoXftRenderer *xftrenderer,
-+                                     PangoRenderPart   part,
-+                                     XTrapezoid       *trapezoids,
-+                                     int               n_trapezoids)
-+{
-+  /* Because we only use this renderer for "draw_glyphs()" calls, we
-+   * won't hit this code path much. However, it is hit for drawing
-+   * the "unknown glyph" hex squares. We can safely ignore the part,
-+   */
-+  GdkX11Renderer *x11_renderer = GDK_X11_RENDERER (xftrenderer);
-+
-+  _gdk_x11_drawable_draw_xtrapezoids (x11_renderer->drawable,
-+                                    x11_renderer->gc,
-+                                    trapezoids, n_trapezoids);
-+
-+}
-+
-+static void
-+gdk_x11_renderer_composite_glyphs (PangoXftRenderer *xftrenderer,
-+                                 XftFont          *xft_font,
-+                                 XftGlyphSpec     *glyphs,
-+                                 gint              n_glyphs)
-+{
-+  GdkX11Renderer *x11_renderer = GDK_X11_RENDERER (xftrenderer);
-+
-+  _gdk_x11_drawable_draw_xft_glyphs (x11_renderer->drawable,
-+                                   x11_renderer->gc,
-+                                   xft_font, glyphs, n_glyphs);
-+}
-+
-+static void
-+_gdk_x11_renderer_init (GdkX11Renderer *renderer)
-+{
-+}
-+
-+static void
-+_gdk_x11_renderer_class_init (GdkX11RendererClass *klass)
-+{
-+  PangoXftRendererClass *xftrenderer_class = PANGO_XFT_RENDERER_CLASS (klass);
-+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-+  
-+  xftrenderer_class->composite_glyphs = gdk_x11_renderer_composite_glyphs;
-+  xftrenderer_class->composite_trapezoids = gdk_x11_renderer_composite_trapezoids;
-+
-+  object_class->finalize = gdk_x11_renderer_finalize;
-+}
-+
-+PangoRenderer *
-+_gdk_x11_renderer_get (GdkDrawable *drawable,
-+                     GdkGC       *gc)
-+{
-+  GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
-+  GdkX11Renderer *x11_renderer;
-+
-+  if (!screen_x11->renderer)
-+    {
-+      screen_x11->renderer = g_object_new (GDK_TYPE_X11_RENDERER,
-+                                         "display", GDK_SCREEN_XDISPLAY (screen),
-+                                         "screen",  GDK_SCREEN_XNUMBER (screen),
-+                                         NULL);
-+    }
-+
-+  x11_renderer = GDK_X11_RENDERER (screen_x11->renderer);
-+
-+  x11_renderer->drawable = drawable;
-+  x11_renderer->gc = gc;
-+
-+  return screen_x11->renderer;
-+}
-+
-+/**
-+ * gdk_pango_context_get_for_screen:
-+ * @screen: the #GdkScreen for which the context is to be created.
-+ * 
-+ * Creates a #PangoContext for @screen.
-+ *
-+ * The context must be freed when you're finished with it.
-+ * 
-+ * When using GTK+, normally you should use gtk_widget_get_pango_context()
-+ * instead of this function, to get the appropriate context for
-+ * the widget you intend to render text onto.
-+ * 
-+ * Return value: a new #PangoContext for @screen
-+ *
-+ * Since: 2.2
-+ **/
-+PangoContext *
-+gdk_pango_context_get_for_screen (GdkScreen *screen)
-+{
-+  PangoContext *context;
-+  
-+  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-+
-+  if (screen->closed)
-+    return NULL;
-+  
-+  context = pango_xft_get_context (GDK_SCREEN_XDISPLAY (screen),
-+                                 GDK_SCREEN_X11 (screen)->screen_num);
-+  
-+  g_object_set_data (G_OBJECT (context), "gdk-pango-screen", screen);
-+  
-+  return context;
-+}
-+
-+#define __GDK_PANGO_X11_C__
-+#include "gdkaliasdef.c"
-Index: gtk+-2.10.6/gdk/x11/gdkpixmap-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkpixmap-x11.c   2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkpixmap-x11.c        2006-10-30 12:59:30.000000000 +0000
-@@ -119,6 +119,9 @@
-     {
-       GdkDrawableImplX11 *draw_impl = GDK_DRAWABLE_IMPL_X11 (impl);
-+      if (draw_impl->xft_draw)
-+       XftDrawDestroy (draw_impl->xft_draw);
-+
-       _gdk_x11_drawable_finish (GDK_DRAWABLE (draw_impl));
-     }
---- gtk+-2.10.6.orig/gtk/gtkcalendar.c.orig    2006-11-14 14:39:34.000000000 -0800
-+++ gtk+-2.10.6/gtk/gtkcalendar.c      2006-11-14 14:37:34.000000000 -0800
-@@ -1495,6 +1495,10 @@ gtk_calendar_realize (GtkWidget *widget)
-                            BACKGROUND_COLOR ( GTK_WIDGET ( calendar)));
-   gdk_window_show (priv->main_win);
-   gdk_window_set_user_data (priv->main_win, widget);
-+
-+  /* Set widgets gc */
-+  calendar->gc = gdk_gc_new (widget->window);
-+
-   gdk_window_set_background (widget->window, BACKGROUND_COLOR (widget));
-   gdk_window_show (widget->window);
-   gdk_window_set_user_data (widget->window, widget);
index d58c82cc5eb38e818e0032478a26648146f71583..6768a9b5174824a6ba6cf12dcc39cb0ed73967e7 100644 (file)
@@ -1,5 +1,24 @@
---- gtk+-2.10.7/gtk/Makefile.am.orig   2007-01-05 11:32:46.000000000 -0700
-+++ gtk+-2.10.7/gtk/Makefile.am        2007-01-11 01:03:52.000000000 -0700
+--- gtk/gtk/Makefile.in.orig   2007-01-14 02:29:46.000000000 -0700
++++ gtk/gtk/Makefile.in        2007-01-14 02:30:19.000000000 -0700
+@@ -2954,11 +2954,11 @@
+       done                                                                    \
+       && touch stamp-icons
+-gtkbuiltincache.h: @REBUILD@ stamp-icons
+-      $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT)
+-      $(gtk_update_icon_cache_program) --force --ignore-theme-index           \
+-         --source builtin_icons stock-icons > gtkbuiltincache.h.tmp &&        \
+-      mv gtkbuiltincache.h.tmp gtkbuiltincache.h
++#gtkbuiltincache.h: @REBUILD@ stamp-icons
++#     $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT)
++#     $(gtk_update_icon_cache_program) --force --ignore-theme-index           \
++#        --source builtin_icons stock-icons > gtkbuiltincache.h.tmp &&        \
++#     mv gtkbuiltincache.h.tmp gtkbuiltincache.h
+ install-data-local:
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+--- gtk/gtk/Makefile.am.orig   2007-01-14 02:29:39.000000000 -0700
++++ gtk/gtk/Makefile.am        2007-01-14 02:30:06.000000000 -0700
 @@ -1123,11 +1123,11 @@
           ./gtk-update-icon-cache
  endif