[mutter] Remove compatibility for GTK+-2.0



commit b445ee3763b59c6e86697cf2ce1c70b46bced03c
Author: Florian Müllner <fmuellner gnome org>
Date:   Mon Oct 25 20:44:30 2010 +0200

    Remove compatibility for GTK+-2.0
    
    While the Meego developers agreed to switching mutter to GTK+-3.0
    unconditionally a while ago, Canonical used a GTK+-2.0 build for their
    Unity project. As Canonical now announced a switch to compiz as their
    window manager, there is no longer a reason to maintain GTK+-2.0
    compatibility.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=633133

 configure.in                       |   38 +-----
 src/Makefile.am                    |   24 +---
 src/compositor/compositor.c        |    4 +-
 src/compositor/meta-window-actor.c |   12 +-
 src/core/core.c                    |    2 +-
 src/core/delete.c                  |    4 +-
 src/core/display.c                 |   46 ++++----
 src/core/errors.c                  |  239 +-----------------------------------
 src/core/frame.c                   |    4 +-
 src/core/iconcache.c               |    6 +-
 src/core/keybindings.c             |   20 ++--
 src/core/main.c                    |    3 -
 src/core/screen.c                  |   22 ++--
 src/core/stack.c                   |    6 +-
 src/core/window-props.c            |    2 +-
 src/core/window.c                  |   68 +++++-----
 src/core/workspace.c               |    2 +-
 src/core/xprops.c                  |   10 +-
 src/gdk-compat.h                   |   80 ------------
 src/gdk2-drawing-utils.c           |  177 --------------------------
 src/gdk2-drawing-utils.h           |  100 ---------------
 src/gtk-compat.h                   |   26 ----
 src/include/errors.h               |    8 +-
 src/libmutter-private.pc.in        |    2 +-
 src/tools/mutter-mag.c             |    2 -
 src/tools/mutter-window-demo.c     |    2 -
 src/ui/fixedtip.c                  |   23 ----
 src/ui/frames.c                    |  166 ++-----------------------
 src/ui/menu.c                      |    2 -
 src/ui/metaaccellabel.c            |  113 -----------------
 src/ui/preview-widget.c            |   34 -----
 src/ui/resizepopup.c               |    1 -
 src/ui/tabpopup.c                  |  113 ++---------------
 src/ui/theme-viewer.c              |   15 +--
 src/ui/theme.c                     |   10 +-
 src/ui/tile-preview.c              |   59 +--------
 src/ui/ui.c                        |   94 --------------
 37 files changed, 158 insertions(+), 1381 deletions(-)
---
diff --git a/configure.in b/configure.in
index c029023..50a5d74 100644
--- a/configure.in
+++ b/configure.in
@@ -127,35 +127,11 @@ if test "$enable_compile_warnings" != no ; then
 fi
 changequote([,])dnl
 
-AC_MSG_CHECKING([which gtk+ version to compile against])
-AC_ARG_WITH([gtk],
-  AC_HELP_STRING([--with-gtk=3.0|2.0],
-                 [which gtk+ version to compile against (default: 3.0)]),
-  [case "$with_gtk" in
-      2.0|3.0) ;;
-      *) AC_MSG_ERROR([invalid gtk+ version specified]);;
-  esac],
-  [with_gtk=3.0])
-AC_MSG_RESULT([$with_gtk])
-
-case "$with_gtk" in
-  2.0) GTK_API_VERSION=2.0
-       GTK_MIN_VERSION=2.18
-       CANBERRA_GTK=libcanberra-gtk
-       CANBERRA_GTK_VERSION=0.24
-       ;;
-  3.0) GTK_API_VERSION=3.0
-       GTK_MIN_VERSION=2.90.7
-       CANBERRA_GTK=libcanberra-gtk3
-       CANBERRA_GTK_VERSION=0.26
-       AC_DEFINE(USE_CAIRO_REGION, 1, [Use cairo_region_t instead of GdkRegion])
-       ;;
-esac
-
-AM_CONDITIONAL(INSTALL_LIBMUTTER_PRIVATE, test "$with_gtk" = "3.0")
+GTK_MIN_VERSION=2.90.7
+CANBERRA_GTK=libcanberra-gtk3
+CANBERRA_GTK_VERSION=0.26
 
-MUTTER_PC_MODULES="gtk+-$GTK_API_VERSION >= $GTK_MIN_VERSION pango >= 1.2.0 cairo >= 1.10.0"
-AC_SUBST(GTK_API_VERSION)
+MUTTER_PC_MODULES="gtk+-3.0 >= $GTK_MIN_VERSION pango >= 1.2.0 cairo >= 1.10.0"
 
 AC_ARG_ENABLE(gconf,
   AC_HELP_STRING([--disable-gconf],
@@ -215,8 +191,8 @@ AM_GLIB_GNU_GETTEXT
 # GRegex requires Glib-2.14.0
 PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.14.0)
 # gtk_window_set_icon_name requires gtk2+-2.6.0
-PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-$GTK_API_VERSION >= $GTK_MIN_VERSION)
-PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-$GTK_API_VERSION >= $GTK_MIN_VERSION)
+PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-3.0 >= $GTK_MIN_VERSION)
+PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0 >= $GTK_MIN_VERSION)
 
 # Unconditionally use this dir to avoid a circular dep with gnomecc
 GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings"
@@ -574,7 +550,7 @@ fi
 
 dnl ==========================================================================
 echo "
-mutter-$VERSION (using gtk+-${GTK_API_VERSION}):
+mutter-$VERSION
 
 	prefix:                   ${prefix}
 	source code location:	  ${srcdir}
diff --git a/src/Makefile.am b/src/Makefile.am
index 0d966e0..09b90d5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,11 +1,7 @@
 # Flag build for parallelism; see https://savannah.gnu.org/patch/?6905
 .AUTOPARALLEL:
 
-if INSTALL_LIBMUTTER_PRIVATE
 lib_LTLIBRARIES = libmutter-private.la
-else
-noinst_LTLIBRARIES = libmutter-private.la
-endif
 
 SUBDIRS=wm-tester tools compositor/plugins
 
@@ -44,10 +40,6 @@ mutter_SOURCES= 				\
 	compositor/shadow.h			\
 	compositor/tidy/tidy-texture-frame.c	\
 	compositor/tidy/tidy-texture-frame.h	\
-	gdk-compat.h				\
-	gtk-compat.h				\
-	gdk2-drawing-utils.c			\
-	gdk2-drawing-utils.h			\
 	include/compositor.h			\
 	include/meta-plugin.h			\
 	include/meta-window-actor.h		\
@@ -147,8 +139,6 @@ libmutter_private_la_SOURCES=			\
 	include/common.h			\
 	ui/preview-widget.c			\
 	ui/preview-widget.h			\
-	gdk2-drawing-utils.c			\
-	gdk2-drawing-utils.h			\
 	ui/theme-parser.c			\
 	ui/theme.c				\
 	ui/theme.h
@@ -186,17 +176,11 @@ libmutterinclude_extra_headers =		\
 	ui/preview-widget.h			\
 	include/atomnames.h
 
-if INSTALL_LIBMUTTER_PRIVATE
 libmutterincludedir = $(includedir)/mutter/mutter-private
 
 libmutterinclude_HEADERS =			\
 	$(libmutterinclude_base_headers)	\
 	$(libmutterinclude_extra_headers)
-else
-noinst_HEADERS =				\
-	$(libmutterinclude_base_headers)	\
-	$(libmutterinclude_extra_headers)
-endif
 
 mutter_theme_viewer_SOURCES=  \
 	ui/theme-viewer.c
@@ -226,11 +210,11 @@ Meta-$(api_version).gir: $(G_IR_SCANNER) mutter $(libmutterinclude_HEADERS) $(mu
 		--warn-all				\
 		--warn-error				\
 		--include=GObject-2.0			\
-		--include=Gdk- GTK_API_VERSION@		\
-		--include=Gtk- GTK_API_VERSION@		\
+		--include=Gdk-3.0			\
+		--include=Gtk-3.0			\
 		--include=Clutter-1.0			\
 		--pkg=clutter-1.0			\
-		--pkg=gtk+- GTK_API_VERSION@		\
+		--pkg=gtk+-3.0				\
 		--include=xlib-2.0			\
 		--include=xfixes-4.0			\
 		--program=$$pwd/mutter			\
@@ -305,11 +289,9 @@ CLEANFILES =					\
 inlinepixbufs.h: $(IMAGES)
 	$(GDK_PIXBUF_CSOURCE) --raw --build-list $(VARIABLES) >$(srcdir)/inlinepixbufs.h
 
-if INSTALL_LIBMUTTER_PRIVATE
 pkgconfigdir = $(libdir)/pkgconfig
 
 pkgconfig_DATA = libmutter-private.pc mutter-plugins.pc
-endif
 
 EXTRA_DIST=$(desktopfiles_files) 	\
 	$(wmproperties_files)		\
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index d7bf702..fc13b61 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -444,7 +444,7 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
   XCompositeRedirectSubwindows (xdisplay, xroot, CompositeRedirectManual);
   XSync (xdisplay, FALSE);
 
-  if (meta_error_trap_pop_with_return (display, FALSE))
+  if (meta_error_trap_pop_with_return (display))
     {
       g_warning ("Another compositing manager is running on screen %i",
                  screen_number);
@@ -568,7 +568,7 @@ meta_compositor_add_window (MetaCompositor    *compositor,
 
   add_win (window);
 
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 }
 
 void
diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c
index 65a1bda..756d234 100644
--- a/src/compositor/meta-window-actor.c
+++ b/src/compositor/meta-window-actor.c
@@ -272,7 +272,7 @@ window_decorated_notify (MetaWindow *mw,
     {
       meta_error_trap_push (display);
       XDamageDestroy (xdisplay, priv->damage);
-      meta_error_trap_pop (display, FALSE);
+      meta_error_trap_pop (display);
       priv->damage = None;
     }
 
@@ -411,7 +411,7 @@ meta_window_actor_dispose (GObject *object)
     {
       meta_error_trap_push (display);
       XDamageDestroy (xdisplay, priv->damage);
-      meta_error_trap_pop (display, FALSE);
+      meta_error_trap_pop (display);
 
       priv->damage = None;
     }
@@ -1582,7 +1582,7 @@ check_needs_pixmap (MetaWindowActor *self)
 
       priv->back_pixmap = XCompositeNameWindowPixmap (xdisplay, xwindow);
 
-      if (meta_error_trap_pop_with_return (display, FALSE) != Success)
+      if (meta_error_trap_pop_with_return (display) != Success)
         {
           /* Probably a BadMatch if the window isn't viewable; we could
            * GrabServer/GetWindowAttributes/NameWindowPixmap/UngrabServer/Sync
@@ -1630,7 +1630,7 @@ check_needs_pixmap (MetaWindowActor *self)
       full = TRUE;
     }
 
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 
   priv->needs_pixmap = FALSE;
 }
@@ -1718,7 +1718,7 @@ check_needs_reshape (MetaWindowActor *self)
                                    ShapeBounding,
                                    &n_rects,
                                    &ordering);
-      meta_error_trap_pop (display, TRUE);
+      meta_error_trap_pop (display);
 
       if (rects)
         {
@@ -1766,7 +1766,7 @@ meta_window_actor_pre_paint (MetaWindowActor *self)
     {
       meta_error_trap_push (display);
       XDamageSubtract (xdisplay, priv->damage, None, None);
-      meta_error_trap_pop (display, FALSE);
+      meta_error_trap_pop (display);
       priv->received_damage = FALSE;
     }
 
diff --git a/src/core/core.c b/src/core/core.c
index 68807eb..ec70331 100644
--- a/src/core/core.c
+++ b/src/core/core.c
@@ -348,7 +348,7 @@ meta_core_lower_beneath_focus_window (Display *xdisplay,
                     xwindow,
                     CWSibling | CWStackMode,
                     &changes);
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 }
 
 void
diff --git a/src/core/delete.c b/src/core/delete.c
index fae704b..81f6c8c 100644
--- a/src/core/delete.c
+++ b/src/core/delete.c
@@ -136,7 +136,7 @@ meta_window_delete (MetaWindow  *window,
                   window->desc);
       XKillClient (window->display->xdisplay, window->xwindow);
     }
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 
   meta_display_ping_window (window->display,
                             window,
@@ -200,7 +200,7 @@ meta_window_kill (MetaWindow *window)
               window->desc);
   meta_error_trap_push (window->display);
   XKillClient (window->display->xdisplay, window->xwindow);
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 }
 
 void
diff --git a/src/core/display.c b/src/core/display.c
index 6909c39..7191842 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -347,7 +347,7 @@ sn_error_trap_pop (SnDisplay *sn_display,
   MetaDisplay *display;
   display = meta_display_for_x_display (xdisplay);
   if (display != NULL)
-    meta_error_trap_pop (display, FALSE);
+    meta_error_trap_pop (display);
 }
 #endif
 
@@ -890,7 +890,7 @@ meta_display_open (void)
                                                   timestamp);
       }
 
-    meta_error_trap_pop (the_display, FALSE);
+    meta_error_trap_pop (the_display);
   }
   
   meta_display_ungrab (the_display);  
@@ -1099,7 +1099,7 @@ meta_display_screen_for_xwindow (MetaDisplay *display,
   meta_error_trap_push (display);
   attr.screen = NULL;
   result = XGetWindowAttributes (display->xdisplay, xwindow, &attr);
-  meta_error_trap_pop (display, TRUE);
+  meta_error_trap_pop (display);
 
   /* Note, XGetWindowAttributes is on all kinds of crack
    * and returns 1 on success 0 on failure, rather than Success
@@ -1492,7 +1492,7 @@ window_raise_with_delay_callback (void *data)
 				   window->xwindow,
 				   &root, &child,
 				   &root_x, &root_y, &x, &y, &mask);
-      meta_error_trap_pop (window->display, TRUE);
+      meta_error_trap_pop (window->display);
 
       point_in_window = 
         (window->frame && POINT_IN_RECT (root_x, root_y, window->frame->rect)) ||
@@ -2208,7 +2208,7 @@ event_callback (XEvent   *event,
                             window->frame->xwindow);
               meta_error_trap_push (display);
               meta_window_destroy_frame (window->frame->window);
-              meta_error_trap_pop (display, FALSE);
+              meta_error_trap_pop (display);
             }
           else
             {
@@ -2377,7 +2377,7 @@ event_callback (XEvent   *event,
           meta_error_trap_push (display);
           XConfigureWindow (display->xdisplay, event->xconfigurerequest.window,
                             xwcm, &xwc);
-          meta_error_trap_pop (display, FALSE);
+          meta_error_trap_pop (display);
         }
       else
         {
@@ -3148,7 +3148,7 @@ meta_spew_event (MetaDisplay *display,
         meta_error_trap_push (display);
         str = XGetAtomName (display->xdisplay,
                             event->xproperty.atom);
-        meta_error_trap_pop (display, TRUE);
+        meta_error_trap_pop (display);
 
         if (event->xproperty.state == PropertyNewValue)
           state = "PropertyNewValue";
@@ -3182,7 +3182,7 @@ meta_spew_event (MetaDisplay *display,
         meta_error_trap_push (display);
         str = XGetAtomName (display->xdisplay,
                             event->xclient.message_type);
-        meta_error_trap_pop (display, TRUE);
+        meta_error_trap_pop (display);
         extra = g_strdup_printf ("type: %s format: %d\n",
                                  str ? str : "(unknown atom)",
                                  event->xclient.format);
@@ -3460,7 +3460,7 @@ meta_display_set_grab_op_cursor (MetaDisplay *display,
       meta_topic (META_DEBUG_WINDOW_OPS,
                   "Changed pointer with XChangeActivePointerGrab()\n");
 
-      if (meta_error_trap_pop_with_return (display, FALSE) != Success)
+      if (meta_error_trap_pop_with_return (display) != Success)
         {
           meta_topic (META_DEBUG_WINDOW_OPS,
                       "Error trapped from XChangeActivePointerGrab()\n");
@@ -3493,7 +3493,7 @@ meta_display_set_grab_op_cursor (MetaDisplay *display,
                       "XGrabPointer() failed time %u\n",
                       timestamp);
         }
-      meta_error_trap_pop (display, TRUE);
+      meta_error_trap_pop (display);
     }
 
 #undef GRAB_MASK
@@ -3669,7 +3669,7 @@ meta_display_begin_grab_op (MetaDisplay *display,
                                                          XSyncCAEvents,
                                                          &values);
 
-          if (meta_error_trap_pop_with_return (display, FALSE) != Success)
+          if (meta_error_trap_pop_with_return (display) != Success)
 	    display->grab_sync_request_alarm = None;
 
           meta_topic (META_DEBUG_RESIZING,
@@ -3888,7 +3888,7 @@ meta_change_button_grab (MetaDisplay *display,
         {
           int result;
           
-          result = meta_error_trap_pop_with_return (display, FALSE);
+          result = meta_error_trap_pop_with_return (display);
           
           if (result != Success)
             meta_verbose ("Failed to %s button %d with mask 0x%x for window 0x%lx error code %d\n",
@@ -3899,7 +3899,7 @@ meta_change_button_grab (MetaDisplay *display,
       ++ignored_mask;
     }
 
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 }
 
 void
@@ -4083,7 +4083,7 @@ meta_display_update_active_window_hint (MetaDisplay *display)
                        XA_WINDOW,
                        32, PropModeReplace, (guchar*) data, 1);
 
-      meta_error_trap_pop (display, FALSE);
+      meta_error_trap_pop (display);
 
       tmp = tmp->next;
     }
@@ -4363,7 +4363,7 @@ process_request_frame_extents (MetaDisplay    *display,
                    display->atom__NET_FRAME_EXTENTS,
                    XA_CARDINAL,
                    32, PropModeReplace, (guchar*) data, 4);
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 
   meta_XFree (hints);
 }
@@ -4841,11 +4841,11 @@ convert_property (MetaDisplay *display,
 		     (unsigned char *)icccm_version, 2);
   else
     {
-      meta_error_trap_pop_with_return (display, FALSE);
+      meta_error_trap_pop_with_return (display);
       return FALSE;
     }
   
-  if (meta_error_trap_pop_with_return (display, FALSE) != Success)
+  if (meta_error_trap_pop_with_return (display) != Success)
     return FALSE;
 
   /* Be sure the PropertyNotify has arrived so we
@@ -4877,7 +4877,7 @@ process_selection_request (MetaDisplay   *display,
       meta_error_trap_push (display);
       str = XGetAtomName (display->xdisplay,
                           event->xselectionrequest.selection);
-      meta_error_trap_pop (display, TRUE);
+      meta_error_trap_pop (display);
       
       meta_verbose ("Selection request with selection %s window 0x%lx not a WM_Sn selection we recognize\n",
                     str ? str : "(bad atom)", event->xselectionrequest.owner);
@@ -4911,11 +4911,11 @@ process_selection_request (MetaDisplay   *display,
                                   display->atom_ATOM_PAIR,
                                   &type, &format, &num, &rest, &data) != Success)
             {
-              meta_error_trap_pop_with_return (display, TRUE);
+              meta_error_trap_pop_with_return (display);
               return;
             }
           
-          if (meta_error_trap_pop_with_return (display, TRUE) == Success)
+          if (meta_error_trap_pop_with_return (display) == Success)
             {              
               /* FIXME: to be 100% correct, should deal with rest > 0,
                * but since we have 4 possible targets, we will hardly ever
@@ -4938,7 +4938,7 @@ process_selection_request (MetaDisplay   *display,
                                event->xselectionrequest.property,
                                display->atom_ATOM_PAIR,
                                32, PropModeReplace, data, num);
-              meta_error_trap_pop (display, FALSE);
+              meta_error_trap_pop (display);
               meta_XFree (data);
             }
         }
@@ -4994,7 +4994,7 @@ process_selection_clear (MetaDisplay   *display,
     meta_error_trap_push (display);
     str = XGetAtomName (display->xdisplay,
                         event->xselectionclear.selection);
-    meta_error_trap_pop (display, TRUE);
+    meta_error_trap_pop (display);
 
     meta_verbose ("Selection clear with selection %s window 0x%lx not a WM_Sn selection we recognize\n",
                   str ? str : "(bad atom)", event->xselectionclear.window);
@@ -5366,7 +5366,7 @@ meta_display_set_input_focus_window (MetaDisplay *display,
                   focus_frame ? window->frame->xwindow : window->xwindow,
                   RevertToPointerRoot,
                   timestamp);
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 
   display->expected_focus_window = window;
   display->last_focus_time = timestamp;
diff --git a/src/core/errors.c b/src/core/errors.c
index 1f35e89..f5a95d7 100644
--- a/src/core/errors.c
+++ b/src/core/errors.c
@@ -28,7 +28,6 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <gdk/gdk.h>
-#include <gtk/gtk.h> /* Only for GTK_CHECK_VERSION */
 
 /* In GTK+-3.0, the error trapping code was significantly rewritten. The new code
  * has some neat features (like knowing automatically if a sync is needed or not
@@ -41,26 +40,6 @@
  * use the GTK+ handling straight-up.
  * (See https://bugzilla.gnome.org/show_bug.cgi?id=630216 for restoring logging.)
  */
-#if GTK_CHECK_VERSION(2, 90, 0)
-#define USE_GDK_ERROR_HANDLERS 1
-#endif
-
-#ifndef USE_GDK_ERROR_HANDLERS
-static int x_error_handler    (Display     *display,
-                               XErrorEvent *error);
-static int x_io_error_handler (Display     *display);
-#endif
-
-void
-meta_errors_init (void)
-{
-#ifndef USE_GDK_ERROR_HANDLERS
-  XSetErrorHandler (x_error_handler);
-  XSetIOErrorHandler (x_io_error_handler);
-#endif
-}
-
-#ifdef USE_GDK_ERROR_HANDLERS
 
 void
 meta_error_trap_push (MetaDisplay *display)
@@ -69,8 +48,7 @@ meta_error_trap_push (MetaDisplay *display)
 }
 
 void
-meta_error_trap_pop (MetaDisplay *display,
-                     gboolean     last_request_was_roundtrip)
+meta_error_trap_pop (MetaDisplay *display)
 {
   gdk_error_trap_pop_ignored ();
 }
@@ -82,220 +60,7 @@ meta_error_trap_push_with_return (MetaDisplay *display)
 }
 
 int
-meta_error_trap_pop_with_return  (MetaDisplay *display,
-                                  gboolean     last_request_was_roundtrip)
+meta_error_trap_pop_with_return  (MetaDisplay *display)
 {
   return gdk_error_trap_pop ();
 }
-
-#else /* !USE_GDK_ERROR_HANDLERS */
-
-static void
-meta_error_trap_push_internal (MetaDisplay *display,
-                               gboolean     need_sync)
-{
-  /* GDK resets the error handler on each push */
-  int (* old_error_handler) (Display     *,
-                             XErrorEvent *);
-
-  if (need_sync)
-    {
-      XSync (display->xdisplay, False);
-    }
-  
-  gdk_error_trap_push ();
-
-  /* old_error_handler will just be equal to x_error_handler
-   * for nested traps
-   */
-  old_error_handler = XSetErrorHandler (x_error_handler);
-  
-  /* Replace GDK handler, but save it so we can chain up */
-  if (display->error_trap_handler == NULL)
-    {
-      g_assert (display->error_traps == 0);
-      display->error_trap_handler = old_error_handler;
-      g_assert (display->error_trap_handler != x_error_handler);
-    }
-
-  display->error_traps += 1;
-
-  meta_topic (META_DEBUG_ERRORS, "%d traps remain\n", display->error_traps);
-}
-
-static int
-meta_error_trap_pop_internal  (MetaDisplay *display,
-                               gboolean     need_sync)
-{
-  int result;
-
-  g_assert (display->error_traps > 0);
-
-  if (need_sync)
-    {
-      XSync (display->xdisplay, False);
-    }
-
-  result = gdk_error_trap_pop ();
-
-  display->error_traps -= 1;
-  
-  if (display->error_traps == 0)
-    {
-      /* check that GDK put our handler back; this
-       * assumes that there are no pending GDK traps from GDK itself
-       */
-      
-      int (* restored_error_handler) (Display     *,
-                                      XErrorEvent *);
-
-      restored_error_handler = XSetErrorHandler (x_error_handler);
-
-      /* remove this */
-      display->error_trap_handler = NULL;
-    }
-
-  meta_topic (META_DEBUG_ERRORS, "%d traps\n", display->error_traps);
-  
-  return result;
-}
-
-void
-meta_error_trap_push (MetaDisplay *display)
-{
-  meta_error_trap_push_internal (display, FALSE);
-}
-
-void
-meta_error_trap_pop (MetaDisplay *display,
-                     gboolean     last_request_was_roundtrip)
-{
-  gboolean need_sync;
-
-  /* we only have to sync when popping the outermost trap */
-  need_sync = (display->error_traps == 1 && !last_request_was_roundtrip);
-
-  if (need_sync)
-    meta_topic (META_DEBUG_SYNC, "Syncing on error_trap_pop, traps = %d, roundtrip = %d\n",
-                display->error_traps, last_request_was_roundtrip);
-
-  display->error_trap_synced_at_last_pop = need_sync || last_request_was_roundtrip;
-  
-  meta_error_trap_pop_internal (display, need_sync);
-}
-
-void
-meta_error_trap_push_with_return (MetaDisplay *display)
-{
-  gboolean need_sync;
-
-  /* We don't sync on push_with_return if there are no traps
-   * currently, because we assume that any errors were either covered
-   * by a previous pop, or were fatal.
-   *
-   * More generally, we don't sync if we were synchronized last time
-   * we popped. This is known to be the case if there are no traps,
-   * but we also keep a flag so we know whether it's the case otherwise.
-   */
-
-  if (!display->error_trap_synced_at_last_pop)
-    need_sync = TRUE;
-  else
-    need_sync = FALSE;
-
-  if (need_sync)
-    meta_topic (META_DEBUG_SYNC, "Syncing on error_trap_push_with_return, traps = %d\n",
-                display->error_traps);
-  
-  meta_error_trap_push_internal (display, FALSE);
-}
-
-int
-meta_error_trap_pop_with_return  (MetaDisplay *display,
-                                  gboolean     last_request_was_roundtrip)
-{
-  if (!last_request_was_roundtrip)
-    meta_topic (META_DEBUG_SYNC, "Syncing on error_trap_pop_with_return, traps = %d, roundtrip = %d\n",
-                display->error_traps, last_request_was_roundtrip);
-
-  display->error_trap_synced_at_last_pop = TRUE;
-  
-  return meta_error_trap_pop_internal (display,
-                                       !last_request_was_roundtrip);
-}
-
-static int
-x_error_handler (Display     *xdisplay,
-                 XErrorEvent *error)
-{
-  int retval;
-  gchar buf[64];
-  MetaDisplay *display;
-
-  XGetErrorText (xdisplay, error->error_code, buf, 63);  
-
-  display = meta_display_for_x_display (xdisplay);
-
-  /* Display can be NULL here Xlib only has one global error handler; and
-   * there might be other displays open in the process.
-   */
-  if (display && display->error_traps > 0)
-    {
-      /* we're in an error trap, chain to the trap handler
-       * saved from GDK
-       */
-      meta_verbose ("X error: %s serial %ld error_code %d request_code %d minor_code %d)\n",
-                    buf,
-                    error->serial, 
-                    error->error_code, 
-                    error->request_code,
-                    error->minor_code);
-
-      g_assert (display->error_trap_handler != NULL);
-      g_assert (display->error_trap_handler != x_error_handler);
-      
-      retval = (* display->error_trap_handler) (xdisplay, error);
-    }
-  else
-    {
-      meta_bug ("Unexpected X error: %s serial %ld error_code %d request_code %d minor_code %d)\n",
-                buf,
-                error->serial, 
-                error->error_code, 
-                error->request_code,
-                error->minor_code);
-
-      retval = 1; /* compiler warning */
-    }
-
-  return retval;
-}
-
-static int
-x_io_error_handler (Display *xdisplay)
-{
-  MetaDisplay *display;
-
-  display = meta_display_for_x_display (xdisplay);
-
-  if (errno == EPIPE)
-    {
-      meta_warning (_("Lost connection to the display '%s';\n"
-                      "most likely the X server was shut down or you killed/destroyed\n"
-                      "the window manager.\n"),
-                    display ? display->name : DisplayString (xdisplay));
-    }
-  else
-    {
-      meta_warning (_("Fatal IO error %d (%s) on display '%s'.\n"),
-                    errno, g_strerror (errno),
-                    display ? display->name : DisplayString (xdisplay));
-    }
-
-  /* Xlib would force an exit anyhow */
-  exit (1);
-  
-  return 0;
-}
-
-#endif /* USE_GDK_ERROR_HANDLERS */
diff --git a/src/core/frame.c b/src/core/frame.c
index a8d0b1f..074d2cf 100644
--- a/src/core/frame.c
+++ b/src/core/frame.c
@@ -153,7 +153,7 @@ meta_window_ensure_frame (MetaWindow *window)
                    window->rect.x,
                    window->rect.y);
   /* FIXME handle this error */
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
   
   /* stick frame to the window */
   window->frame = frame;
@@ -217,7 +217,7 @@ meta_window_destroy_frame (MetaWindow *window)
                     */
                    window->frame->rect.x,
                    window->frame->rect.y);
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 
   meta_ui_destroy_frame_window (window->screen->ui, frame->xwindow);
 
diff --git a/src/core/iconcache.c b/src/core/iconcache.c
index 1b3690d..18ec9d9 100644
--- a/src/core/iconcache.c
+++ b/src/core/iconcache.c
@@ -241,7 +241,7 @@ read_rgb_icon (MetaDisplay   *display,
 			       0, G_MAXLONG,
 			       False, XA_CARDINAL, &type, &format, &nitems,
 			       &bytes_after, &data);
-  err = meta_error_trap_pop_with_return (display, TRUE);
+  err = meta_error_trap_pop_with_return (display);
 
   if (err != Success ||
       result != Success)
@@ -406,7 +406,7 @@ try_pixmap_and_mask (MetaDisplay *display,
                                               w, h);
     }
 
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 
   if (mask)
     {
@@ -482,7 +482,7 @@ get_kwm_win_icon (MetaDisplay *display,
 			       &bytes_after, &data);
   icons = (Pixmap *)data;
 
-  err = meta_error_trap_pop_with_return (display, TRUE);
+  err = meta_error_trap_pop_with_return (display);
   if (err != Success ||
       result != Success)
     return;
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 7712748..883c853 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -470,7 +470,7 @@ regrab_key_bindings (MetaDisplay *display)
       
       tmp = tmp->next;
     }
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 
   g_slist_free (windows);
 }
@@ -700,7 +700,7 @@ meta_change_keygrab (MetaDisplay *display,
         {
           int result;
           
-          result = meta_error_trap_pop_with_return (display, FALSE);
+          result = meta_error_trap_pop_with_return (display);
           
           if (grab && result != Success)
             {      
@@ -716,7 +716,7 @@ meta_change_keygrab (MetaDisplay *display,
       ++ignored_mask;
     }
 
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 }
 
 static void
@@ -758,7 +758,7 @@ grab_keys (MetaKeyBinding *bindings,
       ++i;
     }
 
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 }
 
 static void
@@ -777,14 +777,14 @@ ungrab_all_keys (MetaDisplay *display,
     {
       int result;
       
-      result = meta_error_trap_pop_with_return (display, FALSE);
+      result = meta_error_trap_pop_with_return (display);
       
       if (result != Success)    
         meta_topic (META_DEBUG_KEYBINDINGS,
                     "Ungrabbing all keys on 0x%lx failed\n", xwindow);
     }
   else
-    meta_error_trap_pop (display, FALSE);
+    meta_error_trap_pop (display);
 }
 
 void
@@ -916,7 +916,7 @@ grab_keyboard (MetaDisplay *display,
   
   if (grab_status != GrabSuccess)
     {
-      meta_error_trap_pop_with_return (display, TRUE);
+      meta_error_trap_pop_with_return (display);
       meta_topic (META_DEBUG_KEYBINDINGS,
                   "XGrabKeyboard() returned failure status %s time %u\n",
                   grab_status_to_string (grab_status),
@@ -925,7 +925,7 @@ grab_keyboard (MetaDisplay *display,
     }
   else
     {
-      result = meta_error_trap_pop_with_return (display, TRUE);
+      result = meta_error_trap_pop_with_return (display);
       if (result != Success)
         {
           meta_topic (META_DEBUG_KEYBINDINGS,
@@ -948,7 +948,7 @@ ungrab_keyboard (MetaDisplay *display, guint32 timestamp)
               "Ungrabbing keyboard with timestamp %u\n",
               timestamp);
   XUngrabKeyboard (display->xdisplay, timestamp);
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 }
 
 gboolean
@@ -2899,7 +2899,7 @@ handle_panel (MetaDisplay    *display,
 	      StructureNotifyMask,
 	      (XEvent*) &ev);
 
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 }
 
 static void
diff --git a/src/core/main.c b/src/core/main.c
index 19e41d9..0a4d06d 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -623,9 +623,6 @@ main (int argc, char **argv)
 
   g_option_context_free (ctx);
 
-  /* must be after UI init so we can override GDK handlers */
-  meta_errors_init ();
-
   /* Load prefs */
   meta_prefs_init ();
   meta_prefs_add_listener (prefs_changed_callback, NULL);
diff --git a/src/core/screen.c b/src/core/screen.c
index 02a7173..44377be 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -601,7 +601,7 @@ meta_screen_new (MetaDisplay *display,
       attrs.event_mask = StructureNotifyMask;
       XChangeWindowAttributes (xdisplay,
                                current_wm_sn_owner, CWEventMask, &attrs);
-      if (meta_error_trap_pop_with_return (display, FALSE) != Success)
+      if (meta_error_trap_pop_with_return (display) != Success)
         current_wm_sn_owner = None; /* don't wait for it to die later on */
     }
 
@@ -670,7 +670,7 @@ meta_screen_new (MetaDisplay *display,
                 KeyPressMask | KeyReleaseMask |
                 FocusChangeMask | StructureNotifyMask |
                 ExposureMask | attr.your_event_mask);
-  if (meta_error_trap_pop_with_return (display, FALSE) != Success)
+  if (meta_error_trap_pop_with_return (display) != Success)
     {
       meta_warning (_("Screen %d on display \"%s\" already has a window manager\n"),
                     number, display->name);
@@ -856,7 +856,7 @@ meta_screen_free (MetaScreen *screen,
 
   meta_error_trap_push_with_return (screen->display);
   XSelectInput (screen->display->xdisplay, screen->xroot, 0);
-  if (meta_error_trap_pop_with_return (screen->display, FALSE) != Success)
+  if (meta_error_trap_pop_with_return (screen->display) != Success)
     meta_warning (_("Could not release screen %d on display \"%s\"\n"),
                   screen->number, screen->display->name);
 
@@ -913,7 +913,7 @@ list_windows (MetaScreen *screen)
       XGetWindowAttributes (screen->display->xdisplay,
                             children[i], &info->attrs);
 
-      if (meta_error_trap_pop_with_return (screen->display, TRUE))
+      if (meta_error_trap_pop_with_return (screen->display))
 	{
           meta_verbose ("Failed to get attributes for window 0x%lx\n",
                         children[i]);
@@ -1220,7 +1220,7 @@ set_number_of_spaces_hint (MetaScreen *screen,
                    screen->display->atom__NET_NUMBER_OF_DESKTOPS,
                    XA_CARDINAL,
                    32, PropModeReplace, (guchar*) data, 1);
-  meta_error_trap_pop (screen->display, FALSE);
+  meta_error_trap_pop (screen->display);
 }
 
 static void
@@ -1241,7 +1241,7 @@ set_desktop_geometry_hint (MetaScreen *screen)
                    screen->display->atom__NET_DESKTOP_GEOMETRY,
                    XA_CARDINAL,
                    32, PropModeReplace, (guchar*) data, 2);
-  meta_error_trap_pop (screen->display, FALSE);
+  meta_error_trap_pop (screen->display);
 }
 
 static void
@@ -1265,7 +1265,7 @@ set_desktop_viewport_hint (MetaScreen *screen)
                    screen->display->atom__NET_DESKTOP_VIEWPORT,
                    XA_CARDINAL,
                    32, PropModeReplace, (guchar*) data, 2);
-  meta_error_trap_pop (screen->display, FALSE);
+  meta_error_trap_pop (screen->display);
 }
 
 void
@@ -1839,7 +1839,7 @@ meta_screen_get_mouse_window (MetaScreen  *screen,
                  &win_x_return,
                  &win_y_return,
                  &mask_return);
-  meta_error_trap_pop (screen->display, TRUE);
+  meta_error_trap_pop (screen->display);
 
   window = meta_stack_get_default_focus_window_at_point (screen->stack,
                                                          screen->active_workspace,
@@ -2242,7 +2242,7 @@ set_workspace_names (MetaScreen *screen)
 		   screen->display->atom_UTF8_STRING,
                    8, PropModeReplace,
 		   (unsigned char *)flattened->str, flattened->len);
-  meta_error_trap_pop (screen->display, FALSE);
+  meta_error_trap_pop (screen->display);
   
   g_string_free (flattened, TRUE);
 }
@@ -2346,7 +2346,7 @@ set_work_area_hint (MetaScreen *screen)
 		   XA_CARDINAL, 32, PropModeReplace,
 		   (guchar*) data, num_workspaces*4);
   g_free (data);
-  meta_error_trap_pop (screen->display, FALSE);
+  meta_error_trap_pop (screen->display);
 
   g_signal_emit (screen, screen_signals[WORKAREAS_CHANGED], 0);
 }
@@ -2721,7 +2721,7 @@ meta_screen_update_showing_desktop_hint (MetaScreen *screen)
                    screen->display->atom__NET_SHOWING_DESKTOP,
                    XA_CARDINAL,
                    32, PropModeReplace, (guchar*) data, 1);
-  meta_error_trap_pop (screen->display, FALSE);
+  meta_error_trap_pop (screen->display);
 }
 
 static void
diff --git a/src/core/stack.c b/src/core/stack.c
index 706e85b..1aecc37 100644
--- a/src/core/stack.c
+++ b/src/core/stack.c
@@ -1026,7 +1026,7 @@ raise_window_relative_to_managed_windows (MetaScreen *screen,
                                 xwindow,
                                 CWSibling | CWStackMode,
                                 &changes);
-              meta_error_trap_pop (screen->display, FALSE);
+              meta_error_trap_pop (screen->display);
 
               break;
             }
@@ -1046,7 +1046,7 @@ raise_window_relative_to_managed_windows (MetaScreen *screen,
                                        XNextRequest (screen->display->xdisplay));
       XLowerWindow (screen->display->xdisplay,
                     xwindow);
-      meta_error_trap_pop (screen->display, FALSE);
+      meta_error_trap_pop (screen->display);
     }
 }
 
@@ -1267,7 +1267,7 @@ stack_sync_to_server (MetaStack *stack)
 		   all_hidden->len);
   g_array_free (all_hidden, TRUE);
 
-  meta_error_trap_pop (stack->screen->display, FALSE);
+  meta_error_trap_pop (stack->screen->display);
   /* on error, a window was destroyed; it should eventually
    * get removed from the stacking list when we unmanage it
    * and we'll fix stacking at that time.
diff --git a/src/core/window-props.c b/src/core/window-props.c
index e601215..ce578ff 100644
--- a/src/core/window-props.c
+++ b/src/core/window-props.c
@@ -442,7 +442,7 @@ set_title_text (MetaWindow  *window,
       XDeleteProperty (window->display->xdisplay,
                        window->xwindow,
                        atom);
-      meta_error_trap_pop (window->display, FALSE);
+      meta_error_trap_pop (window->display);
     }
 
   return modified;
diff --git a/src/core/window.c b/src/core/window.c
index 26942b6..8fd342c 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -484,11 +484,11 @@ meta_window_new (MetaDisplay *display,
 
   if (XGetWindowAttributes (display->xdisplay,xwindow, &attrs))
    {
-      if(meta_error_trap_pop_with_return (display, TRUE) != Success)
+      if(meta_error_trap_pop_with_return (display) != Success)
        {
           meta_verbose ("Failed to get attributes for window 0x%lx\n",
                         xwindow);
-          meta_error_trap_pop (display, TRUE);
+          meta_error_trap_pop (display);
           meta_display_ungrab (display);
           return NULL;
        }
@@ -499,16 +499,16 @@ meta_window_new (MetaDisplay *display,
    }
   else
    {
-         meta_error_trap_pop_with_return (display, TRUE);
+         meta_error_trap_pop_with_return (display);
          meta_verbose ("Failed to get attributes for window 0x%lx\n",
                         xwindow);
-         meta_error_trap_pop (display, TRUE);
+         meta_error_trap_pop (display);
          meta_display_ungrab (display);
          return NULL;
    }
 
 
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
   meta_display_ungrab (display);
 
   return window;
@@ -607,7 +607,7 @@ meta_window_new_with_attrs (MetaDisplay       *display,
             (state == IconicState || state == NormalState)))
         {
           meta_verbose ("Deciding not to manage unmapped or unviewable window 0x%lx\n", xwindow);
-          meta_error_trap_pop (display, TRUE);
+          meta_error_trap_pop (display);
           meta_display_ungrab (display);
           return NULL;
         }
@@ -629,7 +629,7 @@ meta_window_new_with_attrs (MetaDisplay       *display,
    */
   meta_error_trap_push_with_return (display);
   XAddToSaveSet (display->xdisplay, xwindow);
-  meta_error_trap_pop_with_return (display, FALSE);
+  meta_error_trap_pop_with_return (display);
 
   event_mask =
     PropertyChangeMask | EnterWindowMask | LeaveWindowMask |
@@ -685,11 +685,11 @@ meta_window_new_with_attrs (MetaDisplay       *display,
                                &set_attrs);
     }
 
-  if (meta_error_trap_pop_with_return (display, FALSE) != Success)
+  if (meta_error_trap_pop_with_return (display) != Success)
     {
       meta_verbose ("Window 0x%lx disappeared just as we tried to manage it\n",
                     xwindow);
-      meta_error_trap_pop (display, FALSE);
+      meta_error_trap_pop (display);
       meta_display_ungrab (display);
       return NULL;
     }
@@ -1162,7 +1162,7 @@ meta_window_new_with_attrs (MetaDisplay       *display,
       !window->initially_iconic)
     unminimize_window_and_all_transient_parents (window);
 
-  meta_error_trap_pop (display, FALSE); /* pop the XSync()-reducing trap */
+  meta_error_trap_pop (display); /* pop the XSync()-reducing trap */
   meta_display_ungrab (display);
 
   window->constructing = FALSE;
@@ -1482,7 +1482,7 @@ meta_window_unmanage (MetaWindow  *window,
                        window->xwindow,
                        window->display->atom__NET_WM_FULLSCREEN_MONITORS);
       set_wm_state (window, WithdrawnState);
-      meta_error_trap_pop (window->display, FALSE);
+      meta_error_trap_pop (window->display);
     }
   else
     {
@@ -1493,7 +1493,7 @@ meta_window_unmanage (MetaWindow  *window,
         {
           meta_error_trap_push (window->display);
           set_wm_state (window, NormalState);
-          meta_error_trap_pop (window->display, FALSE);
+          meta_error_trap_pop (window->display);
         }
 
       /* And we need to be sure the window is mapped so other WMs
@@ -1502,7 +1502,7 @@ meta_window_unmanage (MetaWindow  *window,
       meta_error_trap_push (window->display);
       XMapWindow (window->display->xdisplay,
                   window->xwindow);
-      meta_error_trap_pop (window->display, FALSE);
+      meta_error_trap_pop (window->display);
     }
 
   meta_window_ungrab_keys (window);
@@ -1550,7 +1550,7 @@ meta_window_unmanage (MetaWindow  *window,
     XShapeSelectInput (window->display->xdisplay, window->xwindow, NoEventMask);
 #endif
 
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 
   g_signal_emit (window, window_signals[UNMANAGED], 0);
 
@@ -1577,7 +1577,7 @@ set_wm_state (MetaWindow *window,
                    window->display->atom_WM_STATE,
                    window->display->atom_WM_STATE,
                    32, PropModeReplace, (guchar*) data, 2);
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 }
 
 static void
@@ -1655,7 +1655,7 @@ set_net_wm_state (MetaWindow *window)
                    window->display->atom__NET_WM_STATE,
                    XA_ATOM,
                    32, PropModeReplace, (guchar*) data, i);
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 
   if (window->fullscreen)
     {
@@ -1671,7 +1671,7 @@ set_net_wm_state (MetaWindow *window)
                        window->display->atom__NET_WM_FULLSCREEN_MONITORS,
                        XA_CARDINAL, 32, PropModeReplace,
                        (guchar*) data, 4);
-      meta_error_trap_pop (window->display, FALSE);
+      meta_error_trap_pop (window->display);
     }
 }
 
@@ -2414,7 +2414,7 @@ map_client_window (MetaWindow *window)
       window->mapped = TRUE;
       meta_error_trap_push (window->display);
       XMapWindow (window->display->xdisplay, window->xwindow);
-      meta_error_trap_pop (window->display, FALSE);
+      meta_error_trap_pop (window->display);
 
       return TRUE;
     }
@@ -2438,7 +2438,7 @@ unmap_client_window (MetaWindow *window,
       window->unmaps_pending += 1;
       meta_error_trap_push (window->display);
       XUnmapWindow (window->display->xdisplay, window->xwindow);
-      meta_error_trap_pop (window->display, FALSE);
+      meta_error_trap_pop (window->display);
 
       return TRUE;
     }
@@ -4323,7 +4323,7 @@ meta_window_move_resize_internal (MetaWindow          *window,
                         mask,
                         &values);
 
-      meta_error_trap_pop (window->display, FALSE);
+      meta_error_trap_pop (window->display);
     }
 
   if (!configure_frame_first && window->frame)
@@ -5026,7 +5026,7 @@ update_net_frame_extents (MetaWindow *window)
                    window->display->atom__NET_FRAME_EXTENTS,
                    XA_CARDINAL,
                    32, PropModeReplace, (guchar*) data, 4);
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 }
 
 void
@@ -5053,7 +5053,7 @@ meta_window_set_current_workspace_hint (MetaWindow *window)
                    window->display->atom__NET_WM_DESKTOP,
                    XA_CARDINAL,
                    32, PropModeReplace, (guchar*) data, 1);
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 }
 
 static gboolean
@@ -5178,7 +5178,7 @@ meta_window_send_icccm_message (MetaWindow *window,
     meta_error_trap_push (window->display);
     XSendEvent (window->display->xdisplay,
                 window->xwindow, False, 0, (XEvent*) &ev);
-    meta_error_trap_pop (window->display, FALSE);
+    meta_error_trap_pop (window->display);
 }
 
 void
@@ -5583,12 +5583,12 @@ meta_window_client_message (MetaWindow *window,
 
           meta_error_trap_push_with_return (display);
           str1 = XGetAtomName (display->xdisplay, first);
-          if (meta_error_trap_pop_with_return (display, TRUE) != Success)
+          if (meta_error_trap_pop_with_return (display) != Success)
             str1 = NULL;
 
           meta_error_trap_push_with_return (display);
           str2 = XGetAtomName (display->xdisplay, second);
-          if (meta_error_trap_pop_with_return (display, TRUE) != Success)
+          if (meta_error_trap_pop_with_return (display) != Success)
             str2 = NULL;
 
           meta_verbose ("Request to change _NET_WM_STATE action %lu atom1: %s atom2: %s\n",
@@ -5876,7 +5876,7 @@ meta_window_client_message (MetaWindow *window,
                              &query_root_x, &query_root_y,
                              &x, &y,
                              &mask);
-              meta_error_trap_pop (window->display, TRUE);
+              meta_error_trap_pop (window->display);
 
               if (mask & Button1Mask)
                 button = 1;
@@ -6112,7 +6112,7 @@ meta_window_notify_focus (MetaWindow *window,
           meta_error_trap_push (window->display);
           XInstallColormap (window->display->xdisplay,
                             window->colormap);
-          meta_error_trap_pop (window->display, FALSE);
+          meta_error_trap_pop (window->display);
 
           /* move into FOCUSED_WINDOW layer */
           meta_window_update_layer (window);
@@ -6175,7 +6175,7 @@ meta_window_notify_focus (MetaWindow *window,
           meta_error_trap_push (window->display);
           XUninstallColormap (window->display->xdisplay,
                               window->colormap);
-          meta_error_trap_pop (window->display, FALSE);
+          meta_error_trap_pop (window->display);
 
           /* move out of FOCUSED_WINDOW layer */
           meta_window_update_layer (window);
@@ -6266,7 +6266,7 @@ send_configure_notify (MetaWindow *window)
   XSendEvent (window->display->xdisplay,
               window->xwindow,
               False, StructureNotifyMask, &event);
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 }
 
 /* FIXME: @rect should be marked (out), but gjs doesn't currently support
@@ -6502,7 +6502,7 @@ meta_window_update_net_wm_type (MetaWindow *window)
         {
           meta_error_trap_push (window->display);
           str = XGetAtomName (window->display->xdisplay, window->type_atom);
-          meta_error_trap_pop (window->display, TRUE);
+          meta_error_trap_pop (window->display);
         }
 
       meta_verbose ("Window %s type atom %s\n", window->desc,
@@ -6863,7 +6863,7 @@ recalc_window_type (MetaWindow *window)
           meta_error_trap_push (window->display);
           atom_name = XGetAtomName (window->display->xdisplay,
                                     window->type_atom);
-          meta_error_trap_pop (window->display, TRUE);
+          meta_error_trap_pop (window->display);
 
           meta_warning ("Unrecognized type atom [%s] set for %s \n",
                         atom_name ? atom_name : "unknown",
@@ -7021,7 +7021,7 @@ set_allowed_actions_hint (MetaWindow *window)
                    window->display->atom__NET_WM_ALLOWED_ACTIONS,
                    XA_ATOM,
                    32, PropModeReplace, (guchar*) data, i);
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 #undef MAX_N_ACTIONS
 }
 
@@ -8493,7 +8493,7 @@ meta_window_set_gravity (MetaWindow *window,
                            CWWinGravity,
                            &attrs);
 
-  meta_error_trap_pop (window->display, FALSE);
+  meta_error_trap_pop (window->display);
 }
 
 static void
@@ -8937,7 +8937,7 @@ warp_grab_pointer (MetaWindow          *window,
                 0, 0, 0, 0,
                 *x, *y);
 
-  if (meta_error_trap_pop_with_return (display, FALSE) != Success)
+  if (meta_error_trap_pop_with_return (display) != Success)
     {
       meta_verbose ("Failed to warp pointer for window %s\n",
                     window->desc);
diff --git a/src/core/workspace.c b/src/core/workspace.c
index 8ec9c76..67a4d23 100644
--- a/src/core/workspace.c
+++ b/src/core/workspace.c
@@ -765,7 +765,7 @@ set_active_space_hint (MetaScreen *screen)
                    screen->display->atom__NET_CURRENT_DESKTOP,
                    XA_CARDINAL,
                    32, PropModeReplace, (guchar*) data, 1);
-  meta_error_trap_pop (screen->display, FALSE);
+  meta_error_trap_pop (screen->display);
 }
 
 void
diff --git a/src/core/xprops.c b/src/core/xprops.c
index 332dec0..306f0f1 100644
--- a/src/core/xprops.c
+++ b/src/core/xprops.c
@@ -126,7 +126,7 @@ validate_or_free_results (GetPropertyResults *results,
   type_name = XGetAtomName (results->display->xdisplay, results->type);
   expected_name = XGetAtomName (results->display->xdisplay, expected_type);
   prop_name = XGetAtomName (results->display->xdisplay, results->xatom);
-  meta_error_trap_pop (results->display, TRUE);
+  meta_error_trap_pop (results->display);
 
   w = meta_display_lookup_x_window (results->display, results->xwindow);
 
@@ -204,11 +204,11 @@ get_property (MetaDisplay        *display,
     {
       if (results->prop)
         XFree (results->prop);
-      meta_error_trap_pop_with_return (display, TRUE);
+      meta_error_trap_pop_with_return (display);
       return FALSE;
     }
 
-  if (meta_error_trap_pop_with_return (display, TRUE) != Success)
+  if (meta_error_trap_pop_with_return (display) != Success)
     {
       if (results->prop)
         XFree (results->prop);
@@ -490,7 +490,7 @@ utf8_list_from_results (GetPropertyResults *results,
 
           meta_error_trap_push (results->display);
           name = XGetAtomName (results->display->xdisplay, results->xatom);
-          meta_error_trap_pop (results->display, TRUE);
+          meta_error_trap_pop (results->display);
           meta_warning (_("Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"),
                         name, results->xwindow, i);
           meta_XFree (name);
@@ -547,7 +547,7 @@ meta_prop_set_utf8_string_hint (MetaDisplay *display,
                    xwindow, atom,
                    display->atom_UTF8_STRING, 
                    8, PropModeReplace, (guchar*) val, strlen (val));
-  meta_error_trap_pop (display, FALSE);
+  meta_error_trap_pop (display);
 }
 
 static gboolean
diff --git a/src/include/errors.h b/src/include/errors.h
index f15f26d..6aa57ec 100644
--- a/src/include/errors.h
+++ b/src/include/errors.h
@@ -29,16 +29,12 @@
 #include "util.h"
 #include "display.h"
 
-void      meta_errors_init     (void);
-
 void      meta_error_trap_push (MetaDisplay *display);
-void      meta_error_trap_pop  (MetaDisplay *display,
-                                gboolean     last_request_was_roundtrip);
+void      meta_error_trap_pop  (MetaDisplay *display);
 
 void      meta_error_trap_push_with_return (MetaDisplay *display);
 /* returns X error code, or 0 for no error */
-int       meta_error_trap_pop_with_return  (MetaDisplay *display,
-                                            gboolean     last_request_was_roundtrip);
+int       meta_error_trap_pop_with_return  (MetaDisplay *display);
 
 
 #endif
diff --git a/src/libmutter-private.pc.in b/src/libmutter-private.pc.in
index 117a34b..3b986dc 100644
--- a/src/libmutter-private.pc.in
+++ b/src/libmutter-private.pc.in
@@ -6,7 +6,7 @@ libgnome_serverdir= libexecdir@
 
 Name: libmutter-private
 Description: Mutter internals shared
-Requires: gtk+- GTK_API_VERSION@
+Requires: gtk+-3.0
 Version: @VERSION@
 Libs: -L${libdir} -lmutter-private
 Cflags: -I${includedir}/mutter
diff --git a/src/tools/mutter-mag.c b/src/tools/mutter-mag.c
index a271145..3394d0f 100644
--- a/src/tools/mutter-mag.c
+++ b/src/tools/mutter-mag.c
@@ -29,8 +29,6 @@
 #include <stdlib.h>
 #include <math.h>
 
-#include "gdk-compat.h"
-
 static GtkWidget *grab_widget = NULL;
 static GtkWidget *display_window = NULL;
 static int last_grab_x = 0;
diff --git a/src/tools/mutter-window-demo.c b/src/tools/mutter-window-demo.c
index aa91f05..5e8c5ca 100644
--- a/src/tools/mutter-window-demo.c
+++ b/src/tools/mutter-window-demo.c
@@ -24,8 +24,6 @@
 #include <X11/Xatom.h>
 #include <unistd.h>
 
-#include "gtk-compat.h"
-
 static GtkWidget* do_appwindow (void);
 
 static gboolean aspect_on;
diff --git a/src/ui/fixedtip.c b/src/ui/fixedtip.c
index 0afc8c6..a9a14fc 100644
--- a/src/ui/fixedtip.c
+++ b/src/ui/fixedtip.c
@@ -25,8 +25,6 @@
 #include "fixedtip.h"
 #include "ui.h"
 
-#include "gdk2-drawing-utils.h"
-
 /**
  * The floating rectangle.  This is a GtkWindow, and it contains
  * the "label" widget, below.
@@ -52,7 +50,6 @@ static int screen_right_edge = 0;
  */
 static int screen_bottom_edge = 0;
 
-#ifdef USE_GTK3
 static gboolean
 draw_handler (GtkWidget *tooltips,
               cairo_t   *cr,
@@ -68,21 +65,6 @@ draw_handler (GtkWidget *tooltips,
 
   return FALSE;
 }
-#else /* !USE_GTK3 */
-static gint
-expose_handler (GtkWidget      *tooltips,
-                GdkEventExpose *event,
-                gpointer        user_data)
-{
-  gtk_paint_flat_box (gtk_widget_get_style (tip),
-                      gtk_widget_get_window (tip),
-                      GTK_STATE_NORMAL, GTK_SHADOW_OUT, 
-                      NULL, tip, "tooltip",
-                      0, 0, -1, -1);
-
-  return FALSE;
-}
-#endif /* !USE_GTK3 */
 
 void
 meta_fixed_tip_show (Display *xdisplay, int screen_number,
@@ -116,13 +98,8 @@ meta_fixed_tip_show (Display *xdisplay, int screen_number,
       gtk_widget_set_name (tip, "gtk-tooltips");
       gtk_container_set_border_width (GTK_CONTAINER (tip), 4);
 
-#ifdef USE_GTK3
       g_signal_connect (tip, "draw",
                         G_CALLBACK (draw_handler), NULL);
-#else
-      g_signal_connect (tip, "expose_event",
-                        G_CALLBACK (expose_handler), NULL);
-#endif
 
       label = gtk_label_new (NULL);
       gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 156bcc9..b98744b 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -35,10 +35,6 @@
 #include "prefs.h"
 #include "ui.h"
 
-#include "gdk2-drawing-utils.h"
-#include "gtk-compat.h"
-#include "gdk-compat.h"
-
 #include <cairo-xlib.h>
 
 #ifdef HAVE_SHAPE
@@ -47,11 +43,7 @@
 
 #define DEFAULT_INNER_BUTTON_BORDER 3
 
-#ifdef USE_GTK3
 static void meta_frames_destroy    (GtkWidget       *object);
-#else
-static void meta_frames_destroy    (GtkObject       *object);
-#endif
 static void meta_frames_finalize   (GObject         *object);
 static void meta_frames_style_set  (GtkWidget       *widget,
                                     GtkStyle        *prev_style);
@@ -69,13 +61,8 @@ static gboolean meta_frames_motion_notify_event   (GtkWidget           *widget,
                                                    GdkEventMotion      *event);
 static gboolean meta_frames_destroy_event         (GtkWidget           *widget,
                                                    GdkEventAny         *event);
-#ifdef USE_GTK3
 static gboolean meta_frames_draw                  (GtkWidget           *widget,
                                                    cairo_t             *cr);
-#else
-static gboolean meta_frames_expose_event          (GtkWidget           *widget,
-                                                   GdkEventExpose      *event);
-#endif
 static gboolean meta_frames_enter_notify_event    (GtkWidget           *widget,
                                                    GdkEventCrossing    *event);
 static gboolean meta_frames_leave_notify_event    (GtkWidget           *widget,
@@ -148,22 +135,14 @@ meta_frames_class_init (MetaFramesClass *class)
   gobject_class->constructor = meta_frames_constructor;
   gobject_class->finalize = meta_frames_finalize;
 
-#ifdef USE_GTK3
   widget_class->destroy = meta_frames_destroy;
-#else
-  GTK_OBJECT_CLASS (class)->destroy = meta_frames_destroy;
-#endif
 
   widget_class->style_set = meta_frames_style_set;
 
   widget_class->map = meta_frames_map;
   widget_class->unmap = meta_frames_unmap;
   
-#ifdef USE_GTK3
   widget_class->draw = meta_frames_draw;
-#else
-  widget_class->expose_event = meta_frames_expose_event;
-#endif
   widget_class->destroy_event = meta_frames_destroy_event;  
   widget_class->button_press_event = meta_frames_button_press_event;
   widget_class->button_release_event = meta_frames_button_release_event;
@@ -238,13 +217,8 @@ listify_func (gpointer key, gpointer value, gpointer data)
   *listp = g_slist_prepend (*listp, value);
 }
 
-#ifdef USE_GTK3
 static void
 meta_frames_destroy (GtkWidget *object)
-#else
-static void
-meta_frames_destroy (GtkObject *object)
-#endif
 {
   GSList *winlist;
   GSList *tmp;
@@ -268,11 +242,7 @@ meta_frames_destroy (GtkObject *object)
     }
   g_slist_free (winlist);
 
-#ifdef USE_GTK3
   GTK_WIDGET_CLASS (meta_frames_parent_class)->destroy (object);
-#else
-  GTK_OBJECT_CLASS (meta_frames_parent_class)->destroy (object);
-#endif
 }
 
 static void
@@ -300,7 +270,7 @@ meta_frames_finalize (GObject *object)
 typedef struct
 {
   cairo_rectangle_int_t rect;
-  MetaPixmap *pixmap;
+  cairo_surface_t *pixmap;
 } CachedFramePiece;
 
 typedef struct
@@ -337,7 +307,7 @@ invalidate_cache (MetaFrames *frames,
   
   for (i = 0; i < 4; i++)
     if (pixels->piece[i].pixmap)
-      meta_pixmap_free (pixels->piece[i].pixmap);
+      cairo_surface_destroy (pixels->piece[i].pixmap);
   
   g_free (pixels);
   g_hash_table_remove (frames->cache, frame);
@@ -2036,53 +2006,6 @@ meta_frames_destroy_event           (GtkWidget           *widget,
   return TRUE;
 }
 
-#if !GTK_CHECK_VERSION(2,21,6)
-/* Copied from GDK */
-static cairo_surface_t *
-_gdk_drawable_ref_cairo_surface (GdkDrawable *drawable)
-{
-  g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
-
-  return GDK_DRAWABLE_GET_CLASS (drawable)->ref_cairo_surface (drawable);
-}
-
-static cairo_pattern_t *
-gdk_window_get_background_pattern (GdkWindow *window)
-{
-  GdkWindowObject *private = (GdkWindowObject *) window;
-  cairo_pattern_t *pattern;
-
-  g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
-
-  if (private->bg_pixmap == GDK_PARENT_RELATIVE_BG)
-    pattern = NULL;
-  else if (private->bg_pixmap != GDK_NO_BG &&
-           private->bg_pixmap != NULL)
-    {
-      static cairo_user_data_key_t key;
-      cairo_surface_t *surface;
-
-      surface = _gdk_drawable_ref_cairo_surface (private->bg_pixmap);
-      pattern = cairo_pattern_create_for_surface (surface);
-      cairo_surface_destroy (surface);
-
-      cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
-      cairo_pattern_set_user_data (pattern,
-                                   &key,
-                                   g_object_ref (private->bg_pixmap),
-                                   g_object_unref);
-    }
-  else
-    {
-      pattern =
-        cairo_pattern_create_rgb (private->bg_color.red   / 65535.,
-                                  private->bg_color.green / 65535.,
-                                  private->bg_color.blue / 65535.);
-    }
-
-  return pattern;
-}
-#endif
 
 static void
 setup_bg_cr (cairo_t *cr, GdkWindow *window, int x_offset, int y_offset)
@@ -2109,22 +2032,23 @@ setup_bg_cr (cairo_t *cr, GdkWindow *window, int x_offset, int y_offset)
 /* Returns a pixmap with a piece of the windows frame painted on it.
 */
 
-static MetaPixmap *
+static cairo_surface_t *
 generate_pixmap (MetaFrames            *frames,
                  MetaUIFrame           *frame,
                  cairo_rectangle_int_t *rect)
 {
-  MetaPixmap *result;
+  cairo_surface_t *result;
   cairo_t *cr;
 
   /* do not create a pixmap for nonexisting areas */
   if (rect->width <= 0 || rect->height <= 0)
     return NULL;
 
-  result = meta_pixmap_new (frame->window,
-                            rect->width, rect->height);
+  result = gdk_window_create_similar_surface (frame->window,
+                                              CAIRO_CONTENT_COLOR,
+                                              rect->width, rect->height);
   
-  cr = meta_pixmap_cairo_create (result);
+  cr = cairo_create (result);
   cairo_translate (cr, -rect->x, -rect->y);
 
   setup_bg_cr (cr, frame->window, 0, 0);
@@ -2295,8 +2219,8 @@ cached_pixels_draw (CachedPixels   *pixels,
       
       if (piece->pixmap)
         {
-          meta_cairo_set_source_pixmap (cr, piece->pixmap,
-                                        piece->rect.x, piece->rect.y);
+          cairo_set_source_surface (cr, piece->pixmap,
+                                    piece->rect.x, piece->rect.y);
           cairo_paint (cr);
           
           region_piece = cairo_region_create_rectangle (&piece->rect);
@@ -2306,7 +2230,6 @@ cached_pixels_draw (CachedPixels   *pixels,
     }
 }
 
-#ifdef USE_GTK3
 static gboolean
 meta_frames_draw (GtkWidget *widget,
                   cairo_t   *cr)
@@ -2373,75 +2296,6 @@ meta_frames_draw (GtkWidget *widget,
   
   return TRUE;
 }
-#else /* !USE_GTK3 */
-static gboolean
-meta_frames_expose_event (GtkWidget           *widget,
-                          GdkEventExpose      *event)
-{
-  MetaUIFrame *frame;
-  MetaFrames *frames;
-  CachedPixels *pixels;
-  cairo_region_t *region;
-  int i, n_areas;
-  GdkRectangle *event_rectangles;
-  int n_event_rectangles;
-  cairo_t *cr;
-
-  frames = META_FRAMES (widget);
-
-  frame = meta_frames_lookup_window (frames, GDK_WINDOW_XID (event->window));
-  if (frame == NULL)
-    return FALSE;
-
-  if (frames->expose_delay_count > 0)
-    {
-      /* Redraw this entire frame later */
-      frame->expose_delayed = TRUE;
-      return TRUE;
-    }
-
-  populate_cache (frames, frame);
-
-  /* Count on GdkRectangle and cairo_rectangle_int_t being identical */
-  gdk_region_get_rectangles (event->region, &event_rectangles, &n_event_rectangles);
-  region = cairo_region_create_rectangles ((cairo_rectangle_int_t *)event_rectangles,
-                                           n_event_rectangles);
-  g_free (event_rectangles);
-  
-  pixels = get_cache (frames, frame);
-
-  cr = gdk_cairo_create (event->window);
-  cached_pixels_draw (pixels, cr, region);
-  cairo_destroy (cr);
-  
-  clip_to_screen (region, frame);
-  subtract_client_area (region, frame);
-
-  n_areas = cairo_region_num_rectangles (region);
-
-  for (i = 0; i < n_areas; i++)
-    {
-      GdkRectangle area;
-
-      /* Count on GdkRectangle and cairo_rectangle_int_t being identical */
-      cairo_region_get_rectangle (region, i, (cairo_rectangle_int_t *)&area);
-
-      gdk_window_begin_paint_rect (event->window, &area);
-      cr = gdk_cairo_create (event->window);
-      /* no need to clip, begin_paint_region ensures the pixmap
-       * is only as big as the rect we use. */
-
-      meta_frames_paint (frames, frame, cr);
-
-      cairo_destroy (cr);
-      gdk_window_end_paint (event->window);
-    }
-
-  cairo_region_destroy (region);
-  
-  return TRUE;
-}
-#endif /* !USE_GTK3 */
 
 static void
 meta_frames_paint (MetaFrames   *frames,
diff --git a/src/ui/menu.c b/src/ui/menu.c
index d3bfd35..02f14d8 100644
--- a/src/ui/menu.c
+++ b/src/ui/menu.c
@@ -33,8 +33,6 @@
 #include "metaaccellabel.h"
 #include "ui.h"
 
-#include "gdk-compat.h"
-
 typedef struct _MenuItem MenuItem;
 typedef struct _MenuData MenuData;
 
diff --git a/src/ui/metaaccellabel.c b/src/ui/metaaccellabel.c
index 28ef80e..6883c71 100644
--- a/src/ui/metaaccellabel.c
+++ b/src/ui/metaaccellabel.c
@@ -37,24 +37,12 @@
 #include <string.h>
 #include "util.h"
 
-#include "gtk-compat.h"
-#include "gdk2-drawing-utils.h"
-
-#ifdef USE_GTK3
 static void     meta_accel_label_destroy      (GtkWidget           *object);
-#else
-static void     meta_accel_label_destroy      (GtkObject           *object);
-#endif
 static void     meta_accel_label_finalize     (GObject             *object);
 static void     meta_accel_label_size_request (GtkWidget           *widget,
                                                GtkRequisition      *requisition);
-#ifdef USE_GTK3
 static gboolean meta_accel_label_draw         (GtkWidget           *widget,
                                                cairo_t             *cr);
-#else
-static gboolean meta_accel_label_expose_event (GtkWidget           *widget,
-                                               GdkEventExpose      *event);
-#endif
 
 static void  meta_accel_label_update          (MetaAccelLabel *accel_label);
 static int   meta_accel_label_get_accel_width (MetaAccelLabel *accel_label);
@@ -69,18 +57,10 @@ meta_accel_label_class_init (MetaAccelLabelClass *class)
 
   gobject_class->finalize = meta_accel_label_finalize;
 
-#ifdef USE_GTK3
   widget_class->destroy = meta_accel_label_destroy;
-#else
-  GTK_OBJECT_CLASS (class)->destroy = meta_accel_label_destroy;
-#endif
 
   widget_class->size_request = meta_accel_label_size_request;
-#ifdef USE_GTK3
   widget_class->draw = meta_accel_label_draw;
-#else
-  widget_class->expose_event = meta_accel_label_expose_event;
-#endif
 
   class->signal_quote1 = g_strdup ("<:");
   class->signal_quote2 = g_strdup (":>");
@@ -173,13 +153,8 @@ meta_accel_label_new_with_mnemonic (const gchar *string)
   return GTK_WIDGET (accel_label);
 }
 
-#ifdef USE_GTK3
 static void
 meta_accel_label_destroy (GtkWidget *object)
-#else
-static void
-meta_accel_label_destroy (GtkObject *object)
-#endif
 {
   MetaAccelLabel *accel_label = META_ACCEL_LABEL (object);
 
@@ -190,11 +165,7 @@ meta_accel_label_destroy (GtkObject *object)
   accel_label->accel_mods = 0;
   accel_label->accel_key = 0;
 
-#ifdef USE_GTK3
   GTK_WIDGET_CLASS (meta_accel_label_parent_class)->destroy (object);
-#else
-  GTK_OBJECT_CLASS (meta_accel_label_parent_class)->destroy (object);
-#endif
 }
 
 static void
@@ -251,7 +222,6 @@ meta_accel_label_size_request (GtkWidget	     *widget,
   g_object_unref (G_OBJECT (layout));
 }
 
-#ifdef USE_GTK3
 /* Mostly taken from GTK3. */
 static gboolean
 meta_accel_label_draw (GtkWidget *widget,
@@ -338,89 +308,6 @@ meta_accel_label_draw (GtkWidget *widget,
   
   return FALSE;
 }
-#else /* !USE_GTK3 */
-static gboolean
-meta_accel_label_expose_event (GtkWidget      *widget,
-			      GdkEventExpose *event)
-{
-  MetaAccelLabel *accel_label = META_ACCEL_LABEL (widget);
-  GtkMisc *misc = GTK_MISC (accel_label);
-  PangoLayout *layout;
-
-  if (gtk_widget_is_drawable (GTK_WIDGET (accel_label)))
-    {
-      GtkAllocation allocation;
-      GtkRequisition requisition;
-      int ac_width;
-
-      gtk_widget_get_allocation (widget, &allocation);
-      gtk_widget_get_requisition (widget, &requisition);
-      ac_width = meta_accel_label_get_accel_width (accel_label);
-
-      if (allocation.width >= requisition.width + ac_width)
-	{
-          GtkTextDirection direction = gtk_widget_get_direction (widget);
-          gfloat xalign, yalign;
-          gint x, y;
-          gint xpad, ypad;
-
-          gtk_misc_get_padding (misc, &xpad, &ypad);
-          gtk_misc_get_alignment (misc, &xalign, &yalign);
-
-          if (direction == GTK_TEXT_DIR_RTL)
-            {
-              allocation.x += ac_width;
-            }
-          allocation.width -= ac_width;
-          gtk_widget_set_allocation (widget, &allocation);
-
-	  if (GTK_WIDGET_CLASS (meta_accel_label_parent_class)->expose_event)
-	    GTK_WIDGET_CLASS (meta_accel_label_parent_class)->expose_event (widget, event);
-
-          if (direction == GTK_TEXT_DIR_RTL)
-            {
-              allocation.x -= ac_width;
-            }
-          allocation.width += ac_width;
-          gtk_widget_set_allocation (widget, &allocation);
-
-          if (direction == GTK_TEXT_DIR_RTL)
-            {
-              x = allocation.x + xpad;
-            }
-          else
-            {
-              x = allocation.x + allocation.width - xpad - ac_width;
-            }
-
-	  y = (allocation.y * (1.0 - yalign) +
-	       (allocation.y + allocation.height -
-		(requisition.height - ypad * 2)) * yalign) + 1.5;
-
-	  layout = gtk_widget_create_pango_layout (widget, accel_label->accel_string);
-
-          gtk_paint_layout (gtk_widget_get_style (widget),
-                            gtk_widget_get_window (widget),
-                            gtk_widget_get_state (widget),
-			    FALSE,
-                            &event->area,
-                            widget,
-                            "accellabel",
-                            x, y,
-                            layout);
-
-          g_object_unref (G_OBJECT (layout));
-	}
-      else
-	{
-	  if (GTK_WIDGET_CLASS (meta_accel_label_parent_class)->expose_event)
-	    GTK_WIDGET_CLASS (meta_accel_label_parent_class)->expose_event (widget, event);
-	}
-    }
-
-  return FALSE;
-}
-#endif /* !USE_GTK3 */
 
 static void
 meta_accel_label_update (MetaAccelLabel *accel_label)
diff --git a/src/ui/preview-widget.c b/src/ui/preview-widget.c
index 3b9057e..ab3978e 100644
--- a/src/ui/preview-widget.c
+++ b/src/ui/preview-widget.c
@@ -28,19 +28,12 @@
 #include <gtk/gtk.h>
 #include "preview-widget.h"
 
-#include "gdk2-drawing-utils.h"
-
 static void     meta_preview_size_request  (GtkWidget        *widget,
                                             GtkRequisition   *req);
 static void     meta_preview_size_allocate (GtkWidget        *widget,
                                             GtkAllocation    *allocation);
-#ifdef USE_GTK3
 static gboolean meta_preview_draw          (GtkWidget        *widget,
                                             cairo_t          *cr);
-#else
-static gboolean meta_preview_expose        (GtkWidget        *widget,
-                                            GdkEventExpose   *event);
-#endif
 static void     meta_preview_finalize      (GObject          *object);
 
 G_DEFINE_TYPE (MetaPreview, meta_preview, GTK_TYPE_BIN);
@@ -55,11 +48,7 @@ meta_preview_class_init (MetaPreviewClass *class)
 
   gobject_class->finalize = meta_preview_finalize;
 
-#ifdef USE_GTK3
   widget_class->draw = meta_preview_draw;
-#else
-  widget_class->expose_event = meta_preview_expose;
-#endif
   widget_class->size_request = meta_preview_size_request;
   widget_class->size_allocate = meta_preview_size_allocate;
 }
@@ -194,7 +183,6 @@ ensure_info (MetaPreview *preview)
     }
 }
 
-#ifdef USE_GTK3
 static gboolean
 meta_preview_draw (GtkWidget *widget,
                    cairo_t   *cr)
@@ -203,21 +191,6 @@ meta_preview_draw (GtkWidget *widget,
   GtkAllocation allocation;
 
   gtk_widget_get_allocation (widget, &allocation);
-#else
-static gboolean
-meta_preview_expose (GtkWidget      *widget,
-                     GdkEventExpose *event)
-{
-  cairo_t *cr = meta_cairo_create (gtk_widget_get_window (widget));
-  MetaPreview *preview = META_PREVIEW (widget);
-  GtkAllocation allocation;
-
-  gdk_cairo_region (cr, event->region);
-  cairo_clip (cr);
-
-  gtk_widget_get_allocation (widget, &allocation);
-  cairo_translate (cr, allocation.x, allocation.y);
-#endif
 
   if (preview->theme)
     {
@@ -262,15 +235,8 @@ meta_preview_expose (GtkWidget      *widget,
       cairo_restore (cr);
     }
 
-#ifdef USE_GTK3
   /* draw child */
   return GTK_WIDGET_CLASS (meta_preview_parent_class)->draw (widget, cr);
-#else
-  cairo_destroy (cr);
-
-  /* draw child */
-  return GTK_WIDGET_CLASS (meta_preview_parent_class)->expose_event (widget, event);
-#endif
 }
 
 static void
diff --git a/src/ui/resizepopup.c b/src/ui/resizepopup.c
index 7efbb24..c9e69fc 100644
--- a/src/ui/resizepopup.c
+++ b/src/ui/resizepopup.c
@@ -26,7 +26,6 @@
 #include "util.h"
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
-#include "gtk-compat.h"
 
 struct _MetaResizePopup
 {
diff --git a/src/ui/tabpopup.c b/src/ui/tabpopup.c
index 608cce7..2bc3fe0 100644
--- a/src/ui/tabpopup.c
+++ b/src/ui/tabpopup.c
@@ -36,9 +36,6 @@
 #include <gtk/gtk.h>
 #include <math.h>
 
-#include "gtk-compat.h"
-#include "gdk2-drawing-utils.h"
-
 #define OUTSIDE_SELECT_RECT 2
 #define INSIDE_SELECT_RECT 2
 
@@ -74,21 +71,11 @@ static GtkWidget* selectable_workspace_new (MetaWorkspace *workspace);
 static void       select_workspace         (GtkWidget *widget);
 static void       unselect_workspace       (GtkWidget *widget);
 
-#ifdef USE_GTK3
 static gboolean
 outline_window_draw (GtkWidget *widget,
                      cairo_t   *cr,
                      gpointer   data)
 {
-#else /* !USE_GTK3 */
-static gboolean
-outline_window_expose (GtkWidget      *widget,
-                       GdkEventExpose *event,
-                       gpointer        data)
-{
-  cairo_t *cr = gdk_cairo_create (event->window);
-#endif /* !USE_GTK3 */
-
   MetaTabPopup *popup;
   TabEntry *te;
   GtkStyle *style;
@@ -116,10 +103,6 @@ outline_window_expose (GtkWidget      *widget,
                    te->inner_rect.height + 1);
   cairo_stroke (cr);
 
-#ifndef USE_GTK3
-  cairo_destroy (cr);
-#endif
-
   return FALSE;
 }
 
@@ -260,13 +243,8 @@ meta_ui_tab_popup_new (const MetaTabEntry *entries,
   gtk_widget_set_app_paintable (popup->outline_window, TRUE);
   gtk_widget_realize (popup->outline_window);
 
-#ifdef USE_GTK3
   g_signal_connect (G_OBJECT (popup->outline_window), "draw",
                     G_CALLBACK (outline_window_draw), popup);
-#else
-  g_signal_connect (G_OBJECT (popup->outline_window), "expose_event",
-                    G_CALLBACK (outline_window_expose), popup);
-#endif
   
   popup->window = gtk_window_new (GTK_WINDOW_POPUP);
 
@@ -499,6 +477,9 @@ display_entry (MetaTabPopup *popup,
 
   if (popup->outline)
     {
+      cairo_region_t *region;
+      cairo_region_t *inner_region;
+
       window = gtk_widget_get_window (popup->outline_window);
 
       /* Do stuff behind gtk's back */
@@ -516,40 +497,20 @@ display_entry (MetaTabPopup *popup,
   
       gdk_window_set_background (window,
                                  &gtk_widget_get_style (popup->outline_window)->black);
-  
-#if GTK_CHECK_VERSION (2, 90, 8) /* gtk3 */
-      {
-        cairo_region_t *region;
-        cairo_region_t *inner_region;
 
-        region = cairo_region_create_rectangle (&rect);
-        inner_region = cairo_region_create_rectangle (&te->inner_rect);
-        cairo_region_subtract (region, inner_region);
-        cairo_region_destroy (inner_region);
 
-        gdk_window_shape_combine_region (window,
-                                         region,
-                                         0, 0);
-
-        cairo_region_destroy (region);
-      }
-#else /* gtk2 */
-      {
-        GdkRegion *region;
-        GdkRegion *inner_region;
 
-        region = gdk_region_rectangle (&rect);
-        inner_region = gdk_region_rectangle (&te->inner_rect);
-        gdk_region_subtract (region, inner_region);
-        gdk_region_destroy (inner_region);
+      region = cairo_region_create_rectangle (&rect);
+      inner_region = cairo_region_create_rectangle (&te->inner_rect);
+      cairo_region_subtract (region, inner_region);
+      cairo_region_destroy (inner_region);
 
-        gdk_window_shape_combine_region (window,
-                                         region,
-                                         0, 0);
+      gdk_window_shape_combine_region (window,
+                                       region,
+                                       0, 0);
 
-        gdk_region_destroy (region);
-      }
-#endif /* gtk2 */
+      cairo_region_destroy (region);
+    
 
       /* This should piss off gtk a bit, but we don't want to raise
        * above the tab popup.  So, instead of calling gtk_widget_show,
@@ -693,13 +654,8 @@ unselect_image (GtkWidget *widget)
 }
 
 static void     meta_select_image_class_init   (MetaSelectImageClass *klass);
-#if USE_GTK3
 static gboolean meta_select_image_draw         (GtkWidget            *widget,
                                                 cairo_t              *cr);
-#else
-static gboolean meta_select_image_expose_event (GtkWidget            *widget,
-                                                GdkEventExpose       *event);
-#endif
 
 static GtkImageClass *parent_class;
 
@@ -738,14 +694,9 @@ meta_select_image_class_init (MetaSelectImageClass *klass)
 
   widget_class = GTK_WIDGET_CLASS (klass);
   
-#if USE_GTK3
   widget_class->draw = meta_select_image_draw;
-#else
-  widget_class->expose_event = meta_select_image_expose_event;
-#endif
 }
 
-#if USE_GTK3
 static gboolean
 meta_select_image_draw (GtkWidget *widget,
                         cairo_t   *cr)
@@ -753,19 +704,6 @@ meta_select_image_draw (GtkWidget *widget,
   GtkAllocation allocation;
 
   gtk_widget_get_allocation (widget, &allocation);
-#else /* !USE_GTK3 */
-static gboolean
-meta_select_image_expose_event (GtkWidget      *widget,
-                                GdkEventExpose *event)
-{
-  GtkAllocation allocation;
-  cairo_t *cr = gdk_cairo_create (event->window);
-
-  gdk_cairo_region (cr, event->region);
-  cairo_clip (cr);
-  gtk_widget_get_allocation (widget, &allocation);
-  cairo_translate (cr, allocation.x, allocation.y);
-#endif
 
   if (META_SELECT_IMAGE (widget)->selected)
     {
@@ -806,13 +744,7 @@ meta_select_image_expose_event (GtkWidget      *widget,
       cairo_set_line_width (cr, 1.0);
     }
 
-#ifdef USE_GTK3
   return GTK_WIDGET_CLASS (parent_class)->draw (widget, cr);
-#else
-  cairo_destroy (cr);
-
-  return GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
-#endif /* !USE_GTK3 */
 }
 
 #define META_TYPE_SELECT_WORKSPACE   (meta_select_workspace_get_type ())
@@ -876,13 +808,8 @@ unselect_workspace (GtkWidget *widget)
 
 static void meta_select_workspace_class_init (MetaSelectWorkspaceClass *klass);
 
-#if USE_GTK3
 static gboolean meta_select_workspace_draw         (GtkWidget      *widget,
                                                     cairo_t        *cr);
-#else
-static gboolean meta_select_workspace_expose_event (GtkWidget      *widget,
-                                                    GdkEventExpose *event);
-#endif
 
 GType
 meta_select_workspace_get_type (void)
@@ -920,11 +847,7 @@ meta_select_workspace_class_init (MetaSelectWorkspaceClass *klass)
   
   widget_class = GTK_WIDGET_CLASS (klass);
   
-#if USE_GTK3
   widget_class->draw = meta_select_workspace_draw;
-#else
-  widget_class->expose_event = meta_select_workspace_expose_event;
-#endif
 }
 
 /**
@@ -961,18 +884,10 @@ meta_convert_meta_to_wnck (MetaWindow *window, MetaScreen *screen)
 }
 
 
-#ifdef USE_GTK3
 static gboolean
 meta_select_workspace_draw (GtkWidget *widget,
                             cairo_t   *cr)
 {
-#else /* !USE_GTK3 */
-static gboolean
-meta_select_workspace_expose_event (GtkWidget      *widget,
-                                    GdkEventExpose *event)
-{
-  cairo_t *cr = gdk_cairo_create (event->window);
-#endif /* !USE_GTK3 */
   MetaWorkspace *workspace;
   WnckWindowDisplayInfo *windows;
   GtkAllocation allocation;
@@ -1047,9 +962,5 @@ meta_select_workspace_expose_event (GtkWidget      *widget,
       cairo_stroke (cr);
     }
 
-#ifndef USE_GTK3
-  cairo_destroy (cr);
-#endif
-
   return TRUE;
 }
diff --git a/src/ui/theme-viewer.c b/src/ui/theme-viewer.c
index 86fa344..56620b6 100644
--- a/src/ui/theme-viewer.c
+++ b/src/ui/theme-viewer.c
@@ -34,8 +34,6 @@
 #define _(x) dgettext (GETTEXT_PACKAGE, x)
 #define N_(x) x
 
-#include "gdk2-drawing-utils.h"
-
 /* We need to compute all different button arrangements
  * in terms of button location. We don't care about
  * different arrangements in terms of button function.
@@ -942,7 +940,7 @@ static void
 run_theme_benchmark (void)
 {
   GtkWidget* widget;
-  MetaPixmap *pixmap;
+  cairo_surface_t *pixmap;
   int top_height, bottom_height, left_width, right_width;
   MetaButtonState button_states[META_BUTTON_TYPE_LAST] =
   {
@@ -1006,11 +1004,12 @@ run_theme_benchmark (void)
       /* Creating the pixmap in the loop is right, since
        * GDK does the same with its double buffering.
        */
-      pixmap = meta_pixmap_new (gtk_widget_get_window (widget),
-                                client_width + left_width + right_width,
-                                client_height + top_height + bottom_height);
+      pixmap = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
+                                                  CAIRO_CONTENT_COLOR,
+                                                  client_width + left_width + right_width,
+                                                  client_height + top_height + bottom_height);
 
-      cr = meta_pixmap_cairo_create (pixmap);
+      cr = cairo_create (pixmap);
 
       meta_theme_draw_frame (global_theme,
                              widget,
@@ -1026,7 +1025,7 @@ run_theme_benchmark (void)
                              meta_preview_get_icon ());
 
       cairo_destroy (cr);
-      meta_pixmap_free (pixmap);
+      cairo_surface_destroy (pixmap);
       
       ++i;
       client_width += inc;
diff --git a/src/ui/theme.c b/src/ui/theme.c
index 6514882..dac898a 100644
--- a/src/ui/theme.c
+++ b/src/ui/theme.c
@@ -61,10 +61,6 @@
 #include <stdlib.h>
 #include <math.h>
 
-#include "gtk-compat.h"
-#include "gdk-compat.h"
-#include "gdk2-drawing-utils.h"
-
 #define GDK_COLOR_RGBA(color)                                           \
                          ((guint32) (0xff                         |     \
                                      (((color).red / 256) << 24)   |    \
@@ -3712,7 +3708,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
         rwidth = parse_size_unchecked (op->data.gtk_arrow.width, env);
         rheight = parse_size_unchecked (op->data.gtk_arrow.height, env);
 
-        meta_paint_arrow (style_gtk,
+        gtk_paint_arrow (style_gtk,
                          cr,
                          op->data.gtk_arrow.state,
                          op->data.gtk_arrow.shadow,
@@ -3733,7 +3729,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
         rwidth = parse_size_unchecked (op->data.gtk_box.width, env);
         rheight = parse_size_unchecked (op->data.gtk_box.height, env);
 
-        meta_paint_box (style_gtk,
+        gtk_paint_box (style_gtk,
                        cr,
                        op->data.gtk_box.state,
                        op->data.gtk_box.shadow,
@@ -3751,7 +3747,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
         ry1 = parse_y_position_unchecked (op->data.gtk_vline.y1, env);
         ry2 = parse_y_position_unchecked (op->data.gtk_vline.y2, env);
         
-        meta_paint_vline (style_gtk,
+        gtk_paint_vline (style_gtk,
                           cr,
                           op->data.gtk_vline.state,
                           widget,
diff --git a/src/ui/tile-preview.c b/src/ui/tile-preview.c
index 83efab8..214e1fa 100644
--- a/src/ui/tile-preview.c
+++ b/src/ui/tile-preview.c
@@ -29,8 +29,6 @@
 #include "tile-preview.h"
 #include "core.h"
 
-#include "gdk2-drawing-utils.h"
-
 #define OUTLINE_WIDTH 5  /* frame width in non-composite case */
 
 
@@ -46,20 +44,11 @@ struct _MetaTilePreview {
   gboolean       has_alpha: 1;
 };
 
-#ifdef USE_GTK3
 static gboolean
 meta_tile_preview_draw (GtkWidget *widget,
                         cairo_t   *cr,
                         gpointer   user_data)
 {
-#else
-static gboolean
-meta_tile_preview_expose (GtkWidget      *widget,
-                          GdkEventExpose *event,
-                          gpointer        user_data)
-{
-  cairo_t *cr = gdk_cairo_create (event->window);
-#endif
   MetaTilePreview *preview = user_data;
 
   cairo_set_line_width (cr, 1.0);
@@ -98,10 +87,6 @@ meta_tile_preview_expose (GtkWidget      *widget,
                    preview->tile_rect.height - 1);
   cairo_stroke (cr);
 
-#ifndef USE_GTK3
-  cairo_destroy (cr);
-#endif
-
   return FALSE;
 }
 
@@ -163,13 +148,8 @@ meta_tile_preview_new (int      screen_number,
 
   if (preview->has_alpha)
     {
-#ifdef USE_GTK3
       gtk_widget_set_visual (preview->preview_window,
                              gdk_screen_get_rgba_visual (screen));
-#else
-      gtk_widget_set_colormap (preview->preview_window,
-                               gdk_screen_get_rgba_colormap (screen));
-#endif
 
       g_signal_connect (preview->preview_window, "style-set",
                         G_CALLBACK (on_preview_window_style_set), preview);
@@ -181,15 +161,8 @@ meta_tile_preview_new (int      screen_number,
    */
   preview->create_serial = XNextRequest (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
   gtk_widget_realize (preview->preview_window);
-#ifdef USE_GTK3
   g_signal_connect (preview->preview_window, "draw",
                     G_CALLBACK (meta_tile_preview_draw), preview);
-#else
-  gdk_window_set_back_pixmap (gtk_widget_get_window (preview->preview_window),
-                              NULL, FALSE);
-  g_signal_connect (preview->preview_window, "expose-event",
-                    G_CALLBACK (meta_tile_preview_expose), preview);
-#endif
 
   return preview;
 }
@@ -239,6 +212,7 @@ meta_tile_preview_show (MetaTilePreview *preview,
 
   if (!preview->has_alpha)
     {
+      cairo_region_t *outer_region, *inner_region;
       GdkRectangle outer_rect, inner_rect;
       GdkColor black;
 
@@ -254,33 +228,14 @@ meta_tile_preview_show (MetaTilePreview *preview,
       inner_rect.width = outer_rect.width - 2 * OUTLINE_WIDTH;
       inner_rect.height = outer_rect.height - 2 * OUTLINE_WIDTH;
 
-#if GTK_CHECK_VERSION (2, 90, 8) /* gtk3 */
-      {
-        cairo_region_t *outer_region, *inner_region;
-
-        outer_region = cairo_region_create_rectangle (&outer_rect);
-        inner_region = cairo_region_create_rectangle (&inner_rect);
-
-        cairo_region_subtract (outer_region, inner_region);
-        cairo_region_destroy (inner_region);
-
-        gdk_window_shape_combine_region (window, outer_region, 0, 0);
-        cairo_region_destroy (outer_region);
-      }
-#else /* gtk2 */
-      {
-        GdkRegion *outer_region, *inner_region;
-
-        outer_region = gdk_region_rectangle (&outer_rect);
-        inner_region = gdk_region_rectangle (&inner_rect);
+      outer_region = cairo_region_create_rectangle (&outer_rect);
+      inner_region = cairo_region_create_rectangle (&inner_rect);
 
-        gdk_region_subtract (outer_region, inner_region);
-        gdk_region_destroy (inner_region);
+      cairo_region_subtract (outer_region, inner_region);
+      cairo_region_destroy (inner_region);
 
-        gdk_window_shape_combine_region (window, outer_region, 0, 0);
-        gdk_region_destroy (outer_region);
-      }
-#endif /* gtk2 */
+      gdk_window_shape_combine_region (window, outer_region, 0, 0);
+      cairo_region_destroy (outer_region);
     }
 }
 
diff --git a/src/ui/ui.c b/src/ui/ui.c
index 6e80617..ea943ff 100644
--- a/src/ui/ui.c
+++ b/src/ui/ui.c
@@ -32,8 +32,6 @@
 #include "theme-private.h"
 
 #include "inlinepixbufs.h"
-#include "gdk-compat.h"
-#include "gdk2-drawing-utils.h"
 
 #include <string.h>
 #include <stdlib.h>
@@ -174,9 +172,6 @@ meta_ui_create_frame_window (MetaUI *ui,
   gint attributes_mask;
   GdkWindow *window;
   GdkVisual *visual;
-#ifndef USE_GTK3
-  GdkColormap *cmap = gdk_screen_get_default_colormap (screen);
-#endif
   
   /* Default depth/visual handles clients with weird visuals; they can
    * always be children of the root depth/visual obviously, but
@@ -189,9 +184,6 @@ meta_ui_create_frame_window (MetaUI *ui,
     {
       visual = gdk_x11_screen_lookup_visual (screen,
                                              XVisualIDFromVisual (xvisual));
-#ifndef USE_GTK3
-      cmap = gdk_colormap_new (visual, FALSE);
-#endif
     }
 
   attrs.title = NULL;
@@ -207,9 +199,6 @@ meta_ui_create_frame_window (MetaUI *ui,
   attrs.y = y;
   attrs.wclass = GDK_INPUT_OUTPUT;
   attrs.visual = visual;
-#ifndef USE_GTK3
-  attrs.colormap = cmap;
-#endif
   attrs.window_type = GDK_WINDOW_CHILD;
   attrs.cursor = NULL;
   attrs.wmclass_name = NULL;
@@ -219,11 +208,7 @@ meta_ui_create_frame_window (MetaUI *ui,
   attrs.width  = width;
   attrs.height = height;
 
-#ifdef USE_GTK3
   attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
-#else
-  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-#endif
 
   /* We make an assumption that gdk_window_new() is going to call
    * XCreateWindow as it's first operation; this seems to be true currently
@@ -370,7 +355,6 @@ meta_ui_window_menu_free (MetaWindowMenu *menu)
   meta_window_menu_free (menu);
 }
 
-#ifdef USE_GTK3
 GdkPixbuf*
 meta_gdk_pixbuf_get_from_pixmap (Pixmap       xpixmap,
                                  int          src_x,
@@ -420,84 +404,6 @@ meta_gdk_pixbuf_get_from_pixmap (Pixmap       xpixmap,
 
   return retval;
 }
-#else /* !USE_GTK3 */
-static GdkColormap*
-get_cmap (GdkPixmap *pixmap)
-{
-  GdkColormap *cmap;
-
-  cmap = gdk_drawable_get_colormap (pixmap);
-  if (cmap)
-    g_object_ref (G_OBJECT (cmap));
-
-  if (cmap == NULL)
-    {
-      if (gdk_drawable_get_depth (pixmap) == 1)
-        {
-          meta_verbose ("Using NULL colormap for snapshotting bitmap\n");
-          cmap = NULL;
-        }
-      else
-        {
-          meta_verbose ("Using system cmap to snapshot pixmap\n");
-          cmap = gdk_screen_get_system_colormap (gdk_drawable_get_screen (pixmap));
-
-          g_object_ref (G_OBJECT (cmap));
-        }
-    }
-
-  /* Be sure we aren't going to blow up due to visual mismatch */
-  if (cmap &&
-      (gdk_visual_get_depth (gdk_colormap_get_visual (cmap)) !=
-       gdk_drawable_get_depth (pixmap)))
-    {
-      cmap = NULL;
-      meta_verbose ("Switching back to NULL cmap because of depth mismatch\n");
-    }
-  
-  return cmap;
-}
-
-GdkPixbuf*
-meta_gdk_pixbuf_get_from_pixmap (Pixmap       xpixmap,
-                                 int          src_x,
-                                 int          src_y,
-                                 int          width,
-                                 int          height)
-{
-  GdkDrawable *drawable;
-  GdkPixbuf *retval;
-  GdkColormap *cmap;
-  
-  retval = NULL;
-  cmap = NULL;
-  
-  drawable = gdk_xid_table_lookup (xpixmap);
-
-  if (drawable)
-    g_object_ref (G_OBJECT (drawable));
-  else
-    drawable = gdk_pixmap_foreign_new (xpixmap);
-
-  if (drawable)
-    {
-      cmap = get_cmap (drawable);
-  
-      retval = gdk_pixbuf_get_from_drawable (NULL,
-                                             drawable,
-                                             cmap,
-                                             src_x, src_y,
-                                             0, 0,
-                                             width, height);
-    }
-  if (cmap)
-    g_object_unref (G_OBJECT (cmap));
-  if (drawable)
-    g_object_unref (G_OBJECT (drawable));
-
-  return retval;
-}
-#endif /* !USE_GTK3 */
 
 void
 meta_ui_push_delay_exposes (MetaUI *ui)



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