Example #1
0
    @Override
    public void dispose() {
      if (isShowing()) {
        hide();
      }

      if (myWindowListener != null) {
        myWindowListener.saveSize();
        removeWindowListener(myWindowListener);
        myWindowListener = null;
      }

      if (myComponentListener != null) {
        removeComponentListener(myComponentListener);
        myComponentListener = null;
      }

      if (myFocusTrackback != null
          && !(myFocusTrackback.isSheduledForRestore()
              || myFocusTrackback.isWillBeSheduledForRestore())) {
        myFocusTrackback.dispose();
        myFocusTrackback = null;
      }

      final BufferStrategy strategy = getBufferStrategy();
      if (strategy != null) {
        strategy.dispose();
      }
      super.dispose();

      if (rootPane != null) { // Workaround for bug in native code to hold rootPane
        try {
          Field field = rootPane.getClass().getDeclaredField("glassPane");
          field.setAccessible(true);
          field.set(rootPane, null);

          field = rootPane.getClass().getDeclaredField("contentPane");
          field.setAccessible(true);
          field.set(rootPane, null);
          rootPane = null;

          field = Window.class.getDeclaredField("windowListener");
          field.setAccessible(true);
          field.set(this, null);
        } catch (Exception ignored) {
        }
      }

      // http://bugs.sun.com/view_bug.do?bug_id=6614056
      try {
        final Field field = Dialog.class.getDeclaredField("modalDialogs");
        field.setAccessible(true);
        final List<?> list = (List<?>) field.get(null);
        list.remove(this);
      } catch (final Exception ignored) {
      }
    }
Example #2
0
 @Override
 @SuppressWarnings("deprecation")
 public void hide() {
   super.hide();
   if (myFocusTrackback != null
       && !(myFocusTrackback.isSheduledForRestore()
           || myFocusTrackback.isWillBeSheduledForRestore())) {
     myFocusTrackback.setWillBeSheduledForRestore();
     IdeFocusManager mgr = getFocusManager();
     Runnable r =
         new Runnable() {
           @Override
           public void run() {
             if (myFocusTrackback != null) myFocusTrackback.restoreFocus();
             myFocusTrackback = null;
           }
         };
     mgr.doWhenFocusSettlesDown(r);
   }
 }