diff options
author | Edwin Kempin <edwin.kempin@sap.com> | 2013-07-08 10:29:59 +0200 |
---|---|---|
committer | Edwin Kempin <edwin.kempin@sap.com> | 2013-07-08 20:25:58 +0200 |
commit | 3e34ca58b303c66f1ff43aa4dd0baf1a08e794e4 (patch) | |
tree | 5ef8bae63400d1e14327585a63df63e5c7f755ff | |
parent | b85c70efc7c1db93a7a64cb8bbbce7b23a01649b (diff) |
Create popup panel on avatar image only on mouse enter
Every time we make a AvatarImage, even if avatars are not enabled, a
new <div> is created in the top level document node to host a hidden
popup panel that can be used to display the larger avatar image. This
is horribly inefficient when loading a large page like "My > Changes"
with 100 changes on it.
Create the UserPopupPanel only when the mouse enters the AvatarImage
for the first time and the popup is actually displayed.
Change-Id: Ibda47f560137636d203653651540f8f7bb1dd995
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
-rw-r--r-- | gerrit-gwtui/src/main/java/com/google/gerrit/client/AvatarImage.java | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/AvatarImage.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/AvatarImage.java index 9fa89e690d..5dcccb04b5 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/AvatarImage.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/AvatarImage.java @@ -81,8 +81,7 @@ public class AvatarImage extends Image { }); if (addPopup) { - UserPopupPanel userPopup = new UserPopupPanel(account, false, false); - PopupHandler popupHandler = new PopupHandler(userPopup, this); + PopupHandler popupHandler = new PopupHandler(account, this); addMouseOverHandler(popupHandler); addMouseOutHandler(popupHandler); } @@ -115,16 +114,20 @@ public class AvatarImage extends Image { } private class PopupHandler implements MouseOverHandler, MouseOutHandler { - private final UserPopupPanel popup; + private final AccountInfo account; private final UIObject target; + private UserPopupPanel popup; private Timer showTimer; private Timer hideTimer; - public PopupHandler(UserPopupPanel popup, UIObject target) { - this.popup = popup; + public PopupHandler(AccountInfo account, UIObject target) { + this.account = account; this.target = target; + } + private UserPopupPanel createPopupPanel(AccountInfo account) { + UserPopupPanel popup = new UserPopupPanel(account, false, false); popup.addDomHandler(new MouseOverHandler() { @Override public void onMouseOver(MouseOverEvent event) { @@ -137,6 +140,7 @@ public class AvatarImage extends Image { scheduleHide(); } }, MouseOutEvent.getType()); + return popup; } @Override @@ -154,12 +158,16 @@ public class AvatarImage extends Image { hideTimer.cancel(); hideTimer = null; } - if ((popup.isShowing() && popup.isVisible()) || showTimer != null) { + if ((popup != null && popup.isShowing() && popup.isVisible()) + || showTimer != null) { return; } showTimer = new Timer() { @Override public void run() { + if (popup == null) { + popup = createPopupPanel(account); + } if (!popup.isShowing() || !popup.isVisible()) { popup.showRelativeTo(target); } @@ -174,7 +182,8 @@ public class AvatarImage extends Image { showTimer.cancel(); showTimer = null; } - if (!popup.isShowing() || !popup.isVisible() || hideTimer != null) { + if (popup == null || !popup.isShowing() || !popup.isVisible() + || hideTimer != null) { return; } hideTimer = new Timer() { @@ -186,6 +195,4 @@ public class AvatarImage extends Image { hideTimer.schedule(50); } } - - } |