< prev index next >

modules/javafx.controls/src/main/java/javafx/scene/control/TreeView.java

Print this page
rev 10463 : 8089514: [TableView, TreeView, ListView, TreeTableView] Clicking outside of the edited cell, node, or entry should commit the value

*** 30,39 **** --- 30,41 ---- import com.sun.javafx.scene.control.behavior.TreeCellBehavior; import javafx.scene.control.skin.TreeViewSkin; import javafx.application.Platform; import javafx.beans.DefaultProperty; + import javafx.beans.InvalidationListener; + import javafx.beans.WeakInvalidationListener; import javafx.beans.property.BooleanProperty; import javafx.beans.property.DoubleProperty; import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectPropertyBase; import javafx.beans.property.ReadOnlyIntegerProperty;
*** 334,343 **** --- 336,354 ---- // install default selection and focus models - it's unlikely this will be changed // by many users. MultipleSelectionModel<TreeItem<T>> sm = new TreeViewBitSetSelectionModel<T>(this); setSelectionModel(sm); setFocusModel(new TreeViewFocusModel<T>(this)); + + sceneProperty().addListener((o, oldScene, newScene) -> { + if (oldScene != null) { + oldScene.focusOwnerProperty().removeListener(weakFocusOwnerListener); + } + if (newScene != null) { + newScene.focusOwnerProperty().addListener(weakFocusOwnerListener); + } + }); } /***************************************************************************
*** 382,391 **** --- 393,409 ---- expandedItemCountDirty = true; requestLayout(); } }; + private InvalidationListener focusOwnerListener = o -> { + if (!ControlUtils.isFocusOnNodeOrAnyChild(this)) { + edit(null); + } + }; + private WeakInvalidationListener weakFocusOwnerListener = new WeakInvalidationListener(focusOwnerListener); + private WeakEventHandler<TreeModificationEvent<T>> weakRootEventListener; /***************************************************************************
< prev index next >