x-file-dialog uses GetOpenFileName to get a file name.
If you have a buffer that is not visiting any file, when you call save-buffer through a tool-bar button, x-file-dialog gets called.
However, with GetOpenFileName, you must select an existing file.
We can fix this bug by minimum change.
in x-file-dialog (defined in win32fns.c)
change the line:
file_opened = GetOpenFileName (file_details);
to
if (!NILP (mustmatch))
{
file_opened = GetOpenFileName (file_details);
}
else
{
file_opened = GetSaveFileName (file_details);
}