From 2b8a48086aee90fe60753e5b6f0c415036469f48 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Fri, 5 Apr 2013 15:15:08 +0200 Subject: [PATCH 36/68] gtk: add GtkScrolledWindow API to disable overshoot per widget And remove some forgotten declarations in the header. --- gtk/gtkscrolledwindow.c | 33 +++++++++++++++++++++++++++++++-- gtk/gtkscrolledwindow.h | 10 +++------- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 7200462..9def3aa 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -154,6 +154,7 @@ typedef struct { gboolean overlay_scrollbars; gboolean is_snapping_back; gboolean gesture_in_progress; + gboolean enable_overshoot; } GtkScrolledWindowPrivate; #define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate)) @@ -541,6 +542,8 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window) priv->sb_width = 6; priv->sb_fade_out_delay = 1000; + priv->enable_overshoot = TRUE; + g_signal_connect_swapped (priv->opacity, "value-changed", G_CALLBACK (gtk_scrolled_window_update_scrollbars), scrolled_window); @@ -2144,8 +2147,9 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget, gboolean is_momentum_event = event->momentum_phase != GDK_EVENT_SCROLL_PHASE_NONE; gboolean legacy_mouse = FALSE; - if (event->phase == GDK_EVENT_SCROLL_PHASE_NONE && - event->momentum_phase == GDK_EVENT_SCROLL_PHASE_NONE) + if (!priv->enable_overshoot || + (event->phase == GDK_EVENT_SCROLL_PHASE_NONE && + event->momentum_phase == GDK_EVENT_SCROLL_PHASE_NONE)) legacy_mouse = TRUE; _gtk_scrolled_window_get_overshoot (scrolled_window, @@ -3106,6 +3110,31 @@ gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window, gtk_container_add (GTK_CONTAINER (viewport), child); } +void +gtk_scrolled_window_set_enable_overshoot (GtkScrolledWindow *scrolled_window, + gboolean enable_overshoot) +{ + GtkScrolledWindowPrivate *priv; + + g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window)); + + priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window); + + priv->enable_overshoot = enable_overshoot ? TRUE : FALSE; +} + +gboolean +gtk_scrolled_window_get_enable_overshoot (GtkScrolledWindow *scrolled_window) +{ + GtkScrolledWindowPrivate *priv; + + g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window), FALSE); + + priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window); + + return priv->enable_overshoot; +} + /* * _gtk_scrolled_window_get_spacing: * @scrolled_window: a scrolled window diff --git a/gtk/gtkscrolledwindow.h b/gtk/gtkscrolledwindow.h index 1f555e0..f75596d 100644 --- a/gtk/gtkscrolledwindow.h +++ b/gtk/gtkscrolledwindow.h @@ -127,13 +127,9 @@ GtkShadowType gtk_scrolled_window_get_shadow_type (GtkScrolledWindow *scrolle void gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window, GtkWidget *child); -void gtk_scrolled_window_set_kinetic_scrolling (GtkScrolledWindow *scrolled_window, - gboolean kinetic_scrolling); -gboolean gtk_scrolled_window_get_kinetic_scrolling (GtkScrolledWindow *scrolled_window); - -void gtk_scrolled_window_set_capture_button_press (GtkScrolledWindow *scrolled_window, - gboolean capture_button_press); -gboolean gtk_scrolled_window_get_capture_button_press (GtkScrolledWindow *scrolled_window); +void gtk_scrolled_window_set_enable_overshoot (GtkScrolledWindow *scrolled_window, + gboolean enable_overshoot); +gboolean gtk_scrolled_window_get_enable_overshoot (GtkScrolledWindow *scrolled_window); gint _gtk_scrolled_window_get_scrollbar_spacing (GtkScrolledWindow *scrolled_window); -- 1.7.10.2 (Apple Git-33)