> Now the next question. If the Ctrl, Alt or Graphic key(s) were down
> while the user mashed that F1...
> 
> A> how do I know this? e.state picks up Shift, but how do I detect the
> others?
> 
> B> how, modulo DIY, do I stringify them?

str=''
if e.state & Gdk::SHIFT_MASK != 0 then str << "Shift"; end
if e.state & Gdk::CONTROL_MASK != 0 then str << "Control"; end
etc...

or

{ Gdk::SHIFT_MASK => 'shift',
  Gdk::CONTROL_MASK => 'control',
  ...
}.each { |m. s| str << s + "-" if e.state & m != 0 }

or something like that.