frames: Hackily adapt to GTK+ drawing changes
mutter is quite bad at using GTK+ correctly, relying on dumb things like the single-buffering stuff. Hack up a temporary fix for the newer GTK+ rendering changes.
This commit is contained in:
parent
d0cafab836
commit
b8b0dc5c78
@ -224,8 +224,6 @@ meta_frames_init (MetaFrames *frames)
|
||||
|
||||
update_style_contexts (frames);
|
||||
|
||||
gtk_widget_set_double_buffered (GTK_WIDGET (frames), FALSE);
|
||||
|
||||
meta_prefs_add_listener (prefs_changed_callback, frames);
|
||||
}
|
||||
|
||||
@ -1745,6 +1743,23 @@ meta_frames_get_mask (MetaFrames *frames,
|
||||
cairo_restore (cr);
|
||||
}
|
||||
|
||||
/* XXX -- this is disgusting. Find a better approach here.
|
||||
* Use multiple widgets? */
|
||||
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, (gpointer *) &frame, NULL))
|
||||
if (gtk_cairo_should_draw_window (cr, frame->window))
|
||||
return frame;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_frames_draw (GtkWidget *widget,
|
||||
cairo_t *cr)
|
||||
@ -1753,14 +1768,11 @@ meta_frames_draw (GtkWidget *widget,
|
||||
MetaFrames *frames;
|
||||
cairo_rectangle_int_t clip;
|
||||
cairo_region_t *region;
|
||||
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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user