summaryrefslogtreecommitdiff
path: root/gtk/gtkiconview.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2009-05-03 13:04:06 -0400
committerMatthias Clasen <mclasen@redhat.com>2009-05-03 13:04:06 -0400
commite6373738fc9c53c95e467a3681fcd3426fd94d13 (patch)
treef590ec182722637e3c797ea64337ad3d6f3896a6 /gtk/gtkiconview.c
parent46bc2ec740c9c3b86fad9c373342e0851ca0bf43 (diff)
downloadgtk+-e6373738fc9c53c95e467a3681fcd3426fd94d13.tar.gz
Forward-port a GtkAdjustment compatibility fix
We reverted GtkAdjustment to its traditional behaviour wrt. to clamping in 2.14.3, but the fix was lost between 2.14 and 2.16.
Diffstat (limited to 'gtk/gtkiconview.c')
-rw-r--r--gtk/gtkiconview.c52
1 files changed, 34 insertions, 18 deletions
diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c
index aa1d16efc3..3a413f0ed2 100644
--- a/gtk/gtkiconview.c
+++ b/gtk/gtkiconview.c
@@ -1471,7 +1471,7 @@ gtk_icon_view_size_allocate (GtkWidget *widget,
hadjustment->upper = MAX (allocation->width, icon_view->priv->width);
if (hadjustment->value > hadjustment->upper - hadjustment->page_size)
- gtk_adjustment_set_value (hadjustment, hadjustment->upper - hadjustment->page_size);
+ gtk_adjustment_set_value (hadjustment, MAX (0, hadjustment->upper - hadjustment->page_size));
vadjustment->page_size = allocation->height;
vadjustment->page_increment = allocation->height * 0.9;
@@ -1480,7 +1480,7 @@ gtk_icon_view_size_allocate (GtkWidget *widget,
vadjustment->upper = MAX (allocation->height, icon_view->priv->height);
if (vadjustment->value > vadjustment->upper - vadjustment->page_size)
- gtk_adjustment_set_value (vadjustment, vadjustment->upper - vadjustment->page_size);
+ gtk_adjustment_set_value (vadjustment, MAX (0, vadjustment->upper - vadjustment->page_size));
if (GTK_WIDGET_REALIZED (widget) &&
icon_view->priv->scroll_to_path)
@@ -1638,11 +1638,17 @@ gtk_icon_view_expose (GtkWidget *widget,
static gboolean
rubberband_scroll_timeout (gpointer data)
{
- GtkIconView *icon_view = data;
+ GtkIconView *icon_view;
+ gdouble value;
+
+ icon_view = data;
+
+ value = MIN (icon_view->priv->vadjustment->value +
+ icon_view->priv->scroll_value_diff,
+ icon_view->priv->vadjustment->upper -
+ icon_view->priv->vadjustment->page_size);
- gtk_adjustment_set_value (icon_view->priv->vadjustment,
- icon_view->priv->vadjustment->value +
- icon_view->priv->scroll_value_diff);
+ gtk_adjustment_set_value (icon_view->priv->vadjustment, value);
gtk_icon_view_update_rubberband (icon_view);
@@ -4346,7 +4352,7 @@ gtk_icon_view_scroll_to_path (GtkIconView *icon_view,
{
gint x, y;
gint focus_width;
- gfloat offset;
+ gfloat offset, value;
gtk_widget_style_get (GTK_WIDGET (icon_view),
"focus-line-width", &focus_width,
@@ -4356,15 +4362,17 @@ gtk_icon_view_scroll_to_path (GtkIconView *icon_view,
offset = y + item->y - focus_width -
row_align * (GTK_WIDGET (icon_view)->allocation.height - item->height);
-
- gtk_adjustment_set_value (icon_view->priv->vadjustment,
- icon_view->priv->vadjustment->value + offset);
+ value = CLAMP (icon_view->priv->vadjustment->value + offset,
+ icon_view->priv->vadjustment->lower,
+ icon_view->priv->vadjustment->upper - icon_view->priv->vadjustment->page_size);
+ gtk_adjustment_set_value (icon_view->priv->vadjustment, value);
offset = x + item->x - focus_width -
col_align * (GTK_WIDGET (icon_view)->allocation.width - item->width);
-
- gtk_adjustment_set_value (icon_view->priv->hadjustment,
- icon_view->priv->hadjustment->value + offset);
+ value = CLAMP (icon_view->priv->hadjustment->value + offset,
+ icon_view->priv->hadjustment->lower,
+ icon_view->priv->hadjustment->upper - icon_view->priv->hadjustment->page_size);
+ gtk_adjustment_set_value (icon_view->priv->hadjustment, value);
gtk_adjustment_changed (icon_view->priv->hadjustment);
gtk_adjustment_changed (icon_view->priv->vadjustment);
@@ -6404,6 +6412,7 @@ gtk_icon_view_autoscroll (GtkIconView *icon_view)
{
gint px, py, x, y, width, height;
gint hoffset, voffset;
+ gfloat value;
gdk_window_get_pointer (GTK_WIDGET (icon_view)->window, &px, &py, NULL);
gdk_window_get_geometry (GTK_WIDGET (icon_view)->window, &x, &y, &width, &height, NULL);
@@ -6418,12 +6427,19 @@ gtk_icon_view_autoscroll (GtkIconView *icon_view)
hoffset = MAX (px - (x + width - 2 * SCROLL_EDGE_SIZE), 0);
if (voffset != 0)
- gtk_adjustment_set_value (icon_view->priv->vadjustment,
- icon_view->priv->vadjustment->value + voffset);
-
+ {
+ value = CLAMP (icon_view->priv->vadjustment->value + voffset,
+ icon_view->priv->vadjustment->lower,
+ icon_view->priv->vadjustment->upper - icon_view->priv->vadjustment->page_size);
+ gtk_adjustment_set_value (icon_view->priv->vadjustment, value);
+ }
if (hoffset != 0)
- gtk_adjustment_set_value (icon_view->priv->hadjustment,
- icon_view->priv->hadjustment->value + hoffset);
+ {
+ value = CLAMP (icon_view->priv->hadjustment->value + hoffset,
+ icon_view->priv->hadjustment->lower,
+ icon_view->priv->hadjustment->upper - icon_view->priv->hadjustment->page_size);
+ gtk_adjustment_set_value (icon_view->priv->hadjustment, value);
+ }
}