Fix 'mono' package typo
[mono.git] / bockbuild / mac-sdk / patches / gtk / 0053-gtk-add-an-overlay-policy-API-to-GtkScrolledWindow.patch
1 From 3e4fba4264957d704d9c01496eef57e897b7d691 Mon Sep 17 00:00:00 2001
2 From: Michael Natterer <mitch@gimp.org>
3 Date: Fri, 3 May 2013 11:55:51 +0200
4 Subject: [PATCH 53/68] gtk: add an "overlay policy" API to GtkScrolledWindow
5
6 which allows to turn off drawing of the overlay scrollbars,
7 while keeping scrolling enabled.
8 ---
9  gtk/gtkscrolledwindow.c |   68 ++++++++++++++++++++++++++++++++++++++++++-----
10  gtk/gtkscrolledwindow.h |    6 +++++
11  2 files changed, 68 insertions(+), 6 deletions(-)
12
13 diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
14 index 9def3aa..a643b7d 100644
15 --- a/gtk/gtkscrolledwindow.c
16 +++ b/gtk/gtkscrolledwindow.c
17 @@ -121,6 +121,9 @@ typedef struct {
18    gdouble                unclamped_hadj_value;
19    gdouble                unclamped_vadj_value;
20
21 +  GtkPolicyType  hoverlay_policy;
22 +  GtkPolicyType  voverlay_policy;
23 +
24    GtkAllocation  viewport_allocation;
25    CALayer       *vbar_layer;
26    CALayer       *hbar_layer;
27 @@ -536,6 +539,9 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
28                                  NULL);
29    g_object_ref_sink (priv->opacity);
30
31 +  priv->hoverlay_policy = GTK_POLICY_AUTOMATIC;
32 +  priv->voverlay_policy = GTK_POLICY_AUTOMATIC;
33 +
34    priv->sb_min_height = 20;
35    priv->sb_padding = 2;
36    priv->sb_radius = 3;
37 @@ -865,6 +871,42 @@ gtk_scrolled_window_get_policy (GtkScrolledWindow *scrolled_window,
38      *vscrollbar_policy = scrolled_window->vscrollbar_policy;
39  }
40
41 +void
42 +gtk_scrolled_window_set_overlay_policy (GtkScrolledWindow *scrolled_window,
43 +                                        GtkPolicyType      hoverlay_policy,
44 +                                        GtkPolicyType      voverlay_policy)
45 +{
46 +  GtkScrolledWindowPrivate *priv;
47 +
48 +  g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
49 +  g_return_if_fail (hoverlay_policy == GTK_POLICY_AUTOMATIC ||
50 +                    hoverlay_policy == GTK_POLICY_NEVER);
51 +  g_return_if_fail (voverlay_policy == GTK_POLICY_AUTOMATIC ||
52 +                    voverlay_policy == GTK_POLICY_NEVER);
53 +
54 +  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
55 +
56 +  priv->hoverlay_policy = hoverlay_policy;
57 +  priv->voverlay_policy = voverlay_policy;
58 +}
59 +
60 +void
61 +gtk_scrolled_window_get_overlay_policy (GtkScrolledWindow *scrolled_window,
62 +                                        GtkPolicyType     *hoverlay_policy,
63 +                                        GtkPolicyType     *voverlay_policy)
64 +{
65 +  GtkScrolledWindowPrivate *priv;
66 +
67 +  g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
68 +
69 +  priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
70 +
71 +  if (hoverlay_policy)
72 +    *hoverlay_policy = priv->hoverlay_policy;
73 +  if (voverlay_policy)
74 +    *voverlay_policy = priv->voverlay_policy;
75 +}
76 +
77  static void
78  gtk_scrolled_window_update_real_placement (GtkScrolledWindow *scrolled_window)
79  {
80 @@ -1309,7 +1351,10 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
81                                          &vbar_rect, &vslider_rect,
82                                          &hbar_rect, &hslider_rect);
83
84 -  if (priv->sb_visible && scrolled_window->vscrollbar && vbar_rect.width > 0)
85 +  if (priv->sb_visible                              &&
86 +      scrolled_window->vscrollbar                   &&
87 +      priv->voverlay_policy == GTK_POLICY_AUTOMATIC &&
88 +      vbar_rect.width > 0)
89      {
90        rect.origin.x = priv->viewport_allocation.x + vbar_rect.x;
91        rect.origin.y = priv->viewport_allocation.y + vbar_rect.y;
92 @@ -1326,7 +1371,10 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
93        priv->vbar_layer.opacity = 0.0;
94      }
95
96 -  if (priv->sb_visible && scrolled_window->hscrollbar && hbar_rect.width > 0)
97 +  if (priv->sb_visible                              &&
98 +      scrolled_window->hscrollbar                   &&
99 +      priv->hoverlay_policy == GTK_POLICY_AUTOMATIC &&
100 +      hbar_rect.width > 0)
101      {
102        rect.origin.x = priv->viewport_allocation.x + hbar_rect.x;
103        rect.origin.y = priv->viewport_allocation.y + hbar_rect.y;
104 @@ -1334,8 +1382,12 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
105        rect.size.height = hbar_rect.height;
106
107        /* don't overlap in the corner */
108 -      if (scrolled_window->vscrollbar && vbar_rect.width > 0)
109 -        rect.size.width -= vbar_rect.width;
110 +      if (scrolled_window->vscrollbar                   &&
111 +          priv->voverlay_policy == GTK_POLICY_AUTOMATIC &&
112 +          vbar_rect.width > 0)
113 +        {
114 +          rect.size.width -= vbar_rect.width;
115 +        }
116
117        rect.origin.y = window_height - rect.origin.y - rect.size.height;
118
119 @@ -1347,7 +1399,9 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
120        priv->hbar_layer.opacity = 0.0;
121      }
122
123 -  if (scrolled_window->vscrollbar && vslider_rect.width > 0)
124 +  if (scrolled_window->vscrollbar                   &&
125 +      priv->voverlay_policy == GTK_POLICY_AUTOMATIC &&
126 +      vslider_rect.width > 0)
127      {
128        rect.origin.x = priv->viewport_allocation.x + vslider_rect.x;
129        rect.origin.y = priv->viewport_allocation.y + vslider_rect.y;
130 @@ -1365,7 +1419,9 @@ gtk_scrolled_window_update_scrollbars (GtkScrolledWindow *scrolled_window)
131        priv->vslider_layer.opacity = 0.0;
132      }
133
134 -  if (scrolled_window->hscrollbar && hslider_rect.width > 0)
135 +  if (scrolled_window->hscrollbar                   &&
136 +      priv->hoverlay_policy == GTK_POLICY_AUTOMATIC &&
137 +      hslider_rect.width > 0)
138      {
139        rect.origin.x = priv->viewport_allocation.x + hslider_rect.x;
140        rect.origin.y = priv->viewport_allocation.y + hslider_rect.y;
141 diff --git a/gtk/gtkscrolledwindow.h b/gtk/gtkscrolledwindow.h
142 index f75596d..69dcb43 100644
143 --- a/gtk/gtkscrolledwindow.h
144 +++ b/gtk/gtkscrolledwindow.h
145 @@ -116,6 +116,12 @@ void           gtk_scrolled_window_set_policy        (GtkScrolledWindow *scrolle
146  void           gtk_scrolled_window_get_policy        (GtkScrolledWindow *scrolled_window,
147                                                       GtkPolicyType     *hscrollbar_policy,
148                                                       GtkPolicyType     *vscrollbar_policy);
149 +void          gtk_scrolled_window_set_overlay_policy (GtkScrolledWindow *scrolled_window,
150 +                                                     GtkPolicyType      hoverlay_policy,
151 +                                                     GtkPolicyType      voverlay_policy);
152 +void          gtk_scrolled_window_get_overlay_policy (GtkScrolledWindow *scrolled_window,
153 +                                                     GtkPolicyType     *hoverlay_policy,
154 +                                                     GtkPolicyType     *voverlay_policy);
155  void           gtk_scrolled_window_set_placement     (GtkScrolledWindow *scrolled_window,
156                                                       GtkCornerType      window_placement);
157  void           gtk_scrolled_window_unset_placement   (GtkScrolledWindow *scrolled_window);
158 --
159 1.7.10.2 (Apple Git-33)