Iterating an array by a GList is considerably faster than
continuously retrieving items, however it is also a lot
more complicated. So the new macro takes care of that and
uses a new semi-private function to avoid copying the list.
Note that the macro can't be nested, which basically isn't
useful in practise anyway.
We need to be more considerate when to indicate that button
signals were 'handled' and we need to popup the context menu
if we override the default handler.