[mutter] frames: Hackily adapt to GTK+ drawing changes
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] frames: Hackily adapt to GTK+ drawing changes
- Date: Sat, 21 Jun 2014 17:55:56 +0000 (UTC)
commit b8b0dc5c78008647f5833f63d88456025f17bd08
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Sat Jun 21 13:28:35 2014 -0400
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.
src/ui/frames.c | 24 ++++++++++++++++++------
1 files changed, 18 insertions(+), 6 deletions(-)
---
diff --git a/src/ui/frames.c b/src/ui/frames.c
index e88c704..eec167f 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]