Chromium Code Reviews| Index: Source/devtools/front_end/components/DockController.js |
| diff --git a/Source/devtools/front_end/components/DockController.js b/Source/devtools/front_end/components/DockController.js |
| index 0d9b1a0519a202fd19725c499339532f6b0503c8..dcfad75f42c4a594d2de908e8fcbdf79d3c2159a 100644 |
| --- a/Source/devtools/front_end/components/DockController.js |
| +++ b/Source/devtools/front_end/components/DockController.js |
| @@ -116,16 +116,73 @@ WebInspector.DockController.prototype = { |
| if (this._dockSide === dockSide) |
| return; |
| + // We have to create toolbox window while still docked. |
| + // In the case of starting undocked there are no listeners yet, so |
| + // toolbox window must be created here. |
| + if (dockSide === WebInspector.DockController.State.Undocked) { |
| + this._openToolboxWindow(); |
| + if (this._toolboxWindowLoaded) |
| + this._doChangeDockSide(dockSide); |
| + else |
| + this._toolboxWindowLoadedCallback = this._doChangeDockSide.bind(this, dockSide); |
| + } else { |
| + delete this._toolboxWindowLoadedCallback; |
| + this._doChangeDockSide(dockSide); |
| + } |
| + }, |
| + |
| + /** |
| + * @param {string} dockSide |
| + */ |
| + _doChangeDockSide: function(dockSide) |
| + { |
| this.dispatchEventToListeners(WebInspector.DockController.Events.BeforeDockSideChanged, dockSide); |
| - InspectorFrontendHost.setIsDocked(dockSide !== WebInspector.DockController.State.Undocked, this._setIsDockedResponse.bind(this)); |
| + var oldDockSide = this._dockSide; |
| + InspectorFrontendHost.setIsDocked(dockSide !== WebInspector.DockController.State.Undocked, this._setIsDockedResponse.bind(this, oldDockSide)); |
| this._dockSide = dockSide; |
| this._updateUI(); |
| - this.dispatchEventToListeners(WebInspector.DockController.Events.DockSideChanged, this._dockSide); |
| + this.dispatchEventToListeners(WebInspector.DockController.Events.DockSideChanged, oldDockSide); |
| }, |
| - _setIsDockedResponse: function() |
| + /** |
| + * @param {string} oldDockSide |
| + */ |
| + _setIsDockedResponse: function(oldDockSide) |
| + { |
| + this.dispatchEventToListeners(WebInspector.DockController.Events.AfterDockSideChanged, oldDockSide); |
| + }, |
| + |
| + _openToolboxWindow: function() |
| + { |
| + if (this._toolboxWindow) |
| + return; |
| + |
| + var toolbox = (window.location.search ? "&" : "?") + "toolbox=true"; |
| + var hash = window.location.hash; |
| + var url = window.location.href.replace(hash, "") + toolbox + hash; |
| + this._toolboxWindow = window.open(url, undefined); |
| + |
| + this._onToolboxWindowLoadedBound = this._onToolboxWindowLoaded.bind(this); |
| + this._toolboxWindow.addEventListener("DOMContentLoaded", this._onToolboxWindowLoadedBound, false); |
|
pfeldman
2014/05/27 15:37:04
DOMContentLoaded should fire just once.
|
| + }, |
| + |
| + _onToolboxWindowLoaded: function() |
| + { |
| + this._toolboxWindow.removeEventListener("DOMContentLoaded", this._onToolboxWindowLoadedBound, false); |
| + this._toolboxWindowLoaded = true; |
| + |
| + if (this._toolboxWindowLoadedCallback) { |
| + this._toolboxWindowLoadedCallback(this._toolboxWindow); |
| + delete this._toolboxWindowLoadedCallback; |
| + } |
| + }, |
| + |
| + /** |
| + * @return {?Window} |
| + */ |
| + toolboxWindow: function() |
| { |
| - this.dispatchEventToListeners(WebInspector.DockController.Events.AfterDockSideChanged, this._dockSide); |
| + return this._toolboxWindowLoaded ? this._toolboxWindow : null; |
| }, |
| _updateUI: function() |