public void toggleFullScreen(boolean state) { if (!SystemInfo.isMacOSLion || myFrame == null) return; if (myInFullScreen != state) { final ID window = MacUtil.findWindowForTitle(myFrame.getTitle()); if (window == null) return; invoke(window, "toggleFullScreen:", window); } }
public static ID fillArray(final Object[] a) { final ID result = invoke("NSMutableArray", "array"); for (Object s : a) { invoke(result, "addObject:", convertType(s)); } return result; }
public static void executeOnMainThread( final Runnable runnable, final boolean withAutoreleasePool, final boolean waitUntilDone) { initRunnableSupport(); synchronized (RUNNABLE_LOCK) { ourCurrentRunnableCount++; ourMainThreadRunnables.put( String.valueOf(ourCurrentRunnableCount), new RunnableInfo(runnable, withAutoreleasePool)); } final ID ideaRunnable = getObjcClass("IdeaRunnable"); final ID runnableObject = invoke(invoke(ideaRunnable, "alloc"), "init"); invoke( runnableObject, "performSelectorOnMainThread:withObject:waitUntilDone:", createSelector("run:"), nsString(String.valueOf(ourCurrentRunnableCount)), Boolean.valueOf(waitUntilDone)); invoke(runnableObject, "release"); }
public MacMainFrameDecorator(@NotNull final IdeFrameImpl frame, final boolean navBar) { myFrame = frame; final ID window = MacUtil.findWindowForTitle(frame.getTitle()); if (window == null) return; if (CURRENT_SETTER == null) { CURRENT_SETTER = navBar ? NAVBAR_SETTER : TOOLBAR_SETTER; CURRENT_GETTER = navBar ? NAVBAR_GETTER : TOOLBAR_GETTER; SHOWN = CURRENT_GETTER.fun(null); } UISettings.getInstance().addUISettingsListener(this, this); final ID pool = invoke("NSAutoreleasePool", "new"); int v = UNIQUE_COUNTER.incrementAndGet(); if (Patches.APPLE_BUG_ID_10514018) { frame.addWindowListener( new WindowAdapter() { @Override public void windowDeiconified(WindowEvent e) { if (e.getWindow() == frame && frame.getState() == Frame.ICONIFIED) { frame.setState(Frame.NORMAL); } } }); } try { if (SystemInfo.isMacOSLion) { if (!FULL_SCREEN_AVAILABLE) return; FullScreenUtilities.addFullScreenListenerTo( frame, new FullScreenAdapter() { @Override public void windowEnteredFullScreen(AppEvent.FullScreenEvent event) { myInFullScreen = true; JRootPane rootPane = frame.getRootPane(); if (rootPane != null) rootPane.putClientProperty(FULL_SCREEN, Boolean.TRUE); if (Patches.APPLE_BUG_ID_10207064) { // fix problem with bottom empty bar // it seems like the title is still visible in fullscreen but the window itself // shifted up for titlebar height // and the size of the frame is still calculated to be the height of the screen // which is wrong // so just add these titlebar height to the frame height once again Timer timer = new Timer( 300, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater( new Runnable() { @Override public void run() { frame.setSize( frame.getWidth(), frame.getHeight() + frame.getInsets().top); } }); } }); timer.setRepeats(false); timer.start(); } } @Override public void windowExitedFullScreen(AppEvent.FullScreenEvent event) { myInFullScreen = false; frame.storeFullScreenStateIfNeeded(false); JRootPane rootPane = frame.getRootPane(); if (rootPane != null) rootPane.putClientProperty(FULL_SCREEN, null); } }); } else { // toggle toolbar String className = "IdeaToolbar" + v; final ID ownToolbar = Foundation.allocateObjcClassPair(Foundation.getObjcClass("NSToolbar"), className); Foundation.registerObjcClassPair(ownToolbar); ID toolbar = invoke( invoke(className, "alloc"), "initWithIdentifier:", Foundation.nsString(className)); Foundation.cfRetain(toolbar); invoke(toolbar, "setVisible:", 0); // hide native toolbar by default Foundation.addMethod( ownToolbar, Foundation.createSelector("setVisible:"), SET_VISIBLE_CALLBACK, "v*"); Foundation.addMethod(ownToolbar, Foundation.createSelector("isVisible"), IS_VISIBLE, "B*"); invoke(window, "setToolbar:", toolbar); invoke(window, "setShowsToolbarButton:", 1); } } finally { invoke(pool, "release"); } }