mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-04-10 10:33:33 +02:00
Trigger setters on option change.
This commit is contained in:
@@ -123,7 +123,7 @@ liberator.Option = function (names, description, type, defaultValue, extraInfo)
|
|||||||
|
|
||||||
if (liberator.has("tabs") && (scope & liberator.options.OPTION_SCOPE_LOCAL))
|
if (liberator.has("tabs") && (scope & liberator.options.OPTION_SCOPE_LOCAL))
|
||||||
liberator.tabs.options[this.name] = newValue;
|
liberator.tabs.options[this.name] = newValue;
|
||||||
if (scope & liberator.options.OPTION_SCOPE_GLOBAL)
|
if (scope & liberator.options.OPTION_SCOPE_GLOBAL && newValue != this.globalValue)
|
||||||
this.globalvalue = newValue;
|
this.globalvalue = newValue;
|
||||||
|
|
||||||
this.hasChanged = true;
|
this.hasChanged = true;
|
||||||
@@ -159,12 +159,21 @@ liberator.Options = function () //{{{
|
|||||||
////////////////////// PRIVATE SECTION /////////////////////////////////////////
|
////////////////////// PRIVATE SECTION /////////////////////////////////////////
|
||||||
/////////////////////////////////////////////////////////////////////////////{{{
|
/////////////////////////////////////////////////////////////////////////////{{{
|
||||||
|
|
||||||
liberator.storage.newObject("options", false);
|
|
||||||
|
|
||||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"]
|
var prefService = Components.classes["@mozilla.org/preferences-service;1"]
|
||||||
.getService(Components.interfaces.nsIPrefBranch);
|
.getService(Components.interfaces.nsIPrefBranch);
|
||||||
var options = [];
|
var options = [];
|
||||||
|
|
||||||
|
function optionObserver(key, event, option)
|
||||||
|
{
|
||||||
|
// Trigger any setters.
|
||||||
|
let opt = liberator.options.get(option);
|
||||||
|
if(event == "change" && opt)
|
||||||
|
opt.set(opt.value, liberator.options.OPTION_SCOPE_GLOBAL)
|
||||||
|
}
|
||||||
|
|
||||||
|
liberator.storage.newObject("options", false);
|
||||||
|
liberator.storage.addObserver("options", optionObserver);
|
||||||
|
|
||||||
function storePreference(name, value)
|
function storePreference(name, value)
|
||||||
{
|
{
|
||||||
var type = prefService.getPrefType(name);
|
var type = prefService.getPrefType(name);
|
||||||
@@ -811,6 +820,7 @@ liberator.Options = function () //{{{
|
|||||||
if (loadPreference("dom.popup_allowed_events", "change click dblclick mouseup reset submit")
|
if (loadPreference("dom.popup_allowed_events", "change click dblclick mouseup reset submit")
|
||||||
== popupAllowedEvents + " keypress")
|
== popupAllowedEvents + " keypress")
|
||||||
storePreference("dom.popup_allowed_events", popupAllowedEvents);
|
storePreference("dom.popup_allowed_events", popupAllowedEvents);
|
||||||
|
liberator.storage.removeObserver("options", optionObserver);
|
||||||
},
|
},
|
||||||
|
|
||||||
get: function (name, scope)
|
get: function (name, scope)
|
||||||
|
|||||||
@@ -83,12 +83,13 @@ function ObjectStore(name, store)
|
|||||||
|
|
||||||
this.set = function set(key, val)
|
this.set = function set(key, val)
|
||||||
{
|
{
|
||||||
|
var defined = key in object;
|
||||||
var orig = object[key];
|
var orig = object[key];
|
||||||
object[key] = val;
|
object[key] = val;
|
||||||
if (orig == val)
|
if (!defined)
|
||||||
this.fireEvent("change", key);
|
|
||||||
else
|
|
||||||
this.fireEvent("add", key);
|
this.fireEvent("add", key);
|
||||||
|
else if (orig != val)
|
||||||
|
this.fireEvent("change", key);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.remove = function remove(key)
|
this.remove = function remove(key)
|
||||||
@@ -207,7 +208,7 @@ var storage = {
|
|||||||
{
|
{
|
||||||
if(!(key in observers))
|
if(!(key in observers))
|
||||||
observers[key] = [];
|
observers[key] = [];
|
||||||
if(observers[key].indexOf(key) >= 0)
|
if(observers[key].indexOf(callback) >= 0)
|
||||||
return;
|
return;
|
||||||
observers[key].push(callback);
|
observers[key].push(callback);
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user