Naw, it's technically the "right thing". mtime is only updated when the contents are changed. When you copy and overwrite/paste a file in a file manager, you're essentially deleting the destination file, and putting the copied file in its place.
Yeah, the file mangler is __replacing__ the file, in fact mine even says "do you want to replace" in its dialog :)
Geany is checking for a file having its contents changed, not the file itself being replaced.
What Geany should probably do is use the ctime, which covers both the contents and metadata.
But st_ctime doesn't cover a file having its contents changed "The field st_ctime is changed by writing or by setting inode information (i.e., owner, group, link count, mode, etc.)" (from `man 7 inode`).
And on Windows [IIGC](https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functi...) st_ctime is creation time not metadata time.
I am not sure why Geany doesn't test equals which would handle both.