United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
JDK-6186575 : Scrollbar triggers adjustment event continuously when disabled, Solaris / linux

Details
Type:
Bug
Submit Date:
2004-10-29
Status:
Open
Updated Date:
2011-04-28
Project Name:
JDK
Resolved Date:
Component:
client-libs
OS:
generic
Sub-Component:
java.awt
CPU:
generic
Priority:
P4
Resolution:
Unresolved
Affected Versions:
1.4.0
Targeted Versions:

Related Reports

Sub Tasks

Description
Disabling a scrollbar when it is getting adjusted triggers adjument events continuously and the bubble automatically moves down till the end. The event generation stops only when the bubble moves to the lower end of the scrollbar. This is noticed on solaris9 (CDE) / linux (RH9) right from 1.4.

On win32, as soon as the scrollbar gets disabled, it gains focus and the bubble starts blinking (but actually there is no bubble there, only the focus border of the bubble blinks). When I press the down arrow, the blinking bubble moves 1 step down and vanishes. 

This is noticed on Motif as well as XToolkit. Reproducible right from 1.4. Reproducible on all platforms, but the behavior of the bug differs b/w win32 and solaris.

I have attached a sample test. Execute the test. You would see a frame with a scrollbar. Click the down arrow of the scrollbar with the mouse. Now the bubble will start moving and you will see a sequence of adj. events being triggered. Now re-run the application and click on the track this time. You will see events being triggered by scrollbar indefinitely.
###@###.### 10/29/04 10:53 GMT

                                    

Comments
EVALUATION

The problem arises when we disabling the component while it's in autoscrolling mode. This means that XScrollbar is expecting MOUSE_RELEASED event to stop autoscrolling. But as it become disabled it would never comes so XScrollbar.handleMouseEvent() missed it.
I'd suggest that XScrollbar should explicitly stop autoscroller when enabled property is about to change to false.
MToolkit have the same issue and seem it's in motif code rather then in awt. There is already a workaround 4263104 in awt_motif.c: awt_motif_Scrollbar_ButtonReleaseHandler() but seem it doesn't solve this problem.
                                     
2006-09-08
SUGGESTED FIX

--- XScrollbarPeer.java	2006-09-08 16:41:02.000000000 +0400
***************
*** 85,90 ****
--- 85,94 ----
          tsb.paint(g, colors, true);
          // paint the whole scrollbar
      }
+     
+     public void disable(){
+         tsb.disable();
+     }
  
      public void repaintScrollbarRequest(XScrollbar sb) {
       repaint();

--- XScrollbar.java	2006-09-08 16:56:19.000000000 +0400
***************
*** 420,425 ****
--- 420,429 ----
  
      abstract boolean beforeThumb(int x, int y);
  
+     public void disable(){
+         scroller.stop();
+     }
+ 
      /**
       *
       * @see java.awt.event.MouseEvent
                                     
2006-09-08
EVALUATION

Reproducible on Motif and XAWT both.
###@###.### 2005-03-10 13:07:20 GMT
                                     
2005-03-10



Hardware and Software, Engineered to Work Together