From 20bf51d57fecdc6783aa3edee50a657243aa872a Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Fri, 15 Mar 2013 16:56:59 +0100 Subject: [PATCH 48/68] gtk: also clip the NSView's subviews --- gtk/gtknsview.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c index b58a2c8..e2d8f96 100644 --- a/gtk/gtknsview.c +++ b/gtk/gtknsview.c @@ -225,10 +225,14 @@ gtk_ns_view_init (GtkNSView *ns_view) @end static void -gtk_ns_view_swizzle_draw_rect (NSView *view) +gtk_ns_view_swizzle_draw_rect_recursive (NSView *view, + const gchar *associated_key, + gpointer associated_object) { Method original_drawRect; Method my_drawRect; + NSArray *subviews; + gint i; original_drawRect = class_getInstanceMethod ([view class], @selector (drawRect:)); @@ -245,6 +249,18 @@ gtk_ns_view_swizzle_draw_rect (NSView *view) method_getImplementation (my_drawRect), method_getTypeEncoding (my_drawRect)); } + + objc_setAssociatedObject (view, associated_key, (id) associated_object, + OBJC_ASSOCIATION_ASSIGN); + + subviews = [view subviews]; + + for (i = 0; i < [subviews count]; i++) + { + gtk_ns_view_swizzle_draw_rect_recursive ([subviews objectAtIndex: i], + associated_key, + associated_object); + } } static void @@ -263,10 +279,8 @@ gtk_ns_view_constructed (GObject *object) gtk_widget_get_can_focus (GTK_WIDGET (ns_view))); #endif - gtk_ns_view_swizzle_draw_rect (ns_view->priv->view); - - objc_setAssociatedObject (ns_view->priv->view, "gtknsview", (id) ns_view, - OBJC_ASSOCIATION_ASSIGN); + gtk_ns_view_swizzle_draw_rect_recursive (ns_view->priv->view, + "gtknsview", ns_view); } static void @@ -428,10 +442,7 @@ gtk_ns_view_map (GtkWidget *widget) if (text) { - gtk_ns_view_swizzle_draw_rect (text); - - objc_setAssociatedObject (text, "gtkwindow", (id) toplevel, - OBJC_ASSOCIATION_ASSIGN); + gtk_ns_view_swizzle_draw_rect_recursive (text, "gtkwindow", toplevel); } } } -- 1.7.10.2 (Apple Git-33)