1919 */
2020package gwt .material .design .client .base .mixin ;
2121
22+ import com .google .gwt .event .shared .HandlerRegistration ;
2223import com .google .gwt .user .client .Element ;
2324import com .google .gwt .user .client .ui .HasText ;
24- import com .google .gwt .user .client .ui .Widget ;
2525import gwt .material .design .client .base .HasTruncate ;
2626import gwt .material .design .client .base .MaterialWidget ;
2727import gwt .material .design .client .constants .CssName ;
2828
2929public class TruncateMixin <T extends MaterialWidget & HasTruncate > extends AbstractMixin <T > implements HasTruncate {
3030
3131 private ToggleStyleMixin <MaterialWidget > toggleStyleMixin ;
32+ private HandlerRegistration mouseOverHandler , mouseOutHandler ;
33+ private boolean enableTruncateTitle = true ;
3234
3335 public TruncateMixin (T uiObject ) {
3436 super (uiObject );
@@ -42,19 +44,33 @@ public void setTruncate(boolean truncate) {
4244
4345 public void checkEllipsis () {
4446 if (uiObject instanceof HasText ) {
45- Element element = uiObject .getElement ();
46- HasText hasText = (HasText ) uiObject ;
47- element .setAttribute ("title" , "" );
48- uiObject .addMouseOverHandler (event -> {
49- if (!uiObject .getElement ().hasAttribute ("title" )) return ;
50- String text = hasText .getText ();
51- boolean withEllipsis = element .getOffsetWidth () < element .getScrollWidth ();
52- if (withEllipsis ) {
53- element .setAttribute ("title" , text );
47+ if (enableTruncateTitle ) {
48+ Element element = uiObject .getElement ();
49+ HasText hasText = (HasText ) uiObject ;
50+ element .setAttribute ("title" , "" );
51+ if (mouseOutHandler == null ) {
52+ mouseOverHandler = uiObject .addMouseOverHandler (event -> {
53+ if (!uiObject .getElement ().hasAttribute ("title" )) return ;
54+ String text = hasText .getText ();
55+ boolean withEllipsis = element .getOffsetWidth () < element .getScrollWidth ();
56+ if (withEllipsis ) {
57+ element .setAttribute ("title" , text );
58+ }
59+ });
5460 }
55- });
5661
57- uiObject .addMouseOutHandler (event -> element .setAttribute ("title" , "" ));
62+ if (mouseOutHandler == null ) {
63+ mouseOutHandler = uiObject .addMouseOutHandler (event -> element .setAttribute ("title" , "" ));
64+ }
65+ } else {
66+ if (mouseOverHandler != null ) {
67+ mouseOverHandler .removeHandler ();
68+ }
69+
70+ if (mouseOutHandler != null ) {
71+ mouseOutHandler .removeHandler ();
72+ }
73+ }
5874 }
5975 }
6076
@@ -63,6 +79,16 @@ public boolean isTruncate() {
6379 return getToggleStyleMixin ().isOn ();
6480 }
6581
82+ @ Override
83+ public void setEnableTruncateTitle (boolean value ) {
84+ this .enableTruncateTitle = value ;
85+ }
86+
87+ @ Override
88+ public boolean isEnableTruncateTitle () {
89+ return enableTruncateTitle ;
90+ }
91+
6692 public ToggleStyleMixin <MaterialWidget > getToggleStyleMixin () {
6793 if (toggleStyleMixin == null ) {
6894 toggleStyleMixin = new ToggleStyleMixin <>(uiObject , CssName .TRUNCATE );
0 commit comments