+/*
+ * These are paired 0/1 and 2/3. 0/2 are min values, 1/3 are max values.
+ * If the max is made smaller than min, adjust min down.
+ * If the min is made larger than max, adjust the max.
+ */
+static void range_value_changed(GtkSpinButton *spin, gpointer data)
+{
+ struct gopt_range *r = (struct gopt_range *) data;
+ int changed = -1, i;
+ gint val, mval;
+
+ for (i = 0; i < GOPT_RANGE_SPIN; i++) {
+ if (GTK_SPIN_BUTTON(r->spins[i]) == spin) {
+ changed = i;
+ break;
+ }
+ }
+
+ assert(changed != -1);
+
+ /*
+ * Min changed
+ */
+ if (changed == 0 || changed == 2) {
+ GtkWidget *mspin = r->spins[changed + 1];
+
+ val = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(r->spins[changed]));
+ mval = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(mspin));
+ if (val > mval)
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(mspin), val);
+ } else {
+ GtkWidget *mspin = r->spins[changed - 1];
+
+ val = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(r->spins[changed]));
+ mval = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(mspin));
+ if (val < mval)
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(mspin), val);
+ }
+}
+