Is there any promising work on conceptualizing the abstractions of GUIs?
  It's easy to make a binding thick enough to cover the calling sequences,
naming, etc differences between GUIs for different OSes, but once you
try to support 50 *different* styles for a window border on each OS,
portability goes down the tubes in a hurry.  A GUI builder tool can
certainly customize, to the OS at hand, borders of windows, but what
about menus vs listboxes vs palettes as selection devices?  It's
trivially easy for a GUI vendor to add little goodies that lock a
user, and a binding, into his system.  Is there a good way to program
in terms of 'now let the user enter text, now select from these choices,
now indicate a position with the mouse, ...' and separate out the
particular widgets that enter text, do different kinds of choice
selections, etc?