[gtk+] range: Implement gtk_range_calc_stepper_sensitivity() properly
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] range: Implement gtk_range_calc_stepper_sensitivity() properly
- Date: Sat, 29 Nov 2014 03:09:56 +0000 (UTC)
commit f3b40ff55fb12cec3387d891790dd851ada4182a
Author: Benjamin Otte <otte redhat com>
Date: Sat Nov 29 02:17:27 2014 +0100
range: Implement gtk_range_calc_stepper_sensitivity() properly
gtk/gtkrange.c | 85 +++++++++++++++++++++++++++++++++-----------------------
1 files changed, 50 insertions(+), 35 deletions(-)
---
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index 861c64d..3e2014f 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -3663,9 +3663,55 @@ gtk_range_calc_slider (GtkRange *range)
static void
gtk_range_calc_stepper_sensitivity (GtkRange *range)
{
- range->priv->need_recalc = TRUE;
- gtk_range_calc_layout (range);
- gtk_widget_queue_draw (GTK_WIDGET (range));
+ GtkRangePrivate *priv = range->priv;
+ gboolean was_upper_sensitive, was_lower_sensitive;
+
+ was_upper_sensitive = priv->upper_sensitive;
+ switch (priv->upper_sensitivity)
+ {
+ case GTK_SENSITIVITY_AUTO:
+ priv->upper_sensitive =
+ (gtk_adjustment_get_value (priv->adjustment) <
+ (gtk_adjustment_get_upper (priv->adjustment) - gtk_adjustment_get_page_size (priv->adjustment)));
+ break;
+
+ case GTK_SENSITIVITY_ON:
+ priv->upper_sensitive = TRUE;
+ break;
+
+ case GTK_SENSITIVITY_OFF:
+ priv->upper_sensitive = FALSE;
+ break;
+ }
+
+ was_lower_sensitive = priv->lower_sensitive;
+ switch (priv->lower_sensitivity)
+ {
+ case GTK_SENSITIVITY_AUTO:
+ priv->lower_sensitive =
+ (gtk_adjustment_get_value (priv->adjustment) > gtk_adjustment_get_lower (priv->adjustment));
+ break;
+
+ case GTK_SENSITIVITY_ON:
+ priv->lower_sensitive = TRUE;
+ break;
+
+ case GTK_SENSITIVITY_OFF:
+ priv->lower_sensitive = FALSE;
+ break;
+ }
+
+ /* Too many side effects can influence which stepper reacts to wat condition.
+ * So we just invalidate them all.
+ */
+ if (was_upper_sensitive != priv->upper_sensitive ||
+ was_lower_sensitive != priv->lower_sensitive)
+ {
+ gtk_range_queue_draw_location (range, MOUSE_STEPPER_A);
+ gtk_range_queue_draw_location (range, MOUSE_STEPPER_B);
+ gtk_range_queue_draw_location (range, MOUSE_STEPPER_C);
+ gtk_range_queue_draw_location (range, MOUSE_STEPPER_D);
+ }
}
static void
@@ -3916,38 +3962,7 @@ gtk_range_calc_layout (GtkRange *range)
gtk_range_calc_slider (range);
gtk_range_update_mouse_location (range);
- switch (priv->upper_sensitivity)
- {
- case GTK_SENSITIVITY_AUTO:
- priv->upper_sensitive =
- (gtk_adjustment_get_value (priv->adjustment) <
- (gtk_adjustment_get_upper (priv->adjustment) - gtk_adjustment_get_page_size (priv->adjustment)));
- break;
-
- case GTK_SENSITIVITY_ON:
- priv->upper_sensitive = TRUE;
- break;
-
- case GTK_SENSITIVITY_OFF:
- priv->upper_sensitive = FALSE;
- break;
- }
-
- switch (priv->lower_sensitivity)
- {
- case GTK_SENSITIVITY_AUTO:
- priv->lower_sensitive =
- (gtk_adjustment_get_value (priv->adjustment) > gtk_adjustment_get_lower (priv->adjustment));
- break;
-
- case GTK_SENSITIVITY_ON:
- priv->lower_sensitive = TRUE;
- break;
-
- case GTK_SENSITIVITY_OFF:
- priv->lower_sensitive = FALSE;
- break;
- }
+ gtk_range_calc_stepper_sensitivity (range);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]