diff --git a/IPython/html/static/notebook/js/kernelselector.js b/IPython/html/static/notebook/js/kernelselector.js index efb9032d0..c78affad6 100644 --- a/IPython/html/static/notebook/js/kernelselector.js +++ b/IPython/html/static/notebook/js/kernelselector.js @@ -12,6 +12,7 @@ define([ this.selector = selector; this.notebook = notebook; this.events = notebook.events; + this.current_selection = notebook.default_kernel_name; this.kernelspecs = {}; if (this.selector !== undefined) { this.element = $(selector); @@ -42,7 +43,7 @@ define([ }; KernelSelector.prototype.change_kernel = function(kernel_name) { - if (kernel_name === this.notebook.kernel.name) { + if (kernel_name === this.current_selection) { return; } var ks = this.kernelspecs[kernel_name]; @@ -54,8 +55,19 @@ define([ KernelSelector.prototype.bind_events = function() { var that = this; this.events.on('spec_changed.Kernel', function(event, data) { + that.current_selection = data.name; that.element.find("#current_kernel_spec").find('.kernel_name').text(data.display_name); }); + + this.events.on('started.Session', function(events, session) { + if (session.kernel_name !== that.current_selection) { + // If we created a 'python' session, we only know if it's Python + // 3 or 2 on the server's reply, so we fire the event again to + // set things up. + var ks = that.kernelspecs[session.kernel_name]; + that.events.trigger('spec_changed.Kernel', ks); + } + }); }; return {'KernelSelector': KernelSelector}; diff --git a/IPython/html/static/services/sessions/js/session.js b/IPython/html/static/services/sessions/js/session.js index f84623d1d..07339e70a 100644 --- a/IPython/html/static/services/sessions/js/session.js +++ b/IPython/html/static/services/sessions/js/session.js @@ -13,6 +13,7 @@ define([ this.kernel = null; this.id = null; this.notebook = options.notebook; + this.events = options.notebook.events; this.name = options.notebook_name; this.path = options.notebook_path; this.kernel_name = options.kernel_name; @@ -92,13 +93,8 @@ define([ Session.prototype._handle_start_success = function (data, status, xhr) { this.id = data.id; // If we asked for 'python', the response will have 'python3' or 'python2'. - // In this case, fire the spec changed event again to update the name - // and highlighting. - if (data.kernel.name !== this.kernel_name) { - this.kernel_name = data.kernel.name; - var ks = IPython.kernelselector.kernelspecs[this.kernel_name]; - this.notebook.events.trigger('spec_changed.Kernel', ks); - } + this.kernel_name = data.kernel.name; + this.events.trigger('started.Session', this); var kernel_service_url = utils.url_path_join(this.base_url, "api/kernels"); this.kernel = new kernel.Kernel(kernel_service_url, this.ws_url, this.notebook, this.kernel_name); this.kernel._kernel_started(data.kernel);