linux-packaging-mono/external/bockbuild/packages/patches/gtk/0015-Use-gtk-enable-overlay-scrollbars-in-GtkScrolledWind.patch
Xamarin Public Jenkins (auto-signing) 6bdd276d05 Imported Upstream version 5.0.0.42
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
2017-04-10 11:41:01 +00:00

372 lines
15 KiB
Diff

From eea6eef69858ff65ff8ccf46bb640bcc0580f592 Mon Sep 17 00:00:00 2001
From: Kristian Rietveld <kris@lanedo.com>
Date: Sun, 29 Jul 2012 16:14:09 +0200
Subject: [PATCH 15/68] Use gtk-enable-overlay-scrollbars in GtkScrolledWindow
And listen for changes to this setting. Move overlay_scrollbars variable
to GtkScrolledWindowPrivate, because we are going to have to monitor for
each scrolled window whether it has transformed itself in response to the
signal.
---
gtk/gtkscrolledwindow.c | 97 +++++++++++++++++++++++++++++++++++------------
1 file changed, 72 insertions(+), 25 deletions(-)
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 70de6ec..3220e91 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -140,6 +140,8 @@ typedef struct {
gint sb_scroll_direction;
guint sb_scroll_timeout_id;
+
+ gboolean overlay_scrollbars;
} GtkScrolledWindowPrivate;
#define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate))
@@ -260,12 +262,14 @@ static gboolean gtk_scrolled_window_child_expose (GtkWidget *widget,
static void gtk_scrolled_window_expose_scrollbars (GtkAdjustment *adj,
GtkScrolledWindow *scrolled_window);
+static void gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *settings,
+ GParamSpec *arg,
+ gpointer user_data);
+
static guint signals[LAST_SIGNAL] = {0};
G_DEFINE_TYPE (GtkScrolledWindow, gtk_scrolled_window, GTK_TYPE_BIN)
-static gboolean overlay_scrollbars = TRUE;
-
static void
add_scroll_binding (GtkBindingSet *binding_set,
guint keyval,
@@ -501,6 +505,7 @@ static void
gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
{
GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
+ GtkSettings *settings;
gtk_widget_set_has_window (GTK_WIDGET (scrolled_window), FALSE);
gtk_widget_set_can_focus (GTK_WIDGET (scrolled_window), TRUE);
@@ -515,13 +520,22 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
scrolled_window->window_placement = GTK_CORNER_TOP_LEFT;
gtk_scrolled_window_update_real_placement (scrolled_window);
+ settings = gtk_widget_get_settings (GTK_WIDGET (scrolled_window));
+ g_object_get (settings,
+ "gtk-enable-overlay-scrollbars",
+ &priv->overlay_scrollbars,
+ NULL);
+ g_signal_connect (settings, "notify::gtk-enable-overlay-scrollbars",
+ G_CALLBACK (gtk_scrolled_window_overlay_scrollbars_changed),
+ scrolled_window);
+
if (g_getenv ("GTK2_KINETIC_SCROLLING"))
{
gtk_scrolled_window_set_kinetic_scrolling (scrolled_window, TRUE);
gtk_scrolled_window_set_capture_button_press (scrolled_window, TRUE);
}
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
{
priv->opacity = g_object_new (GTK_TYPE_ADJUSTMENT,
"lower", 0.0,
@@ -586,6 +600,7 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
GtkAdjustment *hadjustment)
{
GtkBin *bin;
+ GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
if (hadjustment)
@@ -618,7 +633,7 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
gtk_scrolled_window_adjustment_changed,
scrolled_window);
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
{
g_signal_handlers_disconnect_by_func (old_adjustment,
gtk_scrolled_window_adjustment_value_changed,
@@ -643,7 +658,7 @@ gtk_scrolled_window_set_hadjustment (GtkScrolledWindow *scrolled_window,
gtk_scrolled_window_adjustment_changed (hadjustment, scrolled_window);
gtk_scrolled_window_adjustment_value_changed (hadjustment, scrolled_window);
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
{
g_signal_connect (hadjustment, "value-changed",
G_CALLBACK (gtk_scrolled_window_adjustment_value_changed),
@@ -677,6 +692,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
GtkAdjustment *vadjustment)
{
GtkBin *bin;
+ GtkScrolledWindowPrivate *priv;
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
if (vadjustment)
@@ -685,6 +701,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
vadjustment = (GtkAdjustment*) g_object_new (GTK_TYPE_ADJUSTMENT, NULL);
bin = GTK_BIN (scrolled_window);
+ priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
if (!scrolled_window->vscrollbar)
{
@@ -709,7 +726,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
gtk_scrolled_window_adjustment_changed,
scrolled_window);
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
{
g_signal_handlers_disconnect_by_func (old_adjustment,
gtk_scrolled_window_adjustment_value_changed,
@@ -734,7 +751,7 @@ gtk_scrolled_window_set_vadjustment (GtkScrolledWindow *scrolled_window,
gtk_scrolled_window_adjustment_changed (vadjustment, scrolled_window);
gtk_scrolled_window_adjustment_value_changed (vadjustment, scrolled_window);
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
{
g_signal_connect (vadjustment,
"value-changed",
@@ -1208,7 +1225,7 @@ gtk_scrolled_window_destroy (GtkObject *object)
gtk_scrolled_window_adjustment_changed,
scrolled_window);
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
{
g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)),
gtk_scrolled_window_adjustment_value_changed,
@@ -1229,7 +1246,7 @@ gtk_scrolled_window_destroy (GtkObject *object)
gtk_scrolled_window_adjustment_changed,
scrolled_window);
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
{
g_signal_handlers_disconnect_by_func (gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)),
gtk_scrolled_window_adjustment_value_changed,
@@ -1245,6 +1262,10 @@ gtk_scrolled_window_destroy (GtkObject *object)
scrolled_window->vscrollbar = NULL;
}
+ g_signal_handlers_disconnect_by_func (gtk_widget_get_settings (GTK_WIDGET (scrolled_window)),
+ G_CALLBACK (gtk_scrolled_window_overlay_scrollbars_changed),
+ scrolled_window);
+
if (priv->release_timeout_id)
{
g_source_remove (priv->release_timeout_id);
@@ -1641,12 +1662,14 @@ gtk_scrolled_window_size_request (GtkWidget *widget,
GtkRequisition hscrollbar_requisition;
GtkRequisition vscrollbar_requisition;
GtkRequisition child_requisition;
+ GtkScrolledWindowPrivate *priv;
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
g_return_if_fail (requisition != NULL);
scrolled_window = GTK_SCROLLED_WINDOW (widget);
bin = GTK_BIN (scrolled_window);
+ priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
@@ -1666,7 +1689,7 @@ gtk_scrolled_window_size_request (GtkWidget *widget,
if (scrolled_window->hscrollbar_policy == GTK_POLICY_NEVER)
requisition->width += child_requisition.width;
- else if (! overlay_scrollbars)
+ else if (! priv->overlay_scrollbars)
{
GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
@@ -1681,7 +1704,7 @@ gtk_scrolled_window_size_request (GtkWidget *widget,
if (scrolled_window->vscrollbar_policy == GTK_POLICY_NEVER)
requisition->height += child_requisition.height;
- else if (! overlay_scrollbars)
+ else if (! priv->overlay_scrollbars)
{
GtkWidgetAuxInfo *aux_info = _gtk_widget_get_aux_info (bin->child, FALSE);
@@ -1695,7 +1718,7 @@ gtk_scrolled_window_size_request (GtkWidget *widget,
}
}
- if (! overlay_scrollbars)
+ if (! priv->overlay_scrollbars)
{
if (scrolled_window->hscrollbar_policy == GTK_POLICY_AUTOMATIC ||
scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
@@ -1752,7 +1775,7 @@ gtk_scrolled_window_relative_allocation (GtkWidget *widget,
allocation->width = MAX (1, (gint)widget->allocation.width - allocation->x * 2);
allocation->height = MAX (1, (gint)widget->allocation.height - allocation->y * 2);
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
return;
if (scrolled_window->vscrollbar_visible)
@@ -1909,16 +1932,15 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
g_return_if_fail (allocation != NULL);
scrolled_window = GTK_SCROLLED_WINDOW (widget);
+ priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
bin = GTK_BIN (scrolled_window);
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
gtk_scrolled_window_expose_scrollbars (NULL, scrolled_window);
scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
- priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
-
widget->allocation = *allocation;
if (scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
@@ -1972,7 +1994,7 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
gtk_scrolled_window_relative_allocation (widget, &relative_allocation);
}
- if (!overlay_scrollbars && scrolled_window->hscrollbar_visible)
+ if (!priv->overlay_scrollbars && scrolled_window->hscrollbar_visible)
{
GtkRequisition hscrollbar_requisition;
gtk_widget_get_child_requisition (scrolled_window->hscrollbar,
@@ -2020,7 +2042,7 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
else if (gtk_widget_get_visible (scrolled_window->hscrollbar))
gtk_widget_hide (scrolled_window->hscrollbar);
- if (!overlay_scrollbars && scrolled_window->vscrollbar_visible)
+ if (!priv->overlay_scrollbars && scrolled_window->vscrollbar_visible)
{
GtkRequisition vscrollbar_requisition;
if (!gtk_widget_get_visible (scrolled_window->vscrollbar))
@@ -2080,6 +2102,7 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
GdkEventScroll *event)
{
GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
+ GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
gboolean handled = FALSE;
gdouble delta_x;
gdouble delta_y;
@@ -2090,7 +2113,7 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &delta_x, &delta_y))
{
if (delta_x != 0.0 && scrolled_window->hscrollbar &&
- (overlay_scrollbars || gtk_widget_get_visible (scrolled_window->hscrollbar)))
+ (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->hscrollbar)))
{
GtkAdjustment *adj;
gdouble new_value;
@@ -2108,7 +2131,7 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
}
if (delta_y != 0.0 && scrolled_window->vscrollbar &&
- (overlay_scrollbars || gtk_widget_get_visible (scrolled_window->vscrollbar)))
+ (priv->overlay_scrollbars || gtk_widget_get_visible (scrolled_window->vscrollbar)))
{
GtkAdjustment *adj;
gdouble new_value;
@@ -2134,7 +2157,7 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
else
range = scrolled_window->hscrollbar;
- if (range && (overlay_scrollbars || gtk_widget_get_visible (range)))
+ if (range && (priv->overlay_scrollbars || gtk_widget_get_visible (range)))
{
GtkAdjustment *adj = GTK_RANGE (range)->adjustment;
gdouble delta, new_value;
@@ -2994,11 +3017,13 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment,
gpointer data)
{
GtkScrolledWindow *scrolled_win;
+ GtkScrolledWindowPrivate *priv;
g_return_if_fail (adjustment != NULL);
g_return_if_fail (data != NULL);
scrolled_win = GTK_SCROLLED_WINDOW (data);
+ priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (data);
if (scrolled_win->hscrollbar &&
adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_win->hscrollbar)))
@@ -3029,7 +3054,7 @@ gtk_scrolled_window_adjustment_changed (GtkAdjustment *adjustment,
}
}
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
gtk_scrolled_window_start_fade_in_animation (scrolled_win);
}
@@ -3052,7 +3077,7 @@ gtk_scrolled_window_adjustment_value_changed (GtkAdjustment *adjustment,
adjustment == gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)))
priv->unclamped_hadj_value = gtk_adjustment_get_value (adjustment);
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
gtk_scrolled_window_start_fade_in_animation (scrolled_window);
}
@@ -3083,7 +3108,7 @@ gtk_scrolled_window_add (GtkContainer *container,
g_warning ("gtk_scrolled_window_add(): cannot add non scrollable widget "
"use gtk_scrolled_window_add_with_viewport() instead");
- if (overlay_scrollbars)
+ if (priv->overlay_scrollbars)
{
g_signal_connect_after (child, "expose-event",
G_CALLBACK (gtk_scrolled_window_child_expose),
@@ -3095,11 +3120,15 @@ static void
gtk_scrolled_window_remove (GtkContainer *container,
GtkWidget *child)
{
+ GtkScrolledWindowPrivate *priv;
+
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (container));
g_return_if_fail (child != NULL);
g_return_if_fail (GTK_BIN (container)->child == child);
- if (overlay_scrollbars)
+ priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (container);
+
+ if (priv->overlay_scrollbars)
{
g_signal_handlers_disconnect_by_func (child,
gtk_scrolled_window_child_expose,
@@ -3764,5 +3793,23 @@ gtk_scrolled_window_expose_scrollbars (GtkAdjustment *adj,
}
}
+static void
+gtk_scrolled_window_overlay_scrollbars_changed (GtkSettings *settings,
+ GParamSpec *arg,
+ gpointer user_data)
+{
+ GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (user_data);
+ GtkScrolledWindowPrivate *priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (user_data);
+
+ /* FIXME: tear down/set up things to make the switch */
+
+ g_object_get (settings,
+ "gtk-enable-overlay-scrollbars",
+ &priv->overlay_scrollbars,
+ NULL);
+
+ g_print ("enable-overlay-scrollbar is now: %d\n", priv->overlay_scrollbars);
+}
+
#define __GTK_SCROLLED_WINDOW_C__
#include "gtkaliasdef.c"
--
1.7.10.2 (Apple Git-33)