From f1583ba6277c227db8d6f2e5060a4c8f28d30dd2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 29 Apr 2005 16:20:07 +0000 Subject: [PATCH] Also scroll horizontally when necessary, and keep the northwest corner of 2005-04-29 Matthias Clasen * gtk/gtkiconview.c (gtk_icon_view_scroll_to_item): Also scroll horizontally when necessary, and keep the northwest corner of the item visible. (#300913, Mathias Hasselmann) --- ChangeLog | 4 ++++ ChangeLog.pre-2-10 | 4 ++++ ChangeLog.pre-2-8 | 4 ++++ gtk/gtkiconview.c | 20 +++++++++++++++++--- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 759bc04010..b00a5d9414 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2005-04-29 Matthias Clasen + * gtk/gtkiconview.c (gtk_icon_view_scroll_to_item): Also + scroll horizontally when necessary, and keep the northwest + corner of the item visible. (#300913, Mathias Hasselmann) + * tests/testiconview.c: Add some more tests. * gtk/gtkiconview.c (gtk_icon_view_select_path): Don't crash diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 759bc04010..b00a5d9414 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,9 @@ 2005-04-29 Matthias Clasen + * gtk/gtkiconview.c (gtk_icon_view_scroll_to_item): Also + scroll horizontally when necessary, and keep the northwest + corner of the item visible. (#300913, Mathias Hasselmann) + * tests/testiconview.c: Add some more tests. * gtk/gtkiconview.c (gtk_icon_view_select_path): Don't crash diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 759bc04010..b00a5d9414 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,9 @@ 2005-04-29 Matthias Clasen + * gtk/gtkiconview.c (gtk_icon_view_scroll_to_item): Also + scroll horizontally when necessary, and keep the northwest + corner of the item visible. (#300913, Mathias Hasselmann) + * tests/testiconview.c: Add some more tests. * gtk/gtkiconview.c (gtk_icon_view_select_path): Don't crash diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c index 568e9ca9a0..08d195206a 100644 --- a/gtk/gtkiconview.c +++ b/gtk/gtkiconview.c @@ -3000,11 +3000,11 @@ static void gtk_icon_view_scroll_to_item (GtkIconView *icon_view, GtkIconViewItem *item) { - gint y, height; + gint x, y, width, height; gdouble value; - gdk_drawable_get_size (GDK_DRAWABLE (icon_view->priv->bin_window), NULL, &height); - gdk_window_get_position (icon_view->priv->bin_window, NULL, &y); + gdk_drawable_get_size (GDK_DRAWABLE (icon_view->priv->bin_window), &width, &height); + gdk_window_get_position (icon_view->priv->bin_window, &x, &y); if (y + item->y < 0) { @@ -3015,8 +3015,22 @@ gtk_icon_view_scroll_to_item (GtkIconView *icon_view, { value = icon_view->priv->vadjustment->value + y + item->y + item->height - GTK_WIDGET (icon_view)->allocation.height; + value = MIN (value, icon_view->priv->vadjustment->value + y + item->y); gtk_adjustment_set_value (icon_view->priv->vadjustment, value); } + + if (x + item->x < 0) + { + value = icon_view->priv->hadjustment->value + x + item->x; + gtk_adjustment_set_value (icon_view->priv->hadjustment, value); + } + else if (x + item->x + item->width > GTK_WIDGET (icon_view)->allocation.width) + { + value = icon_view->priv->hadjustment->value + x + item->x + item->width + - GTK_WIDGET (icon_view)->allocation.width; + value = MIN (value, icon_view->priv->hadjustment->value + x + item->x); + gtk_adjustment_set_value (icon_view->priv->hadjustment, value); + } } /* Public API */