diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java index d3043bcde6e4..080128062523 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java @@ -2,6 +2,8 @@ package org.jetbrains.plugins.ipnb.editor.actions; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.command.CommandProcessor; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.ipnb.editor.panels.IpnbEditablePanel; import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; @@ -17,11 +19,19 @@ public abstract class IpnbRunCellBaseAction extends AnAction { cell.runCell(); if (selectNext) { final int index = ipnbFilePanel.getSelectedIndex(); - if (ipnbFilePanel.getIpnbPanels().size()-1 == index) { + if (ipnbFilePanel.getIpnbPanels().size() - 1 == index) { ipnbFilePanel.createAndAddCell(true); - ipnbFilePanel.saveToFile(); + CommandProcessor.getInstance().executeCommand(ipnbFilePanel.getProject(), new Runnable() { + public void run() { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + public void run() { + ipnbFilePanel.saveToFile(); + ipnbFilePanel.selectNext(cell); + } + }); + } + }, "Ipnb.runCell", new Object()); } - ipnbFilePanel.selectNext(cell); } ipnbFilePanel.revalidate(); ipnbFilePanel.repaint(); diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java index 2719b9bfbbe3..4d45e3efd6a8 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java @@ -106,9 +106,7 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider, D mySelectedCell = null; myIpnbFile = IpnbParser.parseIpnbFile(myDocument, myVirtualFile.getPath()); if (myIpnbFile.getCells().isEmpty()) { - final IpnbCodeCell cell = new IpnbCodeCell("python", new String[]{""}, null, new ArrayList()); - myIpnbFile.addCell(cell, 0); - saveToFile(); + createAndAddCell(true); } } catch (IOException e) { if (showError) diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodePanel.java index dfcece89eaa4..2b9d06e91319 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodePanel.java @@ -108,7 +108,10 @@ public class IpnbCodePanel extends IpnbEditablePanel { @Override public void switchToEditing() { setEditing(true); - getParent().repaint(); + final Container parent = getParent(); + if (parent != null) { + parent.repaint(); + } UIUtil.requestFocus(myCodeSourcePanel.getEditor().getContentComponent()); } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java index e3c710f86b73..129471f6878c 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java @@ -105,7 +105,9 @@ public class IpnbCodeSourcePanel extends IpnbPanel imp getIpnbCodePanel().setEditing(false); UIUtil.requestFocus(getIpnbCodePanel().getFileEditor().getIpnbFilePanel()); } - else if (keyCode == KeyEvent.VK_ENTER && InputEvent.CTRL_DOWN_MASK == e.getModifiersEx()) { + + + else if (keyCode == KeyEvent.VK_ENTER && InputEvent.CTRL_MASK == e.getModifiers()) { IpnbRunCellBaseAction.runCell(ipnbFilePanel, false); } else if (keyCode == KeyEvent.VK_ENTER && InputEvent.SHIFT_DOWN_MASK == e.getModifiersEx()) {