@Override
    public void appStarted() {
      Logger logger = Logger.getInstance(MergeAllWindowsAction.class);
      if (JdkEx.isTabbingModeAvailable()) {
        IdeFrame[] frames = WindowManager.getInstance().getAllProjectFrames();

        if (frames.length > 1) {
          for (IdeFrame frame : frames) {
            if (!frame.isInFullScreen()) {
              IdeFrameImpl ideFrame = ((ProjectFrameHelper)frame).getFrame();
              logger.info("=== FullScreenTabSupport: no fullscreen frame: " + ideFrame + " ===");
              JRootPane pane = ideFrame.getRootPane();
              if (pane == null) {
                logger.info("=== FullScreenTabSupport: no root pane for frame: " + ideFrame + " ===");
                return;
              }
              if (pane.getClientProperty(MacMainFrameDecorator.FULL_SCREEN) == null &&
                  pane.getClientProperty(MacMainFrameDecorator.FULL_SCREEN_PROGRESS) == null) {
                return;
              }
              logger.info("=== FullScreenTabSupport: fullscreen in progress for frame: " + ideFrame + " ===");
            }
          }

          int state = Foundation.invoke("NSWindow", "userTabbingPreference").intValue();
          if (state == 2/*NSWindowUserTabbingPreferenceInFullScreen*/) {
            logger.info("=== FullScreenTabSupport: run auto mergeAllWindows on start ===");
            mergeAllWindows(Objects.requireNonNull(((ProjectFrameHelper)frames[0]).getFrame()), false);
          }
          else {
            logger.info("=== FullScreenTabSupport: settings: " + state + " ===");
          }
        }
        else {
          logger.info("=== FullScreenTabSupport: frames: " + frames.length + " ===");
        }
      }
      else if (SystemInfoRt.isMac) {
        logger.info("=== FullScreenTabSupport: off ===");
      }
    }
@Override
    public void appStarted()