Hi Alexander,
I'm concerned with this fix. A toolkit usually captures the mouse
pointer upon a PRESS event, and releases the capture upon a RELEASE
event. This ensures that it will in fact receive the corresponding
RELEASE event. It's important that the RELEASE event gets delivered to
the same window which received the PRESS event initially. IMO, this
applies to the CLICK events as well. Otherwise a lot of user code may
get broken due to unbalanced PRESS/RELEASE events. At least this is what
we do on Windows in both AWT and FX.
Is there a way to do the same on X11? How do we handle a similar
situation on OSX?
Whatever approach we decide to take, we should run regression tests for
Mouse and Events areas, DnD tests perhaps, and also for complex
components such as ComboBoxes (the more the better, both open and
closed) to ensure we don't introduce a regression.
--
best regards,
Anthony
On 05/30/2013 01:13 PM, Alexander Scherbatiy wrote:
Hello,
Could you review the fix:
bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7026679
webrev: http://cr.openjdk.java.net/~alexsch/7026679/webrev.00
This is the direct fix proposed in the issue.
XWindow keep track of button press-releases within the
mouseButtonClickAllowed bitmask. The problem is it's per-window field.
With JComboBox some events comes to XContentWindow some into XFramePeer
due to the specifics of this component - it opens extra toplevel window
for the dropdown.
E.g. MOUSE_PRESS comes to XContentWindow and update its
mouseButtonClickAllowed version with proper value (say 512 - left
button). But MOUSE_RELEASE comes to XFramePeer which
mouseButtonClickAllowed value is 0.
Later on it checks for its state in XWindow.handleMousePressRelease:
if ((type == XConstants.ButtonRelease) &&
((mouseButtonClickAllowed &
XConstants.buttonsMask[lbutton]) != 0) ) // No up-button in the drag-state
{
<construct and post a CLICK_EVENT>
But unfortunately it's value is 0 instead of 512 so we just skip
MOUSE_CLICKED creation.
It seems that making this variable static is reasonable approach to keep
the state of the mouse.
Thanks,
Alexandr.