dragmode: various grab fixes
authorAndrew Chadwick <andrewc-git@piffle.org>
Thu, 29 Nov 2012 13:55:19 +0000 (13:55 +0000)
committerAndrew Chadwick <andrewc-git@piffle.org>
Thu, 29 Nov 2012 13:55:19 +0000 (13:55 +0000)
commitd5335873bfc3a7bdfbf510d1d78b46107a9d008e
treeab76d7999c2bd21450f0beef5b330184eb235343
parenta241a0faa75004e0abc404be28668f5bbe69e77d
dragmode: various grab fixes

Various grab fixes to address a couple of difficult to reproduce bugs
that result in sticky modes:

https://gna.org/bugs/?20333

Working hypothesis is that this is something else in the user's desktop
session breaking the grab. Detect when that happens, and pop the mode
stack to avoid any question of never receiving the spacebar key-up.
Exiting the drag is probably better for users than leaving them stuck in
it with no option other than batting keys. Add some detailed debugging
printout when drag grabs are broken by something.

https://gna.org/bugs/?20068

Working hypothesis is that this a race condition against some other grab
of the same app, probably an implict grab belonging to a colour
selector. Attempt to fix it by rather assertively ungrabbing before
trying the newly active dragmode's grabs. Also, be insistent that a
complete grab has happened before really starting the drag. Failing safe
is better than failing sticky and forcing users to escape out.

Minor fixes: work around a "self.doc is None" exception under unclear
circumstances, and ignore random accidental button presses - presumably
other buttons - while in a drag.
gui/canvasevent.py