From: Benjamin R. <ben...@ou...> - 2012-02-17 16:14:46
|
Hello all, I tracked down an annoying problem in one of applications to the Lasso widget I was using. The widget constructor lets you specify a function to call when the lasso operation is complete. So, when I create a Lasso, I set the canvas's widget lock to the new lasso, and the release function will unlock it when it is done. What would occassionally happen is that the canvas wouldn't get unlocked and I wouldn't be able to use any other widget tools. It turns out that the release function is not called if the number of vertices collected is not more than 2. So, accidental clicks that activate the lasso never get cleaned up. Because of this design, it would be impossible to guarantee a proper cleanup. One could add another button_release callback to clean up if the canvas is still locked, but there is no guarantee that that callback is not called before the lasso's callback, thereby creating a race condition. The only solution I see is to guarantee that the release callback will be called regardless of the length of the vertices array. Does anybody see a problem with that? Cheers! Ben Root |