]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkmenu.c
menu: set tearoff background using new background API
[~andy/gtk] / gtk / gtkmenu.c
index 4765de13ab1d326db84ee88cf8d0ef480c15eed8..9b021e3957e590fb0fb1e5994502dfa1be6aced0 100644 (file)
@@ -1351,8 +1351,9 @@ gtk_menu_tearoff_bg_copy (GtkMenu *menu)
 
   if (menu->torn_off)
     {
-      GdkPixmap *pixmap;
       GdkWindow *window;
+      cairo_surface_t *surface;
+      cairo_pattern_t *pattern;
       cairo_t *cr;
 
       menu->tearoff_active = FALSE;
@@ -1362,12 +1363,12 @@ gtk_menu_tearoff_bg_copy (GtkMenu *menu)
 
       gdk_drawable_get_size (window, &width, &height);
 
-      pixmap = gdk_pixmap_new (window,
-                              width,
-                              height,
-                              -1);
+      surface = gdk_window_create_similar_surface (window,
+                                                   CAIRO_CONTENT_COLOR,
+                                                   width,
+                                                   height);
 
-      cr = gdk_cairo_create (pixmap);
+      cr = cairo_create (surface);
       /* Let's hope that function never notices we're not passing it a pixmap */
       gdk_cairo_set_source_pixmap (cr,
                                    window,
@@ -1379,8 +1380,11 @@ gtk_menu_tearoff_bg_copy (GtkMenu *menu)
                                   width,
                                   height);
 
-      gdk_window_set_back_pixmap (window, pixmap, FALSE);
-      g_object_unref (pixmap);
+      pattern = cairo_pattern_create_for_surface (surface);
+      gdk_window_set_background_pattern (window, pattern);
+
+      cairo_pattern_destroy (pattern);
+      cairo_surface_destroy (surface);
     }
 }