void (@NotNull EditorGutterComponentImpl gutter) { if (!actionHandlerInstalled) { // [tav] todo: when the API is stable and open move it to ShowGutterIconTooltipAction actionHandlerInstalled = true; EditorActionManager.getInstance().setActionHandler("EditorShowGutterIconTooltip", new EditorActionHandler() { @Override protected void doExecute(@NotNull Editor editor, @Nullable Caret caret, DataContext dataContext) { AccessibleGutterLine line = ((EditorGutterComponentImpl)editor.getGutter()).getCurrentAccessibleLine(); if (line != null) line.showTooltipIfPresent(); } }); } gutter.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { gutter.setCurrentAccessibleLine(createAndActivate(gutter)); } }); gutter.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { gutter.escapeCurrentAccessibleLine(); } }); gutter.getEditor().getCaretModel().addCaretListener(new CaretListener() { @Override public void caretPositionChanged(@NotNull CaretEvent event) { AccessibleGutterLine line = gutter.getCurrentAccessibleLine(); if (line != null) line.maybeLineChanged(); } }); }