BarMenu improvement, take 2

Pavel Roskin kaffe@rufus.w3.org
Tue, 1 Jun 1999 18:03:24 +0400 (EEST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--96667023-543424753-928245804=:30078
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hello!

Current implementation of java.awt.BarMenu has following defects:

1) If the menu is active, clicking on the menubar makes the pulldown menu
disappear, but is appears again as soon as the mouse is moved.

2) If the menu is active, and the mouse is moved away from the menu over
the empty part of the menubar, there are no signs that the menu is still
active. However, it is.

3) If the menu is active, and there is an menubar item with no popup menu
(e.g. Help in WidgetsDemo), and the mouse is moved from this element
outside the menubar, clicking on other controls doesn't desactivate the
menu.

The attached patch contains following changes:

1) The only way to fix the defect 3 is to open the popup menu even if
there are no items in it. I don't see how to implement the reasonable
behaviour otherwise. WindowAdapter works only if the popup menu is
created. mouseExited doesn't keep track of clicks outside the menubar.
Anyway, this should not affect "serious" applications. And this is how JDK
(in fact Motif) does it.

2) MouseMotionAdapter is registered only for the time when the menu is
activated. This should reduce CPU usage and simplify the handler.

3) MouseMotionAdapter is not allowed to deselect menus. This is intuitive
- check other toolkits, e.g. Gtk.

4) mousePressed deselects the menu if is was selected. Check other
toolkits.

5) java.util.Vector is not imported anymore since it is not used.

6) All System.out.println (commented out) removed.

What is not done:

1) HelpMenu is still not supported

2) Menus don't follow the mouse with the left button pressed. PopupWindow
grabs the focus and gets all the mouseDragged events. I'm affraid this is
not easy to fix.

Pavel Roskin

--96667023-543424753-928245804=:30078
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="barmenu.diff"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9906011803240.30078@intra.typhoon.spb.ru>
Content-Description: 
Content-Disposition: attachment; filename="barmenu.diff"

SW5kZXg6IGxpYnJhcmllcy9qYXZhbGliL2phdmEvYXd0L0Jhck1lbnUuamF2
YQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL2N2
c3B1YmxpYy9rYWZmZS9saWJyYXJpZXMvamF2YWxpYi9qYXZhL2F3dC9CYXJN
ZW51LmphdmEsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjYNCmRpZmYgLXUg
LXIxLjYgQmFyTWVudS5qYXZhDQotLS0gQmFyTWVudS5qYXZhCTE5OTkvMDQv
MjMgMTg6MjI6MzQJMS42DQorKysgQmFyTWVudS5qYXZhCTE5OTkvMDYvMDEg
MTQ6MDk6NTYNCkBAIC05LDcgKzksNiBAQA0KIGltcG9ydCBqYXZhLmF3dC5l
dmVudC5XaW5kb3dBZGFwdGVyOw0KIGltcG9ydCBqYXZhLmF3dC5ldmVudC5X
aW5kb3dFdmVudDsNCiBpbXBvcnQgamF2YS5hd3QuZXZlbnQuV2luZG93TGlz
dGVuZXI7DQotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7DQogDQogLyoqDQog
ICogQ29weXJpZ2h0IChjKSAxOTk4DQpAQCAtMjgsNiArMjcsNyBAQA0KIAlN
ZW51IHNlbGVjdGlvbjsNCiAJTWVudUJhciBtYjsNCiAJUG9wdXBNZW51IGN1
cnJlbnQ7DQorCU1vdXNlTW90aW9uQWRhcHRlciBtbWE7DQogCVdpbmRvd0Fk
YXB0ZXIgd2E7DQogDQogcHVibGljIEJhck1lbnUgKCBNZW51QmFyIG1iKSB7
DQpAQCAtMTM0LDcgKzEzNCw3IEBADQogfQ0KIA0KIGJvb2xlYW4gb3BlblNl
bGVjdGlvbiAoKSB7DQotCWlmICggKHNlbGVjdGlvbiA9PSBudWxsKSB8fCAo
KHNlbGVjdGlvbi5nZXRJdGVtQ291bnQoKSA9PSAwKSkgKQ0KKwlpZiAoc2Vs
ZWN0aW9uID09IG51bGwpDQogCQlyZXR1cm4gZmFsc2U7DQogCQ0KIAlkaXNw
b3NlQ3VycmVudCgpOw0KQEAgLTE0Nyw3ICsxNDcsNiBAQA0KIAlTaG9ydGN1
dEhhbmRsZXIuYWRkU2hvcnRjdXQoIHMyLCBjdXJyZW50LnduZCwgdGhpcyk7
DQogCWN1cnJlbnQud25kLmFkZFdpbmRvd0xpc3RlbmVyKCB3YSk7DQogDQot
Ly9TeXN0ZW0ub3V0LnByaW50bG4oICJsaW5rZWQ6ICIgKyBjdXJyZW50Lndu
ZCk7DQogCXJldHVybiB0cnVlOwkJDQogfQ0KIA0KQEAgLTIwNSwxNiArMjA0
LDIwIEBADQogCVNob3J0Y3V0SGFuZGxlci5hZGRTaG9ydGN1dCggczIsIHRo
aXMsIHRoaXMpOw0KIAlTaG9ydGN1dEhhbmRsZXIuYWRkU2hvcnRjdXQoIHMz
LCB0aGlzLCB0aGlzKTsNCiAJDQotCU1vdXNlTW90aW9uQWRhcHRlciBtbWEg
PSBuZXcgTW91c2VNb3Rpb25BZGFwdGVyKCkgew0KKwltbWEgPSBuZXcgTW91
c2VNb3Rpb25BZGFwdGVyKCkgew0KIAkJcHVibGljIHZvaWQgbW91c2VNb3Zl
ZCggTW91c2VFdmVudCBldnQpIHsNCi0JCQlpZiAoIChBV1RFdmVudC5rZXlU
Z3QgPT0gZXZ0LmdldFNvdXJjZSgpKSB8fCAoY3VycmVudCAhPSBudWxsKSAp
DQotCQkJCXNlbGVjdE1lbnUoIG1lbnVBdCggZXZ0LmdldFgoKSApKTsNCisJ
CQlNZW51IG0gPSBtZW51QXQoIGV2dC5nZXRYKCkgKTsNCisJCQlpZiAobSAh
PSBudWxsKQ0KKwkJCQlzZWxlY3RNZW51KCBtKTsNCiAJCX0NCiAJfTsNCiAJ
TW91c2VBZGFwdGVyIG1hID0gbmV3IE1vdXNlQWRhcHRlcigpIHsNCiAJCXB1
YmxpYyB2b2lkIG1vdXNlUHJlc3NlZCggTW91c2VFdmVudCBldnQpIHsNCiAJ
CQlyZXF1ZXN0Rm9jdXMoKTsNCi0JCQlzZWxlY3RNZW51KCBtZW51QXQoIGV2
dC5nZXRYKCkgKSk7DQorCQkJaWYgKHNlbGVjdGlvbiA9PSBudWxsKQ0KKwkJ
CQlzZWxlY3RNZW51KCBtZW51QXQoIGV2dC5nZXRYKCkgKSk7DQorCQkJZWxz
ZQ0KKwkJCQlzZWxlY3RNZW51KCBudWxsKTsNCiAJCX0NCiAJCXB1YmxpYyB2
b2lkIG1vdXNlUmVsZWFzZWQoIE1vdXNlRXZlbnQgZXZ0ICkgew0KIAkJCXBy
b2Nlc3NTZWxlY3Rpb24oKTsNCkBAIC0yMzEsNyArMjM0LDYgQEANCiAJCX0N
CiAJfTsNCiAJDQotCWFkZE1vdXNlTW90aW9uTGlzdGVuZXIoIG1tYSk7DQog
CWFkZE1vdXNlTGlzdGVuZXIoIG1hKTsNCiB9DQogDQpAQCAtMjUxLDYgKzI1
Myw3IEBADQogCUdyYXBoaWNzIGcgPSBnZXRHcmFwaGljcygpOw0KIA0KIAlp
ZiAoIG0gPT0gbnVsbCApIHsNCisJCXJlbW92ZU1vdXNlTW90aW9uTGlzdGVu
ZXIoIG1tYSk7DQogCQlkaXNwb3NlQ3VycmVudCgpOw0KIAkJc2VsZWN0aW9u
ID0gbnVsbDsNCiAJCXBhaW50TWVudSggZywgbXMpOw0KQEAgLTI1OSw2ICsy
NjIsNyBAQA0KIAkJc2VsZWN0aW9uID0gbTsNCiAJCXBhaW50TWVudSggZywg
bSk7DQogCQlvcGVuU2VsZWN0aW9uKCk7DQorCQlhZGRNb3VzZU1vdGlvbkxp
c3RlbmVyKCBtbWEpOw0KIAl9DQogCWVsc2Ugew0KIAkJc2VsZWN0aW9uID0g
bTsNCkBAIC0zMDQsNyArMzA4LDYgQEANCiAJaWYgKCAoY3VycmVudCAhPSBu
dWxsKSAmJiAoY3VycmVudC53bmQgIT0gbnVsbCApICkgew0KIAkJU2hvcnRj
dXRIYW5kbGVyLnJlbW92ZVNob3J0Y3V0cyggY3VycmVudC53bmQpOw0KIAkJ
Y3VycmVudC53bmQucmVtb3ZlV2luZG93TGlzdGVuZXIoIHdhKTsNCi0vL1N5
c3RlbS5vdXQucHJpbnRsbiggInVubGlua2VkOiAiICsgY3VycmVudC53bmQp
Ow0KIAl9DQogfQ0KIH0NCg==
--96667023-543424753-928245804=:30078--