@@ -260,24 +260,25 @@ public void finishCreation() {
260260
261261 @ Override
262262 public void foldHierarchyChanged (FoldHierarchyEvent evt ) {
263- if (! collapsedFoldEncountered ) {
264- // Check if any collapsed fold was added or a collapsed/expanded state changed
265- for ( int i = evt . getAddedFoldCount () - 1 ; i >= 0 ; i --) {
266- if ( evt . getAddedFold ( i ). isCollapsed () ) {
267- collapsedFoldEncountered = true ;
268- break ;
269- }
263+ boolean collapsedAdded = false ;
264+ boolean changedToCollapsed = false ;
265+ // Check if any collapsed fold was added or a collapsed/expanded state changed
266+ for ( int i = evt . getAddedFoldCount () - 1 ; i >= 0 ; i -- ) {
267+ if ( evt . getAddedFold ( i ). isCollapsed ()) {
268+ collapsedAdded = true ;
269+ break ;
270270 }
271- if (! collapsedFoldEncountered ) {
272- for ( int i = evt . getFoldStateChangeCount () - 1 ; i >= 0 ; i -- ) {
273- FoldStateChange foldStateChange = evt . getFoldStateChange ( i );
274- if ( foldStateChange . isCollapsedChanged () && foldStateChange . getFold (). isCollapsed ()) {
275- collapsedFoldEncountered = true ;
276- break ;
277- }
271+ }
272+ if (! collapsedAdded ) {
273+ for ( int i = evt . getFoldStateChangeCount () - 1 ; i >= 0 ; i --) {
274+ FoldStateChange foldStateChange = evt . getFoldStateChange ( i );
275+ if ( foldStateChange . isCollapsedChanged () && foldStateChange . getFold (). isCollapsed ()) {
276+ changedToCollapsed = true ;
277+ break ;
278278 }
279279 }
280280 }
281+ collapsedFoldEncountered |= collapsedAdded || changedToCollapsed ;
281282 JTextComponent comp = textComponent ();
282283 if (collapsedFoldEncountered && comp != null ) {
283284 // [TODO] there could be more detailed inspection done among folds
@@ -289,7 +290,11 @@ public void foldHierarchyChanged(FoldHierarchyEvent evt) {
289290 ViewUtils .log (CHANGE_LOG , "CHANGE in FoldViewFactory: <" + // NOI18N
290291 startOffset + "," + endOffset + ">\n " ); // NOI18N
291292 }
292- comp .putClientProperty ("editorcaret.updateRetainsVisibleOnce" , Boolean .TRUE );
293+ if (collapsedAdded ) {
294+ // this hint covers a specific case when a fold is created as *initially* collapsed
295+ // to maintain caret position on screen, if the caret was visible.
296+ comp .putClientProperty ("editorcaret.updateRetainsVisibleOnce" , Boolean .TRUE );
297+ }
293298 fireEvent (EditorViewFactoryChange .createList (startOffset , endOffset ,
294299 EditorViewFactoryChange .Type .PARAGRAPH_CHANGE ));
295300 }
0 commit comments