diff --git a/ChangeLog b/ChangeLog index 5348b00c05..7a23521f9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +Sun Feb 29 19:04:33 2004 Soeren Sandmann + + * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal + function returning a good step value for the mouse wheel. For + scrollbars, base the step on page_size^(2/3), for other ranges, + use 2 * step_increment. + + * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ... + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): + ... and here. + + * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning. + Sun Feb 29 01:51:27 2004 Jonathan Blandford * gtk/gtkfilechooserembed.c diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 5348b00c05..7a23521f9d 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,17 @@ +Sun Feb 29 19:04:33 2004 Soeren Sandmann + + * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal + function returning a good step value for the mouse wheel. For + scrollbars, base the step on page_size^(2/3), for other ranges, + use 2 * step_increment. + + * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ... + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): + ... and here. + + * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning. + Sun Feb 29 01:51:27 2004 Jonathan Blandford * gtk/gtkfilechooserembed.c diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 5348b00c05..7a23521f9d 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,17 @@ +Sun Feb 29 19:04:33 2004 Soeren Sandmann + + * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal + function returning a good step value for the mouse wheel. For + scrollbars, base the step on page_size^(2/3), for other ranges, + use 2 * step_increment. + + * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ... + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): + ... and here. + + * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning. + Sun Feb 29 01:51:27 2004 Jonathan Blandford * gtk/gtkfilechooserembed.c diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 5348b00c05..7a23521f9d 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,17 @@ +Sun Feb 29 19:04:33 2004 Soeren Sandmann + + * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal + function returning a good step value for the mouse wheel. For + scrollbars, base the step on page_size^(2/3), for other ranges, + use 2 * step_increment. + + * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ... + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): + ... and here. + + * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning. + Sun Feb 29 01:51:27 2004 Jonathan Blandford * gtk/gtkfilechooserembed.c diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 5348b00c05..7a23521f9d 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,17 @@ +Sun Feb 29 19:04:33 2004 Soeren Sandmann + + * gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal + function returning a good step value for the mouse wheel. For + scrollbars, base the step on page_size^(2/3), for other ranges, + use 2 * step_increment. + + * gtk/gtkrange.c (gtk_range_scroll_event): Use it here ... + + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event): + ... and here. + + * gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning. + Sun Feb 29 01:51:27 2004 Jonathan Blandford * gtk/gtkfilechooserembed.c diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index bd53ad6ec4..734f6c3c9d 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -2880,7 +2880,7 @@ gtk_menu_leave_notify (GtkWidget *widget, gtk_menu_set_submenu_navigation_region (menu, menu_item, event); return TRUE; } - else if (menu_item == menu_shell->active_menu_item) + else if (menu_item == GTK_MENU_ITEM (menu_shell->active_menu_item)) { /* We are leaving an active menu item with nonactive submenu. * Deselect it so we don't surprise the user with by popping diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index d277de8f18..88520c91eb 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -26,11 +26,13 @@ */ #include +#include #include "gtkintl.h" #include "gtkmain.h" #include "gtkmarshalers.h" #include "gtkrange.h" #include "gtkintl.h" +#include "gtkscrollbar.h" #define SCROLL_INITIAL_DELAY 250 /* must hold button this long before ... */ #define SCROLL_LATER_DELAY 100 /* ... it starts repeating at this rate */ @@ -1364,6 +1366,39 @@ gtk_range_button_release (GtkWidget *widget, return FALSE; } +/** + * _gtk_range_get_wheel_delta: + * @range: a #GtkRange + * @direction: A #GdkScrollDirection + * + * Returns a good step value for the mouse wheel. + * + * Return value: A good step value for the mouse wheel. + * + * Since: 2.4 + **/ +gdouble +_gtk_range_get_wheel_delta (GtkRange *range, + GdkScrollDirection direction) +{ + GtkAdjustment *adj = range->adjustment; + gdouble delta; + + if (GTK_IS_SCROLLBAR (range)) + delta = pow (adj->page_size, 2.0 / 3.0); + else + delta = adj->step_increment * 2; + + if (direction == GDK_SCROLL_UP || + direction == GDK_SCROLL_LEFT) + delta = - delta; + + if (range->inverted) + delta = - delta; + + return delta; +} + static gint gtk_range_scroll_event (GtkWidget *widget, GdkEventScroll *event) @@ -1373,16 +1408,11 @@ gtk_range_scroll_event (GtkWidget *widget, if (GTK_WIDGET_REALIZED (range)) { GtkAdjustment *adj = GTK_RANGE (range)->adjustment; - gdouble increment = ((event->direction == GDK_SCROLL_UP || - event->direction == GDK_SCROLL_LEFT) ? - -adj->page_increment / 2: - adj->page_increment / 2); - - if (range->inverted) - increment = -increment; - - gtk_range_internal_set_value (range, adj->value + increment); + gdouble delta; + delta = _gtk_range_get_wheel_delta (range, event->direction); + gtk_range_internal_set_value (range, adj->value + delta); + /* Policy DELAYED makes sense with scroll events, * but DISCONTINUOUS doesn't, so we update immediately * for DISCONTINUOUS diff --git a/gtk/gtkrange.h b/gtk/gtkrange.h index 02ffdad49c..9f3758ea8c 100644 --- a/gtk/gtkrange.h +++ b/gtk/gtkrange.h @@ -149,6 +149,8 @@ void gtk_range_set_value (GtkRange *range, gdouble value); gdouble gtk_range_get_value (GtkRange *range); +gdouble _gtk_range_get_wheel_delta (GtkRange *range, + GdkScrollDirection direction); #ifdef __cplusplus } diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 067e0c1fb2..6b42c19209 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -24,6 +24,7 @@ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ +#include #include #include "gtkbindings.h" #include "gtkmarshalers.h" @@ -1226,14 +1227,12 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget, if (range && GTK_WIDGET_VISIBLE (range)) { GtkAdjustment *adj = GTK_RANGE (range)->adjustment; - gdouble new_value; + gdouble delta, new_value; - if (event->direction == GDK_SCROLL_UP || event->direction == GDK_SCROLL_LEFT) - new_value = adj->value - adj->page_increment / 2; - else - new_value = adj->value + adj->page_increment / 2; + delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event->direction); - new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size); + new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size); + gtk_adjustment_set_value (adj, new_value); return TRUE;