Chromium Code Reviews| Index: Source/devtools/front_end/SourcesPanel.js |
| diff --git a/Source/devtools/front_end/SourcesPanel.js b/Source/devtools/front_end/SourcesPanel.js |
| index 3806df3e2885dc91b5aedac35bbf3c91efbb9300..37bbdcd2ac24dad80af6b582880f88af047a1aa0 100644 |
| --- a/Source/devtools/front_end/SourcesPanel.js |
| +++ b/Source/devtools/front_end/SourcesPanel.js |
| @@ -26,6 +26,8 @@ |
| importScript("BreakpointsSidebarPane.js"); |
| importScript("CallStackSidebarPane.js"); |
| +importScript("SimpleHistoryManager.js"); |
| +importScript("EditingLocationHistoryManager.js"); |
| importScript("FilePathScoreFunction.js"); |
| importScript("FilteredItemSelectionDialog.js"); |
| importScript("UISourceCodeFrame.js"); |
| @@ -68,7 +70,7 @@ WebInspector.SourcesPanel = function(workspaceForTest) |
| */ |
| function viewGetter() |
| { |
| - return this.visibleView; |
| + return this; |
| } |
| WebInspector.GoToLineDialog.install(this, viewGetter.bind(this)); |
| @@ -141,6 +143,18 @@ WebInspector.SourcesPanel = function(workspaceForTest) |
| this.sidebarPanes.workerList = new WebInspector.WorkersSidebarPane(WebInspector.workerManager); |
| } |
| + /** |
| + * @this {WebInspector.SourcesPanel} |
| + */ |
| + function currentSourceFrame() |
| + { |
| + var uiSourceCode = this.currentUISourceCode(); |
| + if (!uiSourceCode) |
| + return null; |
| + return this._sourceFramesByUISourceCode.get(uiSourceCode); |
| + } |
| + this._historyManager = new WebInspector.EditingLocationHistoryManager(this, currentSourceFrame.bind(this)); |
| + |
| this.sidebarPanes.callstack.registerShortcuts(this.registerShortcuts.bind(this)); |
| this.registerShortcuts(WebInspector.SourcesPanelDescriptor.ShortcutKeys.GoToMember, this._showOutlineDialog.bind(this)); |
| this.registerShortcuts(WebInspector.SourcesPanelDescriptor.ShortcutKeys.ToggleBreakpoint, this._toggleBreakpoint.bind(this)); |
| @@ -297,6 +311,7 @@ WebInspector.SourcesPanel.prototype = { |
| for (var i = 0; i < uiSourceCodes.length; ++i) { |
| this._navigator.removeUISourceCode(uiSourceCodes[i]); |
| this._removeSourceFrame(uiSourceCodes[i]); |
| + this._historyManager.removeHistoryForSourceCode(uiSourceCodes[i]); |
| } |
| this._editorContainer.removeUISourceCodes(uiSourceCodes); |
| }, |
| @@ -513,12 +528,16 @@ WebInspector.SourcesPanel.prototype = { |
| */ |
| _showSourceLocation: function(uiSourceCode, lineNumber, columnNumber, forceShowInPanel) |
| { |
| + if (uiSourceCode === this._currentUISourceCode && typeof lineNumber === "number") { |
|
vsevik
2014/01/15 16:19:05
This looks redundant.
Please remove these lines un
lushnikov
2014/01/16 17:10:29
Done.
|
| + this.highlightPosition(lineNumber, columnNumber); |
| + return; |
| + } |
| this._showEditor(forceShowInPanel); |
| var sourceFrame = this._showFile(uiSourceCode); |
| if (typeof lineNumber === "number") |
| sourceFrame.highlightPosition(lineNumber, columnNumber); |
| sourceFrame.focus(); |
| - |
| + this._historyManager.updateCurrentState(); |
| WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMetrics.UserAction, { |
| action: WebInspector.UserMetrics.UserActionNames.OpenSourceLink, |
| url: uiSourceCode.originURL(), |
| @@ -535,9 +554,13 @@ WebInspector.SourcesPanel.prototype = { |
| var sourceFrame = this._getOrCreateSourceFrame(uiSourceCode); |
| if (this._currentUISourceCode === uiSourceCode) |
| return sourceFrame; |
| + |
| + this._historyManager.updateCurrentState(); |
|
vsevik
2014/01/15 16:19:05
You wrap incorrect line with your calls here and t
lushnikov
2014/01/16 17:10:29
Moved these lines out of the method
|
| this._currentUISourceCode = uiSourceCode; |
| if (!uiSourceCode.project().isServiceProject()) |
| this._navigator.revealUISourceCode(uiSourceCode, true); |
| + this._historyManager.pushNewState(); |
| + |
| this._editorContainer.showFile(uiSourceCode); |
| this._updateScriptViewStatusBarItems(); |
| @@ -572,6 +595,7 @@ WebInspector.SourcesPanel.prototype = { |
| } |
| sourceFrame.setHighlighterType(uiSourceCode.highlighterType()); |
| this._sourceFramesByUISourceCode.put(uiSourceCode, sourceFrame); |
| + this._historyManager.trackSourceFrameCursorJumps(sourceFrame); |
| return sourceFrame; |
| }, |
| @@ -688,6 +712,7 @@ WebInspector.SourcesPanel.prototype = { |
| { |
| this._navigatorController.hideNavigatorOverlay(); |
| var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data); |
| + this._historyManager.removeHistoryForSourceCode(uiSourceCode); |
| if (this._currentUISourceCode === uiSourceCode) |
| delete this._currentUISourceCode; |
| @@ -699,8 +724,13 @@ WebInspector.SourcesPanel.prototype = { |
| _editorSelected: function(event) |
| { |
| - var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data); |
| + var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data.currentFile); |
| + if (!event.data.userGesture) |
| + this._historyManager.readOnlyLock(); |
|
vsevik
2014/01/16 12:24:26
Can we remove these?
lushnikov
2014/01/16 17:10:29
Not really; test fails.
|
| var sourceFrame = this._showFile(uiSourceCode); |
| + if (!event.data.userGesture) |
| + this._historyManager.releaseReadOnlyLock(); |
| + |
| this._navigatorController.hideNavigatorOverlay(); |
| if (!this._navigatorController.isNavigatorPinned()) |
| sourceFrame.focus(); |
| @@ -1160,6 +1190,18 @@ WebInspector.SourcesPanel.prototype = { |
| view.replaceAllWith(query, text); |
| }, |
| + /** |
| + * @param {!KeyboardEvent} event |
| + */ |
| + handleShortcut: function(event) |
|
vsevik
2014/01/15 16:19:05
Please register and handle this shortcuts on the p
lushnikov
2014/01/16 17:10:29
Done.
|
| + { |
| + if (this._historyManager.handleShortcut(event)) { |
| + event.handled = true; |
| + return; |
| + } |
| + WebInspector.Panel.prototype.handleShortcut.call(this, event); |
| + }, |
| + |
| _onKeyDown: function(event) |
| { |
| if (event.keyCode !== WebInspector.KeyboardShortcut.Keys.CtrlOrMeta.code) |
| @@ -1630,7 +1672,9 @@ WebInspector.SourcesPanel.prototype = { |
| { |
| if (!this.canHighlightPosition()) |
| return; |
| + this._historyManager.updateCurrentState(); |
| this.visibleView.highlightPosition(line, column); |
| + this._historyManager.pushNewState(); |
| }, |
| /** |