From 4840f78fc3001ead2e80686ac9b29b60fa24e1ac Mon Sep 17 00:00:00 2001 From: Girish Sharma Date: Sat, 22 Sep 2012 00:43:45 +0530 Subject: [PATCH 01/14] Bug 790227 - Reserve 'd' as accesskey for Debugger in tools menu > web developer; r=dao --- browser/base/content/browser-menubar.inc | 2 +- browser/locales/en-US/chrome/browser/devtools/debugger.dtd | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/browser/base/content/browser-menubar.inc b/browser/base/content/browser-menubar.inc index 4947fae8a8c9..fbbabf288d2d 100644 --- a/browser/base/content/browser-menubar.inc +++ b/browser/base/content/browser-menubar.inc @@ -522,7 +522,7 @@ - + diff --git a/browser/locales/en-US/chrome/browser/devtools/debugger.dtd b/browser/locales/en-US/chrome/browser/devtools/debugger.dtd index cda44218d6f0..d88efe3d0232 100644 --- a/browser/locales/en-US/chrome/browser/devtools/debugger.dtd +++ b/browser/locales/en-US/chrome/browser/devtools/debugger.dtd @@ -15,6 +15,10 @@ - application menu item that opens the debugger UI. --> + + + From d85e7333238c9f053de0a1c9b24cea54504a2e65 Mon Sep 17 00:00:00 2001 From: Michael Ratcliffe Date: Mon, 1 Oct 2012 15:38:04 +0100 Subject: [PATCH 02/14] Bug 735576 - [ruleview] The warning icon should disappear as soon as the value is correct; r=dcamp --- .../devtools/styleinspector/CssRuleView.jsm | 65 +++++++++++++++---- .../test/browser_ruleview_ui.js | 3 +- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/browser/devtools/styleinspector/CssRuleView.jsm b/browser/devtools/styleinspector/CssRuleView.jsm index 296837b267bf..df0a9139bb3a 100644 --- a/browser/devtools/styleinspector/CssRuleView.jsm +++ b/browser/devtools/styleinspector/CssRuleView.jsm @@ -1629,13 +1629,6 @@ TextPropertyEditor.prototype = { tabindex: "0", }); - editableField({ - start: this._onStartEditing, - element: this.valueSpan, - done: this._onValueDone, - advanceChars: ';' - }); - // Save the initial value as the last committed value, // for restoring after pressing escape. this.committed = { name: this.prop.name, @@ -1655,6 +1648,15 @@ TextPropertyEditor.prototype = { this.computed = createChild(this.element, "ul", { class: "ruleview-computedlist", }); + + editableField({ + start: this._onStartEditing, + element: this.valueSpan, + done: this._onValueDone, + validate: this._validate.bind(this), + warning: this.warning, + advanceChars: ';' + }); }, /** @@ -1841,17 +1843,30 @@ TextPropertyEditor.prototype = { /** * Validate this property. * + * @param {String} [aValue] + * Override the actual property value used for validation without + * applying property values e.g. validate as you type. + * * @returns {Boolean} * True if the property value is valid, false otherwise. */ - _validate: function TextPropertyEditor_validate() + _validate: function TextPropertyEditor_validate(aValue) { let name = this.prop.name; - let value = this.prop.value; + let value = typeof aValue == "undefined" ? this.prop.value : aValue; + let val = this._parseValue(value); let style = this.doc.createElementNS(HTML_NS, "div").style; + let prefs = Services.prefs; - style.setProperty(name, value, null); + // We toggle output of errors whilst the user is typing a property value. + let prefVal = Services.prefs.getBoolPref("layout.css.report_errors"); + prefs.setBoolPref("layout.css.report_errors", false); + try { + style.setProperty(name, val.value, val.priority); + } finally { + prefs.setBoolPref("layout.css.report_errors", prefVal); + } return !!style.getPropertyValue(name); }, }; @@ -1971,6 +1986,7 @@ function InplaceEditor(aOptions, aEvent) this._onBlur = this._onBlur.bind(this); this._onKeyPress = this._onKeyPress.bind(this); this._onInput = this._onInput.bind(this); + this._onKeyup = this._onKeyup.bind(this); this._createInput(); this._autosize(); @@ -1998,6 +2014,13 @@ function InplaceEditor(aOptions, aEvent) this.input.addEventListener("input", this._onInput, false); this.input.addEventListener("mousedown", function(aEvt) { aEvt.stopPropagation(); }, false); + this.warning = aOptions.warning; + this.validate = aOptions.validate; + + if (this.warning && this.validate) { + this.input.addEventListener("keyup", this._onKeyup, false); + } + if (aOptions.start) { aOptions.start(this, aEvent); } @@ -2026,6 +2049,7 @@ InplaceEditor.prototype = { this.input.removeEventListener("blur", this._onBlur, false); this.input.removeEventListener("keypress", this._onKeyPress, false); + this.input.removeEventListener("keyup", this._onKeyup, false); this.input.removeEventListener("oninput", this._onInput, false); this._stopAutosize(); @@ -2128,10 +2152,12 @@ InplaceEditor.prototype = { /** * Handle loss of focus by calling done if it hasn't been called yet. */ - _onBlur: function InplaceEditor_onBlur(aEvent) + _onBlur: function InplaceEditor_onBlur(aEvent, aDoNotClear) { this._apply(); - this._clear(); + if (!aDoNotClear) { + this._clear(); + } }, _onKeyPress: function InplaceEditor_onKeyPress(aEvent) @@ -2193,11 +2219,26 @@ InplaceEditor.prototype = { } }, + /** + * Handle the input field's keyup event. + */ + _onKeyup: function(aEvent) { + // Validate the entered value. + this.warning.hidden = this.validate(this.input.value); + this._applied = false; + this._onBlur(null, true); + }, + /** * Handle changes the input text. */ _onInput: function InplaceEditor_onInput(aEvent) { + // Validate the entered value. + if (this.warning && this.validate) { + this.warning.hidden = this.validate(this.input.value); + } + // Update size if we're autosizing. if (this._measurement) { this._updateSize(); diff --git a/browser/devtools/styleinspector/test/browser_ruleview_ui.js b/browser/devtools/styleinspector/test/browser_ruleview_ui.js index 89a8f09e56c6..f6e39d90eb13 100644 --- a/browser/devtools/styleinspector/test/browser_ruleview_ui.js +++ b/browser/devtools/styleinspector/test/browser_ruleview_ui.js @@ -170,6 +170,8 @@ function testEditProperty() for each (let ch in "red;") { EventUtils.sendChar(ch, ruleDialog); + is(propEditor.warning.hidden, ch == "d" || ch == ";", + "warning triangle is hidden or shown as appropriate"); } }); for each (let ch in "border-color:") { @@ -201,7 +203,6 @@ function testDisableProperty() function finishTest() { - ruleView.element.removeEventListener("CssRuleViewChanged", ruleViewChanged, false); ruleView.clear(); ruleDialog.close(); ruleDialog = ruleView = null; From bfaa2282e687fe1191d1dfbc602b74775348140c Mon Sep 17 00:00:00 2001 From: Paul Rouget Date: Tue, 2 Oct 2012 13:18:56 +0100 Subject: [PATCH 03/14] Bug 752850 - [Responsive Mode] It should be possible to hide the scrollbars; r=jwalker --- .../responsivedesign/responsivedesign.jsm | 4 + .../test/browser_responsiveui.js | 16 +++ .../devtools/shared/FloatingScrollbars.jsm | 126 ++++++++++++++++++ .../devtools/floating-scrollbars.css | 33 +++++ browser/themes/gnomestripe/jar.mn | 1 + .../devtools/floating-scrollbars.css | 30 +++++ browser/themes/pinstripe/jar.mn | 1 + .../devtools/floating-scrollbars.css | 33 +++++ browser/themes/winstripe/jar.mn | 2 + 9 files changed, 246 insertions(+) create mode 100644 browser/devtools/shared/FloatingScrollbars.jsm create mode 100644 browser/themes/gnomestripe/devtools/floating-scrollbars.css create mode 100644 browser/themes/pinstripe/devtools/floating-scrollbars.css create mode 100644 browser/themes/winstripe/devtools/floating-scrollbars.css diff --git a/browser/devtools/responsivedesign/responsivedesign.jsm b/browser/devtools/responsivedesign/responsivedesign.jsm index d6b0db95ae42..c43a071594e4 100644 --- a/browser/devtools/responsivedesign/responsivedesign.jsm +++ b/browser/devtools/responsivedesign/responsivedesign.jsm @@ -9,6 +9,7 @@ const Cu = Components.utils; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource:///modules/devtools/FloatingScrollbars.jsm"); var EXPORTED_SYMBOLS = ["ResponsiveUIManager"]; @@ -159,6 +160,8 @@ function ResponsiveUI(aWindow, aTab) this.rotate(); } } catch(e) {} + + switchToFloatingScrollbars(this.tab); } ResponsiveUI.prototype = { @@ -179,6 +182,7 @@ ResponsiveUI.prototype = { close: function RUI_unload() { if (this.closing) return; + switchToNativeScrollbars(this.tab); this.closing = true; this.unCheckMenus(); diff --git a/browser/devtools/responsivedesign/test/browser_responsiveui.js b/browser/devtools/responsivedesign/test/browser_responsiveui.js index 54729bfcf548..071f32d34bb8 100644 --- a/browser/devtools/responsivedesign/test/browser_responsiveui.js +++ b/browser/devtools/responsivedesign/test/browser_responsiveui.js @@ -31,11 +31,27 @@ function test() { instance = gBrowser.selectedTab.__responsiveUI; ok(instance, "instance of the module is attached to the tab."); + ensureScrollbarsAreFloating(); + instance.transitionsEnabled = false; testPresets(); } + function ensureScrollbarsAreFloating() { + let body = gBrowser.contentDocument.body; + let html = gBrowser.contentDocument.documentElement; + + let originalWidth = body.getBoundingClientRect().width; + + html.style.overflowY = "scroll"; // Force scrollbars + // Flush. Should not be needed as getBoundingClientRect() should flush, + // but just in case. + gBrowser.contentWindow.getComputedStyle(html).overflowY; + let newWidth = body.getBoundingClientRect().width; + is(originalWidth, newWidth, "Floating scrollbars are presents"); + } + function testPresets() { function testOnePreset(c) { if (c == 0) { diff --git a/browser/devtools/shared/FloatingScrollbars.jsm b/browser/devtools/shared/FloatingScrollbars.jsm new file mode 100644 index 000000000000..3ed738c88f34 --- /dev/null +++ b/browser/devtools/shared/FloatingScrollbars.jsm @@ -0,0 +1,126 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const { classes: Cc, interfaces: Ci, utils: Cu } = Components; + +const EXPORTED_SYMBOLS = [ "switchToFloatingScrollbars", "switchToNativeScrollbars" ]; + +Cu.import("resource://gre/modules/Services.jsm"); + +let URL = Services.io.newURI("chrome://browser/skin/devtools/floating-scrollbars.css", null, null); + +let trackedTabs = new WeakMap(); + +/** + * Switch to floating scrollbars, à la mobile. + * + * @param aTab the targeted tab. + * + */ +function switchToFloatingScrollbars(aTab) { + let mgr = trackedTabs.get(aTab); + if (!mgr) { + mgr = new ScrollbarManager(aTab); + } + mgr.switchToFloating(); +} + +/** + * Switch to original native scrollbars. + * + * @param aTab the targeted tab. + * + */ +function switchToNativeScrollbars(aTab) { + let mgr = trackedTabs.get(aTab); + if (mgr) { + mgr.reset(); + } +} + +function ScrollbarManager(aTab) { + trackedTabs.set(aTab, this); + + this.attachedTab = aTab; + this.attachedBrowser = aTab.linkedBrowser; + + this.reset = this.reset.bind(this); + this.switchToFloating = this.switchToFloating.bind(this); + + this.attachedTab.addEventListener("TabClose", this.reset, true); + this.attachedBrowser.addEventListener("DOMContentLoaded", this.switchToFloating, true); +} + +ScrollbarManager.prototype = { + get win() { + return this.attachedBrowser.contentWindow; + }, + + /* + * Change the look of the scrollbars. + */ + switchToFloating: function() { + let windows = this.getInnerWindows(this.win); + windows.forEach(this.injectStyleSheet); + this.forceStyle(); + }, + + + /* + * Reset the look of the scrollbars. + */ + reset: function() { + let windows = this.getInnerWindows(this.win); + windows.forEach(this.removeStyleSheet); + this.forceStyle(this.attachedBrowser); + this.attachedBrowser.removeEventListener("DOMContentLoaded", this.switchToFloating, true); + this.attachedTab.removeEventListener("TabClose", this.reset, true); + trackedTabs.delete(this.attachedTab); + }, + + /* + * Toggle the display property of the window to force the style to be applied. + */ + forceStyle: function() { + let parentWindow = this.attachedBrowser.ownerDocument.defaultView; + let display = parentWindow.getComputedStyle(this.attachedBrowser).display; // Save display value + this.attachedBrowser.style.display = "none"; + parentWindow.getComputedStyle(this.attachedBrowser).display; // Flush + this.attachedBrowser.style.display = display; // Restore + }, + + /* + * return all the window objects present in the hiearchy of a window. + */ + getInnerWindows: function(win) { + let iframes = win.document.querySelectorAll("iframe"); + let innerWindows = []; + for (let iframe of iframes) { + innerWindows = innerWindows.concat(this.getInnerWindows(iframe.contentWindow)); + } + return [win].concat(innerWindows); + }, + + /* + * Append the new scrollbar style. + */ + injectStyleSheet: function(win) { + let winUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); + try { + winUtils.loadSheet(URL, win.AGENT_SHEET); + }catch(e) {} + }, + + /* + * Remove the injected stylesheet. + */ + removeStyleSheet: function(win) { + let winUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); + try { + winUtils.removeSheet(URL, win.AGENT_SHEET); + }catch(e) {} + }, +} diff --git a/browser/themes/gnomestripe/devtools/floating-scrollbars.css b/browser/themes/gnomestripe/devtools/floating-scrollbars.css new file mode 100644 index 000000000000..e27de04dedca --- /dev/null +++ b/browser/themes/gnomestripe/devtools/floating-scrollbars.css @@ -0,0 +1,33 @@ +@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +scrollbar { + -moz-appearance: none !important; + position: relative; + background-color: transparent; + background-image: none; + z-index: 2147483647; + padding: 2px; +} + +scrollbar[orient="vertical"] { + -moz-margin-start: -8px; + min-width: 8px; + max-width: 8px; +} + +scrollbar[orient="horizontal"] { + margin-top: -8px; + min-height: 8px; + max-height: 8px; +} + +scrollbar thumb { + -moz-appearance: none !important; + border-width: 0px !important; + background-color: rgba(0,0,0,0.2) !important; + border-radius: 3px !important; +} + +scrollbar scrollbarbutton, scrollbar gripper { + display: none; +} diff --git a/browser/themes/gnomestripe/jar.mn b/browser/themes/gnomestripe/jar.mn index 5402fd59e92a..df1daa3c2be5 100644 --- a/browser/themes/gnomestripe/jar.mn +++ b/browser/themes/gnomestripe/jar.mn @@ -165,6 +165,7 @@ browser.jar: skin/classic/browser/devtools/responsive-vertical-resizer.png (devtools/responsive-vertical-resizer.png) skin/classic/browser/devtools/responsive-background.png (devtools/responsive-background.png) skin/classic/browser/devtools/tools-icons-small.png (devtools/tools-icons-small.png) + skin/classic/browser/devtools/floating-scrollbars.css (devtools/floating-scrollbars.css) #ifdef MOZ_SERVICES_SYNC skin/classic/browser/sync-16-throbber.png skin/classic/browser/sync-16.png diff --git a/browser/themes/pinstripe/devtools/floating-scrollbars.css b/browser/themes/pinstripe/devtools/floating-scrollbars.css new file mode 100644 index 000000000000..25e6d29de030 --- /dev/null +++ b/browser/themes/pinstripe/devtools/floating-scrollbars.css @@ -0,0 +1,30 @@ +@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +scrollbar { + -moz-appearance: none; + position: relative; + background-color: transparent; + background-image: none; + border: 0px solid transparent; + z-index: 2147483647; + -moz-box-align: start; + padding: 2px; +} + +scrollbar[orient="vertical"] { + -moz-margin-start: -8px; + min-width: 8px; + max-width: 8px; +} + +scrollbar[orient="horizontal"] { + margin-top: -8px; + min-height: 8px; + max-height: 8px; +} + +thumb { + -moz-appearance: none !important; + background-color: rgba(0,0,0,0.2); + border-radius: 3px; +} diff --git a/browser/themes/pinstripe/jar.mn b/browser/themes/pinstripe/jar.mn index aa30f1336d98..1fff34f6ee05 100644 --- a/browser/themes/pinstripe/jar.mn +++ b/browser/themes/pinstripe/jar.mn @@ -235,6 +235,7 @@ browser.jar: skin/classic/browser/devtools/responsive-vertical-resizer.png (devtools/responsive-vertical-resizer.png) skin/classic/browser/devtools/responsive-background.png (devtools/responsive-background.png) skin/classic/browser/devtools/tools-icons-small.png (devtools/tools-icons-small.png) + skin/classic/browser/devtools/floating-scrollbars.css (devtools/floating-scrollbars.css) #ifdef MOZ_SERVICES_SYNC skin/classic/browser/sync-throbber.png skin/classic/browser/sync-16.png diff --git a/browser/themes/winstripe/devtools/floating-scrollbars.css b/browser/themes/winstripe/devtools/floating-scrollbars.css new file mode 100644 index 000000000000..e27de04dedca --- /dev/null +++ b/browser/themes/winstripe/devtools/floating-scrollbars.css @@ -0,0 +1,33 @@ +@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +scrollbar { + -moz-appearance: none !important; + position: relative; + background-color: transparent; + background-image: none; + z-index: 2147483647; + padding: 2px; +} + +scrollbar[orient="vertical"] { + -moz-margin-start: -8px; + min-width: 8px; + max-width: 8px; +} + +scrollbar[orient="horizontal"] { + margin-top: -8px; + min-height: 8px; + max-height: 8px; +} + +scrollbar thumb { + -moz-appearance: none !important; + border-width: 0px !important; + background-color: rgba(0,0,0,0.2) !important; + border-radius: 3px !important; +} + +scrollbar scrollbarbutton, scrollbar gripper { + display: none; +} diff --git a/browser/themes/winstripe/jar.mn b/browser/themes/winstripe/jar.mn index 603c039aeb47..a82b5cfae819 100644 --- a/browser/themes/winstripe/jar.mn +++ b/browser/themes/winstripe/jar.mn @@ -192,6 +192,7 @@ browser.jar: skin/classic/browser/devtools/responsive-vertical-resizer.png (devtools/responsive-vertical-resizer.png) skin/classic/browser/devtools/responsive-background.png (devtools/responsive-background.png) skin/classic/browser/devtools/tools-icons-small.png (devtools/tools-icons-small.png) + skin/classic/browser/devtools/floating-scrollbars.css (devtools/floating-scrollbars.css) #ifdef MOZ_SERVICES_SYNC skin/classic/browser/sync-throbber.png skin/classic/browser/sync-16.png @@ -395,6 +396,7 @@ browser.jar: skin/classic/aero/browser/devtools/responsive-vertical-resizer.png (devtools/responsive-vertical-resizer.png) skin/classic/aero/browser/devtools/responsive-background.png (devtools/responsive-background.png) skin/classic/aero/browser/devtools/tools-icons-small.png (devtools/tools-icons-small.png) + skin/classic/aero/browser/devtools/floating-scrollbars.css (devtools/floating-scrollbars.css) #ifdef MOZ_SERVICES_SYNC skin/classic/aero/browser/sync-throbber.png skin/classic/aero/browser/sync-16.png From 818861c45e485ff7ed4cb2d5cf4a386fb231fa9b Mon Sep 17 00:00:00 2001 From: Anton Kovalyov Date: Tue, 2 Oct 2012 19:03:59 -0700 Subject: [PATCH 04/14] Bug 781797 - dbg open and dbg close commands; r=past --- browser/devtools/commandline/CmdDbg.jsm | 41 +++++++++++++++++++ .../commandline/test/browser_dbg_cmd.js | 18 ++++++-- .../browser/devtools/gclicommands.properties | 8 ++++ 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/browser/devtools/commandline/CmdDbg.jsm b/browser/devtools/commandline/CmdDbg.jsm index c74cbf9578e4..f30593598580 100644 --- a/browser/devtools/commandline/CmdDbg.jsm +++ b/browser/devtools/commandline/CmdDbg.jsm @@ -18,6 +18,47 @@ gcli.addCommand({ manual: gcli.lookup("dbgManual") }); +/** + * 'dbg open' command + */ +gcli.addCommand({ + name: "dbg open", + description: gcli.lookup("dbgOpen"), + params: [], + exec: function (args, context) { + let win = context.environment.chromeDocument.defaultView; + let tab = win.gBrowser.selectedTab; + let dbg = win.DebuggerUI.findDebugger(); + + if (dbg) { + if (dbg.ownerTab !== tab) { + win.DebuggerUI.toggleDebugger(); + } + + return; + } + + win.DebuggerUI.toggleDebugger(); + } +}); + +/** + * 'dbg close' command + */ +gcli.addCommand({ + name: "dbg close", + description: gcli.lookup("dbgClose"), + params: [], + exec: function (args, context) { + let win = context.environment.chromeDocument.defaultView; + let tab = win.gBrowser.selectedTab; + let dbg = win.DebuggerUI.findDebugger(); + + if (dbg) { + dbg.close(); + } + } +}); /** * 'dbg interrupt' command diff --git a/browser/devtools/commandline/test/browser_dbg_cmd.js b/browser/devtools/commandline/test/browser_dbg_cmd.js index eef119a5cb29..8011c8c9fa2f 100644 --- a/browser/devtools/commandline/test/browser_dbg_cmd.js +++ b/browser/devtools/commandline/test/browser_dbg_cmd.js @@ -8,8 +8,13 @@ function test() { } function testDbgCmd() { - let pane = DebuggerUI.toggleDebugger(); - ok(pane, "toggleDebugger() should return a pane."); + DeveloperToolbarTest.exec({ + typed: "dbg open", + blankOutput: true + }); + + let pane = DebuggerUI.findDebugger(); + ok(pane, "Debugger was opened."); let frame = pane._frame; frame.addEventListener("Debugger:Connecting", function dbgConnected(aEvent) { @@ -41,9 +46,14 @@ function testDbgCmd() { cmd("dbg continue", function() { cmd("dbg continue", function() { is(output.value, "dbg continue", "debugger continued"); - pane.contentWindow.gClient.close(function() { - finish(); + DeveloperToolbarTest.exec({ + typed: "dbg close", + blankOutput: true }); + + let dbg = DebuggerUI.findDebugger(); + ok(!dbg, "Debugger was closed."); + finish(); }); }); }); diff --git a/browser/locales/en-US/chrome/browser/devtools/gclicommands.properties b/browser/locales/en-US/chrome/browser/devtools/gclicommands.properties index 8983e4d2741e..18ec2afd9794 100644 --- a/browser/locales/en-US/chrome/browser/devtools/gclicommands.properties +++ b/browser/locales/en-US/chrome/browser/devtools/gclicommands.properties @@ -380,6 +380,14 @@ dbgDesc=Manage debugger # set of commands that control the debugger. dbgManual=Commands to interrupt or resume the main thread, step in, out and over lines of code +# LOCALIZATION NOTE (dbgOpen) A very short string used to describe the function +# of the dbg open command. +dbgOpen=Open the debugger + +# LOCALIZATION NOTE (dbgClose) A very short string used to describe the function +# of the dbg close command. +dbgClose=Close the debugger + # LOCALIZATION NOTE (dbgInterrupt) A very short string used to describe the # function of the dbg interrupt command. dbgInterrupt=Pauses the main thread From 1301816a51efe884c14f6be494de1d8e21474b98 Mon Sep 17 00:00:00 2001 From: Michael Ratcliffe Date: Tue, 2 Oct 2012 16:53:00 +0100 Subject: [PATCH 05/14] Bug 796929 - [gcli] command line stops working; r=jwalker --- browser/devtools/shared/DeveloperToolbar.jsm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/browser/devtools/shared/DeveloperToolbar.jsm b/browser/devtools/shared/DeveloperToolbar.jsm index a4606f3bb02a..7873890a28ae 100644 --- a/browser/devtools/shared/DeveloperToolbar.jsm +++ b/browser/devtools/shared/DeveloperToolbar.jsm @@ -765,7 +765,7 @@ OutputPanel.prototype.remove = function OP_remove() this.canHide = true; } - if (this._panel) { + if (this._panel && this._panel.hidePopup) { this._panel.hidePopup(); } @@ -992,7 +992,9 @@ TooltipPanel.prototype.remove = function TP_remove() if (isLinux) { this.canHide = true; } - this._panel.hidePopup(); + if (this._panel && this._panel.hidePopup) { + this._panel.hidePopup(); + } }; /** From 7b6fa673ae5d16b184c164e4ec49ca4c06ac15a0 Mon Sep 17 00:00:00 2001 From: Heather Arthur Date: Tue, 2 Oct 2012 23:28:00 +0300 Subject: [PATCH 06/14] Bug 797270 - markup view background should be white; r=paul --- browser/devtools/markupview/markup-view.xhtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/devtools/markupview/markup-view.xhtml b/browser/devtools/markupview/markup-view.xhtml index 3d0893add337..191655ec4c70 100644 --- a/browser/devtools/markupview/markup-view.xhtml +++ b/browser/devtools/markupview/markup-view.xhtml @@ -11,7 +11,7 @@ - +