Now even more complex...
Basically, create an XCF with (at least) the following layers:
background - Background for the button, the default button has a fully transparent background.
mask - The button mask, everything that is transparent in the mask layer is considered to be 'outside' the button, and is not drawn.
frame - The button frame, or border. It is used to modulate the value component of the specified (in the tag) gbutton background color to get a border
There should also be four guides in the image, two vertical and two horizontal.
Everything to the left of the first vertical guide is considered to be the left end of the button, and everything to the right is the right end. The text is placed between the two horizontal guides.
The area _between_ the two vertical guides is stretched as needed to fill up the whole button.
It's easier to see for your self, open this image in gimp. :-)