diff --git a/suite/common/pref/nsPrefWindow.js b/suite/common/pref/nsPrefWindow.js
index d691dcc7411a..18b3f364aecc 100644
--- a/suite/common/pref/nsPrefWindow.js
+++ b/suite/common/pref/nsPrefWindow.js
@@ -45,7 +45,7 @@ function nsPrefWindow( frame_id )
this.contentFrame = frame_id
this.wsm = new nsWidgetStateManager( frame_id );
- this.wsm.attributes = ["preftype", "prefstring", "prefattribute", "disabled"];
+ this.wsm.attributes = ["preftype", "prefstring", "prefattribute", "prefinverse", "disabled"];
this.pref = null;
this.chromeRegistry = null;
this.observerService= null;
@@ -215,7 +215,7 @@ nsPrefWindow.prototype =
if (!prefattribute) {
if (elt == "radiogroup" || elt == "textbox" || elt == "menulist")
prefattribute = "value";
- else if (elt == "checkbox")
+ else if (elt == "checkbox" || elt == "listitem")
prefattribute = "checked";
else if (elt == "button")
prefattribute = "disabled";
@@ -226,7 +226,7 @@ nsPrefWindow.prototype =
if (!preftype) {
if (elt == "textbox")
preftype = "string";
- else if (elt == "checkbox" || elt == "button")
+ else if (elt == "checkbox" || elt == "listitem" || elt == "button")
preftype = "bool";
else if (elt == "radiogroup" || elt == "menulist")
preftype = "int";
@@ -238,6 +238,8 @@ nsPrefWindow.prototype =
value = true;
else if( value == "false" && typeof(value) == "string" )
value = false;
+ if (itemObject.prefinverse == "true")
+ value = !value;
break;
case "int":
value = parseInt(value);
@@ -340,7 +342,7 @@ nsPrefWindow.prototype =
if (!preftype) {
if (elt == "textbox")
preftype = "string";
- else if (elt == "checkbox" || elt == "button")
+ else if (elt == "checkbox" || elt == "listitem" || elt == "button")
preftype = "bool";
else if (elt == "radiogroup" || elt == "menulist")
preftype = "int";
@@ -350,27 +352,12 @@ nsPrefWindow.prototype =
if (!prefattribute) {
if (elt == "radiogroup" || elt == "textbox" || elt == "menulist")
prefattribute = "value";
- else if (elt == "checkbox")
+ else if (elt == "checkbox" || elt == "listitem")
prefattribute = "checked";
else if (elt == "button")
prefattribute = "disabled";
}
- var prefvalue;
- switch( preftype )
- {
- case "bool":
- prefvalue = this.getPref( preftype, prefstring );
- break;
- case "int":
- prefvalue = this.getPref( preftype, prefstring );
- break;
- case "string":
- case "localizedstring":
- case "color":
- default:
- prefvalue = this.getPref( preftype, prefstring );
- break;
- }
+ var prefvalue = this.getPref( preftype, prefstring );
if( prefvalue == "!/!ERROR_UNDEFINED_PREF!/!" )
{
prefvalue = prefdefval;
@@ -381,6 +368,11 @@ nsPrefWindow.prototype =
if (isPrefLocked)
root.disabled = "true";
root.localname = prefElements[i].localName;
+ if (preftype == "bool") {
+ root.prefinverse = prefElements[i].getAttribute("prefinverse");
+ if (root.prefinverse == "true")
+ root[prefattribute] = !prefvalue;
+ }
}
}
this.wsm.setPageData( aPageTag ); // do not set extra elements, accept hard coded defaults
diff --git a/suite/common/pref/pref-scripts.js b/suite/common/pref/pref-scripts.js
index 8f132a97ca81..89f750a1236e 100644
--- a/suite/common/pref/pref-scripts.js
+++ b/suite/common/pref/pref-scripts.js
@@ -35,11 +35,6 @@
*
* ***** END LICENSE BLOCK ***** */
-const pref = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPref);
-
-// need it globally, but can only set it in startup()
-var data;
-
function changeDisabledState(state){
//Set the states of the groupbox children state based on the "javascript enabled" checkbox value
document.getElementById("allowScripts").disabled = state;
@@ -64,44 +59,7 @@ function javascriptEnabledChange(){
}
}
-function getPrefValueForCheckbox(prefName){
- var prefValue = false;
-
- try {
- prefValue = pref.GetBoolPref(prefName);
- }
- catch(e) {}
-
- // the prefs are stored in terms of disabling,
- // but we want our value in terms of enabling.
- // so let's invert the prefValue.
- return !prefValue;
-}
-
function Startup(){
-
- data = parent.hPrefWindow.wsm.dataManager.pageData["chrome://communicator/content/pref/pref-scripts.xul"];
-
- //If scriptData does not exist, then it is the first time the panel was shown and we default to false
- if (!("scriptData" in data)){
- var changedList = ["allowWindowMoveResizeChanged",
- "allowWindowStatusChangeChanged",
- "allowWindowFlipChanged",
- "allowImageSrcChangeChanged",
- "allowHideStatusBarChanged"];
-
- data.scriptData = [];
- for(var run = 0; run < changedList.length; run++ ){
- data.scriptData[ changedList[run] ] = [];
- data.scriptData[ changedList[run] ].value = false;
- }
-
- document.getElementById("allowWindowMoveResize").checked = getPrefValueForCheckbox("dom.disable_window_move_resize");
- document.getElementById("allowWindowFlip").checked = getPrefValueForCheckbox("dom.disable_window_flip");
- document.getElementById("allowWindowStatusChange").checked = getPrefValueForCheckbox("dom.disable_window_status_change");
- document.getElementById("allowImageSrcChange").checked = getPrefValueForCheckbox("dom.disable_image_src_set");
- document.getElementById("allowHideStatusBar").checked = getPrefValueForCheckbox("dom.disable_window_open_feature.status");
-
//If we don't have a checkbox under groupbox pluginPreferences, we should hide it
var pluginGroup = document.getElementById("pluginPreferences")
var children = pluginGroup.childNodes;
@@ -110,57 +68,4 @@ function Startup(){
}
javascriptEnabledChange();
-
- document.getElementById("AllowList").addEventListener("CheckboxStateChange", onCheckboxCheck, false);
-
- parent.hPrefWindow.registerOKCallbackFunc(doOnOk);
-}
-
-function doOnOk(){
-
- //If a user makes a change to this panel, goes to another panel, and returns to this panel to
- //make another change, then we cannot use data[elementName]. This is because data[elementName]
- //contains the original xul change and we would loose the new change. Thus we track all changes
- //by using getElementById.
-
- //The nested functions are needed because doOnOk cannot access anything outside of its scope
- //when it is called
- function getCheckboxValue(name){
- if ("onCheckboxCheck" in window)
- return document.getElementById(name).checked;
-
- return data[name].checked;
- }
-
- var data = parent.hPrefWindow.wsm.dataManager.pageData["chrome://communicator/content/pref/pref-scripts.xul"];
-
- if (data.scriptData["allowWindowMoveResizeChanged"].value){
- parent.hPrefWindow.setPref("bool", "dom.disable_window_move_resize",
- !getCheckboxValue('allowWindowMoveResize'));
- }
-
- if (data.scriptData["allowWindowStatusChangeChanged"].value){
- parent.hPrefWindow.setPref("bool", "dom.disable_window_status_change",
- !getCheckboxValue("allowWindowStatusChange"));
- }
-
- if (data.scriptData["allowWindowFlipChanged"].value){
- parent.hPrefWindow.setPref("bool", "dom.disable_window_flip",
- !getCheckboxValue("allowWindowFlip"));
- }
-
- if (data.scriptData["allowImageSrcChangeChanged"].value){
- parent.hPrefWindow.setPref("bool", "dom.disable_image_src_set",
- !getCheckboxValue("allowImageSrcChange"));
- }
-
- if (data.scriptData["allowHideStatusBarChanged"].value) {
- parent.hPrefWindow.setPref("bool", "dom.disable_window_open_feature.status",
- !getCheckboxValue("allowHideStatusBar"));
- }
-}
-
-function onCheckboxCheck(event)
-{
- data.scriptData[event.target.id+"Changed"].value = !data.scriptData[event.target.id+"Changed"].value;
}
diff --git a/suite/common/pref/pref-scripts.xul b/suite/common/pref/pref-scripts.xul
index 004e47be3bad..c22675de595b 100644
--- a/suite/common/pref/pref-scripts.xul
+++ b/suite/common/pref/pref-scripts.xul
@@ -68,11 +68,16 @@
-
-
-
-
-
+
+
+
+
+