diff --git a/IPython/frontend/qt/console/frontend_widget.py b/IPython/frontend/qt/console/frontend_widget.py index e732d42..e8115a9 100644 --- a/IPython/frontend/qt/console/frontend_widget.py +++ b/IPython/frontend/qt/console/frontend_widget.py @@ -101,6 +101,7 @@ class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin): _CompletionRequest = namedtuple('_CompletionRequest', ['id', 'pos']) _ExecutionRequest = namedtuple('_ExecutionRequest', ['id', 'kind']) _input_splitter_class = InputSplitter + _local_kernel = False #--------------------------------------------------------------------------- # 'object' interface @@ -141,6 +142,9 @@ class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin): # Connect signal handlers. document = self._control.document() document.contentsChange.connect(self._document_contents_change) + + # set flag for whether we are connected via localhost + self._local_kernel = kw.get('local_kernel', False) #--------------------------------------------------------------------------- # 'ConsoleWidget' public interface @@ -366,14 +370,32 @@ class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin): """ Handle shutdown signal, only if from other console. """ if not self._hidden and not self._is_from_this_session(msg): - if not msg['content']['restart']: - sys.exit(0) - else: - # we just got notified of a restart! - time.sleep(0.25) # wait 1/4 sec to reset - # lest the request for a new prompt - # goes to the old kernel - self.reset() + if self._local_kernel: + if not msg['content']['restart']: + sys.exit(0) + else: + # we just got notified of a restart! + time.sleep(0.25) # wait 1/4 sec to reset + # lest the request for a new prompt + # goes to the old kernel + self.reset() + else: # remote kernel, prompt on Kernel shutdown/reset + title = self.window().windowTitle() + if not msg['content']['restart']: + reply = QtGui.QMessageBox.question(self, title, + "Kernel has been shutdown permanently. Close the Console?", + QtGui.QMessageBox.Yes,QtGui.QMessageBox.No) + if reply == QtGui.QMessageBox.Yes: + sys.exit(0) + else: + reply = QtGui.QMessageBox.question(self, title, + "Kernel has been reset. Clear the Console?", + QtGui.QMessageBox.Yes,QtGui.QMessageBox.No) + if reply == QtGui.QMessageBox.Yes: + time.sleep(0.25) # wait 1/4 sec to reset + # lest the request for a new prompt + # goes to the old kernel + self.reset() def _started_channels(self): """ Called when the KernelManager channels have started listening or diff --git a/IPython/frontend/qt/console/ipythonqt.py b/IPython/frontend/qt/console/ipythonqt.py index ad5415d..8f55e17 100644 --- a/IPython/frontend/qt/console/ipythonqt.py +++ b/IPython/frontend/qt/console/ipythonqt.py @@ -57,9 +57,9 @@ class MainWindow(QtGui.QMainWindow): if kernel_manager and kernel_manager.channels_running: title = self.window().windowTitle() reply = QtGui.QMessageBox.question(self, title, - "Close just this console, or shutdown the kernel and close "+ - "all windows attached to it?", - 'Cancel', 'Close Console', 'Close All') + "You are closing this Console window."+ + "\nWould you like to quit the Kernel and all attached Consoles as well?", + 'Cancel', 'No, just this Console', 'Yes, quit everything') if reply == 2: # close All kernel_manager.shutdown_kernel() #kernel_manager.stop_channels() @@ -68,6 +68,7 @@ class MainWindow(QtGui.QMainWindow): if not self._existing: # I have the kernel: don't quit, just close the window self._app.setQuitOnLastWindowClosed(False) + self.deleteLater() event.accept() else: event.ignore() @@ -133,15 +134,16 @@ def main(): kernel_manager.start_kernel() kernel_manager.start_channels() + local_kernel = (args.ip == LOCALHOST) # Create the widget. app = QtGui.QApplication([]) if args.pure: kind = 'rich' if args.rich else 'plain' - widget = FrontendWidget(kind=kind, paging=args.paging) + widget = FrontendWidget(kind=kind, paging=args.paging, local_kernel=local_kernel) elif args.rich or args.pylab: - widget = RichIPythonWidget(paging=args.paging) + widget = RichIPythonWidget(paging=args.paging, local_kernel=local_kernel) else: - widget = IPythonWidget(paging=args.paging) + widget = IPythonWidget(paging=args.paging, local_kernel=local_kernel) widget.gui_completion = args.gui_completion widget.kernel_manager = kernel_manager