On Fri, 8 Mar 2024 16:10:26 GMT, Marius Hanl <mh...@openjdk.org> wrote:

>> This PR fixes a long standing issue where the `Tooltip` will always wait one 
>> second until it appears the very first time, even if the 
>> `-fx-show-delay` was set to another value.
>> 
>> The culprit is, that the `cssForced` flag is not inside `Tooltip`, but 
>> inside the `TooltipBehaviour`. So the very first `Tooltip` gets processed 
>> correctly, but after no `Tooltip` will be processed by CSS before showing, 
>> resulting in the set `-fx-show-delay` to not be applied immediately.
>> 
>> Added a bunch of headful tests for the behaviour since there were none 
>> before.
>
> Marius Hanl has refreshed the contents of this pull request, and previous 
> commits have been removed. The incremental views will show differences 
> compared to the previous content of the PR. The pull request contains one new 
> commit since the last revision:
> 
>   JDK-8296387: [Tooltip, CSS] -fx-show-delay is only applied to the first 
> tooltip that is shown before it is displayed

This is another, unrelated issue: If I specify a number instead of duration 
like `-fx-show-delay: 1;` we'll get an exception every time the tooltip is 
about to be shown.


Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: 
class java.lang.Double cannot be cast to class javafx.util.Duration 
(java.lang.Double is in module java.base of loader 'bootstrap'; 
javafx.util.Duration is in module javafx.base of loader 'app')
        at 
javafx.controls/javafx.scene.control.Tooltip.getShowDelay(Tooltip.java:334)
        at 
javafx.controls/javafx.scene.control.Tooltip$TooltipBehavior.lambda$0(Tooltip.java:1015)
        at 
javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
        at 
javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
        at 
javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
        at 
javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
        at 
javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
        at 
javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
        at 
javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at 
javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at 
javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at 
javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at 
javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at 
javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at 
javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at 
javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at 
javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at 
javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at 
javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at 
javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
        at 
javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
        at javafx.base/javafx.event.Event.fireEvent(Event.java:199)
        at 
javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3987)
        at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1893)
        at 
javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2711)
        at 
javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
        at 
javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:1)
        at 
java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
        at 
javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$2(GlassViewEventHandler.java:450)
        at 
javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:430)
        at 
javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
        at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:551)
        at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:937)
        at 
javafx.graphics/com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:128)


Once that happens, the exception will get thrown every time, even after the 
correct CSS is entered.  The app must be restarted.

But we don't get an exception for a boolean value: `-fx-wrap-text:"yo";` or a 
double value like `.tooltip {  -fx-graphic-text-gap:"true"; }`.  The latter 
will correctly issue a warning

WARNING: Failed to set css [-fx-graphic-text-gap] on [DoubleProperty [bean: 
javafx.scene.control.Tooltip@468235b3, name: graphicTextGap, value: 4.0]] due 
to 'class java.lang.Boolean cannot be cast to class java.lang.Number 
(java.lang.Boolean and java.lang.Number are in module java.base of loader 
'bootstrap')'

-------------

PR Comment: https://git.openjdk.org/jfx/pull/1394#issuecomment-1986540225

Reply via email to