+ GVariant *new_value = nullptr;
+ const GVariantType *const type = g_variant_get_type(value_.gobj());
+ assert(type);
+
+ if (g_variant_type_equal(type, G_VARIANT_TYPE_BYTE))
+ new_value = g_variant_new_byte(spin_box_->value());
+ else if (g_variant_type_equal(type, G_VARIANT_TYPE_INT16))
+ new_value = g_variant_new_int16(spin_box_->value());
+ else if (g_variant_type_equal(type, G_VARIANT_TYPE_UINT16))
+ new_value = g_variant_new_uint16(spin_box_->value());
+ else if (g_variant_type_equal(type, G_VARIANT_TYPE_INT32))
+ new_value = g_variant_new_int32(spin_box_->value());
+ else if (g_variant_type_equal(type, G_VARIANT_TYPE_UINT32))
+ new_value = g_variant_new_uint32(spin_box_->value());
+ else if (g_variant_type_equal(type, G_VARIANT_TYPE_INT64))
+ new_value = g_variant_new_int64(spin_box_->value());
+ else if (g_variant_type_equal(type, G_VARIANT_TYPE_UINT64))
+ new_value = g_variant_new_uint64(spin_box_->value());
+ else
+ {
+ // Unexpected value type.
+ assert(0);
+ }
+
+ assert(new_value);
+
+ value_ = Glib::VariantBase(new_value);
+
+ setter_(value_);
+}
+
+void Int::on_value_changed(int)
+{
+ commit();