mirror of https://github.com/roytam1/UXP
parent
b76b957009
commit
3a4bc108d7
17 changed files with 553 additions and 424 deletions
@ -1,11 +0,0 @@ |
||||
#
|
||||
# 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/.
|
||||
|
||||
include $(topsrcdir)/config/rules.mk |
||||
|
||||
CXXFLAGS += $(TK_CFLAGS)
|
||||
|
||||
clobber:: |
||||
rm -f $(DIST)/lib/$(LIBRARY_NAME).lib
|
@ -0,0 +1,114 @@ |
||||
/* 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"; |
||||
|
||||
this.EXPORTED_SYMBOLS = ["ShellService"]; |
||||
|
||||
const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; |
||||
|
||||
Cu.import("resource://gre/modules/AppConstants.jsm"); |
||||
Cu.import("resource://gre/modules/Services.jsm"); |
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
||||
XPCOMUtils.defineLazyModuleGetter(this, "WindowsRegistry", |
||||
"resource://gre/modules/WindowsRegistry.jsm"); |
||||
|
||||
/** |
||||
* Internal functionality to save and restore the docShell.allow* properties. |
||||
*/ |
||||
let ShellServiceInternal = { |
||||
/** |
||||
* Used to determine whether or not to offer "Set as desktop background" |
||||
* functionality. Even if shell service is available it is not |
||||
* guaranteed that it is able to set the background for every desktop |
||||
* which is especially true for Linux with its many different desktop |
||||
* environments. |
||||
*/ |
||||
get canSetDesktopBackground() { |
||||
if (AppConstants.platform == "win" || |
||||
AppConstants.platform == "macosx") { |
||||
return true; |
||||
} |
||||
|
||||
if (AppConstants.platform == "linux") { |
||||
if (this.shellService) { |
||||
let linuxShellService = this.shellService |
||||
.QueryInterface(Ci.nsIGNOMEShellService); |
||||
return linuxShellService.canSetDesktopBackground; |
||||
} |
||||
} |
||||
|
||||
return false; |
||||
}, |
||||
|
||||
/** |
||||
* Used to determine whether or not to show a "Set Default Browser" |
||||
* query dialog. This attribute is true if the application is starting |
||||
* up and "browser.shell.checkDefaultBrowser" is true, otherwise it |
||||
* is false. |
||||
*/ |
||||
_checkedThisSession: false, |
||||
get shouldCheckDefaultBrowser() { |
||||
// If we've already checked, the browser has been started and this is a
|
||||
// new window open, and we don't want to check again.
|
||||
if (this._checkedThisSession) { |
||||
return false; |
||||
} |
||||
|
||||
if (!Services.prefs.getBoolPref("browser.shell.checkDefaultBrowser")) { |
||||
return false; |
||||
} |
||||
|
||||
if (AppConstants.platform == "win") { |
||||
let optOutValue = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, |
||||
"Software\\Mozilla\\PaleMoon", |
||||
"DefaultBrowserOptOut"); |
||||
WindowsRegistry.removeRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, |
||||
"Software\\Mozilla\\PaleMoon", |
||||
"DefaultBrowserOptOut"); |
||||
if (optOutValue == "True") { |
||||
Services.prefs.setBoolPref("browser.shell.checkDefaultBrowser", false); |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
return true; |
||||
}, |
||||
|
||||
set shouldCheckDefaultBrowser(shouldCheck) { |
||||
Services.prefs.setBoolPref("browser.shell.checkDefaultBrowser", !!shouldCheck); |
||||
}, |
||||
|
||||
isDefaultBrowser(startupCheck, forAllTypes) { |
||||
// If this is the first browser window, maintain internal state that we've
|
||||
// checked this session (so that subsequent window opens don't show the
|
||||
// default browser dialog).
|
||||
if (startupCheck) { |
||||
this._checkedThisSession = true; |
||||
} |
||||
if (this.shellService) { |
||||
return this.shellService.isDefaultBrowser(startupCheck, forAllTypes); |
||||
} |
||||
return false; |
||||
} |
||||
}; |
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(ShellServiceInternal, "shellService", |
||||
"@mozilla.org/browser/shell-service;1", Ci.nsIShellService); |
||||
|
||||
/** |
||||
* The external API exported by this module. |
||||
*/ |
||||
this.ShellService = new Proxy(ShellServiceInternal, { |
||||
get(target, name) { |
||||
if (name in target) { |
||||
return target[name]; |
||||
} |
||||
if (target.shellService) { |
||||
return target.shellService[name]; |
||||
} |
||||
Services.console.logStringMessage(`${name} not found in ShellService: ${target.shellService}`); |
||||
return undefined; |
||||
} |
||||
}); |
@ -0,0 +1,19 @@ |
||||
/* 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/. */ |
||||
|
||||
#include "nsIShellService.idl" |
||||
|
||||
[scriptable, uuid(2ce5c803-edcd-443d-98eb-ceba86d02d13)] |
||||
interface nsIGNOMEShellService : nsIShellService |
||||
{ |
||||
/** |
||||
* Used to determine whether or not to offer "Set as desktop background" |
||||
* functionality. Even if shell service is available it is not |
||||
* guaranteed that it is able to set the background for every desktop |
||||
* which is especially true for Linux with its many different desktop |
||||
* environments. |
||||
*/ |
||||
readonly attribute boolean canSetDesktopBackground; |
||||
}; |
||||
|