summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eel/eel-gtk-extensions.c34
-rw-r--r--eel/eel-gtk-extensions.h7
2 files changed, 40 insertions, 1 deletions
diff --git a/eel/eel-gtk-extensions.c b/eel/eel-gtk-extensions.c
index e451bdbf..4969d7aa 100644
--- a/eel/eel-gtk-extensions.c
+++ b/eel/eel-gtk-extensions.c
@@ -353,6 +353,40 @@ eel_gtk_menu_tool_button_get_button (GtkMenuToolButton *tool_button)
return button;
}
+#if !GTK_CHECK_VERSION (3, 0, 0)
+/* The standard gtk_adjustment_set_value ignores page size, which
+ * disagrees with the logic used by scroll bars, for example.
+ */
+void
+eel_gtk_adjustment_set_value (GtkAdjustment *adjustment,
+ float value)
+{
+ float upper_page_start, clamped_value;
+
+ g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
+
+ upper_page_start = MAX (gtk_adjustment_get_upper (adjustment) -
+ gtk_adjustment_get_page_size (adjustment),
+ gtk_adjustment_get_lower (adjustment));
+ clamped_value = CLAMP (value, gtk_adjustment_get_lower (adjustment), upper_page_start);
+ if (clamped_value != gtk_adjustment_get_value (adjustment))
+ {
+ gtk_adjustment_set_value (adjustment, clamped_value);
+ gtk_adjustment_value_changed (adjustment);
+ }
+}
+
+/* Clamp a value if the minimum or maximum has changed. */
+void
+eel_gtk_adjustment_clamp_value (GtkAdjustment *adjustment)
+{
+ g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
+
+ eel_gtk_adjustment_set_value (adjustment,
+ gtk_adjustment_get_value (adjustment));
+}
+#endif
+
/**
* eel_gtk_label_make_bold.
*
diff --git a/eel/eel-gtk-extensions.h b/eel/eel-gtk-extensions.h
index aec680f3..fd85c2db 100644
--- a/eel/eel-gtk-extensions.h
+++ b/eel/eel-gtk-extensions.h
@@ -63,7 +63,12 @@ GtkWidget * eel_gtk_menu_tool_button_get_button (GtkMenuTo
/* GtkLabel */
void eel_gtk_label_make_bold (GtkLabel *label);
-
+#if !GTK_CHECK_VERSION (3, 0, 0)
+/* GtkAdjustment */
+void eel_gtk_adjustment_set_value (GtkAdjustment *adjustment,
+ float value);
+void eel_gtk_adjustment_clamp_value (GtkAdjustment *adjustment);
+#endif
/* GtkTreeView */
void eel_gtk_tree_view_set_activate_on_single_click (GtkTreeView *tree_view,
gboolean should_activate);