Looks like, while it stole the pointer and focus grab, the combo box somehow didn't steal the keyboard grab. The combo box code does grab the keyboard, though, so I'm rather lost now as to why this happens. In general, it seems to be a bad idea to have popups that potentially spawn other popups.
I ended up using a toplevel, undecorated, window. As for normal comboboxes/other widgets stealing my grabs, I made the following assumptions: - in such cases, I receive a ``leave_notify_event'' with mode eq 'grab' - if the main purpose for a widget to grab the pointer/keyboard is to open a ``modal'' window and be able to close it whenever the user clicks outside of it, the widget that has the focus when this grab takes place will soon lose it - so, when I receive the ``leave_notify_event'', I hook to this widget's ``focus_in_event'', re-grabbing everything when this signal is triggered - this last grab causes an ``enter_notify_event'' with mode eq 'grab' that I intercept in order to disconnect the ``focus_in_event'' handler. The above seems to do the trick. thanks, ciao, -- Giuliano #!/usr/bin/perl $i=$j=$r=$b=-16.0;while((print"\n"),$b++<15){foreach$a(0..78){print +(split //,' .:-;!/>)|&IH%*#')[$k&15];for($i=$k=$r=0;$j=$r*$r-$i*$i -2+$a/25,$i=2*$r*$i+$b/10,$j*$j+$i*$i<11&&$k++<111;$r=$j){}}}
Attachment:
popcombo.pl.gz
Description: application/gunzip