TextMetric also contains avg and max width; as well as PitchandFamily
Which could help as a workaround.
Interesting that Canvas.TextWidth fails, not that I tested it lately, but I remember it served well when I implemented the checks in SynEdit (probably a year back at least). (SynEdit uses GetTextExtentPoint, but so does TextWidth).
I run your program, and actually it seems that changing the fontname does not set the font under gtk2 (label1 doesn't change). So that is probably where the problem is.
---
Something else, that might be of interest to you, if you play with those things. Many such tests use "M" and "W" for finding the widest char. Surprisingly I found that in quite a few fonts the "@" is by far wider.
That excludes of course so called "full width" chars (Japanese, Chinese, Arabic), which even in a monospaced font have twice the width of the latin based chars