diff --git a/browser/devtools/debugger/DebuggerUI.jsm b/browser/devtools/debugger/DebuggerUI.jsm index b1d01de7bc3b..56b63273cf5a 100644 --- a/browser/devtools/debugger/DebuggerUI.jsm +++ b/browser/devtools/debugger/DebuggerUI.jsm @@ -568,6 +568,7 @@ DebuggerUI.prototype = { let dbg = this.getDebugger(this.aWindow.gBrowser.selectedTab); dbg.debuggerWindow.SourceScripts.setEditorMode(aSourceUrl, aContentType); dbg.editor.setText(aSourceText); + dbg.editor.resetUndo(); let doc = dbg.frame.contentDocument; let scripts = doc.getElementById("scripts"); let elt = scripts.getElementsByAttribute("value", aSourceUrl)[0]; diff --git a/browser/devtools/debugger/debugger.js b/browser/devtools/debugger/debugger.js index fb9beb4c210e..3eba415a4908 100644 --- a/browser/devtools/debugger/debugger.js +++ b/browser/devtools/debugger/debugger.js @@ -615,6 +615,7 @@ var SourceScripts = { window.editor.setText(aScript.text); window.updateEditorBreakpoints(); } + window.editor.resetUndo(); } }; diff --git a/browser/devtools/debugger/debugger.xul b/browser/devtools/debugger/debugger.xul index 4238108279cc..c51f331befcc 100644 --- a/browser/devtools/debugger/debugger.xul +++ b/browser/devtools/debugger/debugger.xul @@ -45,10 +45,29 @@ %debuggerDTD; ]> + + + + + + + + + + + + + + + + + +
diff --git a/browser/devtools/debugger/test/Makefile.in b/browser/devtools/debugger/test/Makefile.in index bb3e29eb67bb..0a96d99a7630 100644 --- a/browser/devtools/debugger/test/Makefile.in +++ b/browser/devtools/debugger/test/Makefile.in @@ -74,6 +74,7 @@ _BROWSER_TEST_FILES = \ browser_dbg_select-line.js \ browser_dbg_clean-exit.js \ browser_dbg_bug723069_editor-breakpoints.js \ + browser_dbg_bug731394_editor-contextmenu.js \ head.js \ $(NULL) diff --git a/browser/devtools/debugger/test/browser_dbg_bug731394_editor-contextmenu.js b/browser/devtools/debugger/test/browser_dbg_bug731394_editor-contextmenu.js new file mode 100644 index 000000000000..e4be65aac2cf --- /dev/null +++ b/browser/devtools/debugger/test/browser_dbg_bug731394_editor-contextmenu.js @@ -0,0 +1,102 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Bug 731394: test the debugger source editor default context menu. + */ + +const TAB_URL = EXAMPLE_URL + "browser_dbg_script-switching.html"; + +let gPane = null; +let gTab = null; +let gDebuggee = null; +let gDebugger = null; + +function test() +{ + let tempScope = {}; + Cu.import("resource:///modules/source-editor.jsm", tempScope); + let SourceEditor = tempScope.SourceEditor; + + let contextMenu = null; + + debug_tab_pane(TAB_URL, function(aTab, aDebuggee, aPane) { + gTab = aTab; + gDebuggee = aDebuggee; + gPane = aPane; + gDebugger = gPane.debuggerWindow; + + gPane.activeThread.addOneTimeListener("scriptsadded", function() { + Services.tm.currentThread.dispatch({ run: onScriptsAdded }, 0); + }); + gDebuggee.firstCall(); + }); + + function onScriptsAdded() + { + let scripts = gDebugger.DebuggerView.Scripts._scripts; + + is(gDebugger.StackFrames.activeThread.state, "paused", + "Should only be getting stack frames while paused."); + + is(scripts.itemCount, 2, "Found the expected number of scripts."); + + let editor = gDebugger.editor; + + isnot(editor.getText().indexOf("debugger"), -1, + "The correct script was loaded initially."); + + contextMenu = gDebugger.document.getElementById("sourceEditorContextMenu"); + ok(contextMenu, "source editor context menupopup"); + ok(editor.readOnly, "editor is read only"); + + editor.focus(); + editor.setSelection(0, 10); + + contextMenu.addEventListener("popupshown", function onPopupShown() { + contextMenu.removeEventListener("popupshown", onPopupShown, false); + executeSoon(testContextMenu); + }, false); + contextMenu.openPopup(editor.editorElement, "overlap", 0, 0, true, false); + } + + function testContextMenu() + { + let document = gDebugger.document; + + ok(document.getElementById("editMenuCommands"), + "#editMenuCommands found"); + ok(!document.getElementById("editMenuKeys"), + "#editMenuKeys not found"); + ok(document.getElementById("sourceEditorCommands"), + "#sourceEditorCommands found"); + ok(document.getElementById("sourceEditorKeys"), + "#sourceEditorKeys found"); + + // Map command ids to their expected disabled state. + let commands = {"se-cmd-undo": true, "se-cmd-redo": true, + "se-cmd-cut": true, "se-cmd-paste": true, + "se-cmd-delete": true, "cmd_findAgain": true, + "cmd_findPrevious": true, "cmd_find": false, + "cmd_gotoLine": false, "cmd_copy": false, + "se-cmd-selectAll": false}; + for (let id in commands) { + let element = document.getElementById(id); + is(element.hasAttribute("disabled"), commands[id], + id + " hasAttribute('disabled') check"); + } + + executeSoon(function() { + contextMenu.hidePopup(); + gDebugger.StackFrames.activeThread.resume(finish); + }); + } + + registerCleanupFunction(function() { + removeTab(gTab); + gPane = null; + gTab = null; + gDebuggee = null; + gDebugger = null; + }); +} diff --git a/browser/devtools/jar.mn b/browser/devtools/jar.mn index 396a1b302e0e..8c918130825a 100644 --- a/browser/devtools/jar.mn +++ b/browser/devtools/jar.mn @@ -10,7 +10,7 @@ browser.jar: content/browser/devtools/cssruleview.xul (styleinspector/cssruleview.xul) content/browser/devtools/styleinspector.css (styleinspector/styleinspector.css) content/browser/orion.js (sourceeditor/orion/orion.js) - content/browser/source-editor-overlay.xul (sourceeditor/source-editor-overlay.xul) +* content/browser/source-editor-overlay.xul (sourceeditor/source-editor-overlay.xul) * content/browser/debugger.xul (debugger/debugger.xul) content/browser/debugger.css (debugger/debugger.css) content/browser/debugger.js (debugger/debugger.js) diff --git a/browser/devtools/scratchpad/scratchpad.xul b/browser/devtools/scratchpad/scratchpad.xul index 7efe53bed14e..d57cdf95c624 100644 --- a/browser/devtools/scratchpad/scratchpad.xul +++ b/browser/devtools/scratchpad/scratchpad.xul @@ -111,21 +111,6 @@ modifiers="accel"/> --> - - - - - - - - -#ifdef XP_MACOSX - - -#else - - -#endif @@ -219,56 +182,20 @@ - - + onpopupshowing="goUpdateSourceEditorMenuItems()"> + + - - - + + + - + - - + + - + @@ -338,13 +265,13 @@ - - - - + onpopupshowing="goUpdateSourceEditorMenuItems()"> + + + + - + - + diff --git a/browser/devtools/scratchpad/test/browser_scratchpad_bug_699130_edit_ui_updates.js b/browser/devtools/scratchpad/test/browser_scratchpad_bug_699130_edit_ui_updates.js index 72e58eb8b15c..4befa8d690f8 100644 --- a/browser/devtools/scratchpad/test/browser_scratchpad_bug_699130_edit_ui_updates.js +++ b/browser/devtools/scratchpad/test/browser_scratchpad_bug_699130_edit_ui_updates.js @@ -27,7 +27,7 @@ function runTests() let doc = gScratchpadWindow.document; let winUtils = gScratchpadWindow.QueryInterface(Ci.nsIInterfaceRequestor). getInterface(Ci.nsIDOMWindowUtils); - let OS = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS; + let OS = Services.appinfo.OS; info("will test the Edit menu"); @@ -51,9 +51,9 @@ function runTests() let menuPopup = editMenu.menupopup; ok(menuPopup, "the Edit menupopup"); - let cutItem = doc.getElementById("sp-menu-cut"); + let cutItem = doc.getElementById("se-menu-cut"); ok(cutItem, "the Cut menuitem"); - let pasteItem = doc.getElementById("sp-menu-paste"); + let pasteItem = doc.getElementById("se-menu-paste"); ok(pasteItem, "the Paste menuitem"); let anchor = doc.documentElement; @@ -174,9 +174,9 @@ function runTests() menuPopup = doc.getElementById("scratchpad-text-popup"); ok(menuPopup, "the context menupopup"); - cutItem = doc.getElementById("menu_cut"); + cutItem = doc.getElementById("se-cMenu-cut"); ok(cutItem, "the Cut menuitem"); - pasteItem = doc.getElementById("menu_paste"); + pasteItem = doc.getElementById("se-cMenu-paste"); ok(pasteItem, "the Paste menuitem"); sp.setText("bug 699130: hello world! (context menu)"); diff --git a/browser/devtools/sourceeditor/source-editor-orion.jsm b/browser/devtools/sourceeditor/source-editor-orion.jsm index e7dc16e24e13..fa0408c7c3ce 100644 --- a/browser/devtools/sourceeditor/source-editor-orion.jsm +++ b/browser/devtools/sourceeditor/source-editor-orion.jsm @@ -24,6 +24,7 @@ * Kenny Heaton * Spyros Livathinos * Allen Eubank + * Girish Sharma * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -63,6 +64,14 @@ const ORION_IFRAME = "data:text/html;charset=utf8," + const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; +/** + * Maximum allowed vertical offset for the line index when you call + * SourceEditor.setCaretPosition(). + * + * @type number + */ +const VERTICAL_OFFSET = 3; + /** * The primary selection update delay. On Linux, the X11 primary selection is * updated to hold the currently selected text. @@ -109,6 +118,10 @@ const ORION_ANNOTATION_TYPES = { * Default key bindings in the Orion editor. */ const DEFAULT_KEYBINDINGS = [ + { + action: "enter", + code: Ci.nsIDOMKeyEvent.DOM_VK_ENTER, + }, { action: "undo", code: Ci.nsIDOMKeyEvent.DOM_VK_Z, @@ -465,6 +478,10 @@ SourceEditor.prototype = { */ _doTab: function SE__doTab() { + if (this.readOnly) { + return false; + } + let indent = "\t"; let selection = this.getSelection(); let model = this._model; @@ -515,6 +532,10 @@ SourceEditor.prototype = { */ _doUnindentLines: function SE__doUnindentLines() { + if (this.readOnly) { + return true; + } + let indent = "\t"; let selection = this.getSelection(); @@ -569,6 +590,10 @@ SourceEditor.prototype = { */ _doEnter: function SE__doEnter() { + if (this.readOnly) { + return false; + } + let selection = this.getSelection(); if (selection.start != selection.end) { return false; @@ -1309,10 +1334,56 @@ SourceEditor.prototype = { * The new caret line location. Line numbers start from 0. * @param number [aColumn=0] * Optional. The new caret column location. Columns start from 0. + * @param number [aAlign=0] + * Optional. Position of the line with respect to viewport. + * Allowed values are: + * SourceEditor.VERTICAL_ALIGN.TOP target line at top of view. + * SourceEditor.VERTICAL_ALIGN.CENTER target line at center of view. + * SourceEditor.VERTICAL_ALIGN.BOTTOM target line at bottom of view. */ - setCaretPosition: function SE_setCaretPosition(aLine, aColumn) + setCaretPosition: function SE_setCaretPosition(aLine, aColumn, aAlign) { - this.setCaretOffset(this._model.getLineStart(aLine) + (aColumn || 0)); + let editorHeight = this._view.getClientArea().height; + let lineHeight = this._view.getLineHeight(); + let linesVisible = Math.floor(editorHeight/lineHeight); + let halfVisible = Math.round(linesVisible/2); + let firstVisible = this.getTopIndex(); + let lastVisible = this._view.getBottomIndex(); + let caretOffset = this._model.getLineStart(aLine) + (aColumn || 0); + + this._view.setSelection(caretOffset, caretOffset, false); + + // If the target line is in view, skip the vertical alignment part. + if (aLine <= lastVisible && aLine >= firstVisible) { + this._view.showSelection(); + return; + } + + // Setting the offset so that the line always falls in the upper half + // of visible lines (lower half for BOTTOM aligned). + // VERTICAL_OFFSET is the maximum allowed value. + let offset = Math.min(halfVisible, VERTICAL_OFFSET); + + let topIndex; + switch (aAlign) { + case this.VERTICAL_ALIGN.CENTER: + topIndex = Math.max(aLine - halfVisible, 0); + break; + + case this.VERTICAL_ALIGN.BOTTOM: + topIndex = Math.max(aLine - linesVisible + offset, 0); + break; + + default: // this.VERTICAL_ALIGN.TOP. + topIndex = Math.max(aLine - offset, 0); + break; + } + // Bringing down the topIndex to total lines in the editor if exceeding. + topIndex = Math.min(topIndex, this.getLineCount()); + this.setTopIndex(topIndex); + + let location = this._view.getLocationAtOffset(caretOffset); + this._view.setHorizontalPixel(location.x); }, /** diff --git a/browser/devtools/sourceeditor/source-editor-overlay.xul b/browser/devtools/sourceeditor/source-editor-overlay.xul index 52d2d0684a12..4533e82092b2 100644 --- a/browser/devtools/sourceeditor/source-editor-overlay.xul +++ b/browser/devtools/sourceeditor/source-editor-overlay.xul @@ -35,80 +35,203 @@ - the terms of any one of the MPL, the GPL or the LGPL. - - ***** END LICENSE BLOCK ***** --> - + + %editMenuStrings; + + %sourceEditorStrings; +]> + the source-editor-overlay.xul is loaded. Do not use #editMenuKeys to + avoid conflicts! --> + + + + + + + + +#ifdef XP_UNIX + +#else + +#endif + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/browser/devtools/sourceeditor/source-editor-ui.jsm b/browser/devtools/sourceeditor/source-editor-ui.jsm index c28c590685d7..82fce6a88003 100644 --- a/browser/devtools/sourceeditor/source-editor-ui.jsm +++ b/browser/devtools/sourceeditor/source-editor-ui.jsm @@ -253,6 +253,10 @@ SourceEditorController.prototype = { case "cmd_gotoLine": case "se-cmd-undo": case "se-cmd-redo": + case "se-cmd-cut": + case "se-cmd-paste": + case "se-cmd-delete": + case "se-cmd-selectAll": result = true; break; default: @@ -278,6 +282,7 @@ SourceEditorController.prototype = { switch (aCommand) { case "cmd_find": case "cmd_gotoLine": + case "se-cmd-selectAll": result = true; break; case "cmd_findAgain": @@ -290,6 +295,19 @@ SourceEditorController.prototype = { case "se-cmd-redo": result = this._editor.canRedo(); break; + case "se-cmd-cut": + case "se-cmd-delete": { + let selection = this._editor.getSelection(); + result = selection.start != selection.end && !this._editor.readOnly; + break; + } + case "se-cmd-paste": { + let window = this._editor._view._frameWindow; + let controller = window.controllers.getControllerForCommand("cmd_paste"); + result = !this._editor.readOnly && + controller.isCommandEnabled("cmd_paste"); + break; + } default: result = false; break; @@ -320,12 +338,26 @@ SourceEditorController.prototype = { case "cmd_gotoLine": this._editor.ui.gotoLine(); break; + case "se-cmd-selectAll": + this._editor._view.invokeAction("selectAll"); + break; case "se-cmd-undo": this._editor.undo(); break; case "se-cmd-redo": this._editor.redo(); break; + case "se-cmd-cut": + this._editor.ui._ownerWindow.goDoCommand("cmd_cut"); + break; + case "se-cmd-paste": + this._editor.ui._ownerWindow.goDoCommand("cmd_paste"); + break; + case "se-cmd-delete": { + let selection = this._editor.getSelection(); + this._editor.setText("", selection.start, selection.end); + break; + } } }, diff --git a/browser/devtools/sourceeditor/source-editor.jsm b/browser/devtools/sourceeditor/source-editor.jsm index 7eb31982c65f..3f1598012566 100644 --- a/browser/devtools/sourceeditor/source-editor.jsm +++ b/browser/devtools/sourceeditor/source-editor.jsm @@ -312,6 +312,16 @@ SourceEditor.EVENTS = { DIRTY_CHANGED: "DirtyChanged", }; +/** + * Allowed vertical alignment options for the line index + * when you call SourceEditor.setCaretPosition(). + */ +SourceEditor.VERTICAL_ALIGN = { + TOP: 0, + CENTER: 1, + BOTTOM: 2, +}; + /** * Extend a destination object with properties from a source object. * @@ -336,6 +346,7 @@ extend(SourceEditor.prototype, { MODES: SourceEditor.MODES, THEMES: SourceEditor.THEMES, DEFAULTS: SourceEditor.DEFAULTS, + VERTICAL_ALIGN: SourceEditor.VERTICAL_ALIGN, _lastFind: null, diff --git a/browser/devtools/sourceeditor/test/Makefile.in b/browser/devtools/sourceeditor/test/Makefile.in index 94aaf9beea08..b7c1c5d2309c 100644 --- a/browser/devtools/sourceeditor/test/Makefile.in +++ b/browser/devtools/sourceeditor/test/Makefile.in @@ -60,6 +60,7 @@ _BROWSER_TEST_FILES = \ browser_bug712982_line_ruler_click.js \ browser_bug725618_moveLines_shortcut.js \ browser_bug700893_dirty_state.js \ + browser_bug729480_line_vertical_align.js \ head.js \ libs:: $(_BROWSER_TEST_FILES) diff --git a/browser/devtools/sourceeditor/test/browser_bug729480_line_vertical_align.js b/browser/devtools/sourceeditor/test/browser_bug729480_line_vertical_align.js new file mode 100644 index 000000000000..171141ba5217 --- /dev/null +++ b/browser/devtools/sourceeditor/test/browser_bug729480_line_vertical_align.js @@ -0,0 +1,99 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +let tempScope = {}; +Cu.import("resource:///modules/source-editor.jsm", tempScope); +let SourceEditor = tempScope.SourceEditor; + +let testWin; +let editor; +const VERTICAL_OFFSET = 3; + +function test() +{ + waitForExplicitFinish(); + + const windowUrl = "data:application/vnd.mozilla.xul+xml," + + ""; + const windowFeatures = "chrome,titlebar,toolbar,centerscreen,dialog=no"; + + testWin = Services.ww.openWindow(null, windowUrl, "_blank", windowFeatures, null); + testWin.addEventListener("load", function onWindowLoad() { + testWin.removeEventListener("load", onWindowLoad, false); + waitForFocus(initEditor, testWin); + }, false); +} + +function initEditor() +{ + let box = testWin.document.querySelector("box"); + + editor = new SourceEditor(); + editor.init(box, {showLineNumbers: true}, editorLoaded); +} + +function editorLoaded() +{ + editor.focus(); + + // setting 3 pages of lines containing the line number. + let view = editor._view; + + let lineHeight = view.getLineHeight(); + let editorHeight = view.getClientArea().height; + let linesPerPage = Math.floor(editorHeight / lineHeight); + let totalLines = 3 * linesPerPage; + + let text = ""; + for (let i = 0; i < totalLines; i++) { + text += "Line " + i + "\n"; + } + + editor.setText(text); + editor.setCaretOffset(0); + + let offset = Math.min(Math.round(linesPerPage/2), VERTICAL_OFFSET); + // Building the iterator array. + // [line, alignment, topIndex_check] + let iterateOn = [ + [0, "TOP", 0], + [25, "TOP", 25 - offset], + // Case when the target line is already in view. + [27, "TOP", 25 - offset], + [0, "BOTTOM", 0], + [5, "BOTTOM", 0], + [38, "BOTTOM", 38 - linesPerPage + offset], + [0, "CENTER", 0], + [4, "CENTER", 0], + [34, "CENTER", 34 - Math.round(linesPerPage/2)] + ]; + + function testEnd() { + editor.destroy(); + testWin.close(); + testWin = editor = null; + waitForFocus(finish, window); + } + + function testPosition(pos) { + is(editor.getTopIndex(), iterateOn[pos][2], "scroll is correct for test #" + pos); + iterator(++pos); + } + + function iterator(i) { + if (i == iterateOn.length) { + testEnd(); + } else { + editor.setCaretPosition(iterateOn[i][0], 0, + editor.VERTICAL_ALIGN[iterateOn[i][1]]); + executeSoon(testPosition.bind(this, i)); + } + } + iterator(0); +} diff --git a/browser/devtools/sourceeditor/test/browser_sourceeditor_initialization.js b/browser/devtools/sourceeditor/test/browser_sourceeditor_initialization.js index f2431f0e956f..92ec1fbce577 100644 --- a/browser/devtools/sourceeditor/test/browser_sourceeditor_initialization.js +++ b/browser/devtools/sourceeditor/test/browser_sourceeditor_initialization.js @@ -201,11 +201,21 @@ function editorLoaded() editor.setText("foobar"); is(editor.getText(), "foobar", "editor allows programmatic changes (setText)"); + EventUtils.synthesizeKey("VK_RETURN", {}, testWin); + is(editor.getText(), "foobar", "Enter key does nothing"); + + EventUtils.synthesizeKey("VK_TAB", {}, testWin); + is(editor.getText(), "foobar", "Tab does nothing"); + + editor.setText(" foobar"); + EventUtils.synthesizeKey("VK_TAB", {shiftKey: true}, testWin); + is(editor.getText(), " foobar", "Shift+Tab does nothing"); + editor.readOnly = false; editor.setCaretOffset(editor.getCharCount()); EventUtils.synthesizeKey("-", {}, testWin); - is(editor.getText(), "foobar-", "editor is now editable again"); + is(editor.getText(), " foobar-", "editor is now editable again"); // Test the Selection event. diff --git a/browser/devtools/styleeditor/styleeditor.xul b/browser/devtools/styleeditor/styleeditor.xul index d27b9db46e1f..57c49cbc38f3 100644 --- a/browser/devtools/styleeditor/styleeditor.xul +++ b/browser/devtools/styleeditor/styleeditor.xul @@ -57,7 +57,22 @@ - + + + + + + + + + + + + + + + @@ -66,7 +81,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/locales/en-US/chrome/browser/devtools/sourceeditor.dtd b/browser/locales/en-US/chrome/browser/devtools/sourceeditor.dtd index e26a92d2d5f8..e512028baa24 100644 --- a/browser/locales/en-US/chrome/browser/devtools/sourceeditor.dtd +++ b/browser/locales/en-US/chrome/browser/devtools/sourceeditor.dtd @@ -10,23 +10,6 @@ - A good criteria is the language in which you'd find the best - documentation on web development on the web. --> - - - - - - - - - - - - - - - - - diff --git a/browser/themes/gnomestripe/devtools/csshtmltree.css b/browser/themes/gnomestripe/devtools/csshtmltree.css index 0ee9c461260e..1cb385a2adf8 100644 --- a/browser/themes/gnomestripe/devtools/csshtmltree.css +++ b/browser/themes/gnomestripe/devtools/csshtmltree.css @@ -205,7 +205,7 @@ .ruleview-rule-source { background-color: -moz-dialog; - color: #0091ff; + color: -moz-dialogText; padding: 2px 5px; cursor: pointer; } diff --git a/browser/themes/pinstripe/devtools/csshtmltree.css b/browser/themes/pinstripe/devtools/csshtmltree.css index e40f46af7247..314c47b1fe4f 100644 --- a/browser/themes/pinstripe/devtools/csshtmltree.css +++ b/browser/themes/pinstripe/devtools/csshtmltree.css @@ -207,7 +207,7 @@ .ruleview-rule-source { background-color: -moz-dialog; - color: #0091ff; + color: -moz-dialogText; padding: 2px 5px; cursor: pointer; } diff --git a/browser/themes/winstripe/devtools/csshtmltree.css b/browser/themes/winstripe/devtools/csshtmltree.css index 42dce67568cc..a88a00803a2d 100644 --- a/browser/themes/winstripe/devtools/csshtmltree.css +++ b/browser/themes/winstripe/devtools/csshtmltree.css @@ -205,7 +205,7 @@ .ruleview-rule-source { background-color: -moz-dialog; - color: #0091ff; + color: -moz-dialogText; padding: 2px 5px; cursor: pointer; }