a8e99f847b86f1ed5797e72ab9d8eade36b14c85
[mono.git] / bockbuild / mac-sdk / patches / gtk / gtknsview-timeout-fix.patch
1 diff --git a/gtk/gtknsview.c b/gtk/gtknsview.c
2 index 31c4970..ad003d9 100644
3 --- a/gtk/gtknsview.c
4 +++ b/gtk/gtknsview.c
5 @@ -48,6 +48,7 @@ enum
6  struct _GtkNSViewPrivate
7  {
8    NSView *view;
9 +  guint   map_timeout;
10  };
11
12  #define GTK_NS_VIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
13 @@ -563,6 +564,15 @@ gtk_ns_view_position_view (GtkNSView     *ns_view,
14  static void
15  gtk_ns_view_unrealize (GtkWidget *widget)
16  {
17 +  GtkNSView *ns_view = GTK_NS_VIEW (widget);
18 +
19 +  if (ns_view->priv->map_timeout != 0)
20 +    {
21 +      g_source_remove (ns_view->priv->map_timeout);
22 +      ns_view->priv->map_timeout = 0;
23 +      g_object_unref (widget);
24 +    }
25 +
26    if (gtk_widget_get_mapped (widget))
27      gtk_widget_unmap (widget);
28
29 @@ -577,6 +587,8 @@ really_map (GtkWidget *widget) {
30    NSView *parent_view;
31    NSWindow *window;
32
33 +  g_object_unref (widget);
34 +
35    if (gtk_widget_get_mapped (widget))
36      return FALSE;
37
38 @@ -611,13 +623,18 @@ really_map (GtkWidget *widget) {
39          }
40      }
41
42 +  ns_view->priv->map_timeout = 0;
43 +
44    return FALSE;
45  }
46
47  static void
48  gtk_ns_view_map (GtkWidget *widget)
49  {
50 -   g_timeout_add (50, (GSourceFunc)really_map, widget);
51 +  GtkNSView *ns_view = GTK_NS_VIEW (widget);
52 +
53 +  g_object_ref (widget);
54 +  ns_view->priv->map_timeout = g_timeout_add (50, (GSourceFunc)really_map, widget);
55  }
56
57  static void