diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui/frames.c | 23 | 
1 files changed, 17 insertions, 6 deletions
| diff --git a/src/ui/frames.c b/src/ui/frames.c index 816ebd8c..d1a62656 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -198,8 +198,6 @@ meta_frames_init (MetaFrames *frames)    frames->invalidate_frames = NULL;    frames->cache = g_hash_table_new (g_direct_hash, g_direct_equal); -  gtk_widget_set_double_buffered (GTK_WIDGET (frames), FALSE); -    meta_prefs_add_listener (prefs_changed_callback, frames);  } @@ -2293,6 +2291,21 @@ subtract_client_area (cairo_region_t *region, MetaUIFrame *frame)    cairo_region_destroy (tmp_region);  } +static MetaUIFrame * +find_frame_to_draw (MetaFrames *frames, +                    cairo_t    *cr) +{ +  GHashTableIter iter; +  MetaUIFrame *frame; + +  g_hash_table_iter_init (&iter, frames->frames); +  while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &frame)) +    if (gtk_cairo_should_draw_window (cr, frame->window)) +      return frame; + +  return NULL; +} +  static gboolean  meta_frames_draw (GtkWidget *widget,                    cairo_t   *cr) @@ -2303,14 +2316,12 @@ meta_frames_draw (GtkWidget *widget,    cairo_region_t *region;    cairo_rectangle_int_t clip;    int i, n_areas; -  cairo_surface_t *target;    frames = META_FRAMES (widget); -  target = cairo_get_target (cr);    gdk_cairo_get_clip_rectangle (cr, &clip); -  g_assert (cairo_surface_get_type (target) == CAIRO_SURFACE_TYPE_XLIB); -  frame = meta_frames_lookup_window (frames, cairo_xlib_surface_get_drawable (target)); +  frame = find_frame_to_draw (frames, cr); +    if (frame == NULL)      return FALSE; | 
