ce8f7a6ae29f22e50b6ba6e3e12ba93cb43c7294
[mono.git] / bockbuild / mac-sdk / patches / gtk / 0048-gtk-also-clip-the-NSView-s-subviews.patch
1 From 20bf51d57fecdc6783aa3edee50a657243aa872a Mon Sep 17 00:00:00 2001
2 From: Michael Natterer <mitch@gimp.org>
3 Date: Fri, 15 Mar 2013 16:56:59 +0100
4 Subject: [PATCH 48/68] gtk: also clip the NSView's subviews
5
6 ---
7  gtk/gtknsview.c |   29 ++++++++++++++++++++---------
8  1 file changed, 20 insertions(+), 9 deletions(-)
9
10 diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
11 index b58a2c8..e2d8f96 100644
12 --- a/gtk/gtknsview.c
13 +++ b/gtk/gtknsview.c
14 @@ -225,10 +225,14 @@ gtk_ns_view_init (GtkNSView *ns_view)
15  @end
16
17  static void
18 -gtk_ns_view_swizzle_draw_rect (NSView *view)
19 +gtk_ns_view_swizzle_draw_rect_recursive (NSView      *view,
20 +                                         const gchar *associated_key,
21 +                                         gpointer     associated_object)
22  {
23    Method original_drawRect;
24    Method my_drawRect;
25 +  NSArray *subviews;
26 +  gint i;
27
28    original_drawRect = class_getInstanceMethod ([view class],
29                                                 @selector (drawRect:));
30 @@ -245,6 +249,18 @@ gtk_ns_view_swizzle_draw_rect (NSView *view)
31                             method_getImplementation (my_drawRect),
32                             method_getTypeEncoding (my_drawRect));
33      }
34 +
35 +  objc_setAssociatedObject (view, associated_key, (id) associated_object,
36 +                            OBJC_ASSOCIATION_ASSIGN);
37 +
38 +  subviews = [view subviews];
39 +
40 +  for (i = 0; i < [subviews count]; i++)
41 +    {
42 +      gtk_ns_view_swizzle_draw_rect_recursive ([subviews objectAtIndex: i],
43 +                                               associated_key,
44 +                                               associated_object);
45 +    }
46  }
47
48  static void
49 @@ -263,10 +279,8 @@ gtk_ns_view_constructed (GObject *object)
50                gtk_widget_get_can_focus (GTK_WIDGET (ns_view)));
51  #endif
52
53 -  gtk_ns_view_swizzle_draw_rect (ns_view->priv->view);
54 -
55 -  objc_setAssociatedObject (ns_view->priv->view, "gtknsview", (id) ns_view,
56 -                            OBJC_ASSOCIATION_ASSIGN);
57 +  gtk_ns_view_swizzle_draw_rect_recursive (ns_view->priv->view,
58 +                                           "gtknsview", ns_view);
59  }
60
61  static void
62 @@ -428,10 +442,7 @@ gtk_ns_view_map (GtkWidget *widget)
63
64        if (text)
65          {
66 -          gtk_ns_view_swizzle_draw_rect (text);
67 -
68 -          objc_setAssociatedObject (text, "gtkwindow", (id) toplevel,
69 -                                    OBJC_ASSOCIATION_ASSIGN);
70 +          gtk_ns_view_swizzle_draw_rect_recursive (text, "gtkwindow", toplevel);
71          }
72      }
73  }
74 --
75 1.7.10.2 (Apple Git-33)