Compare commits
63 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b2a6286c65 | ||
|
0656328beb | ||
|
fdad3a7f18 | ||
|
877145809a | ||
|
7bd0b6de52 | ||
|
aa3d8d6796 | ||
|
84284c04d0 | ||
|
70e5f184a8 | ||
|
dca19085c0 | ||
|
742a0bca52 | ||
|
d606ce6776 | ||
|
7ff63a26b7 | ||
|
f8c980cb22 | ||
|
74ed3646ad | ||
|
80dfda17cd | ||
|
3e98d47687 | ||
|
3d3494a15b | ||
|
3bf11dbd31 | ||
|
626e962e03 | ||
|
759de873b5 | ||
|
552ae78557 | ||
|
d85a16589b | ||
|
136c76dcbe | ||
|
2d95201af2 | ||
|
039c683bac | ||
|
d9ab2320d5 | ||
|
fa515328eb | ||
|
0cfedcaad6 | ||
|
65230bfd7f | ||
|
a5324462c3 | ||
|
7e654ab3ca | ||
|
9601908fca | ||
|
ab4c160f9d | ||
|
234882cbc6 | ||
|
e890674e49 | ||
|
cd01e2fb25 | ||
|
62027beb8e | ||
|
ee4d861a29 | ||
|
3a3e26c1bd | ||
|
bf2ad9d4e8 | ||
|
b053d9c84f | ||
|
4afa8bebdb | ||
|
caf3d5add0 | ||
|
7cf038474a | ||
|
c7bcc8150c | ||
|
6d58397508 | ||
|
49d0fc178d | ||
|
b83b8f64ff | ||
|
6cc8a42720 | ||
|
50a2d285eb | ||
|
fdf05310e9 | ||
|
7baa393b1b | ||
|
113694c44b | ||
|
0c2f51b27f | ||
|
04cb84de2a | ||
|
9475c16e80 | ||
|
6f41a9e10c | ||
|
be3b939a24 | ||
|
04fb3a5a7c | ||
|
697b6dbfff | ||
|
bb4639e423 | ||
|
69db63b4cd | ||
|
f9d17b214e |
@ -1,8 +0,0 @@
|
|||||||
extends:
|
|
||||||
- ./lint/eslintrc-gjs.yml
|
|
||||||
- ./lint/eslintrc-shell.yml
|
|
||||||
overrides:
|
|
||||||
- files:
|
|
||||||
- js/ui/init.js
|
|
||||||
parserOptions:
|
|
||||||
sourceType: module
|
|
57
.gitignore
vendored
57
.gitignore
vendored
@ -6,47 +6,34 @@
|
|||||||
ABOUT-NLS
|
ABOUT-NLS
|
||||||
ChangeLog
|
ChangeLog
|
||||||
INSTALL
|
INSTALL
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
data/.osk-layout-workbench
|
config.h
|
||||||
data/org.gnome.Shell.desktop
|
config.h.in
|
||||||
data/org.gnome.Shell.desktop.in
|
config.log
|
||||||
data/gnome-shell-extension-prefs.desktop
|
config.status
|
||||||
data/gnome-shell-extension-prefs.desktop.in
|
config
|
||||||
data/gnome-shell-theme.gresource
|
configure
|
||||||
|
data/gnome-shell.desktop
|
||||||
|
data/gnome-shell.desktop.in
|
||||||
data/gschemas.compiled
|
data/gschemas.compiled
|
||||||
data/perf-background.xml
|
|
||||||
data/org.gnome.shell.gschema.xml
|
data/org.gnome.shell.gschema.xml
|
||||||
data/org.gnome.shell.gschema.valid
|
data/org.gnome.shell.gschema.valid
|
||||||
data/org.gnome.Shell.PortalHelper.desktop
|
|
||||||
data/org.gnome.Shell.PortalHelper.service
|
|
||||||
data/theme/.sass-cache
|
|
||||||
data/theme/gnome-shell*.css.map
|
|
||||||
data/theme/gnome-shell*.css
|
|
||||||
docs/reference/*/*.args
|
|
||||||
docs/reference/*/*.bak
|
|
||||||
docs/reference/*/*.hierarchy
|
|
||||||
docs/reference/*/*.interfaces
|
|
||||||
docs/reference/*/*.prerequisites
|
|
||||||
docs/reference/*/*.sgml
|
|
||||||
docs/reference/*/*.signals
|
|
||||||
docs/reference/*/*.stamp
|
|
||||||
docs/reference/*/*.txt
|
|
||||||
docs/reference/*/*.types
|
|
||||||
docs/reference/*/html/
|
|
||||||
docs/reference/*/xml/
|
|
||||||
docs/reference/shell/doc-gen-*
|
|
||||||
js/misc/config.js
|
js/misc/config.js
|
||||||
js/js-resources.c
|
intltool-extract.in
|
||||||
js/js-resources.h
|
intltool-merge.in
|
||||||
man/gnome-shell.1
|
intltool-update.in
|
||||||
|
libtool
|
||||||
|
m4/
|
||||||
omf.make
|
omf.make
|
||||||
po/*.gmo
|
po/*.gmo
|
||||||
po/gnome-shell.pot
|
po/gnome-shell.pot
|
||||||
po/*.header
|
po/*.header
|
||||||
po/*.sed
|
po/*.sed
|
||||||
po/*.sin
|
po/*.sin
|
||||||
po/.intltool-merge-cache
|
po/Makefile.in.in
|
||||||
po/Makevars.template
|
po/Makevars.template
|
||||||
po/POTFILES
|
po/POTFILES
|
||||||
po/Rules-quot
|
po/Rules-quot
|
||||||
@ -56,17 +43,17 @@ src/*.gir
|
|||||||
src/*.typelib
|
src/*.typelib
|
||||||
src/*-enum-types.[ch]
|
src/*-enum-types.[ch]
|
||||||
src/*-marshal.[ch]
|
src/*-marshal.[ch]
|
||||||
src/calendar-server/evolution-calendar.desktop
|
src/Makefile
|
||||||
|
src/Makefile.in
|
||||||
src/calendar-server/org.gnome.Shell.CalendarServer.service
|
src/calendar-server/org.gnome.Shell.CalendarServer.service
|
||||||
src/gnome-shell
|
src/gnome-shell
|
||||||
src/gnome-shell-calendar-server
|
src/gnome-shell-calendar-server
|
||||||
src/gnome-shell-extension-tool
|
src/gnome-shell-extension-tool
|
||||||
src/gnome-shell-hotplug-sniffer
|
src/gnome-shell-hotplug-sniffer
|
||||||
|
src/gnome-shell-jhbuild
|
||||||
src/gnome-shell-perf-helper
|
src/gnome-shell-perf-helper
|
||||||
src/gnome-shell-perf-tool
|
src/gnome-shell-real
|
||||||
src/gnome-shell-portal-helper
|
|
||||||
src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service
|
src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service
|
||||||
src/org-gtk-application.[ch]
|
|
||||||
src/run-js-test
|
src/run-js-test
|
||||||
src/test-recorder
|
src/test-recorder
|
||||||
src/test-recorder.ogg
|
src/test-recorder.ogg
|
||||||
@ -74,11 +61,9 @@ src/test-theme
|
|||||||
src/st.h
|
src/st.h
|
||||||
src/stamp-st.h
|
src/stamp-st.h
|
||||||
src/stamp-st.h.tmp
|
src/stamp-st.h.tmp
|
||||||
src/st-scroll-view-fade-generated.c
|
|
||||||
src/stamp-st-scroll-view-fade-generated.c
|
|
||||||
stamp-h1
|
stamp-h1
|
||||||
tests/run-test.sh
|
tests/run-test.sh
|
||||||
|
xmldocs.make
|
||||||
*~
|
*~
|
||||||
*.patch
|
*.patch
|
||||||
*.sw?
|
*.sw?
|
||||||
.vscode
|
|
||||||
|
288
.gitlab-ci.yml
288
.gitlab-ci.yml
@ -1,288 +0,0 @@
|
|||||||
include:
|
|
||||||
- remote: 'https://gitlab.gnome.org/GNOME/citemplates/raw/HEAD/flatpak/flatpak_ci_initiative.yml'
|
|
||||||
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml'
|
|
||||||
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/ci-fairy.yml'
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- pre_review
|
|
||||||
- prep
|
|
||||||
- review
|
|
||||||
- build
|
|
||||||
- test
|
|
||||||
- analyze
|
|
||||||
- deploy
|
|
||||||
|
|
||||||
default:
|
|
||||||
# Cancel jobs if newer commits are pushed to the branch
|
|
||||||
interruptible: true
|
|
||||||
# Auto-retry jobs in case of infra failures
|
|
||||||
retry:
|
|
||||||
max: 1
|
|
||||||
when:
|
|
||||||
- 'runner_system_failure'
|
|
||||||
- 'stuck_or_timeout_failure'
|
|
||||||
- 'scheduler_failure'
|
|
||||||
- 'api_failure'
|
|
||||||
|
|
||||||
variables:
|
|
||||||
FDO_UPSTREAM_REPO: GNOME/gnome-shell
|
|
||||||
BUNDLE: "extensions-git.flatpak"
|
|
||||||
JS_LOG: "js-report.txt"
|
|
||||||
LINT_LOG: "eslint-report.xml"
|
|
||||||
LINT_MR_LOG: "eslint-mr-report.xml"
|
|
||||||
|
|
||||||
image: registry.gitlab.gnome.org/gnome/mutter/fedora/34:x86_64-2021-09-04.1
|
|
||||||
|
|
||||||
workflow:
|
|
||||||
rules:
|
|
||||||
- if: '$CI_MERGE_REQUEST_IID'
|
|
||||||
- if: '$CI_COMMIT_TAG'
|
|
||||||
- if: '$CI_COMMIT_BRANCH'
|
|
||||||
|
|
||||||
.pipeline_guard: &pipeline_guard
|
|
||||||
rules:
|
|
||||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
||||||
- if: '$CI_COMMIT_TAG'
|
|
||||||
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
||||||
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
|
|
||||||
- when: 'manual'
|
|
||||||
|
|
||||||
.gnome-shell.fedora:34:
|
|
||||||
variables:
|
|
||||||
FDO_DISTRIBUTION_VERSION: 34
|
|
||||||
FDO_DISTRIBUTION_TAG: '2021-08-12.0'
|
|
||||||
FDO_DISTRIBUTION_PACKAGES: >
|
|
||||||
findutils mozjs78-devel nodejs npm meson
|
|
||||||
pkgconfig(gio-2.0) pkgconfig(gio-unix-2.0)
|
|
||||||
pkgconfig(gnome-autoar-0) pkgconfig(json-glib-1.0)
|
|
||||||
FDO_DISTRIBUTION_EXEC: |
|
|
||||||
# For static analysis with eslint
|
|
||||||
npm install -g eslint eslint-plugin-jsdoc &&
|
|
||||||
|
|
||||||
dnf group install -y 'Development Tools' \
|
|
||||||
'C Development Tools and Libraries' &&
|
|
||||||
|
|
||||||
./.gitlab-ci/install-meson-project.sh \
|
|
||||||
-Dman=false \
|
|
||||||
https://gitlab.gnome.org/GNOME/gnome-shell.git \
|
|
||||||
3.38.0 \
|
|
||||||
subprojects/extensions-tool/ \
|
|
||||||
./generate-translations.sh &&
|
|
||||||
|
|
||||||
dnf clean all
|
|
||||||
|
|
||||||
check_commit_log:
|
|
||||||
extends:
|
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: pre_review
|
|
||||||
variables:
|
|
||||||
GIT_DEPTH: "100"
|
|
||||||
script:
|
|
||||||
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
|
||||||
then
|
|
||||||
ci-fairy check-commits --junit-xml=commit-message-junit-report.xml ;
|
|
||||||
else
|
|
||||||
echo "Not a merge request" ;
|
|
||||||
fi
|
|
||||||
<<: *pipeline_guard
|
|
||||||
artifacts:
|
|
||||||
expire_in: 1 week
|
|
||||||
paths:
|
|
||||||
- commit-message-junit-report.xml
|
|
||||||
reports:
|
|
||||||
junit: commit-message-junit-report.xml
|
|
||||||
|
|
||||||
check-merge-request:
|
|
||||||
extends:
|
|
||||||
- .fdo.ci-fairy
|
|
||||||
stage: pre_review
|
|
||||||
script:
|
|
||||||
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
|
||||||
then
|
|
||||||
ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request-report.xml ;
|
|
||||||
else
|
|
||||||
echo "Not a merge request" ;
|
|
||||||
fi
|
|
||||||
<<: *pipeline_guard
|
|
||||||
artifacts:
|
|
||||||
expire_in: 1 week
|
|
||||||
paths:
|
|
||||||
- check-merge-request-report.xml
|
|
||||||
reports:
|
|
||||||
junit: check-merge-request-report.xml
|
|
||||||
|
|
||||||
build-fedora-container:
|
|
||||||
extends:
|
|
||||||
- .fdo.container-build@fedora@x86_64
|
|
||||||
- .gnome-shell.fedora:34
|
|
||||||
stage: prep
|
|
||||||
|
|
||||||
js_check:
|
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .gnome-shell.fedora:34
|
|
||||||
stage: review
|
|
||||||
script:
|
|
||||||
- find js -name '*.js' $(printf "! -wholename %s " $(cat .jscheckignore)) -exec js78 -c '{}' ';' 2>&1 | tee $JS_LOG
|
|
||||||
- (! grep -q . $JS_LOG)
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- ${JS_LOG}
|
|
||||||
when: on_failure
|
|
||||||
|
|
||||||
eslint:
|
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .gnome-shell.fedora:34
|
|
||||||
stage: review
|
|
||||||
script:
|
|
||||||
- export NODE_PATH=$(npm root -g)
|
|
||||||
- ./.gitlab-ci/run-eslint --output-file ${LINT_LOG} --format junit
|
|
||||||
artifacts:
|
|
||||||
reports:
|
|
||||||
junit: ${LINT_LOG}
|
|
||||||
when: always
|
|
||||||
|
|
||||||
eslint_mr:
|
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .gnome-shell.fedora:34
|
|
||||||
stage: review
|
|
||||||
script:
|
|
||||||
- export NODE_PATH=$(npm root -g)
|
|
||||||
- ./.gitlab-ci/run-eslint --output-file ${LINT_MR_LOG} --format junit
|
|
||||||
--remote ${CI_MERGE_REQUEST_PROJECT_URL}.git
|
|
||||||
--branch ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
|
|
||||||
only:
|
|
||||||
- merge_requests
|
|
||||||
artifacts:
|
|
||||||
reports:
|
|
||||||
junit: ${LINT_MR_LOG}
|
|
||||||
when: always
|
|
||||||
|
|
||||||
potfile_c_check:
|
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .gnome-shell.fedora:34
|
|
||||||
stage: review
|
|
||||||
script:
|
|
||||||
- ./.gitlab-ci/check-potfiles.sh
|
|
||||||
|
|
||||||
potfile_js_check:
|
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .gnome-shell.fedora:34
|
|
||||||
stage: review
|
|
||||||
script:
|
|
||||||
- js78 -m .gitlab-ci/check-potfiles.js
|
|
||||||
|
|
||||||
no_template_check:
|
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .gnome-shell.fedora:34
|
|
||||||
stage: review
|
|
||||||
script:
|
|
||||||
- ./.gitlab-ci/check-template-strings.sh
|
|
||||||
|
|
||||||
build:
|
|
||||||
stage: build
|
|
||||||
needs: ["check_commit_log"]
|
|
||||||
before_script:
|
|
||||||
- .gitlab-ci/checkout-mutter.sh
|
|
||||||
- meson mutter mutter/build --prefix=/usr
|
|
||||||
- meson install -C mutter/build
|
|
||||||
script:
|
|
||||||
- meson . build -Dbuildtype=debugoptimized -Dman=false --werror
|
|
||||||
- meson compile -C build
|
|
||||||
- meson install -C build
|
|
||||||
artifacts:
|
|
||||||
expire_in: 1 day
|
|
||||||
paths:
|
|
||||||
- mutter
|
|
||||||
- build
|
|
||||||
|
|
||||||
test:
|
|
||||||
stage: test
|
|
||||||
needs: ["build"]
|
|
||||||
variables:
|
|
||||||
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
|
||||||
NO_AT_BRIDGE: "1"
|
|
||||||
before_script:
|
|
||||||
- meson install -C mutter/build
|
|
||||||
script:
|
|
||||||
- dbus-run-session -- xvfb-run meson test -C build --no-rebuild
|
|
||||||
artifacts:
|
|
||||||
expire_in: 1 day
|
|
||||||
paths:
|
|
||||||
- build/meson-logs/testlog.txt
|
|
||||||
reports:
|
|
||||||
junit: build/meson-logs/testlog.junit.xml
|
|
||||||
when: on_failure
|
|
||||||
|
|
||||||
test-coverity:
|
|
||||||
rules:
|
|
||||||
- if: '$CI_PIPELINE_SOURCE == "schedule" && $GNOME_SHELL_SCHEDULED_JOB == "coverity"'
|
|
||||||
when: always
|
|
||||||
- when: manual
|
|
||||||
needs: ["build"]
|
|
||||||
stage: analyze
|
|
||||||
allow_failure: true
|
|
||||||
before_script:
|
|
||||||
- meson install -C mutter/build
|
|
||||||
script:
|
|
||||||
- .gitlab-ci/download-coverity-tarball.sh
|
|
||||||
- CC=clang meson coverity-build -Dman=false
|
|
||||||
- ./coverity/cov-analysis-linux64-*/bin/cov-build --fs-capture-search js --dir cov-int meson compile -C coverity-build
|
|
||||||
- tar czf cov-int.tar.gz cov-int
|
|
||||||
- curl https://scan.coverity.com/builds?project=GNOME+Shell
|
|
||||||
--form token=$COVERITY_TOKEN --form email=carlosg@gnome.org
|
|
||||||
--form file=@cov-int.tar.gz --form version="`git describe --tags`"
|
|
||||||
--form description="GitLab CI build"
|
|
||||||
cache:
|
|
||||||
key: coverity-tarball
|
|
||||||
paths:
|
|
||||||
- coverity
|
|
||||||
|
|
||||||
flatpak:
|
|
||||||
stage: build
|
|
||||||
needs: ["check_commit_log"]
|
|
||||||
variables:
|
|
||||||
SUBPROJECT: "subprojects/extensions-app"
|
|
||||||
# Your manifest path
|
|
||||||
MANIFEST_PATH: "$SUBPROJECT/build-aux/flatpak/org.gnome.Extensions.json"
|
|
||||||
RUNTIME_REPO: "https://nightly.gnome.org/gnome-nightly.flatpakrepo"
|
|
||||||
FLATPAK_MODULE: "gnome-extensions-app"
|
|
||||||
APP_ID: "org.gnome.Extensions.Devel"
|
|
||||||
extends: .flatpak
|
|
||||||
|
|
||||||
nightly:
|
|
||||||
extends: '.publish_nightly'
|
|
||||||
variables:
|
|
||||||
BUNDLES: '$BUNDLE'
|
|
||||||
|
|
||||||
dist:
|
|
||||||
variables:
|
|
||||||
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
|
||||||
NO_AT_BRIDGE: "1"
|
|
||||||
stage: deploy
|
|
||||||
needs: ["build"]
|
|
||||||
before_script:
|
|
||||||
- meson install -C mutter/build
|
|
||||||
- mkdir -m 700 $XDG_RUNTIME_DIR
|
|
||||||
script:
|
|
||||||
- dbus-run-session xvfb-run meson dist -C build
|
|
||||||
rules:
|
|
||||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
||||||
changes:
|
|
||||||
- "**/meson.build"
|
|
||||||
- meson/*
|
|
||||||
|
|
||||||
|
|
||||||
dist-tarball:
|
|
||||||
extends: dist
|
|
||||||
artifacts:
|
|
||||||
expose_as: 'Get tarball here'
|
|
||||||
paths:
|
|
||||||
- build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz
|
|
||||||
rules:
|
|
||||||
- if: '$CI_COMMIT_TAG'
|
|
@ -1,202 +0,0 @@
|
|||||||
const gettextFuncs = new Set([
|
|
||||||
'_',
|
|
||||||
'N_',
|
|
||||||
'C_',
|
|
||||||
'NC_',
|
|
||||||
'dcgettext',
|
|
||||||
'dgettext',
|
|
||||||
'dngettext',
|
|
||||||
'dpgettext',
|
|
||||||
'gettext',
|
|
||||||
'ngettext',
|
|
||||||
'pgettext',
|
|
||||||
]);
|
|
||||||
|
|
||||||
function dirname(file) {
|
|
||||||
const split = file.split('/');
|
|
||||||
split.pop();
|
|
||||||
return split.join('/');
|
|
||||||
}
|
|
||||||
|
|
||||||
const scriptDir = dirname(import.meta.url);
|
|
||||||
const root = dirname(scriptDir);
|
|
||||||
|
|
||||||
const excludedFiles = new Set();
|
|
||||||
const foundFiles = new Set()
|
|
||||||
|
|
||||||
function addExcludes(filename) {
|
|
||||||
const contents = os.file.readFile(filename);
|
|
||||||
const lines = contents.split('\n')
|
|
||||||
.filter(l => l && !l.startsWith('#'));
|
|
||||||
lines.forEach(line => excludedFiles.add(line));
|
|
||||||
}
|
|
||||||
|
|
||||||
addExcludes(`${root}/po/POTFILES.in`);
|
|
||||||
addExcludes(`${root}/po/POTFILES.skip`);
|
|
||||||
|
|
||||||
function walkAst(node, func) {
|
|
||||||
func(node);
|
|
||||||
nodesToWalk(node).forEach(n => walkAst(n, func));
|
|
||||||
}
|
|
||||||
|
|
||||||
function findGettextCalls(node) {
|
|
||||||
switch(node.type) {
|
|
||||||
case 'CallExpression':
|
|
||||||
if (node.callee.type === 'Identifier' &&
|
|
||||||
gettextFuncs.has(node.callee.name))
|
|
||||||
throw new Error();
|
|
||||||
if (node.callee.type === 'MemberExpression' &&
|
|
||||||
node.callee.object.type === 'Identifier' &&
|
|
||||||
node.callee.object.name === 'Gettext' &&
|
|
||||||
node.callee.property.type === 'Identifier' &&
|
|
||||||
gettextFuncs.has(node.callee.property.name))
|
|
||||||
throw new Error();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function nodesToWalk(node) {
|
|
||||||
switch(node.type) {
|
|
||||||
case 'ArrayPattern':
|
|
||||||
case 'BreakStatement':
|
|
||||||
case 'CallSiteObject': // i.e. strings passed to template
|
|
||||||
case 'ContinueStatement':
|
|
||||||
case 'DebuggerStatement':
|
|
||||||
case 'EmptyStatement':
|
|
||||||
case 'Identifier':
|
|
||||||
case 'Literal':
|
|
||||||
case 'MetaProperty': // i.e. new.target
|
|
||||||
case 'Super':
|
|
||||||
case 'ThisExpression':
|
|
||||||
return [];
|
|
||||||
case 'ArrowFunctionExpression':
|
|
||||||
case 'FunctionDeclaration':
|
|
||||||
case 'FunctionExpression':
|
|
||||||
return [...node.defaults, node.body].filter(n => !!n);
|
|
||||||
case 'AssignmentExpression':
|
|
||||||
case 'BinaryExpression':
|
|
||||||
case 'ComprehensionBlock':
|
|
||||||
case 'LogicalExpression':
|
|
||||||
return [node.left, node.right];
|
|
||||||
case 'ArrayExpression':
|
|
||||||
case 'TemplateLiteral':
|
|
||||||
return node.elements.filter(n => !!n);
|
|
||||||
case 'BlockStatement':
|
|
||||||
case 'Program':
|
|
||||||
return node.body;
|
|
||||||
case 'CallExpression':
|
|
||||||
case 'NewExpression':
|
|
||||||
case 'TaggedTemplate':
|
|
||||||
return [node.callee, ...node.arguments];
|
|
||||||
case 'CatchClause':
|
|
||||||
return [node.body, node.guard].filter(n => !!n);
|
|
||||||
case 'ClassExpression':
|
|
||||||
case 'ClassStatement':
|
|
||||||
return [...node.body, node.superClass].filter(n => !!n);
|
|
||||||
case 'ClassMethod':
|
|
||||||
return [node.name, node.body];
|
|
||||||
case 'ComprehensionExpression':
|
|
||||||
case 'GeneratorExpression':
|
|
||||||
return [node.body, ...node.blocks, node.filter].filter(n => !!n);
|
|
||||||
case 'ComprehensionIf':
|
|
||||||
return [node.test];
|
|
||||||
case 'ComputedName':
|
|
||||||
return [node.name];
|
|
||||||
case 'ConditionalExpression':
|
|
||||||
case 'IfStatement':
|
|
||||||
return [node.test, node.consequent, node.alternate].filter(n => !!n);
|
|
||||||
case 'DoWhileStatement':
|
|
||||||
case 'WhileStatement':
|
|
||||||
return [node.body, node.test];
|
|
||||||
case 'ExportDeclaration':
|
|
||||||
return [node.declaration, node.source].filter(n => !!n);
|
|
||||||
case 'ImportDeclaration':
|
|
||||||
return [...node.specifiers, node.source];
|
|
||||||
case 'LetStatement':
|
|
||||||
return [...node.head, node.body];
|
|
||||||
case 'ExpressionStatement':
|
|
||||||
return [node.expression];
|
|
||||||
case 'ForInStatement':
|
|
||||||
case 'ForOfStatement':
|
|
||||||
return [node.body, node.left, node.right];
|
|
||||||
case 'ForStatement':
|
|
||||||
return [node.init, node.test, node.update, node.body].filter(n => !!n);
|
|
||||||
case 'LabeledStatement':
|
|
||||||
return [node.body];
|
|
||||||
case 'MemberExpression':
|
|
||||||
return [node.object, node.property];
|
|
||||||
case 'ObjectExpression':
|
|
||||||
case 'ObjectPattern':
|
|
||||||
return node.properties;
|
|
||||||
case 'OptionalExpression':
|
|
||||||
return [node.expression];
|
|
||||||
case 'OptionalMemberExpression':
|
|
||||||
return [node.object, node.property];
|
|
||||||
case 'Property':
|
|
||||||
case 'PrototypeMutation':
|
|
||||||
return [node.value];
|
|
||||||
case 'ReturnStatement':
|
|
||||||
case 'ThrowStatement':
|
|
||||||
case 'UnaryExpression':
|
|
||||||
case 'UpdateExpression':
|
|
||||||
case 'YieldExpression':
|
|
||||||
return node.argument ? [node.argument] : [];
|
|
||||||
case 'SequenceExpression':
|
|
||||||
return node.expressions;
|
|
||||||
case 'SpreadExpression':
|
|
||||||
return [node.expression];
|
|
||||||
case 'SwitchCase':
|
|
||||||
return [node.test, ...node.consequent].filter(n => !!n);
|
|
||||||
case 'SwitchStatement':
|
|
||||||
return [node.discriminant, ...node.cases];
|
|
||||||
case 'TryStatement':
|
|
||||||
return [node.block, node.handler, node.finalizer].filter(n => !!n);
|
|
||||||
case 'VariableDeclaration':
|
|
||||||
return node.declarations;
|
|
||||||
case 'VariableDeclarator':
|
|
||||||
return node.init ? [node.init] : [];
|
|
||||||
case 'WithStatement':
|
|
||||||
return [node.object, node.body];
|
|
||||||
default:
|
|
||||||
print(`Ignoring ${node.type}, you should probably fix this in the script`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function walkDir(dir) {
|
|
||||||
os.file.listDir(dir).forEach(child => {
|
|
||||||
if (child.startsWith('.'))
|
|
||||||
return;
|
|
||||||
|
|
||||||
const path = os.path.join(dir, child);
|
|
||||||
const relativePath = path.replace(`${root}/`, '');
|
|
||||||
if (excludedFiles.has(relativePath))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!child.endsWith('.js')) {
|
|
||||||
try {
|
|
||||||
walkDir(path);
|
|
||||||
} catch (e) {
|
|
||||||
// not a directory
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const script = os.file.readFile(path);
|
|
||||||
const ast = Reflect.parse(script);
|
|
||||||
walkAst(ast, findGettextCalls);
|
|
||||||
} catch (e) {
|
|
||||||
foundFiles.add(path);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
walkDir(root);
|
|
||||||
|
|
||||||
if (foundFiles.size === 0)
|
|
||||||
quit(0);
|
|
||||||
|
|
||||||
print('The following files are missing from po/POTFILES.in:')
|
|
||||||
foundFiles.forEach(f => print(` ${f}`));
|
|
||||||
quit(1);
|
|
@ -1,30 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
srcdirs="src subprojects/extensions-tool"
|
|
||||||
|
|
||||||
# find source files that contain gettext keywords
|
|
||||||
files=$(grep -lR --include='*.c' '\(gettext\|[^I_)]_\)(' $srcdirs)
|
|
||||||
|
|
||||||
# filter out excluded files
|
|
||||||
if [ -f po/POTFILES.skip ]; then
|
|
||||||
files=$(for f in $files; do ! grep -q ^$f po/POTFILES.skip && echo $f; done)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# find those that aren't listed in POTFILES.in
|
|
||||||
missing=$(for f in $files; do ! grep -q ^$f po/POTFILES.in && echo $f; done)
|
|
||||||
|
|
||||||
if [ ${#missing} -eq 0 ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >&2 <<EOT
|
|
||||||
|
|
||||||
The following files are missing from po/POTFILES.po:
|
|
||||||
|
|
||||||
EOT
|
|
||||||
for f in $missing; do
|
|
||||||
echo " $f" >&2
|
|
||||||
done
|
|
||||||
echo >&2
|
|
||||||
|
|
||||||
exit 1
|
|
@ -1,23 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# find files from POTFILES.in that use js template strings
|
|
||||||
baddies=$(grep -l '${' $(grep ^js po/POTFILES.in))
|
|
||||||
|
|
||||||
if [ ${#baddies} -eq 0 ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >&2 <<EOT
|
|
||||||
|
|
||||||
xgettext cannot handle template strings properly, so we ban their use
|
|
||||||
in files with translatable strings.
|
|
||||||
|
|
||||||
The following files are listed in po/POTFILES.in and use template strings:
|
|
||||||
|
|
||||||
EOT
|
|
||||||
for f in $baddies; do
|
|
||||||
echo " $f" >&2
|
|
||||||
done
|
|
||||||
echo >&2
|
|
||||||
|
|
||||||
exit 1
|
|
@ -1,55 +0,0 @@
|
|||||||
#!/usr/bin/bash
|
|
||||||
|
|
||||||
fetch() {
|
|
||||||
local remote=$1
|
|
||||||
local ref=$2
|
|
||||||
|
|
||||||
git fetch --quiet --depth=1 $remote $ref 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
mutter_target=
|
|
||||||
|
|
||||||
echo -n Cloning into mutter ...
|
|
||||||
if git clone --quiet --depth=1 https://gitlab.gnome.org/GNOME/mutter.git; then
|
|
||||||
echo \ done
|
|
||||||
else
|
|
||||||
echo \ failed
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd mutter
|
|
||||||
|
|
||||||
if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
|
|
||||||
merge_request_remote=${CI_MERGE_REQUEST_SOURCE_PROJECT_URL//gnome-shell/mutter}
|
|
||||||
merge_request_branch=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
|
|
||||||
|
|
||||||
echo -n Looking for $merge_request_branch on remote ...
|
|
||||||
if fetch $merge_request_remote $merge_request_branch; then
|
|
||||||
echo \ found
|
|
||||||
mutter_target=FETCH_HEAD
|
|
||||||
else
|
|
||||||
echo \ not found
|
|
||||||
|
|
||||||
echo -n Looking for $CI_MERGE_REQUEST_TARGET_BRANCH_NAME instead ...
|
|
||||||
if fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME; then
|
|
||||||
echo \ found
|
|
||||||
mutter_target=FETCH_HEAD
|
|
||||||
else
|
|
||||||
echo \ not found
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$mutter_target" ]; then
|
|
||||||
echo -n Looking for $CI_COMMIT_REF_NAME on remote ...
|
|
||||||
if fetch origin $CI_COMMIT_REF_NAME; then
|
|
||||||
echo \ found
|
|
||||||
mutter_target=FETCH_HEAD
|
|
||||||
else
|
|
||||||
echo \ not found
|
|
||||||
mutter_target=HEAD
|
|
||||||
echo Using $mutter_target instead
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
git checkout -q $mutter_target
|
|
@ -1,16 +0,0 @@
|
|||||||
patterns:
|
|
||||||
deny:
|
|
||||||
- regex: '^$CI_MERGE_REQUEST_PROJECT_URL/(-/)?merge_requests/$CI_MERGE_REQUEST_IID$'
|
|
||||||
message: Commit message must not contain a link to its own merge request
|
|
||||||
- regex: '^(st-|St)'
|
|
||||||
message: Commit message subject should not be prefixed with 'st-' or 'St', use 'st/' instead
|
|
||||||
where: subject
|
|
||||||
- regex: '^[^:]+: [a-z]'
|
|
||||||
message: "Commit message subject should be properly Capitalized. E.g. 'window: Marginalize extradicity'"
|
|
||||||
where: subject
|
|
||||||
- regex: '^\S*\.(js|c|h):'
|
|
||||||
message: Commit message subject prefix should not include .c, .h etc.
|
|
||||||
where: subject
|
|
||||||
- regex: '([^.]\.|[:,;])\s*$'
|
|
||||||
message: Commit message subject should not end with punctuation
|
|
||||||
where: subject
|
|
@ -1,38 +0,0 @@
|
|||||||
#!/usr/bin/bash
|
|
||||||
|
|
||||||
# We need a coverity token to fetch the tarball
|
|
||||||
if [ -x $COVERITY_TOKEN ]
|
|
||||||
then
|
|
||||||
echo "No coverity token. Run this job from a protected branch."
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p coverity
|
|
||||||
|
|
||||||
# Download and check MD5 first
|
|
||||||
curl https://scan.coverity.com/download/linux64 \
|
|
||||||
--data "token=$COVERITY_TOKEN&project=GNOME+Shell&md5=1" \
|
|
||||||
--output /tmp/coverity_tool.md5
|
|
||||||
|
|
||||||
diff /tmp/coverity_tool.md5 coverity/coverity_tool.md5 >/dev/null 2>&1
|
|
||||||
|
|
||||||
if [ $? -eq 0 -a -d coverity/cov-analysis* ]
|
|
||||||
then
|
|
||||||
echo "Coverity tarball is up-to-date"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Download and extract coverity tarball
|
|
||||||
curl https://scan.coverity.com/download/linux64 \
|
|
||||||
--data "token=$COVERITY_TOKEN&project=GNOME+Shell" \
|
|
||||||
--output /tmp/coverity_tool.tgz
|
|
||||||
|
|
||||||
rm -rf ./coverity/cov-analysis*
|
|
||||||
|
|
||||||
tar zxf /tmp/coverity_tool.tgz -C coverity/
|
|
||||||
if [ $? -eq 0 ]
|
|
||||||
then
|
|
||||||
mv /tmp/coverity_tool.md5 coverity/
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm /tmp/coverity_tool.tgz
|
|
@ -1,34 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ $# -lt 4 ]]; then
|
|
||||||
echo Usage: $0 [options] [repo-url] [commit] [subdir]
|
|
||||||
echo Options:
|
|
||||||
echo -Dkey=val
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
MESON_OPTIONS=()
|
|
||||||
|
|
||||||
while [[ $1 =~ ^-D ]]; do
|
|
||||||
MESON_OPTIONS+=( "$1" )
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
REPO_URL="$1"
|
|
||||||
COMMIT="$2"
|
|
||||||
SUBDIR="$3"
|
|
||||||
PREPARE="$4"
|
|
||||||
|
|
||||||
REPO_DIR="$(basename ${REPO_URL%.git})"
|
|
||||||
|
|
||||||
git clone --depth 1 "$REPO_URL" -b "$COMMIT"
|
|
||||||
pushd "$REPO_DIR"
|
|
||||||
pushd "$SUBDIR"
|
|
||||||
sh -c "$PREPARE"
|
|
||||||
meson --prefix=/usr _build "${MESON_OPTIONS[@]}"
|
|
||||||
meson install -C _build
|
|
||||||
popd
|
|
||||||
popd
|
|
||||||
rm -rf "$REPO_DIR"
|
|
@ -1,128 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
const { ESLint } = require('eslint');
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
const { spawn } = require('child_process');
|
|
||||||
|
|
||||||
function createConfig(config) {
|
|
||||||
const options = {
|
|
||||||
cache: true,
|
|
||||||
cacheLocation: `.eslintcache-${config}`,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (config === 'legacy')
|
|
||||||
options.overrideConfigFile='lint/eslintrc-legacy.yml';
|
|
||||||
|
|
||||||
return new ESLint(options);
|
|
||||||
}
|
|
||||||
|
|
||||||
function git(...args) {
|
|
||||||
const git = spawn('git', args, { stdio: ['ignore', null, 'ignore'] });
|
|
||||||
git.stdout.setEncoding('utf8');
|
|
||||||
|
|
||||||
return new Promise(resolve => {
|
|
||||||
let out = '';
|
|
||||||
git.stdout.on('data', chunk => out += chunk);
|
|
||||||
git.stdout.on('end', () => resolve(out.trim()));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function createCommon(report1, report2, ignoreColumn=false) {
|
|
||||||
return report1.map(result => {
|
|
||||||
const { filePath, messages } = result;
|
|
||||||
const match =
|
|
||||||
report2.find(r => r.filePath === filePath) || { messages: [] };
|
|
||||||
|
|
||||||
const filteredMessages = messages.filter(
|
|
||||||
msg => match.messages.some(
|
|
||||||
m => m.line === msg.line && (ignoreColumn || m.column === msg.column)));
|
|
||||||
|
|
||||||
const [errorCount, warningCount] = filteredMessages.reduce(
|
|
||||||
([e, w], msg) => {
|
|
||||||
return [
|
|
||||||
e + Number(msg.severity === 2),
|
|
||||||
w + Number(msg.severity === 1)];
|
|
||||||
}, [0, 0]);
|
|
||||||
|
|
||||||
return {
|
|
||||||
filePath,
|
|
||||||
messages: filteredMessages,
|
|
||||||
errorCount,
|
|
||||||
warningCount,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getMergeRequestChanges(remote, branch) {
|
|
||||||
await git('fetch', remote, branch);
|
|
||||||
const branchPoint = await git('merge-base', 'HEAD', 'FETCH_HEAD');
|
|
||||||
const diff = await git('diff', '-U0', `${branchPoint}...HEAD`);
|
|
||||||
|
|
||||||
const report = [];
|
|
||||||
let messages = null;
|
|
||||||
for (const line of diff.split('\n')) {
|
|
||||||
if (line.startsWith('+++ b/')) {
|
|
||||||
const filePath = path.resolve(line.substring(6));
|
|
||||||
messages = filePath.endsWith('.js') ? [] : null;
|
|
||||||
if (messages)
|
|
||||||
report.push({ filePath, messages });
|
|
||||||
} else if (messages && line.startsWith('@@ ')) {
|
|
||||||
[, , changes] = line.split(' ');
|
|
||||||
[start, count] = `${changes},1`.split(',').map(i => parseInt(i));
|
|
||||||
for (let i = start; i < start + count; i++)
|
|
||||||
messages.push({ line: i });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return report;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getOption(...names) {
|
|
||||||
const optIndex =
|
|
||||||
process.argv.findIndex(arg => names.includes(arg)) + 1;
|
|
||||||
|
|
||||||
if (optIndex === 0)
|
|
||||||
return undefined;
|
|
||||||
|
|
||||||
return process.argv[optIndex];
|
|
||||||
}
|
|
||||||
|
|
||||||
(async function main() {
|
|
||||||
const outputOption = getOption('--output-file', '-o');
|
|
||||||
const outputPath = outputOption ? path.resolve(outputOption) : null;
|
|
||||||
|
|
||||||
const sourceDir = path.dirname(process.argv[1]);
|
|
||||||
process.chdir(path.resolve(sourceDir, '..'));
|
|
||||||
|
|
||||||
const remote = getOption('--remote') || 'origin';
|
|
||||||
const branch = getOption('--branch', '-b');
|
|
||||||
|
|
||||||
const sources = ['js', 'subprojects/extensions-app/js'];
|
|
||||||
const regular = createConfig('regular');
|
|
||||||
|
|
||||||
const ops = [];
|
|
||||||
ops.push(regular.lintFiles(sources));
|
|
||||||
if (branch)
|
|
||||||
ops.push(getMergeRequestChanges(remote, branch));
|
|
||||||
else
|
|
||||||
ops.push(createConfig('legacy').lintFiles(sources));
|
|
||||||
|
|
||||||
const results = await Promise.all(ops);
|
|
||||||
const commonResults = createCommon(...results, branch !== undefined);
|
|
||||||
|
|
||||||
const formatter = await regular.loadFormatter(getOption('--format', '-f'));
|
|
||||||
const resultText = formatter.format(commonResults);
|
|
||||||
|
|
||||||
if (outputPath) {
|
|
||||||
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
|
|
||||||
fs.writeFileSync(outputPath, resultText);
|
|
||||||
} else {
|
|
||||||
console.log(resultText);
|
|
||||||
}
|
|
||||||
|
|
||||||
process.exitCode = commonResults.some(r => r.errorCount > 0) ? 1 : 0;
|
|
||||||
})().catch((error) => {
|
|
||||||
process.exitCode = 1;
|
|
||||||
console.error(error);
|
|
||||||
});
|
|
@ -1,55 +0,0 @@
|
|||||||
<!--
|
|
||||||
Please read https://wiki.gnome.org/Community/GettingInTouch/BugReportingGuidelines
|
|
||||||
first to ensure that you create a clear and specific issue.
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Affected version
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Provide at least the following information:
|
|
||||||
* Your OS and version
|
|
||||||
* Affected GNOME Shell version (see https://wiki.gnome.org/Schedule for currently supported versions)
|
|
||||||
* Does this issue appear in XOrg and/or Wayland
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Bug summary
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Provide a short summary of the bug you encountered.
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Steps to reproduce
|
|
||||||
|
|
||||||
<!--
|
|
||||||
1. Step one
|
|
||||||
2. Step two
|
|
||||||
3. ...
|
|
||||||
-->
|
|
||||||
|
|
||||||
### What happened
|
|
||||||
|
|
||||||
<!--
|
|
||||||
What did GNOME Shell do that was unexpected?
|
|
||||||
-->
|
|
||||||
|
|
||||||
### What did you expect to happen
|
|
||||||
|
|
||||||
<!--
|
|
||||||
What did you expect GNOME Shell to do?
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Relevant logs, screenshots, screencasts etc.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
If you have further information, such as technical documentation, logs,
|
|
||||||
screenshots or screencasts related, please provide them here.
|
|
||||||
|
|
||||||
If the bug is a crash, please obtain a stack trace with installed debug
|
|
||||||
symbols (at least for GNOME Shell and Mutter) and attach it to
|
|
||||||
this issue following the instructions on
|
|
||||||
https://wiki.gnome.org/Community/GettingInTouch/Bugzilla/GettingTraces.
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Do not remove the following line. -->
|
|
||||||
/label ~"1. Bug"
|
|
@ -1,30 +0,0 @@
|
|||||||
<!--
|
|
||||||
Please read https://wiki.gnome.org/Community/GettingInTouch/BugReportingGuidelines
|
|
||||||
first to ensure that you create a clear and specific issue.
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Feature summary
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Describe what you would like to be able to do with GNOME Shell
|
|
||||||
that you currently cannot do.
|
|
||||||
-->
|
|
||||||
|
|
||||||
### How would you like it to work
|
|
||||||
|
|
||||||
<!--
|
|
||||||
If you can think of a way GNOME Shell might be able to do this,
|
|
||||||
let us know here.
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Relevant links, screenshots, screencasts etc.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
If you have further information, such as technical documentation,
|
|
||||||
code, mockups or a similar feature in another desktop environments,
|
|
||||||
please provide them here.
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Do not remove the following line. -->
|
|
||||||
/label ~"1. Feature"
|
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
|||||||
[submodule "subprojects/gvc"]
|
|
||||||
path = subprojects/gvc
|
|
||||||
url = https://gitlab.gnome.org/GNOME/libgnome-volume-control.git
|
|
@ -1 +0,0 @@
|
|||||||
js/ui/init.js
|
|
31
.project
Normal file
31
.project
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>gnome-shell</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.linuxtools.cdt.autotools.genmakebuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
|
<nature>org.eclipse.linuxtools.cdt.autotools.autotoolsNature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
|
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
148
.settings/org.eclipse.cdt.core.prefs
Normal file
148
.settings/org.eclipse.cdt.core.prefs
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
#Fri Nov 28 14:33:30 EST 2008
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_compact_if=0
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=80
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
|
||||||
|
org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
|
||||||
|
org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line_shifted
|
||||||
|
org.eclipse.cdt.core.formatter.brace_position_for_block=next_line_shifted
|
||||||
|
org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line_shifted
|
||||||
|
org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line
|
||||||
|
org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line
|
||||||
|
org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line_shifted
|
||||||
|
org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line
|
||||||
|
org.eclipse.cdt.core.formatter.compact_else_if=true
|
||||||
|
org.eclipse.cdt.core.formatter.continuation_indentation=2
|
||||||
|
org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
|
||||||
|
org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
|
||||||
|
org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
|
||||||
|
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
|
||||||
|
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=true
|
||||||
|
org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
|
||||||
|
org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=true
|
||||||
|
org.eclipse.cdt.core.formatter.indent_empty_lines=false
|
||||||
|
org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
|
||||||
|
org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
|
||||||
|
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
|
||||||
|
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false
|
||||||
|
org.eclipse.cdt.core.formatter.indentation.size=8
|
||||||
|
org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
|
||||||
|
org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
|
||||||
|
org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
|
||||||
|
org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false
|
||||||
|
org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
|
||||||
|
org.eclipse.cdt.core.formatter.lineSplit=80
|
||||||
|
org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1
|
||||||
|
org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
|
||||||
|
org.eclipse.cdt.core.formatter.tabulation.char=space
|
||||||
|
org.eclipse.cdt.core.formatter.tabulation.size=2
|
||||||
|
org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false
|
4
.settings/org.eclipse.cdt.ui.prefs
Normal file
4
.settings/org.eclipse.cdt.ui.prefs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#Fri Nov 28 14:33:30 EST 2008
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
formatter_profile=org.eclipse.cdt.ui.default.gnu_profile
|
||||||
|
formatter_settings_version=1
|
315
.settings/org.eclipse.wst.jsdt.core.prefs
Normal file
315
.settings/org.eclipse.wst.jsdt.core.prefs
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
#Fri Nov 28 14:43:43 EST 2008
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.wst.jsdt.core.codeComplete.argumentPrefixes=
|
||||||
|
org.eclipse.wst.jsdt.core.codeComplete.argumentSuffixes=
|
||||||
|
org.eclipse.wst.jsdt.core.codeComplete.fieldPrefixes=
|
||||||
|
org.eclipse.wst.jsdt.core.codeComplete.fieldSuffixes=
|
||||||
|
org.eclipse.wst.jsdt.core.codeComplete.localPrefixes=
|
||||||
|
org.eclipse.wst.jsdt.core.codeComplete.localSuffixes=
|
||||||
|
org.eclipse.wst.jsdt.core.codeComplete.staticFieldPrefixes=
|
||||||
|
org.eclipse.wst.jsdt.core.codeComplete.staticFieldSuffixes=
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.codegen.inlineJsrBytecode=disabled
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.codegen.targetPlatform=1.2
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.codegen.unusedLocal=preserve
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.compliance=1.4
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.debug.lineNumber=generate
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.debug.localVariable=generate
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.debug.sourceFile=generate
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.assertIdentifier=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.deprecation=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.discouragedReference=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.emptyStatement=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.enumIdentifier=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.fallthroughCase=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.fieldHiding=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.forbiddenReference=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.hiddenCatchBlock=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.indirectStaticAccess=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.localVariableHiding=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.looseVarDecleration=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.noEffectAssignment=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.nullReference=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.optionalSemicolon=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.parameterAssignment=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.potentialNullReference=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.redundantNullCheck=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.undefinedField=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.undocumentedEmptyBlock=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unnecessaryElse=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unresolvedFieldReference=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unresolvedMethodReference=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unresolvedTypeReference=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unusedLabel=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unusedLocal=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unusedParameter=ignore
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.problem.unusedPrivateMember=warning
|
||||||
|
org.eclipse.wst.jsdt.core.compiler.source=1.3
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.align_type_members_on_columns=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_enum_constant=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_method_invocation=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_assignment=0
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_binary_expression=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_compact_if=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_conditional_expression=80
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_enum_constants=0
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_expressions_in_array_initializer=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_multiple_fields=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_parameters_in_method_declaration=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_selector_in_method_invocation=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_superclass_in_type_declaration=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_after_imports=1
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_after_package=1
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_before_field=0
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_before_first_class_body_declaration=0
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_before_imports=1
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_before_member_type=1
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_before_method=1
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_before_new_chunk=1
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_before_package=0
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_between_import_groups=1
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.blank_lines_between_type_declarations=0
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_array_initializer=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_block=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_block_in_case=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_enum_constant=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_enum_declaration=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_method_declaration=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_objlit_initializer=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_switch=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.brace_position_for_type_declaration=end_of_line
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.format_block_comments=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.format_header=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.format_html=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.format_javadoc_comments=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.format_line_comments=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.format_source_code=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.indent_parameter_description=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.indent_root_tags=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.insert_new_line_before_root_tags=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.insert_new_line_for_parameter=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.comment.line_length=80
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.compact_else_if=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.continuation_indentation=2
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.continuation_indentation_for_array_initializer=2
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.continuation_indentation_for_objlit_initializer=1
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.format_guardian_clause_on_one_line=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_type_header=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_breaks_compare_to_cases=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_empty_lines=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_statements_compare_to_block=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_statements_compare_to_body=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_switchstatements_compare_to_cases=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indent_switchstatements_compare_to_switch=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.indentation.size=4
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_annotation=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_comma_in_objlit_initializer=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_opening_brace_in_objlit_initializer=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_closing_brace_in_objlit_initializer=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_block=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_method_body=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_and_in_type_parameter=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_assignment_operator=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_at_in_annotation=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_binary_operator=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_brace_in_block=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_assert=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_case=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_conditional=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_for=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_annotation=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_for_increments=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_for_inits=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_ellipsis=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_postfix_operator=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_prefix_operator=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_question_in_conditional=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_semicolon_in_for=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_after_unary_operator=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_and_in_type_parameter=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_assignment_operator=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_binary_operator=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_assert=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_case=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_conditional=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_default=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_for=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_ellipsis=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_block=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_for=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_if=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_while=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_postfix_operator=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_prefix_operator=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_question_in_conditional=insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_semicolon=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_before_unary_operator=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.keep_else_statement_on_same_line=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.keep_empty_array_initializer_on_one_line=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.keep_empty_objlit_initializer_on_one_line=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.keep_imple_if_on_one_line=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.keep_then_statement_on_same_line=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.lineSplit=80
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.never_indent_block_comments_on_first_column=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.never_indent_line_comments_on_first_column=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.number_of_empty_lines_to_preserve=1
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.put_empty_statement_on_new_line=true
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.tabulation.char=space
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.tabulation.size=4
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.use_tabs_only_for_leading_indentations=false
|
||||||
|
org.eclipse.wst.jsdt.core.formatter.wrap_before_binary_operator=true
|
10
.settings/org.eclipse.wst.jsdt.ui.prefs
Normal file
10
.settings/org.eclipse.wst.jsdt.ui.prefs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#Fri Nov 28 14:39:12 EST 2008
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
formatter_profile=_gjs
|
||||||
|
formatter_settings_version=11
|
||||||
|
org.eclipse.wst.jsdt.ui.exception.name=e
|
||||||
|
org.eclipse.wst.jsdt.ui.gettersetter.use.is=true
|
||||||
|
org.eclipse.wst.jsdt.ui.javadoc=false
|
||||||
|
org.eclipse.wst.jsdt.ui.keywordthis=false
|
||||||
|
org.eclipse.wst.jsdt.ui.overrideannotation=true
|
||||||
|
org.eclipse.wst.jsdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
|
1
.settings/org.eclipse.wst.jsdt.ui.superType.container
Normal file
1
.settings/org.eclipse.wst.jsdt.ui.superType.container
Normal file
@ -0,0 +1 @@
|
|||||||
|
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
|
1
.settings/org.eclipse.wst.jsdt.ui.superType.name
Normal file
1
.settings/org.eclipse.wst.jsdt.ui.superType.name
Normal file
@ -0,0 +1 @@
|
|||||||
|
Window
|
25
COPYING
25
COPYING
@ -1,8 +1,8 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 2, June 1991
|
Version 2, June 1991
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
|
|||||||
General Public License applies to most of the Free Software
|
General Public License applies to most of the Free Software
|
||||||
Foundation's software and to any other program whose authors commit to
|
Foundation's software and to any other program whose authors commit to
|
||||||
using it. (Some other Free Software Foundation software is covered by
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
the GNU Lesser General Public License instead.) You can apply it to
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
your programs, too.
|
your programs, too.
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
When we speak of free software, we are referring to freedom, not
|
||||||
@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
|
|||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
The precise terms and conditions for copying, distribution and
|
||||||
modification follow.
|
modification follow.
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
|
|||||||
License. (Exception: if the Program itself is interactive but
|
License. (Exception: if the Program itself is interactive but
|
||||||
does not normally print such an announcement, your work based on
|
does not normally print such an announcement, your work based on
|
||||||
the Program is not required to print an announcement.)
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
These requirements apply to the modified work as a whole. If
|
||||||
identifiable sections of that work are not derived from the Program,
|
identifiable sections of that work are not derived from the Program,
|
||||||
and can be reasonably considered independent and separate works in
|
and can be reasonably considered independent and separate works in
|
||||||
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
|
|||||||
access to copy the source code from the same place counts as
|
access to copy the source code from the same place counts as
|
||||||
distribution of the source code, even though third parties are not
|
distribution of the source code, even though third parties are not
|
||||||
compelled to copy the source along with the object code.
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
4. You may not copy, modify, sublicense, or distribute the Program
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
except as expressly provided under this License. Any attempt
|
except as expressly provided under this License. Any attempt
|
||||||
otherwise to copy, modify, sublicense or distribute the Program is
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
@ -225,7 +225,7 @@ impose that choice.
|
|||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
This section is intended to make thoroughly clear what is believed to
|
||||||
be a consequence of the rest of this License.
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
8. If the distribution and/or use of the Program is restricted in
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
original copyright holder who places the Program under this License
|
original copyright holder who places the Program under this License
|
||||||
@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
|||||||
POSSIBILITY OF SUCH DAMAGES.
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
If you develop a new program, and you want it to be of the greatest
|
||||||
@ -303,9 +303,10 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
You should have received a copy of the GNU General Public License
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
along with this program; if not, write to the Free Software
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
@ -335,5 +336,5 @@ necessary. Here is a sample; alter the names:
|
|||||||
This General Public License does not permit incorporating your program into
|
This General Public License does not permit incorporating your program into
|
||||||
proprietary programs. If your program is a subroutine library, you may
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
consider it more useful to permit linking proprietary applications with the
|
consider it more useful to permit linking proprietary applications with the
|
||||||
library. If this is what you want to do, use the GNU Lesser General
|
library. If this is what you want to do, use the GNU Library General
|
||||||
Public License instead of this License.
|
Public License instead of this License.
|
||||||
|
341
HACKING.md
341
HACKING.md
@ -1,341 +0,0 @@
|
|||||||
# Coding guide
|
|
||||||
|
|
||||||
Our goal is to have all JavaScript code in GNOME follow a consistent style. In
|
|
||||||
a dynamic language like JavaScript, it is essential to be rigorous about style
|
|
||||||
(and unit tests), or you rapidly end up with a spaghetti-code mess.
|
|
||||||
|
|
||||||
## A quick note
|
|
||||||
|
|
||||||
Life isn't fun if you can't break the rules. If a rule seems unnecessarily
|
|
||||||
restrictive while you're coding, ignore it, and let the patch reviewer decide
|
|
||||||
what to do.
|
|
||||||
|
|
||||||
## Indentation, braces and whitespace
|
|
||||||
|
|
||||||
* Use four-space indents.
|
|
||||||
* Braces are on the same line as their associated statements.
|
|
||||||
* You should only omit braces if *both* sides of the statement are on one line.
|
|
||||||
* One space after the `function` keyword.
|
|
||||||
* No space between the function name in a declaration or a call.
|
|
||||||
* One space before the parens in the `if` statements, or `while`, or `for` loops.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
function foo(a, b) {
|
|
||||||
let bar;
|
|
||||||
|
|
||||||
if (a > b)
|
|
||||||
bar = do_thing(a);
|
|
||||||
else
|
|
||||||
bar = do_thing(b);
|
|
||||||
|
|
||||||
if (var == 5) {
|
|
||||||
for (let i = 0; i < 10; i++)
|
|
||||||
print(i);
|
|
||||||
} else {
|
|
||||||
print(20);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Semicolons
|
|
||||||
|
|
||||||
JavaScript allows omitting semicolons at the end of lines, but don't. Always
|
|
||||||
end statements with a semicolon.
|
|
||||||
|
|
||||||
## js2-mode
|
|
||||||
|
|
||||||
If using Emacs, do not use js2-mode. It is outdated and hasn't worked for a
|
|
||||||
while. emacs now has a built-in JavaScript mode, js-mode, based on
|
|
||||||
espresso-mode. It is the de facto emacs mode for JavaScript.
|
|
||||||
|
|
||||||
## File naming and creation
|
|
||||||
|
|
||||||
For JavaScript files, use lowerCamelCase-style names, with a `.js` extension.
|
|
||||||
|
|
||||||
We only use C where gjs/gobject-introspection is not available for the task, or
|
|
||||||
where C would be cleaner. To work around limitations in
|
|
||||||
gjs/gobject-introspection itself, add a new method in `shell-util.[ch]`.
|
|
||||||
|
|
||||||
Like many other GNOME projects, we prefix our C source filenames with the
|
|
||||||
library name followed by a dash, e.g. `shell-app-system.c`. Create a
|
|
||||||
`-private.h` header when you want to share code internally in the
|
|
||||||
library. These headers are not installed, distributed or introspected.
|
|
||||||
|
|
||||||
## Imports
|
|
||||||
|
|
||||||
Use UpperCamelCase when importing modules to distinguish them from ordinary
|
|
||||||
variables, e.g.
|
|
||||||
```javascript
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
```
|
|
||||||
Imports should be categorized into one of two places. The top-most import block
|
|
||||||
should contain only "environment imports". These are either modules from
|
|
||||||
gobject-introspection or modules added by gjs itself.
|
|
||||||
|
|
||||||
The second block of imports should contain only "application imports". These
|
|
||||||
are the JS code that is in the gnome-shell codebase,
|
|
||||||
e.g. `imports.ui.popupMenu`.
|
|
||||||
|
|
||||||
Each import block should be sorted alphabetically. Don't import modules you
|
|
||||||
don't use.
|
|
||||||
```javascript
|
|
||||||
const { GLib, Gio, St } = imports.gi;
|
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
const Params = imports.misc.params;
|
|
||||||
const Util = imports.misc.util;
|
|
||||||
```
|
|
||||||
The alphabetical ordering should be done independently of the location of the
|
|
||||||
location. Never reference `imports` in actual code.
|
|
||||||
|
|
||||||
## Constants
|
|
||||||
|
|
||||||
We use CONSTANTS_CASE to define constants. All constants should be directly
|
|
||||||
under the imports:
|
|
||||||
```javascript
|
|
||||||
const MY_DBUS_INTERFACE = 'org.my.Interface';
|
|
||||||
```
|
|
||||||
|
|
||||||
## Variable declaration
|
|
||||||
|
|
||||||
Always use either `const` or `let` when defining a variable.
|
|
||||||
```javascript
|
|
||||||
// Iterating over an array
|
|
||||||
for (let i = 0; i < arr.length; ++i)
|
|
||||||
let item = arr[i];
|
|
||||||
|
|
||||||
// Iterating over an object's properties
|
|
||||||
for (let prop in someobj) {
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
If you use "var" then the variable is added to function scope, not block scope.
|
|
||||||
See [What's new in JavaScript 1.7](https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7#Block_scope_with_let_%28Merge_into_let_Statement%29)
|
|
||||||
|
|
||||||
## Classes
|
|
||||||
|
|
||||||
There are many approaches to classes in JavaScript. We use standard ES6 classes
|
|
||||||
whenever possible, that is when not inheriting from GObjects.
|
|
||||||
```javascript
|
|
||||||
var IconLabelMenuItem = class extends PopupMenu.PopupMenuBaseItem {
|
|
||||||
constructor(icon, label) {
|
|
||||||
super({ reactive: false });
|
|
||||||
this.actor.add_child(icon);
|
|
||||||
this.actor.add_child(label);
|
|
||||||
}
|
|
||||||
|
|
||||||
open() {
|
|
||||||
log("menu opened!");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
For GObject inheritance, we use the GObject.registerClass() function provided
|
|
||||||
by gjs.
|
|
||||||
```javascript
|
|
||||||
var MyActor = GObject.registerClass(
|
|
||||||
class MyActor extends Clutter.Actor {
|
|
||||||
_init(params) {
|
|
||||||
super._init(params);
|
|
||||||
|
|
||||||
this.name = 'MyCustomActor';
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## GObject Introspection
|
|
||||||
|
|
||||||
GObject Introspection is a powerful feature that allows us to have native
|
|
||||||
bindings for almost any library built around GObject. If a library requires
|
|
||||||
you to inherit from a type to use it, you can do so:
|
|
||||||
```javascript
|
|
||||||
var MyClutterActor = GObject.registerClass(
|
|
||||||
class MyClutterActor extends Clutter.Actor {
|
|
||||||
|
|
||||||
vfunc_get_preferred_width(forHeight) {
|
|
||||||
return [100, 100];
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_get_preferred_height(forWidth) {
|
|
||||||
return [100, 100];
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_paint(paintContext) {
|
|
||||||
let framebuffer = paintContext.get_framebuffer();
|
|
||||||
let coglContext = framebuffer.get_context();
|
|
||||||
let alloc = this.get_allocation_box();
|
|
||||||
|
|
||||||
let pipeline = new Cogl.Pipeline(coglContext);
|
|
||||||
pipeline.set_color4ub(255, 0, 0, 255);
|
|
||||||
|
|
||||||
framebuffer.draw_rectangle(pipeline,
|
|
||||||
alloc.x1, alloc.y1,
|
|
||||||
alloc.x2, alloc.y2);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Translatable strings, `environment.js`
|
|
||||||
|
|
||||||
We use gettext to translate the GNOME Shell into all the languages that GNOME
|
|
||||||
supports. The `gettext` function is aliased globally as `_`, you do not need to
|
|
||||||
explicitly import it. This is done through some magic in the
|
|
||||||
[environment.js](http://git.gnome.org/browse/gnome-shell/tree/js/ui/environment.js)
|
|
||||||
file. If you can't find a method that's used, it's probably either in gjs itself
|
|
||||||
or installed on the global object from the Environment.
|
|
||||||
|
|
||||||
Use 'single quotes' for programming strings that should not be translated
|
|
||||||
and "double quotes" for strings that the user may see. This allows us to
|
|
||||||
quickly find untranslated or mistranslated strings by grepping through the
|
|
||||||
sources for double quotes without a gettext call around them.
|
|
||||||
|
|
||||||
## `actor` (deprecated) and `_delegate`
|
|
||||||
|
|
||||||
gjs allows us to set so-called "expando properties" on introspected objects,
|
|
||||||
allowing us to treat them like any other. Because the Shell was built before
|
|
||||||
you could inherit from GTypes natively in JS, in some cases we have a wrapper
|
|
||||||
class that has a property called `actor` (now deprecated). We call this
|
|
||||||
wrapper class the "delegate".
|
|
||||||
|
|
||||||
We sometimes use expando properties to set a property called `_delegate` on
|
|
||||||
the actor itself:
|
|
||||||
```javascript
|
|
||||||
var MyActor = GObject.registerClass(
|
|
||||||
class MyActor extends Clutter.Actor {
|
|
||||||
_init(params) {
|
|
||||||
super._init(params);
|
|
||||||
this._delegate = this;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Or using the deprecated `actor`:
|
|
||||||
```javascript
|
|
||||||
var MyClass = class {
|
|
||||||
constructor() {
|
|
||||||
this.actor = new St.Button({ text: "This is a button" });
|
|
||||||
this.actor._delegate = this;
|
|
||||||
|
|
||||||
this.actor.connect('clicked', this._onClicked.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
_onClicked(actor) {
|
|
||||||
actor.set_label("You clicked the button!");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
The 'delegate' property is important for anything which trying to get the
|
|
||||||
delegate object from an associated actor. For instance, the drag and drop
|
|
||||||
system calls the `handleDragOver` function on the delegate of a "drop target"
|
|
||||||
when the user drags an item over it. If you do not set the `_delegate`
|
|
||||||
property, your actor will not be able to be dropped onto.
|
|
||||||
In case the class is an actor itself, the `_delegate` can be just set to `this`.
|
|
||||||
|
|
||||||
## Functional style
|
|
||||||
|
|
||||||
JavaScript Array objects offer a lot of common functional programming
|
|
||||||
capabilities such as forEach, map, filter and so on. You can use these when
|
|
||||||
they make sense, but please don't have a spaghetti mess of function programming
|
|
||||||
messed in a procedural style. Use your best judgment.
|
|
||||||
|
|
||||||
## Closures
|
|
||||||
|
|
||||||
`this` will not be captured in a closure, it is relative to how the closure is
|
|
||||||
invoked, not to the value of this where the closure is created, because "this"
|
|
||||||
is a keyword with a value passed in at function invocation time, it is not a
|
|
||||||
variable that can be captured in closures.
|
|
||||||
|
|
||||||
All closures should be wrapped with Function.prototype.bind or use arrow
|
|
||||||
notation.
|
|
||||||
```javascript
|
|
||||||
let closure1 = () => this._fnorbate();
|
|
||||||
let closure2 = this._fnorbate.bind(this);
|
|
||||||
```
|
|
||||||
|
|
||||||
A more realistic example would be connecting to a signal on a method of a
|
|
||||||
prototype:
|
|
||||||
```javascript
|
|
||||||
const FnorbLib = imports.fborbLib;
|
|
||||||
|
|
||||||
var MyClass = class {
|
|
||||||
_init() {
|
|
||||||
let fnorb = new FnorbLib.Fnorb();
|
|
||||||
fnorb.connect('frobate', this._onFnorbFrobate.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
_onFnorbFrobate(fnorb) {
|
|
||||||
this._updateFnorb();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
## Object literal syntax
|
|
||||||
|
|
||||||
In JavaScript, these are equivalent:
|
|
||||||
```javascript
|
|
||||||
foo = { 'bar': 42 };
|
|
||||||
foo = { bar: 42 };
|
|
||||||
```
|
|
||||||
|
|
||||||
and so are these:
|
|
||||||
```javascript
|
|
||||||
var b = foo['bar'];
|
|
||||||
var b = foo.bar;
|
|
||||||
```
|
|
||||||
|
|
||||||
If your usage of an object is like an object, then you're defining "member
|
|
||||||
variables." For member variables, use the no-quotes no-brackets syntax: `{ bar:
|
|
||||||
42 }` `foo.bar`.
|
|
||||||
|
|
||||||
If your usage of an object is like a hash table (and thus conceptually the keys
|
|
||||||
can have special chars in them), don't use quotes, but use brackets: `{ bar: 42
|
|
||||||
}`, `foo['bar']`.
|
|
||||||
|
|
||||||
## Animations
|
|
||||||
|
|
||||||
Most objects that are animated are actors, and most properties used in animations
|
|
||||||
are animatable, which means they can use implicit animations:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
moveActor(actor, x, y) {
|
|
||||||
actor.ease({
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
duration: 500, // ms
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD
|
|
||||||
});
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The above is a convenience wrapper around the actual Clutter API, and should generally
|
|
||||||
be preferred over the more verbose:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
moveActor(actor, x, y) {
|
|
||||||
actor.save_easing_state();
|
|
||||||
|
|
||||||
actor.set_easing_duration(500);
|
|
||||||
actor.set_easing_mode(Clutter.AnimationMode.EASE_OUT_QUAD);
|
|
||||||
actor.set({
|
|
||||||
x,
|
|
||||||
y
|
|
||||||
});
|
|
||||||
|
|
||||||
actor.restore_easing_state();
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
There is a similar convenience API around Clutter.PropertyTransition to animate
|
|
||||||
actor (or actor meta) properties that cannot use implicit animations:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
desaturateActor(actor, desaturate) {
|
|
||||||
let factor = desaturate ? 1.0 : 0.0;
|
|
||||||
actor.ease_property('@effects.desaturate.factor', factor, {
|
|
||||||
duration: 500, // ms
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD
|
|
||||||
});
|
|
||||||
}
|
|
||||||
```
|
|
7
MAINTAINERS
Normal file
7
MAINTAINERS
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Owen Taylor
|
||||||
|
E-mail: otaylor@redhat.com
|
||||||
|
Userid: otaylor
|
||||||
|
|
||||||
|
Colin Walters
|
||||||
|
E-mail: walters@verbum.org
|
||||||
|
Userid: walters
|
21
Makefile.am
Normal file
21
Makefile.am
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Point to our macro directory and pick up user flags from the environment
|
||||||
|
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||||
|
|
||||||
|
SUBDIRS = data js src browser-plugin tests po man
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
.project \
|
||||||
|
.settings \
|
||||||
|
autogen.sh \
|
||||||
|
tools/check-for-missing.py
|
||||||
|
|
||||||
|
# These are files checked into Git that we don't want to distribute
|
||||||
|
DIST_EXCLUDE = \
|
||||||
|
.gitignore \
|
||||||
|
gnome-shell.doap \
|
||||||
|
MAINTAINERS \
|
||||||
|
tools/build/*
|
||||||
|
|
||||||
|
distcheck-hook:
|
||||||
|
@echo "Checking disted files against files in git"
|
||||||
|
@$(srcdir)/tools/check-for-missing.py $(srcdir) $(distdir) $(DIST_EXCLUDE)
|
20
README
Normal file
20
README
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
GNOME Shell provides core user interface functions for the GNOME 3 desktop,
|
||||||
|
like switching to windows and launching applications. GNOME Shell takes
|
||||||
|
advantage of the capabilities of modern graphics hardware and introduces
|
||||||
|
innovative user interface concepts to provide a visually attractive and
|
||||||
|
easy to use experience.
|
||||||
|
|
||||||
|
For more information about GNOME Shell, including instructions on how
|
||||||
|
to build GNOME Shell from source and how to get involved with the project,
|
||||||
|
see:
|
||||||
|
|
||||||
|
http://live.gnome.org/GnomeShell
|
||||||
|
|
||||||
|
Bugs should be reported at http://bugzilla.gnome.org against the 'gnome-shell'
|
||||||
|
product.
|
||||||
|
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
GNOME Shell is distributed under the terms of the GNU General Public License,
|
||||||
|
version 2 or later. See the COPYING file for details.
|
||||||
|
|
43
README.md
43
README.md
@ -1,43 +0,0 @@
|
|||||||
# GNOME Shell
|
|
||||||
GNOME Shell provides core user interface functions for the GNOME desktop,
|
|
||||||
like switching to windows and launching applications. GNOME Shell takes
|
|
||||||
advantage of the capabilities of modern graphics hardware and introduces
|
|
||||||
innovative user interface concepts to provide a visually attractive and
|
|
||||||
easy to use experience.
|
|
||||||
|
|
||||||
For more information about GNOME Shell, including instructions on how
|
|
||||||
to build GNOME Shell from source and how to get involved with the project,
|
|
||||||
see the [project wiki][project-wiki].
|
|
||||||
|
|
||||||
Bugs should be reported to the GNOME [bug tracking system][bug-tracker].
|
|
||||||
Please refer to the [*Schedule* wiki page][schedule] to see the supported versions.
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
To contribute, open merge requests at https://gitlab.gnome.org/GNOME/gnome-shell.
|
|
||||||
|
|
||||||
Commit messages should follow the [GNOME commit message
|
|
||||||
guidelines](https://wiki.gnome.org/Git/CommitMessages). We require an URL
|
|
||||||
to either an issue or a merge request in each commit.
|
|
||||||
|
|
||||||
## Default branch
|
|
||||||
|
|
||||||
The default development branch is `main`. If you still have a local
|
|
||||||
checkout under the old name, use:
|
|
||||||
```sh
|
|
||||||
git checkout master
|
|
||||||
git branch -m master main
|
|
||||||
git fetch
|
|
||||||
git branch --unset-upstream
|
|
||||||
git branch -u origin/main
|
|
||||||
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
|
|
||||||
```
|
|
||||||
|
|
||||||
## License
|
|
||||||
GNOME Shell is distributed under the terms of the GNU General Public License,
|
|
||||||
version 2 or later. See the [COPYING][license] file for details.
|
|
||||||
|
|
||||||
[project-wiki]: https://wiki.gnome.org/Projects/GnomeShell
|
|
||||||
[bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell/issues
|
|
||||||
[schedule]: https://wiki.gnome.org/Schedule
|
|
||||||
[license]: COPYING
|
|
21
autogen.sh
Executable file
21
autogen.sh
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Run this to generate all the initial makefiles, etc.
|
||||||
|
|
||||||
|
srcdir=`dirname $0`
|
||||||
|
test -z "$srcdir" && srcdir=.
|
||||||
|
|
||||||
|
PKG_NAME="gnome-shell"
|
||||||
|
|
||||||
|
(test -f $srcdir/configure.ac \
|
||||||
|
&& test -d $srcdir/src) || {
|
||||||
|
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
|
||||||
|
echo " top-level gnome-shell directory"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
which gnome-autogen.sh || {
|
||||||
|
echo "You need to install gnome-common from GNOME Git (or from"
|
||||||
|
echo "your OS vendor's package manager)."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
USE_GNOME2_MACROS=1 USE_COMMON_DOC_BUILD=yes . gnome-autogen.sh
|
21
browser-plugin/Makefile.am
Normal file
21
browser-plugin/Makefile.am
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
mozillalibdir = $(BROWSER_PLUGIN_DIR)
|
||||||
|
|
||||||
|
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
|
||||||
|
|
||||||
|
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined
|
||||||
|
|
||||||
|
libgnome_shell_browser_plugin_la_LIBADD = \
|
||||||
|
$(BROWSER_PLUGIN_LIBS)
|
||||||
|
|
||||||
|
libgnome_shell_browser_plugin_la_SOURCES = \
|
||||||
|
browser-plugin.c \
|
||||||
|
npapi/npapi.h \
|
||||||
|
npapi/npfunctions.h \
|
||||||
|
npapi/npruntime.h \
|
||||||
|
npapi/nptypes.h
|
||||||
|
|
||||||
|
libgnome_shell_browser_plugin_la_CFLAGS = \
|
||||||
|
$(BROWSER_PLUGIN_CFLAGS) \
|
||||||
|
-DG_DISABLE_DEPRECATED \
|
||||||
|
-DG_LOG_DOMAIN=\"GnomeShellBrowserPlugin\"
|
17
browser-plugin/README
Normal file
17
browser-plugin/README
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
The GNOME Shell Browser Plugin provides integration with gnome-shell and the
|
||||||
|
corresponding extensions repository, codenamed "SweetTooth". The plugin allows
|
||||||
|
the extensions repository to provide good integration, letting the website
|
||||||
|
know which extensions are enabled and disabled, and allowing the website to
|
||||||
|
enable, disable and install them.
|
||||||
|
|
||||||
|
Bugs should be reported at http://bugzilla.gnome.org against the 'gnome-shell'
|
||||||
|
product.
|
||||||
|
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
The GNOME Shell Browser Plugin, like GNOME Shell itself is distributed under
|
||||||
|
the GNU General Public License, version 2 or later. The plugin also contains
|
||||||
|
header files from the "NPAPI SDK" project, tri-licensed under MPL 1.1, GPL 2.0
|
||||||
|
and LGPL 2.1. These headers are third-party sources and can be retrieved from:
|
||||||
|
|
||||||
|
http://code.google.com/p/npapi-sdk/
|
855
browser-plugin/browser-plugin.c
Normal file
855
browser-plugin/browser-plugin.c
Normal file
@ -0,0 +1,855 @@
|
|||||||
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2011 Red Hat
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Jasper St. Pierre <jstpierre@mecheye.net>
|
||||||
|
* Giovanni Campagna <scampa.giovanni@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define XP_UNIX 1
|
||||||
|
|
||||||
|
#include "npapi/npapi.h"
|
||||||
|
#include "npapi/npruntime.h"
|
||||||
|
#include "npapi/npfunctions.h"
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <gio/gio.h>
|
||||||
|
#include <json-glib/json-glib.h>
|
||||||
|
|
||||||
|
#define ORIGIN "extensions.gnome.org"
|
||||||
|
#define PLUGIN_NAME "Gnome Shell Integration"
|
||||||
|
#define PLUGIN_DESCRIPTION "This plugin provides integration with Gnome Shell " \
|
||||||
|
"for live extension enabling and disabling. " \
|
||||||
|
"It can be used only by extensions.gnome.org"
|
||||||
|
#define PLUGIN_MIME_STRING "application/x-gnome-shell-integration::Gnome Shell Integration Dummy Content-Type";
|
||||||
|
|
||||||
|
#define PLUGIN_API_VERSION 1
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GDBusProxy *proxy;
|
||||||
|
} PluginData;
|
||||||
|
|
||||||
|
static NPNetscapeFuncs funcs;
|
||||||
|
|
||||||
|
static inline gchar *
|
||||||
|
get_string_property (NPP instance,
|
||||||
|
NPObject *obj,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
NPVariant result = { NPVariantType_Void };
|
||||||
|
NPString result_str;
|
||||||
|
gchar *result_copy;
|
||||||
|
|
||||||
|
result_copy = NULL;
|
||||||
|
|
||||||
|
if (!funcs.getproperty (instance, obj,
|
||||||
|
funcs.getstringidentifier (name),
|
||||||
|
&result))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (!NPVARIANT_IS_STRING (result))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
result_str = NPVARIANT_TO_STRING (result);
|
||||||
|
result_copy = g_strndup (result_str.UTF8Characters, result_str.UTF8Length);
|
||||||
|
|
||||||
|
out:
|
||||||
|
funcs.releasevariantvalue (&result);
|
||||||
|
return result_copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
check_origin_and_protocol (NPP instance)
|
||||||
|
{
|
||||||
|
gboolean ret = FALSE;
|
||||||
|
NPError error;
|
||||||
|
NPObject *window = NULL;
|
||||||
|
NPVariant document = { NPVariantType_Void };
|
||||||
|
NPVariant location = { NPVariantType_Void };
|
||||||
|
gchar *hostname = NULL;
|
||||||
|
gchar *protocol = NULL;
|
||||||
|
|
||||||
|
error = funcs.getvalue (instance, NPNVWindowNPObject, &window);
|
||||||
|
if (error != NPERR_NO_ERROR)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (!funcs.getproperty (instance, window,
|
||||||
|
funcs.getstringidentifier ("document"),
|
||||||
|
&document))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (!NPVARIANT_IS_OBJECT (document))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (!funcs.getproperty (instance, NPVARIANT_TO_OBJECT (document),
|
||||||
|
funcs.getstringidentifier ("location"),
|
||||||
|
&location))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (!NPVARIANT_IS_OBJECT (document))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
hostname = get_string_property (instance,
|
||||||
|
NPVARIANT_TO_OBJECT (location),
|
||||||
|
"hostname");
|
||||||
|
|
||||||
|
if (g_strcmp0 (hostname, ORIGIN))
|
||||||
|
{
|
||||||
|
g_debug ("origin does not match, is %s",
|
||||||
|
hostname);
|
||||||
|
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol = get_string_property (instance,
|
||||||
|
NPVARIANT_TO_OBJECT (location),
|
||||||
|
"protocol");
|
||||||
|
|
||||||
|
if (g_strcmp0 (protocol, "https:") != 0)
|
||||||
|
{
|
||||||
|
g_debug ("protocol does not match, is %s",
|
||||||
|
protocol);
|
||||||
|
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = TRUE;
|
||||||
|
|
||||||
|
out:
|
||||||
|
g_free (protocol);
|
||||||
|
g_free (hostname);
|
||||||
|
|
||||||
|
funcs.releasevariantvalue (&location);
|
||||||
|
funcs.releasevariantvalue (&document);
|
||||||
|
|
||||||
|
if (window != NULL)
|
||||||
|
funcs.releaseobject (window);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =============== public entry points =================== */
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
|
||||||
|
{
|
||||||
|
/* global initialization routine, called once when plugin
|
||||||
|
is loaded */
|
||||||
|
|
||||||
|
g_debug ("plugin loaded");
|
||||||
|
|
||||||
|
memcpy (&funcs, pfuncs, sizeof (funcs));
|
||||||
|
|
||||||
|
plugin->size = sizeof(NPPluginFuncs);
|
||||||
|
plugin->newp = NPP_New;
|
||||||
|
plugin->destroy = NPP_Destroy;
|
||||||
|
plugin->getvalue = NPP_GetValue;
|
||||||
|
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NP_Shutdown(void)
|
||||||
|
{
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char*
|
||||||
|
NP_GetMIMEDescription(void)
|
||||||
|
{
|
||||||
|
return PLUGIN_MIME_STRING;
|
||||||
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NP_GetValue(void *instance,
|
||||||
|
NPPVariable variable,
|
||||||
|
void *value)
|
||||||
|
{
|
||||||
|
switch (variable) {
|
||||||
|
case NPPVpluginNameString:
|
||||||
|
*(char**)value = PLUGIN_NAME;
|
||||||
|
break;
|
||||||
|
case NPPVpluginDescriptionString:
|
||||||
|
*(char**)value = PLUGIN_DESCRIPTION;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NPP_New(NPMIMEType mimetype,
|
||||||
|
NPP instance,
|
||||||
|
uint16_t mode,
|
||||||
|
int16_t argc,
|
||||||
|
char **argn,
|
||||||
|
char **argv,
|
||||||
|
NPSavedData *saved)
|
||||||
|
{
|
||||||
|
/* instance initialization function */
|
||||||
|
PluginData *data;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_debug ("plugin created");
|
||||||
|
|
||||||
|
if (!check_origin_and_protocol (instance))
|
||||||
|
return NPERR_GENERIC_ERROR;
|
||||||
|
|
||||||
|
data = g_slice_new (PluginData);
|
||||||
|
instance->pdata = data;
|
||||||
|
|
||||||
|
data->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
|
||||||
|
G_DBUS_PROXY_FLAGS_NONE,
|
||||||
|
NULL, /* interface info */
|
||||||
|
"org.gnome.Shell",
|
||||||
|
"/org/gnome/Shell",
|
||||||
|
"org.gnome.Shell",
|
||||||
|
NULL, /* GCancellable */
|
||||||
|
&error);
|
||||||
|
if (!data->proxy)
|
||||||
|
{
|
||||||
|
/* ignore error if the shell is not running, otherwise warn */
|
||||||
|
if (error->domain != G_DBUS_ERROR ||
|
||||||
|
error->code != G_DBUS_ERROR_NAME_HAS_NO_OWNER)
|
||||||
|
{
|
||||||
|
g_warning ("Failed to set up Shell proxy: %s", error->message);
|
||||||
|
}
|
||||||
|
g_clear_error (&error);
|
||||||
|
return NPERR_GENERIC_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_debug ("plugin created successfully");
|
||||||
|
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NPP_Destroy(NPP instance,
|
||||||
|
NPSavedData **saved)
|
||||||
|
{
|
||||||
|
/* instance finalization function */
|
||||||
|
|
||||||
|
PluginData *data = instance->pdata;
|
||||||
|
|
||||||
|
g_debug ("plugin destroyed");
|
||||||
|
|
||||||
|
g_object_unref (data->proxy);
|
||||||
|
|
||||||
|
g_slice_free (PluginData, data);
|
||||||
|
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =================== scripting interface =================== */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
NPObject parent;
|
||||||
|
NPP instance;
|
||||||
|
GDBusProxy *proxy;
|
||||||
|
NPObject *listener;
|
||||||
|
gint signal_id;
|
||||||
|
} PluginObject;
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_shell_signal (GDBusProxy *proxy,
|
||||||
|
gchar *sender_name,
|
||||||
|
gchar *signal_name,
|
||||||
|
GVariant *parameters,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
PluginObject *obj = user_data;
|
||||||
|
|
||||||
|
if (strcmp (signal_name, "ExtensionStatusChanged") == 0)
|
||||||
|
{
|
||||||
|
gchar *uuid;
|
||||||
|
gint32 status;
|
||||||
|
gchar *error;
|
||||||
|
NPVariant args[3];
|
||||||
|
NPVariant result;
|
||||||
|
|
||||||
|
g_variant_get (parameters, "(sis)", &uuid, &status, &error);
|
||||||
|
STRINGZ_TO_NPVARIANT (uuid, args[0]);
|
||||||
|
INT32_TO_NPVARIANT (status, args[1]);
|
||||||
|
STRINGZ_TO_NPVARIANT (error, args[2]);
|
||||||
|
|
||||||
|
funcs.invokeDefault (obj->instance, obj->listener,
|
||||||
|
args, 3, &result);
|
||||||
|
|
||||||
|
funcs.releasevariantvalue (&result);
|
||||||
|
g_free (uuid);
|
||||||
|
g_free (error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static NPObject *
|
||||||
|
plugin_object_allocate (NPP instance,
|
||||||
|
NPClass *klass)
|
||||||
|
{
|
||||||
|
PluginData *data = instance->pdata;
|
||||||
|
PluginObject *obj = g_slice_new0 (PluginObject);
|
||||||
|
|
||||||
|
obj->instance = instance;
|
||||||
|
obj->proxy = g_object_ref (data->proxy);
|
||||||
|
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
|
||||||
|
G_CALLBACK (on_shell_signal), obj);
|
||||||
|
|
||||||
|
g_debug ("plugin object created");
|
||||||
|
|
||||||
|
return (NPObject*)obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
plugin_object_deallocate (NPObject *npobj)
|
||||||
|
{
|
||||||
|
PluginObject *obj = (PluginObject*)npobj;
|
||||||
|
|
||||||
|
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
|
||||||
|
g_object_unref (obj->proxy);
|
||||||
|
|
||||||
|
if (obj->listener)
|
||||||
|
funcs.releaseobject (obj->listener);
|
||||||
|
|
||||||
|
g_debug ("plugin object destroyed");
|
||||||
|
|
||||||
|
g_slice_free (PluginObject, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static NPIdentifier api_version_id;
|
||||||
|
static NPIdentifier shell_version_id;
|
||||||
|
static NPIdentifier get_info_id;
|
||||||
|
static NPIdentifier list_extensions_id;
|
||||||
|
static NPIdentifier enable_extension_id;
|
||||||
|
static NPIdentifier install_extension_id;
|
||||||
|
static NPIdentifier uninstall_extension_id;
|
||||||
|
static NPIdentifier onextension_changed_id;
|
||||||
|
static NPIdentifier get_errors_id;
|
||||||
|
|
||||||
|
static bool
|
||||||
|
plugin_object_has_method (NPObject *npobj,
|
||||||
|
NPIdentifier name)
|
||||||
|
{
|
||||||
|
return (name == get_info_id ||
|
||||||
|
name == list_extensions_id ||
|
||||||
|
name == enable_extension_id ||
|
||||||
|
name == install_extension_id ||
|
||||||
|
name == uninstall_extension_id ||
|
||||||
|
name == get_errors_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline gboolean
|
||||||
|
uuid_is_valid (const gchar *uuid)
|
||||||
|
{
|
||||||
|
gsize i;
|
||||||
|
|
||||||
|
for (i = 0; uuid[i]; i ++)
|
||||||
|
{
|
||||||
|
gchar c = uuid[i];
|
||||||
|
if (c < 32 || c >= 127)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '&':
|
||||||
|
case '<':
|
||||||
|
case '>':
|
||||||
|
case '/':
|
||||||
|
case '\\':
|
||||||
|
return FALSE;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
jsonify_variant (GVariant *variant,
|
||||||
|
NPVariant *result)
|
||||||
|
{
|
||||||
|
gboolean ret;
|
||||||
|
GVariant *real_value;
|
||||||
|
JsonNode *root;
|
||||||
|
JsonGenerator *generator;
|
||||||
|
gsize json_length;
|
||||||
|
gchar *json;
|
||||||
|
gchar *buffer;
|
||||||
|
|
||||||
|
ret = TRUE;
|
||||||
|
|
||||||
|
/* DBus methods can return multiple values,
|
||||||
|
* but we're only interested in the first. */
|
||||||
|
g_variant_get (variant, "(@*)", &real_value);
|
||||||
|
|
||||||
|
root = json_gvariant_serialize (real_value);
|
||||||
|
|
||||||
|
generator = json_generator_new ();
|
||||||
|
json_generator_set_root (generator, root);
|
||||||
|
json = json_generator_to_data (generator, &json_length);
|
||||||
|
|
||||||
|
buffer = funcs.memalloc (json_length + 1);
|
||||||
|
if (!buffer)
|
||||||
|
{
|
||||||
|
ret = FALSE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy (buffer, json);
|
||||||
|
|
||||||
|
STRINGN_TO_NPVARIANT (buffer, json_length, *result);
|
||||||
|
|
||||||
|
out:
|
||||||
|
g_variant_unref (variant);
|
||||||
|
g_variant_unref (real_value);
|
||||||
|
json_node_free (root);
|
||||||
|
g_free (json);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
plugin_list_extensions (PluginObject *obj,
|
||||||
|
NPVariant *result)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
GVariant *res;
|
||||||
|
|
||||||
|
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||||
|
"ListExtensions",
|
||||||
|
NULL, /* parameters */
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
-1, /* timeout */
|
||||||
|
NULL, /* cancellable */
|
||||||
|
&error);
|
||||||
|
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
g_warning ("Failed to retrieve extension list: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return jsonify_variant (res, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
plugin_enable_extension (PluginObject *obj,
|
||||||
|
NPString uuid,
|
||||||
|
gboolean enabled)
|
||||||
|
{
|
||||||
|
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
g_dbus_proxy_call (obj->proxy,
|
||||||
|
(enabled ? "EnableExtension" : "DisableExtension"),
|
||||||
|
g_variant_new ("(s)", uuid_str),
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
-1, /* timeout */
|
||||||
|
NULL, /* cancellable */
|
||||||
|
NULL, /* callback */
|
||||||
|
NULL /* user_data */);
|
||||||
|
|
||||||
|
g_free (uuid_str);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
plugin_install_extension (PluginObject *obj,
|
||||||
|
NPString uuid,
|
||||||
|
NPString version_tag)
|
||||||
|
{
|
||||||
|
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
|
gchar *version_tag_str;
|
||||||
|
|
||||||
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
{
|
||||||
|
g_free (uuid_str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
version_tag_str = g_strndup (version_tag.UTF8Characters,
|
||||||
|
version_tag.UTF8Length);
|
||||||
|
|
||||||
|
g_dbus_proxy_call (obj->proxy,
|
||||||
|
"InstallRemoteExtension",
|
||||||
|
g_variant_new ("(ss)",
|
||||||
|
uuid_str,
|
||||||
|
version_tag_str),
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
-1, /* timeout */
|
||||||
|
NULL, /* cancellable */
|
||||||
|
NULL, /* callback */
|
||||||
|
NULL /* user_data */);
|
||||||
|
|
||||||
|
g_free (uuid_str);
|
||||||
|
g_free (version_tag_str);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
plugin_uninstall_extension (PluginObject *obj,
|
||||||
|
NPString uuid,
|
||||||
|
NPVariant *result)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
GVariant *res;
|
||||||
|
gchar *uuid_str;
|
||||||
|
|
||||||
|
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
{
|
||||||
|
g_free (uuid_str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||||
|
"UninstallExtension",
|
||||||
|
g_variant_new ("(s)",
|
||||||
|
uuid_str),
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
-1, /* timeout */
|
||||||
|
NULL, /* cancellable */
|
||||||
|
&error);
|
||||||
|
|
||||||
|
g_free (uuid_str);
|
||||||
|
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
g_warning ("Failed to uninstall extension: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return jsonify_variant (res, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
plugin_get_info (PluginObject *obj,
|
||||||
|
NPString uuid,
|
||||||
|
NPVariant *result)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
GVariant *res;
|
||||||
|
gchar *uuid_str;
|
||||||
|
|
||||||
|
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
{
|
||||||
|
g_free (uuid_str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||||
|
"GetExtensionInfo",
|
||||||
|
g_variant_new ("(s)", uuid_str),
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
-1, /* timeout */
|
||||||
|
NULL, /* cancellable */
|
||||||
|
&error);
|
||||||
|
|
||||||
|
g_free (uuid_str);
|
||||||
|
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
g_warning ("Failed to retrieve extension metadata: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return jsonify_variant (res, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
plugin_get_errors (PluginObject *obj,
|
||||||
|
NPString uuid,
|
||||||
|
NPVariant *result)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
GVariant *res;
|
||||||
|
gchar *uuid_str;
|
||||||
|
|
||||||
|
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
{
|
||||||
|
g_free (uuid_str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||||
|
"GetExtensionErrors",
|
||||||
|
g_variant_new ("(s)", uuid_str),
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
-1, /* timeout */
|
||||||
|
NULL, /* cancellable */
|
||||||
|
&error);
|
||||||
|
|
||||||
|
g_free (uuid_str);
|
||||||
|
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
g_warning ("Failed to retrieve errors: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return jsonify_variant (res, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
plugin_get_api_version (PluginObject *obj,
|
||||||
|
NPVariant *result)
|
||||||
|
{
|
||||||
|
INT32_TO_NPVARIANT (PLUGIN_API_VERSION, *result);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
plugin_get_shell_version (PluginObject *obj,
|
||||||
|
NPVariant *result)
|
||||||
|
{
|
||||||
|
GVariant *res;
|
||||||
|
const gchar *version;
|
||||||
|
gsize length;
|
||||||
|
gchar *buffer;
|
||||||
|
gboolean ret;
|
||||||
|
|
||||||
|
ret = TRUE;
|
||||||
|
|
||||||
|
res = g_dbus_proxy_get_cached_property (obj->proxy,
|
||||||
|
"ShellVersion");
|
||||||
|
|
||||||
|
if (res == NULL)
|
||||||
|
{
|
||||||
|
g_warning ("Failed to grab shell version.");
|
||||||
|
version = "-1";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_variant_get (res, "&s", &version);
|
||||||
|
}
|
||||||
|
|
||||||
|
length = strlen (version);
|
||||||
|
buffer = funcs.memalloc (length + 1);
|
||||||
|
if (!buffer)
|
||||||
|
{
|
||||||
|
ret = FALSE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
strcpy (buffer, version);
|
||||||
|
|
||||||
|
STRINGN_TO_NPVARIANT (buffer, length, *result);
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (res)
|
||||||
|
g_variant_unref (res);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
plugin_object_invoke (NPObject *npobj,
|
||||||
|
NPIdentifier name,
|
||||||
|
const NPVariant *args,
|
||||||
|
uint32_t argc,
|
||||||
|
NPVariant *result)
|
||||||
|
{
|
||||||
|
PluginObject *obj;
|
||||||
|
|
||||||
|
g_debug ("invoking plugin object method");
|
||||||
|
|
||||||
|
obj = (PluginObject*) npobj;
|
||||||
|
|
||||||
|
VOID_TO_NPVARIANT (*result);
|
||||||
|
|
||||||
|
if (!plugin_object_has_method (npobj, name))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (name == list_extensions_id)
|
||||||
|
return plugin_list_extensions (obj, result);
|
||||||
|
else if (name == get_info_id)
|
||||||
|
{
|
||||||
|
if (!NPVARIANT_IS_STRING(args[0])) return FALSE;
|
||||||
|
|
||||||
|
return plugin_get_info (obj, NPVARIANT_TO_STRING(args[0]), result);
|
||||||
|
}
|
||||||
|
else if (name == enable_extension_id)
|
||||||
|
{
|
||||||
|
if (!NPVARIANT_IS_STRING(args[0])) return FALSE;
|
||||||
|
if (!NPVARIANT_IS_BOOLEAN(args[1])) return FALSE;
|
||||||
|
|
||||||
|
return plugin_enable_extension (obj,
|
||||||
|
NPVARIANT_TO_STRING(args[0]),
|
||||||
|
NPVARIANT_TO_BOOLEAN(args[1]));
|
||||||
|
}
|
||||||
|
else if (name == install_extension_id)
|
||||||
|
{
|
||||||
|
if (!NPVARIANT_IS_STRING(args[0])) return FALSE;
|
||||||
|
if (!NPVARIANT_IS_STRING(args[1])) return FALSE;
|
||||||
|
|
||||||
|
return plugin_install_extension (obj,
|
||||||
|
NPVARIANT_TO_STRING(args[0]),
|
||||||
|
NPVARIANT_TO_STRING(args[1]));
|
||||||
|
}
|
||||||
|
else if (name == uninstall_extension_id)
|
||||||
|
{
|
||||||
|
if (!NPVARIANT_IS_STRING(args[0])) return FALSE;
|
||||||
|
|
||||||
|
return plugin_uninstall_extension (obj,
|
||||||
|
NPVARIANT_TO_STRING(args[0]),
|
||||||
|
result);
|
||||||
|
}
|
||||||
|
else if (name == get_errors_id)
|
||||||
|
{
|
||||||
|
if (!NPVARIANT_IS_STRING(args[0])) return FALSE;
|
||||||
|
|
||||||
|
return plugin_get_errors (obj,
|
||||||
|
NPVARIANT_TO_STRING(args[0]),
|
||||||
|
result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
plugin_object_has_property (NPObject *npobj,
|
||||||
|
NPIdentifier name)
|
||||||
|
{
|
||||||
|
return (name == onextension_changed_id ||
|
||||||
|
name == api_version_id ||
|
||||||
|
name == shell_version_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
plugin_object_get_property (NPObject *npobj,
|
||||||
|
NPIdentifier name,
|
||||||
|
NPVariant *result)
|
||||||
|
{
|
||||||
|
PluginObject *obj;
|
||||||
|
|
||||||
|
if (!plugin_object_has_property (npobj, name))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
obj = (PluginObject*) npobj;
|
||||||
|
if (name == api_version_id)
|
||||||
|
return plugin_get_api_version (obj, result);
|
||||||
|
else if (name == shell_version_id)
|
||||||
|
return plugin_get_shell_version (obj, result);
|
||||||
|
else if (name == onextension_changed_id)
|
||||||
|
{
|
||||||
|
if (obj->listener)
|
||||||
|
OBJECT_TO_NPVARIANT (obj->listener, *result);
|
||||||
|
else
|
||||||
|
NULL_TO_NPVARIANT (*result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
plugin_object_set_property (NPObject *npobj,
|
||||||
|
NPIdentifier name,
|
||||||
|
const NPVariant *value)
|
||||||
|
{
|
||||||
|
PluginObject *obj;
|
||||||
|
|
||||||
|
if (!plugin_object_has_property (npobj, name))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (name == onextension_changed_id)
|
||||||
|
{
|
||||||
|
obj = (PluginObject*) npobj;
|
||||||
|
if (obj->listener)
|
||||||
|
funcs.releaseobject (obj->listener);
|
||||||
|
|
||||||
|
obj->listener = NULL;
|
||||||
|
if (NPVARIANT_IS_OBJECT (*value))
|
||||||
|
{
|
||||||
|
obj->listener = NPVARIANT_TO_OBJECT (*value);
|
||||||
|
funcs.retainobject (obj->listener);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else if (NPVARIANT_IS_NULL (*value))
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NPClass plugin_class = {
|
||||||
|
NP_CLASS_STRUCT_VERSION,
|
||||||
|
plugin_object_allocate,
|
||||||
|
plugin_object_deallocate,
|
||||||
|
NULL, /* invalidate */
|
||||||
|
plugin_object_has_method,
|
||||||
|
plugin_object_invoke,
|
||||||
|
NULL, /* invoke default */
|
||||||
|
plugin_object_has_property,
|
||||||
|
plugin_object_get_property,
|
||||||
|
plugin_object_set_property,
|
||||||
|
NULL, /* remove property */
|
||||||
|
NULL, /* enumerate */
|
||||||
|
NULL, /* construct */
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_methods_and_properties (void)
|
||||||
|
{
|
||||||
|
/* this is the JS public API; it is manipulated through NPIdentifiers for speed */
|
||||||
|
api_version_id = funcs.getstringidentifier ("apiVersion");
|
||||||
|
shell_version_id = funcs.getstringidentifier ("shellVersion");
|
||||||
|
|
||||||
|
get_info_id = funcs.getstringidentifier ("getExtensionInfo");
|
||||||
|
list_extensions_id = funcs.getstringidentifier ("listExtensions");
|
||||||
|
enable_extension_id = funcs.getstringidentifier ("setExtensionEnabled");
|
||||||
|
install_extension_id = funcs.getstringidentifier ("installExtension");
|
||||||
|
uninstall_extension_id = funcs.getstringidentifier ("uninstallExtension");
|
||||||
|
get_errors_id = funcs.getstringidentifier ("getExtensionErrors");
|
||||||
|
|
||||||
|
onextension_changed_id = funcs.getstringidentifier ("onchange");
|
||||||
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NPP_GetValue(NPP instance,
|
||||||
|
NPPVariable variable,
|
||||||
|
void *value)
|
||||||
|
{
|
||||||
|
g_debug ("NPP_GetValue called");
|
||||||
|
|
||||||
|
switch (variable) {
|
||||||
|
case NPPVpluginScriptableNPObject:
|
||||||
|
g_debug ("creating scriptable object");
|
||||||
|
init_methods_and_properties ();
|
||||||
|
|
||||||
|
*(NPObject**)value = funcs.createobject (instance, &plugin_class);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NPPVpluginNeedsXEmbed:
|
||||||
|
*(bool *)value = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
893
browser-plugin/npapi/npapi.h
Normal file
893
browser-plugin/npapi/npapi.h
Normal file
@ -0,0 +1,893 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Netscape Communications Corporation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef npapi_h_
|
||||||
|
#define npapi_h_
|
||||||
|
|
||||||
|
#if defined(__OS2__)
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "nptypes.h"
|
||||||
|
|
||||||
|
#if defined(__OS2__) || defined(OS2)
|
||||||
|
#ifndef XP_OS2
|
||||||
|
#define XP_OS2 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(__SYMBIAN32__)
|
||||||
|
#include <windef.h>
|
||||||
|
#ifndef XP_WIN
|
||||||
|
#define XP_WIN 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__SYMBIAN32__)
|
||||||
|
#ifndef XP_SYMBIAN
|
||||||
|
#define XP_SYMBIAN 1
|
||||||
|
#undef XP_WIN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__APPLE_CC__) && !defined(XP_UNIX)
|
||||||
|
#ifndef XP_MACOSX
|
||||||
|
#define XP_MACOSX 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX) && defined(__LP64__)
|
||||||
|
#define NP_NO_QUICKDRAW
|
||||||
|
#define NP_NO_CARBON
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
#include <ApplicationServices/ApplicationServices.h>
|
||||||
|
#include <OpenGL/OpenGL.h>
|
||||||
|
#ifndef NP_NO_CARBON
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(XP_UNIX)
|
||||||
|
#include <stdio.h>
|
||||||
|
#if defined(MOZ_X11)
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(XP_SYMBIAN)
|
||||||
|
#include <QEvent>
|
||||||
|
#include <QRegion>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Plugin Version Constants */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define NP_VERSION_MAJOR 0
|
||||||
|
#define NP_VERSION_MINOR 27
|
||||||
|
|
||||||
|
|
||||||
|
/* The OS/2 version of Netscape uses RC_DATA to define the
|
||||||
|
mime types, file extensions, etc that are required.
|
||||||
|
Use a vertical bar to separate types, end types with \0.
|
||||||
|
FileVersion and ProductVersion are 32bit ints, all other
|
||||||
|
entries are strings that MUST be terminated with a \0.
|
||||||
|
|
||||||
|
AN EXAMPLE:
|
||||||
|
|
||||||
|
RCDATA NP_INFO_ProductVersion { 1,0,0,1,}
|
||||||
|
|
||||||
|
RCDATA NP_INFO_MIMEType { "video/x-video|",
|
||||||
|
"video/x-flick\0" }
|
||||||
|
RCDATA NP_INFO_FileExtents { "avi|",
|
||||||
|
"flc\0" }
|
||||||
|
RCDATA NP_INFO_FileOpenName{ "MMOS2 video player(*.avi)|",
|
||||||
|
"MMOS2 Flc/Fli player(*.flc)\0" }
|
||||||
|
|
||||||
|
RCDATA NP_INFO_FileVersion { 1,0,0,1 }
|
||||||
|
RCDATA NP_INFO_CompanyName { "Netscape Communications\0" }
|
||||||
|
RCDATA NP_INFO_FileDescription { "NPAVI32 Extension DLL\0"
|
||||||
|
RCDATA NP_INFO_InternalName { "NPAVI32\0" )
|
||||||
|
RCDATA NP_INFO_LegalCopyright { "Copyright Netscape Communications \251 1996\0"
|
||||||
|
RCDATA NP_INFO_OriginalFilename { "NVAPI32.DLL" }
|
||||||
|
RCDATA NP_INFO_ProductName { "NPAVI32 Dynamic Link Library\0" }
|
||||||
|
*/
|
||||||
|
/* RC_DATA types for version info - required */
|
||||||
|
#define NP_INFO_ProductVersion 1
|
||||||
|
#define NP_INFO_MIMEType 2
|
||||||
|
#define NP_INFO_FileOpenName 3
|
||||||
|
#define NP_INFO_FileExtents 4
|
||||||
|
/* RC_DATA types for version info - used if found */
|
||||||
|
#define NP_INFO_FileDescription 5
|
||||||
|
#define NP_INFO_ProductName 6
|
||||||
|
/* RC_DATA types for version info - optional */
|
||||||
|
#define NP_INFO_CompanyName 7
|
||||||
|
#define NP_INFO_FileVersion 8
|
||||||
|
#define NP_INFO_InternalName 9
|
||||||
|
#define NP_INFO_LegalCopyright 10
|
||||||
|
#define NP_INFO_OriginalFilename 11
|
||||||
|
|
||||||
|
#ifndef RC_INVOKED
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Definition of Basic Types */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
typedef unsigned char NPBool;
|
||||||
|
typedef int16_t NPError;
|
||||||
|
typedef int16_t NPReason;
|
||||||
|
typedef char* NPMIMEType;
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Structures and definitions */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if !defined(__LP64__)
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
#pragma options align=mac68k
|
||||||
|
#endif
|
||||||
|
#endif /* __LP64__ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NPP is a plug-in's opaque instance handle
|
||||||
|
*/
|
||||||
|
typedef struct _NPP
|
||||||
|
{
|
||||||
|
void* pdata; /* plug-in private data */
|
||||||
|
void* ndata; /* netscape private data */
|
||||||
|
} NPP_t;
|
||||||
|
|
||||||
|
typedef NPP_t* NPP;
|
||||||
|
|
||||||
|
typedef struct _NPStream
|
||||||
|
{
|
||||||
|
void* pdata; /* plug-in private data */
|
||||||
|
void* ndata; /* netscape private data */
|
||||||
|
const char* url;
|
||||||
|
uint32_t end;
|
||||||
|
uint32_t lastmodified;
|
||||||
|
void* notifyData;
|
||||||
|
const char* headers; /* Response headers from host.
|
||||||
|
* Exists only for >= NPVERS_HAS_RESPONSE_HEADERS.
|
||||||
|
* Used for HTTP only; NULL for non-HTTP.
|
||||||
|
* Available from NPP_NewStream onwards.
|
||||||
|
* Plugin should copy this data before storing it.
|
||||||
|
* Includes HTTP status line and all headers,
|
||||||
|
* preferably verbatim as received from server,
|
||||||
|
* headers formatted as in HTTP ("Header: Value"),
|
||||||
|
* and newlines (\n, NOT \r\n) separating lines.
|
||||||
|
* Terminated by \n\0 (NOT \n\n\0). */
|
||||||
|
} NPStream;
|
||||||
|
|
||||||
|
typedef struct _NPByteRange
|
||||||
|
{
|
||||||
|
int32_t offset; /* negative offset means from the end */
|
||||||
|
uint32_t length;
|
||||||
|
struct _NPByteRange* next;
|
||||||
|
} NPByteRange;
|
||||||
|
|
||||||
|
typedef struct _NPSavedData
|
||||||
|
{
|
||||||
|
int32_t len;
|
||||||
|
void* buf;
|
||||||
|
} NPSavedData;
|
||||||
|
|
||||||
|
typedef struct _NPRect
|
||||||
|
{
|
||||||
|
uint16_t top;
|
||||||
|
uint16_t left;
|
||||||
|
uint16_t bottom;
|
||||||
|
uint16_t right;
|
||||||
|
} NPRect;
|
||||||
|
|
||||||
|
typedef struct _NPSize
|
||||||
|
{
|
||||||
|
int32_t width;
|
||||||
|
int32_t height;
|
||||||
|
} NPSize;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NPFocusNext = 0,
|
||||||
|
NPFocusPrevious = 1
|
||||||
|
} NPFocusDirection;
|
||||||
|
|
||||||
|
/* Return values for NPP_HandleEvent */
|
||||||
|
#define kNPEventNotHandled 0
|
||||||
|
#define kNPEventHandled 1
|
||||||
|
/* Exact meaning must be spec'd in event model. */
|
||||||
|
#define kNPEventStartIME 2
|
||||||
|
|
||||||
|
#if defined(XP_UNIX)
|
||||||
|
/*
|
||||||
|
* Unix specific structures and definitions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Callback Structures.
|
||||||
|
*
|
||||||
|
* These are used to pass additional platform specific information.
|
||||||
|
*/
|
||||||
|
enum {
|
||||||
|
NP_SETWINDOW = 1,
|
||||||
|
NP_PRINT
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int32_t type;
|
||||||
|
} NPAnyCallbackStruct;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int32_t type;
|
||||||
|
#if defined(MOZ_X11)
|
||||||
|
Display* display;
|
||||||
|
Visual* visual;
|
||||||
|
Colormap colormap;
|
||||||
|
unsigned int depth;
|
||||||
|
#endif
|
||||||
|
} NPSetWindowCallbackStruct;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int32_t type;
|
||||||
|
FILE* fp;
|
||||||
|
} NPPrintCallbackStruct;
|
||||||
|
|
||||||
|
#endif /* XP_UNIX */
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
typedef enum {
|
||||||
|
#ifndef NP_NO_QUICKDRAW
|
||||||
|
NPDrawingModelQuickDraw = 0,
|
||||||
|
#endif
|
||||||
|
NPDrawingModelCoreGraphics = 1,
|
||||||
|
NPDrawingModelOpenGL = 2,
|
||||||
|
NPDrawingModelCoreAnimation = 3,
|
||||||
|
NPDrawingModelInvalidatingCoreAnimation = 4
|
||||||
|
} NPDrawingModel;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
#ifndef NP_NO_CARBON
|
||||||
|
NPEventModelCarbon = 0,
|
||||||
|
#endif
|
||||||
|
NPEventModelCocoa = 1
|
||||||
|
} NPEventModel;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following masks are applied on certain platforms to NPNV and
|
||||||
|
* NPPV selectors that pass around pointers to COM interfaces. Newer
|
||||||
|
* compilers on some platforms may generate vtables that are not
|
||||||
|
* compatible with older compilers. To prevent older plugins from
|
||||||
|
* not understanding a new browser's ABI, these masks change the
|
||||||
|
* values of those selectors on those platforms. To remain backwards
|
||||||
|
* compatible with different versions of the browser, plugins can
|
||||||
|
* use these masks to dynamically determine and use the correct C++
|
||||||
|
* ABI that the browser is expecting. This does not apply to Windows
|
||||||
|
* as Microsoft's COM ABI will likely not change.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NP_ABI_GCC3_MASK 0x10000000
|
||||||
|
/*
|
||||||
|
* gcc 3.x generated vtables on UNIX and OSX are incompatible with
|
||||||
|
* previous compilers.
|
||||||
|
*/
|
||||||
|
#if (defined(XP_UNIX) && defined(__GNUC__) && (__GNUC__ >= 3))
|
||||||
|
#define _NP_ABI_MIXIN_FOR_GCC3 NP_ABI_GCC3_MASK
|
||||||
|
#else
|
||||||
|
#define _NP_ABI_MIXIN_FOR_GCC3 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
#define NP_ABI_MACHO_MASK 0x01000000
|
||||||
|
#define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK
|
||||||
|
#else
|
||||||
|
#define _NP_ABI_MIXIN_FOR_MACHO 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of variable names for which NPP_GetValue shall be implemented
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
NPPVpluginNameString = 1,
|
||||||
|
NPPVpluginDescriptionString,
|
||||||
|
NPPVpluginWindowBool,
|
||||||
|
NPPVpluginTransparentBool,
|
||||||
|
NPPVjavaClass,
|
||||||
|
NPPVpluginWindowSize,
|
||||||
|
NPPVpluginTimerInterval,
|
||||||
|
NPPVpluginScriptableInstance = (10 | NP_ABI_MASK),
|
||||||
|
NPPVpluginScriptableIID = 11,
|
||||||
|
NPPVjavascriptPushCallerBool = 12,
|
||||||
|
NPPVpluginKeepLibraryInMemory = 13,
|
||||||
|
NPPVpluginNeedsXEmbed = 14,
|
||||||
|
|
||||||
|
/* Get the NPObject for scripting the plugin. Introduced in NPAPI minor version 14.
|
||||||
|
*/
|
||||||
|
NPPVpluginScriptableNPObject = 15,
|
||||||
|
|
||||||
|
/* Get the plugin value (as \0-terminated UTF-8 string data) for
|
||||||
|
* form submission if the plugin is part of a form. Use
|
||||||
|
* NPN_MemAlloc() to allocate memory for the string data. Introduced
|
||||||
|
* in NPAPI minor version 15.
|
||||||
|
*/
|
||||||
|
NPPVformValue = 16,
|
||||||
|
|
||||||
|
NPPVpluginUrlRequestsDisplayedBool = 17,
|
||||||
|
|
||||||
|
/* Checks if the plugin is interested in receiving the http body of
|
||||||
|
* all http requests (including failed ones, http status != 200).
|
||||||
|
*/
|
||||||
|
NPPVpluginWantsAllNetworkStreams = 18,
|
||||||
|
|
||||||
|
/* Browsers can retrieve a native ATK accessibility plug ID via this variable. */
|
||||||
|
NPPVpluginNativeAccessibleAtkPlugId = 19,
|
||||||
|
|
||||||
|
/* Checks to see if the plug-in would like the browser to load the "src" attribute. */
|
||||||
|
NPPVpluginCancelSrcStream = 20,
|
||||||
|
|
||||||
|
NPPVsupportsAdvancedKeyHandling = 21,
|
||||||
|
|
||||||
|
NPPVpluginUsesDOMForCursorBool = 22
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
/* Used for negotiating drawing models */
|
||||||
|
, NPPVpluginDrawingModel = 1000
|
||||||
|
/* Used for negotiating event models */
|
||||||
|
, NPPVpluginEventModel = 1001
|
||||||
|
/* In the NPDrawingModelCoreAnimation drawing model, the browser asks the plug-in for a Core Animation layer. */
|
||||||
|
, NPPVpluginCoreAnimationLayer = 1003
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5) || (MOZ_PLATFORM_MAEMO == 6)
|
||||||
|
, NPPVpluginWindowlessLocalBool = 2002
|
||||||
|
#endif
|
||||||
|
} NPPVariable;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of variable names for which NPN_GetValue should be implemented.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
NPNVxDisplay = 1,
|
||||||
|
NPNVxtAppContext,
|
||||||
|
NPNVnetscapeWindow,
|
||||||
|
NPNVjavascriptEnabledBool,
|
||||||
|
NPNVasdEnabledBool,
|
||||||
|
NPNVisOfflineBool,
|
||||||
|
|
||||||
|
NPNVserviceManager = (10 | NP_ABI_MASK),
|
||||||
|
NPNVDOMElement = (11 | NP_ABI_MASK),
|
||||||
|
NPNVDOMWindow = (12 | NP_ABI_MASK),
|
||||||
|
NPNVToolkit = (13 | NP_ABI_MASK),
|
||||||
|
NPNVSupportsXEmbedBool = 14,
|
||||||
|
|
||||||
|
/* Get the NPObject wrapper for the browser window. */
|
||||||
|
NPNVWindowNPObject = 15,
|
||||||
|
|
||||||
|
/* Get the NPObject wrapper for the plugins DOM element. */
|
||||||
|
NPNVPluginElementNPObject = 16,
|
||||||
|
|
||||||
|
NPNVSupportsWindowless = 17,
|
||||||
|
|
||||||
|
NPNVprivateModeBool = 18,
|
||||||
|
|
||||||
|
NPNVsupportsAdvancedKeyHandling = 21
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
/* Used for negotiating drawing models */
|
||||||
|
, NPNVpluginDrawingModel = 1000
|
||||||
|
#ifndef NP_NO_QUICKDRAW
|
||||||
|
, NPNVsupportsQuickDrawBool = 2000
|
||||||
|
#endif
|
||||||
|
, NPNVsupportsCoreGraphicsBool = 2001
|
||||||
|
, NPNVsupportsOpenGLBool = 2002
|
||||||
|
, NPNVsupportsCoreAnimationBool = 2003
|
||||||
|
, NPNVsupportsInvalidatingCoreAnimationBool = 2004
|
||||||
|
#ifndef NP_NO_CARBON
|
||||||
|
, NPNVsupportsCarbonBool = 3000 /* TRUE if the browser supports the Carbon event model */
|
||||||
|
#endif
|
||||||
|
, NPNVsupportsCocoaBool = 3001 /* TRUE if the browser supports the Cocoa event model */
|
||||||
|
, NPNVsupportsUpdatedCocoaTextInputBool = 3002 /* TRUE if the browser supports the updated
|
||||||
|
Cocoa text input specification. */
|
||||||
|
, NPNVsupportsCompositingCoreAnimationPluginsBool = 74656 /* TRUE if the browser supports
|
||||||
|
CA model compositing */
|
||||||
|
#endif
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5) || (MOZ_PLATFORM_MAEMO == 6)
|
||||||
|
, NPNVSupportsWindowlessLocal = 2002
|
||||||
|
#endif
|
||||||
|
} NPNVariable;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NPNURLVCookie = 501,
|
||||||
|
NPNURLVProxy
|
||||||
|
} NPNURLVariable;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The type of Toolkit the widgets use
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
NPNVGtk12 = 1,
|
||||||
|
NPNVGtk2
|
||||||
|
} NPNToolkitType;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The type of a NPWindow - it specifies the type of the data structure
|
||||||
|
* returned in the window field.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
NPWindowTypeWindow = 1,
|
||||||
|
NPWindowTypeDrawable
|
||||||
|
} NPWindowType;
|
||||||
|
|
||||||
|
typedef struct _NPWindow
|
||||||
|
{
|
||||||
|
void* window; /* Platform specific window handle */
|
||||||
|
/* OS/2: x - Position of bottom left corner */
|
||||||
|
/* OS/2: y - relative to visible netscape window */
|
||||||
|
int32_t x; /* Position of top left corner relative */
|
||||||
|
int32_t y; /* to a netscape page. */
|
||||||
|
uint32_t width; /* Maximum window size */
|
||||||
|
uint32_t height;
|
||||||
|
NPRect clipRect; /* Clipping rectangle in port coordinates */
|
||||||
|
#if (defined(XP_UNIX) || defined(XP_SYMBIAN)) && !defined(XP_MACOSX)
|
||||||
|
void * ws_info; /* Platform-dependent additional data */
|
||||||
|
#endif /* XP_UNIX */
|
||||||
|
NPWindowType type; /* Is this a window or a drawable? */
|
||||||
|
} NPWindow;
|
||||||
|
|
||||||
|
typedef struct _NPImageExpose
|
||||||
|
{
|
||||||
|
char* data; /* image pointer */
|
||||||
|
int32_t stride; /* Stride of data image pointer */
|
||||||
|
int32_t depth; /* Depth of image pointer */
|
||||||
|
int32_t x; /* Expose x */
|
||||||
|
int32_t y; /* Expose y */
|
||||||
|
uint32_t width; /* Expose width */
|
||||||
|
uint32_t height; /* Expose height */
|
||||||
|
NPSize dataSize; /* Data buffer size */
|
||||||
|
float translateX; /* translate X matrix value */
|
||||||
|
float translateY; /* translate Y matrix value */
|
||||||
|
float scaleX; /* scale X matrix value */
|
||||||
|
float scaleY; /* scale Y matrix value */
|
||||||
|
} NPImageExpose;
|
||||||
|
|
||||||
|
typedef struct _NPFullPrint
|
||||||
|
{
|
||||||
|
NPBool pluginPrinted;/* Set TRUE if plugin handled fullscreen printing */
|
||||||
|
NPBool printOne; /* TRUE if plugin should print one copy to default
|
||||||
|
printer */
|
||||||
|
void* platformPrint; /* Platform-specific printing info */
|
||||||
|
} NPFullPrint;
|
||||||
|
|
||||||
|
typedef struct _NPEmbedPrint
|
||||||
|
{
|
||||||
|
NPWindow window;
|
||||||
|
void* platformPrint; /* Platform-specific printing info */
|
||||||
|
} NPEmbedPrint;
|
||||||
|
|
||||||
|
typedef struct _NPPrint
|
||||||
|
{
|
||||||
|
uint16_t mode; /* NP_FULL or NP_EMBED */
|
||||||
|
union
|
||||||
|
{
|
||||||
|
NPFullPrint fullPrint; /* if mode is NP_FULL */
|
||||||
|
NPEmbedPrint embedPrint; /* if mode is NP_EMBED */
|
||||||
|
} print;
|
||||||
|
} NPPrint;
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
#ifndef NP_NO_CARBON
|
||||||
|
typedef EventRecord NPEvent;
|
||||||
|
#endif
|
||||||
|
#elif defined(XP_SYMBIAN)
|
||||||
|
typedef QEvent NPEvent;
|
||||||
|
#elif defined(XP_WIN)
|
||||||
|
typedef struct _NPEvent
|
||||||
|
{
|
||||||
|
uint16_t event;
|
||||||
|
uintptr_t wParam;
|
||||||
|
uintptr_t lParam;
|
||||||
|
} NPEvent;
|
||||||
|
#elif defined(XP_OS2)
|
||||||
|
typedef struct _NPEvent
|
||||||
|
{
|
||||||
|
uint32_t event;
|
||||||
|
uint32_t wParam;
|
||||||
|
uint32_t lParam;
|
||||||
|
} NPEvent;
|
||||||
|
#elif defined(XP_UNIX) && defined(MOZ_X11)
|
||||||
|
typedef XEvent NPEvent;
|
||||||
|
#else
|
||||||
|
typedef void* NPEvent;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
typedef void* NPRegion;
|
||||||
|
#ifndef NP_NO_QUICKDRAW
|
||||||
|
typedef RgnHandle NPQDRegion;
|
||||||
|
#endif
|
||||||
|
typedef CGPathRef NPCGRegion;
|
||||||
|
#elif defined(XP_WIN)
|
||||||
|
typedef HRGN NPRegion;
|
||||||
|
#elif defined(XP_UNIX) && defined(MOZ_X11)
|
||||||
|
typedef Region NPRegion;
|
||||||
|
#elif defined(XP_SYMBIAN)
|
||||||
|
typedef QRegion* NPRegion;
|
||||||
|
#else
|
||||||
|
typedef void *NPRegion;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct _NPNSString NPNSString;
|
||||||
|
typedef struct _NPNSWindow NPNSWindow;
|
||||||
|
typedef struct _NPNSMenu NPNSMenu;
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
typedef NPNSMenu NPMenu;
|
||||||
|
#else
|
||||||
|
typedef void *NPMenu;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NPCoordinateSpacePlugin = 1,
|
||||||
|
NPCoordinateSpaceWindow,
|
||||||
|
NPCoordinateSpaceFlippedWindow,
|
||||||
|
NPCoordinateSpaceScreen,
|
||||||
|
NPCoordinateSpaceFlippedScreen
|
||||||
|
} NPCoordinateSpace;
|
||||||
|
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
|
||||||
|
#ifndef NP_NO_QUICKDRAW
|
||||||
|
typedef struct NP_Port
|
||||||
|
{
|
||||||
|
CGrafPtr port;
|
||||||
|
int32_t portx; /* position inside the topmost window */
|
||||||
|
int32_t porty;
|
||||||
|
} NP_Port;
|
||||||
|
#endif /* NP_NO_QUICKDRAW */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NP_CGContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelCoreGraphics
|
||||||
|
* as its drawing model.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct NP_CGContext
|
||||||
|
{
|
||||||
|
CGContextRef context;
|
||||||
|
void *window; /* A WindowRef under the Carbon event model. */
|
||||||
|
} NP_CGContext;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NP_GLContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelOpenGL as its
|
||||||
|
* drawing model.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct NP_GLContext
|
||||||
|
{
|
||||||
|
CGLContextObj context;
|
||||||
|
#ifdef NP_NO_CARBON
|
||||||
|
NPNSWindow *window;
|
||||||
|
#else
|
||||||
|
void *window; /* Can be either an NSWindow or a WindowRef depending on the event model */
|
||||||
|
#endif
|
||||||
|
} NP_GLContext;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NPCocoaEventDrawRect = 1,
|
||||||
|
NPCocoaEventMouseDown,
|
||||||
|
NPCocoaEventMouseUp,
|
||||||
|
NPCocoaEventMouseMoved,
|
||||||
|
NPCocoaEventMouseEntered,
|
||||||
|
NPCocoaEventMouseExited,
|
||||||
|
NPCocoaEventMouseDragged,
|
||||||
|
NPCocoaEventKeyDown,
|
||||||
|
NPCocoaEventKeyUp,
|
||||||
|
NPCocoaEventFlagsChanged,
|
||||||
|
NPCocoaEventFocusChanged,
|
||||||
|
NPCocoaEventWindowFocusChanged,
|
||||||
|
NPCocoaEventScrollWheel,
|
||||||
|
NPCocoaEventTextInput
|
||||||
|
} NPCocoaEventType;
|
||||||
|
|
||||||
|
typedef struct _NPCocoaEvent {
|
||||||
|
NPCocoaEventType type;
|
||||||
|
uint32_t version;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint32_t modifierFlags;
|
||||||
|
double pluginX;
|
||||||
|
double pluginY;
|
||||||
|
int32_t buttonNumber;
|
||||||
|
int32_t clickCount;
|
||||||
|
double deltaX;
|
||||||
|
double deltaY;
|
||||||
|
double deltaZ;
|
||||||
|
} mouse;
|
||||||
|
struct {
|
||||||
|
uint32_t modifierFlags;
|
||||||
|
NPNSString *characters;
|
||||||
|
NPNSString *charactersIgnoringModifiers;
|
||||||
|
NPBool isARepeat;
|
||||||
|
uint16_t keyCode;
|
||||||
|
} key;
|
||||||
|
struct {
|
||||||
|
CGContextRef context;
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
double width;
|
||||||
|
double height;
|
||||||
|
} draw;
|
||||||
|
struct {
|
||||||
|
NPBool hasFocus;
|
||||||
|
} focus;
|
||||||
|
struct {
|
||||||
|
NPNSString *text;
|
||||||
|
} text;
|
||||||
|
} data;
|
||||||
|
} NPCocoaEvent;
|
||||||
|
|
||||||
|
#ifndef NP_NO_CARBON
|
||||||
|
/* Non-standard event types that can be passed to HandleEvent */
|
||||||
|
enum NPEventType {
|
||||||
|
NPEventType_GetFocusEvent = (osEvt + 16),
|
||||||
|
NPEventType_LoseFocusEvent,
|
||||||
|
NPEventType_AdjustCursorEvent,
|
||||||
|
NPEventType_MenuCommandEvent,
|
||||||
|
NPEventType_ClippingChangedEvent,
|
||||||
|
NPEventType_ScrollingBeginsEvent = 1000,
|
||||||
|
NPEventType_ScrollingEndsEvent
|
||||||
|
};
|
||||||
|
#endif /* NP_NO_CARBON */
|
||||||
|
|
||||||
|
#endif /* XP_MACOSX */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values for mode passed to NPP_New:
|
||||||
|
*/
|
||||||
|
#define NP_EMBED 1
|
||||||
|
#define NP_FULL 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values for stream type passed to NPP_NewStream:
|
||||||
|
*/
|
||||||
|
#define NP_NORMAL 1
|
||||||
|
#define NP_SEEK 2
|
||||||
|
#define NP_ASFILE 3
|
||||||
|
#define NP_ASFILEONLY 4
|
||||||
|
|
||||||
|
#define NP_MAXREADY (((unsigned)(~0)<<1)>>1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Flags for NPP_ClearSiteData.
|
||||||
|
*/
|
||||||
|
#define NP_CLEAR_ALL 0
|
||||||
|
#define NP_CLEAR_CACHE (1 << 0)
|
||||||
|
|
||||||
|
#if !defined(__LP64__)
|
||||||
|
#if defined(XP_MACOSX)
|
||||||
|
#pragma options align=reset
|
||||||
|
#endif
|
||||||
|
#endif /* __LP64__ */
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Error and Reason Code definitions */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values of type NPError:
|
||||||
|
*/
|
||||||
|
#define NPERR_BASE 0
|
||||||
|
#define NPERR_NO_ERROR (NPERR_BASE + 0)
|
||||||
|
#define NPERR_GENERIC_ERROR (NPERR_BASE + 1)
|
||||||
|
#define NPERR_INVALID_INSTANCE_ERROR (NPERR_BASE + 2)
|
||||||
|
#define NPERR_INVALID_FUNCTABLE_ERROR (NPERR_BASE + 3)
|
||||||
|
#define NPERR_MODULE_LOAD_FAILED_ERROR (NPERR_BASE + 4)
|
||||||
|
#define NPERR_OUT_OF_MEMORY_ERROR (NPERR_BASE + 5)
|
||||||
|
#define NPERR_INVALID_PLUGIN_ERROR (NPERR_BASE + 6)
|
||||||
|
#define NPERR_INVALID_PLUGIN_DIR_ERROR (NPERR_BASE + 7)
|
||||||
|
#define NPERR_INCOMPATIBLE_VERSION_ERROR (NPERR_BASE + 8)
|
||||||
|
#define NPERR_INVALID_PARAM (NPERR_BASE + 9)
|
||||||
|
#define NPERR_INVALID_URL (NPERR_BASE + 10)
|
||||||
|
#define NPERR_FILE_NOT_FOUND (NPERR_BASE + 11)
|
||||||
|
#define NPERR_NO_DATA (NPERR_BASE + 12)
|
||||||
|
#define NPERR_STREAM_NOT_SEEKABLE (NPERR_BASE + 13)
|
||||||
|
#define NPERR_TIME_RANGE_NOT_SUPPORTED (NPERR_BASE + 14)
|
||||||
|
#define NPERR_MALFORMED_SITE (NPERR_BASE + 15)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values of type NPReason:
|
||||||
|
*/
|
||||||
|
#define NPRES_BASE 0
|
||||||
|
#define NPRES_DONE (NPRES_BASE + 0)
|
||||||
|
#define NPRES_NETWORK_ERR (NPRES_BASE + 1)
|
||||||
|
#define NPRES_USER_BREAK (NPRES_BASE + 2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't use these obsolete error codes any more.
|
||||||
|
*/
|
||||||
|
#define NP_NOERR NP_NOERR_is_obsolete_use_NPERR_NO_ERROR
|
||||||
|
#define NP_EINVAL NP_EINVAL_is_obsolete_use_NPERR_GENERIC_ERROR
|
||||||
|
#define NP_EABORT NP_EABORT_is_obsolete_use_NPRES_USER_BREAK
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Version feature information
|
||||||
|
*/
|
||||||
|
#define NPVERS_HAS_STREAMOUTPUT 8
|
||||||
|
#define NPVERS_HAS_NOTIFICATION 9
|
||||||
|
#define NPVERS_HAS_LIVECONNECT 9
|
||||||
|
#define NPVERS_68K_HAS_LIVECONNECT 11
|
||||||
|
#define NPVERS_HAS_WINDOWLESS 11
|
||||||
|
#define NPVERS_HAS_XPCONNECT_SCRIPTING 13
|
||||||
|
#define NPVERS_HAS_NPRUNTIME_SCRIPTING 14
|
||||||
|
#define NPVERS_HAS_FORM_VALUES 15
|
||||||
|
#define NPVERS_HAS_POPUPS_ENABLED_STATE 16
|
||||||
|
#define NPVERS_HAS_RESPONSE_HEADERS 17
|
||||||
|
#define NPVERS_HAS_NPOBJECT_ENUM 18
|
||||||
|
#define NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL 19
|
||||||
|
#define NPVERS_HAS_ALL_NETWORK_STREAMS 20
|
||||||
|
#define NPVERS_HAS_URL_AND_AUTH_INFO 21
|
||||||
|
#define NPVERS_HAS_PRIVATE_MODE 22
|
||||||
|
#define NPVERS_MACOSX_HAS_COCOA_EVENTS 23
|
||||||
|
#define NPVERS_HAS_ADVANCED_KEY_HANDLING 25
|
||||||
|
#define NPVERS_HAS_URL_REDIRECT_HANDLING 26
|
||||||
|
#define NPVERS_HAS_CLEAR_SITE_DATA 27
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Function Prototypes */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if defined(__OS2__)
|
||||||
|
#define NP_LOADDS _System
|
||||||
|
#else
|
||||||
|
#define NP_LOADDS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* NPP_* functions are provided by the plugin and called by the navigator. */
|
||||||
|
|
||||||
|
#if defined(XP_UNIX)
|
||||||
|
const char* NPP_GetMIMEDescription(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
|
||||||
|
uint16_t mode, int16_t argc, char* argn[],
|
||||||
|
char* argv[], NPSavedData* saved);
|
||||||
|
NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save);
|
||||||
|
NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window);
|
||||||
|
NPError NP_LOADDS NPP_NewStream(NPP instance, NPMIMEType type,
|
||||||
|
NPStream* stream, NPBool seekable,
|
||||||
|
uint16_t* stype);
|
||||||
|
NPError NP_LOADDS NPP_DestroyStream(NPP instance, NPStream* stream,
|
||||||
|
NPReason reason);
|
||||||
|
int32_t NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream);
|
||||||
|
int32_t NP_LOADDS NPP_Write(NPP instance, NPStream* stream, int32_t offset,
|
||||||
|
int32_t len, void* buffer);
|
||||||
|
void NP_LOADDS NPP_StreamAsFile(NPP instance, NPStream* stream,
|
||||||
|
const char* fname);
|
||||||
|
void NP_LOADDS NPP_Print(NPP instance, NPPrint* platformPrint);
|
||||||
|
int16_t NP_LOADDS NPP_HandleEvent(NPP instance, void* event);
|
||||||
|
void NP_LOADDS NPP_URLNotify(NPP instance, const char* url,
|
||||||
|
NPReason reason, void* notifyData);
|
||||||
|
NPError NP_LOADDS NPP_GetValue(NPP instance, NPPVariable variable, void *value);
|
||||||
|
NPError NP_LOADDS NPP_SetValue(NPP instance, NPNVariable variable, void *value);
|
||||||
|
NPBool NP_LOADDS NPP_GotFocus(NPP instance, NPFocusDirection direction);
|
||||||
|
void NP_LOADDS NPP_LostFocus(NPP instance);
|
||||||
|
void NP_LOADDS NPP_URLRedirectNotify(NPP instance, const char* url, int32_t status, void* notifyData);
|
||||||
|
NPError NP_LOADDS NPP_ClearSiteData(const char* site, uint64_t flags, uint64_t maxAge);
|
||||||
|
char** NP_LOADDS NPP_GetSitesWithData(void);
|
||||||
|
|
||||||
|
/* NPN_* functions are provided by the navigator and called by the plugin. */
|
||||||
|
void NP_LOADDS NPN_Version(int* plugin_major, int* plugin_minor,
|
||||||
|
int* netscape_major, int* netscape_minor);
|
||||||
|
NPError NP_LOADDS NPN_GetURLNotify(NPP instance, const char* url,
|
||||||
|
const char* target, void* notifyData);
|
||||||
|
NPError NP_LOADDS NPN_GetURL(NPP instance, const char* url,
|
||||||
|
const char* target);
|
||||||
|
NPError NP_LOADDS NPN_PostURLNotify(NPP instance, const char* url,
|
||||||
|
const char* target, uint32_t len,
|
||||||
|
const char* buf, NPBool file,
|
||||||
|
void* notifyData);
|
||||||
|
NPError NP_LOADDS NPN_PostURL(NPP instance, const char* url,
|
||||||
|
const char* target, uint32_t len,
|
||||||
|
const char* buf, NPBool file);
|
||||||
|
NPError NP_LOADDS NPN_RequestRead(NPStream* stream, NPByteRange* rangeList);
|
||||||
|
NPError NP_LOADDS NPN_NewStream(NPP instance, NPMIMEType type,
|
||||||
|
const char* target, NPStream** stream);
|
||||||
|
int32_t NP_LOADDS NPN_Write(NPP instance, NPStream* stream, int32_t len,
|
||||||
|
void* buffer);
|
||||||
|
NPError NP_LOADDS NPN_DestroyStream(NPP instance, NPStream* stream,
|
||||||
|
NPReason reason);
|
||||||
|
void NP_LOADDS NPN_Status(NPP instance, const char* message);
|
||||||
|
const char* NP_LOADDS NPN_UserAgent(NPP instance);
|
||||||
|
void* NP_LOADDS NPN_MemAlloc(uint32_t size);
|
||||||
|
void NP_LOADDS NPN_MemFree(void* ptr);
|
||||||
|
uint32_t NP_LOADDS NPN_MemFlush(uint32_t size);
|
||||||
|
void NP_LOADDS NPN_ReloadPlugins(NPBool reloadPages);
|
||||||
|
NPError NP_LOADDS NPN_GetValue(NPP instance, NPNVariable variable,
|
||||||
|
void *value);
|
||||||
|
NPError NP_LOADDS NPN_SetValue(NPP instance, NPPVariable variable,
|
||||||
|
void *value);
|
||||||
|
void NP_LOADDS NPN_InvalidateRect(NPP instance, NPRect *invalidRect);
|
||||||
|
void NP_LOADDS NPN_InvalidateRegion(NPP instance,
|
||||||
|
NPRegion invalidRegion);
|
||||||
|
void NP_LOADDS NPN_ForceRedraw(NPP instance);
|
||||||
|
void NP_LOADDS NPN_PushPopupsEnabledState(NPP instance, NPBool enabled);
|
||||||
|
void NP_LOADDS NPN_PopPopupsEnabledState(NPP instance);
|
||||||
|
void NP_LOADDS NPN_PluginThreadAsyncCall(NPP instance,
|
||||||
|
void (*func) (void *),
|
||||||
|
void *userData);
|
||||||
|
NPError NP_LOADDS NPN_GetValueForURL(NPP instance, NPNURLVariable variable,
|
||||||
|
const char *url, char **value,
|
||||||
|
uint32_t *len);
|
||||||
|
NPError NP_LOADDS NPN_SetValueForURL(NPP instance, NPNURLVariable variable,
|
||||||
|
const char *url, const char *value,
|
||||||
|
uint32_t len);
|
||||||
|
NPError NP_LOADDS NPN_GetAuthenticationInfo(NPP instance,
|
||||||
|
const char *protocol,
|
||||||
|
const char *host, int32_t port,
|
||||||
|
const char *scheme,
|
||||||
|
const char *realm,
|
||||||
|
char **username, uint32_t *ulen,
|
||||||
|
char **password,
|
||||||
|
uint32_t *plen);
|
||||||
|
uint32_t NP_LOADDS NPN_ScheduleTimer(NPP instance, uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID));
|
||||||
|
void NP_LOADDS NPN_UnscheduleTimer(NPP instance, uint32_t timerID);
|
||||||
|
NPError NP_LOADDS NPN_PopUpContextMenu(NPP instance, NPMenu* menu);
|
||||||
|
NPBool NP_LOADDS NPN_ConvertPoint(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
|
||||||
|
NPBool NP_LOADDS NPN_HandleEvent(NPP instance, void *event, NPBool handled);
|
||||||
|
NPBool NP_LOADDS NPN_UnfocusInstance(NPP instance, NPFocusDirection direction);
|
||||||
|
void NP_LOADDS NPN_URLRedirectResponse(NPP instance, void* notifyData, NPBool allow);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* end extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* RC_INVOKED */
|
||||||
|
#if defined(__OS2__)
|
||||||
|
#pragma pack()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* npapi_h_ */
|
322
browser-plugin/npapi/npfunctions.h
Normal file
322
browser-plugin/npapi/npfunctions.h
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Netscape Communications Corporation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef npfunctions_h_
|
||||||
|
#define npfunctions_h_
|
||||||
|
|
||||||
|
#ifdef __OS2__
|
||||||
|
#pragma pack(1)
|
||||||
|
#define NP_LOADDS _System
|
||||||
|
#else
|
||||||
|
#define NP_LOADDS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "npapi.h"
|
||||||
|
#include "npruntime.h"
|
||||||
|
|
||||||
|
typedef NPError (* NP_LOADDS NPP_NewProcPtr)(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved);
|
||||||
|
typedef NPError (* NP_LOADDS NPP_DestroyProcPtr)(NPP instance, NPSavedData** save);
|
||||||
|
typedef NPError (* NP_LOADDS NPP_SetWindowProcPtr)(NPP instance, NPWindow* window);
|
||||||
|
typedef NPError (* NP_LOADDS NPP_NewStreamProcPtr)(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16_t* stype);
|
||||||
|
typedef NPError (* NP_LOADDS NPP_DestroyStreamProcPtr)(NPP instance, NPStream* stream, NPReason reason);
|
||||||
|
typedef int32_t (* NP_LOADDS NPP_WriteReadyProcPtr)(NPP instance, NPStream* stream);
|
||||||
|
typedef int32_t (* NP_LOADDS NPP_WriteProcPtr)(NPP instance, NPStream* stream, int32_t offset, int32_t len, void* buffer);
|
||||||
|
typedef void (* NP_LOADDS NPP_StreamAsFileProcPtr)(NPP instance, NPStream* stream, const char* fname);
|
||||||
|
typedef void (* NP_LOADDS NPP_PrintProcPtr)(NPP instance, NPPrint* platformPrint);
|
||||||
|
typedef int16_t (* NP_LOADDS NPP_HandleEventProcPtr)(NPP instance, void* event);
|
||||||
|
typedef void (* NP_LOADDS NPP_URLNotifyProcPtr)(NPP instance, const char* url, NPReason reason, void* notifyData);
|
||||||
|
/* Any NPObjects returned to the browser via NPP_GetValue should be retained
|
||||||
|
by the plugin on the way out. The browser is responsible for releasing. */
|
||||||
|
typedef NPError (* NP_LOADDS NPP_GetValueProcPtr)(NPP instance, NPPVariable variable, void *ret_value);
|
||||||
|
typedef NPError (* NP_LOADDS NPP_SetValueProcPtr)(NPP instance, NPNVariable variable, void *value);
|
||||||
|
typedef NPBool (* NP_LOADDS NPP_GotFocusPtr)(NPP instance, NPFocusDirection direction);
|
||||||
|
typedef void (* NP_LOADDS NPP_LostFocusPtr)(NPP instance);
|
||||||
|
typedef void (* NP_LOADDS NPP_URLRedirectNotifyPtr)(NPP instance, const char* url, int32_t status, void* notifyData);
|
||||||
|
typedef NPError (* NP_LOADDS NPP_ClearSiteDataPtr)(const char* site, uint64_t flags, uint64_t maxAge);
|
||||||
|
typedef char** (* NP_LOADDS NPP_GetSitesWithDataPtr)(void);
|
||||||
|
|
||||||
|
typedef NPError (*NPN_GetValueProcPtr)(NPP instance, NPNVariable variable, void *ret_value);
|
||||||
|
typedef NPError (*NPN_SetValueProcPtr)(NPP instance, NPPVariable variable, void *value);
|
||||||
|
typedef NPError (*NPN_GetURLNotifyProcPtr)(NPP instance, const char* url, const char* window, void* notifyData);
|
||||||
|
typedef NPError (*NPN_PostURLNotifyProcPtr)(NPP instance, const char* url, const char* window, uint32_t len, const char* buf, NPBool file, void* notifyData);
|
||||||
|
typedef NPError (*NPN_GetURLProcPtr)(NPP instance, const char* url, const char* window);
|
||||||
|
typedef NPError (*NPN_PostURLProcPtr)(NPP instance, const char* url, const char* window, uint32_t len, const char* buf, NPBool file);
|
||||||
|
typedef NPError (*NPN_RequestReadProcPtr)(NPStream* stream, NPByteRange* rangeList);
|
||||||
|
typedef NPError (*NPN_NewStreamProcPtr)(NPP instance, NPMIMEType type, const char* window, NPStream** stream);
|
||||||
|
typedef int32_t (*NPN_WriteProcPtr)(NPP instance, NPStream* stream, int32_t len, void* buffer);
|
||||||
|
typedef NPError (*NPN_DestroyStreamProcPtr)(NPP instance, NPStream* stream, NPReason reason);
|
||||||
|
typedef void (*NPN_StatusProcPtr)(NPP instance, const char* message);
|
||||||
|
/* Browser manages the lifetime of the buffer returned by NPN_UserAgent, don't
|
||||||
|
depend on it sticking around and don't free it. */
|
||||||
|
typedef const char* (*NPN_UserAgentProcPtr)(NPP instance);
|
||||||
|
typedef void* (*NPN_MemAllocProcPtr)(uint32_t size);
|
||||||
|
typedef void (*NPN_MemFreeProcPtr)(void* ptr);
|
||||||
|
typedef uint32_t (*NPN_MemFlushProcPtr)(uint32_t size);
|
||||||
|
typedef void (*NPN_ReloadPluginsProcPtr)(NPBool reloadPages);
|
||||||
|
typedef void* (*NPN_GetJavaEnvProcPtr)(void);
|
||||||
|
typedef void* (*NPN_GetJavaPeerProcPtr)(NPP instance);
|
||||||
|
typedef void (*NPN_InvalidateRectProcPtr)(NPP instance, NPRect *rect);
|
||||||
|
typedef void (*NPN_InvalidateRegionProcPtr)(NPP instance, NPRegion region);
|
||||||
|
typedef void (*NPN_ForceRedrawProcPtr)(NPP instance);
|
||||||
|
typedef NPIdentifier (*NPN_GetStringIdentifierProcPtr)(const NPUTF8* name);
|
||||||
|
typedef void (*NPN_GetStringIdentifiersProcPtr)(const NPUTF8** names, int32_t nameCount, NPIdentifier* identifiers);
|
||||||
|
typedef NPIdentifier (*NPN_GetIntIdentifierProcPtr)(int32_t intid);
|
||||||
|
typedef bool (*NPN_IdentifierIsStringProcPtr)(NPIdentifier identifier);
|
||||||
|
typedef NPUTF8* (*NPN_UTF8FromIdentifierProcPtr)(NPIdentifier identifier);
|
||||||
|
typedef int32_t (*NPN_IntFromIdentifierProcPtr)(NPIdentifier identifier);
|
||||||
|
typedef NPObject* (*NPN_CreateObjectProcPtr)(NPP npp, NPClass *aClass);
|
||||||
|
typedef NPObject* (*NPN_RetainObjectProcPtr)(NPObject *obj);
|
||||||
|
typedef void (*NPN_ReleaseObjectProcPtr)(NPObject *obj);
|
||||||
|
typedef bool (*NPN_InvokeProcPtr)(NPP npp, NPObject* obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||||
|
typedef bool (*NPN_InvokeDefaultProcPtr)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||||
|
typedef bool (*NPN_EvaluateProcPtr)(NPP npp, NPObject *obj, NPString *script, NPVariant *result);
|
||||||
|
typedef bool (*NPN_GetPropertyProcPtr)(NPP npp, NPObject *obj, NPIdentifier propertyName, NPVariant *result);
|
||||||
|
typedef bool (*NPN_SetPropertyProcPtr)(NPP npp, NPObject *obj, NPIdentifier propertyName, const NPVariant *value);
|
||||||
|
typedef bool (*NPN_RemovePropertyProcPtr)(NPP npp, NPObject *obj, NPIdentifier propertyName);
|
||||||
|
typedef bool (*NPN_HasPropertyProcPtr)(NPP npp, NPObject *obj, NPIdentifier propertyName);
|
||||||
|
typedef bool (*NPN_HasMethodProcPtr)(NPP npp, NPObject *obj, NPIdentifier propertyName);
|
||||||
|
typedef void (*NPN_ReleaseVariantValueProcPtr)(NPVariant *variant);
|
||||||
|
typedef void (*NPN_SetExceptionProcPtr)(NPObject *obj, const NPUTF8 *message);
|
||||||
|
typedef void (*NPN_PushPopupsEnabledStateProcPtr)(NPP npp, NPBool enabled);
|
||||||
|
typedef void (*NPN_PopPopupsEnabledStateProcPtr)(NPP npp);
|
||||||
|
typedef bool (*NPN_EnumerateProcPtr)(NPP npp, NPObject *obj, NPIdentifier **identifier, uint32_t *count);
|
||||||
|
typedef void (*NPN_PluginThreadAsyncCallProcPtr)(NPP instance, void (*func)(void *), void *userData);
|
||||||
|
typedef bool (*NPN_ConstructProcPtr)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||||
|
typedef NPError (*NPN_GetValueForURLPtr)(NPP npp, NPNURLVariable variable, const char *url, char **value, uint32_t *len);
|
||||||
|
typedef NPError (*NPN_SetValueForURLPtr)(NPP npp, NPNURLVariable variable, const char *url, const char *value, uint32_t len);
|
||||||
|
typedef NPError (*NPN_GetAuthenticationInfoPtr)(NPP npp, const char *protocol, const char *host, int32_t port, const char *scheme, const char *realm, char **username, uint32_t *ulen, char **password, uint32_t *plen);
|
||||||
|
typedef uint32_t (*NPN_ScheduleTimerPtr)(NPP instance, uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID));
|
||||||
|
typedef void (*NPN_UnscheduleTimerPtr)(NPP instance, uint32_t timerID);
|
||||||
|
typedef NPError (*NPN_PopUpContextMenuPtr)(NPP instance, NPMenu* menu);
|
||||||
|
typedef NPBool (*NPN_ConvertPointPtr)(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
|
||||||
|
typedef NPBool (*NPN_HandleEventPtr)(NPP instance, void *event, NPBool handled);
|
||||||
|
typedef NPBool (*NPN_UnfocusInstancePtr)(NPP instance, NPFocusDirection direction);
|
||||||
|
typedef void (*NPN_URLRedirectResponsePtr)(NPP instance, void* notifyData, NPBool allow);
|
||||||
|
|
||||||
|
typedef struct _NPPluginFuncs {
|
||||||
|
uint16_t size;
|
||||||
|
uint16_t version;
|
||||||
|
NPP_NewProcPtr newp;
|
||||||
|
NPP_DestroyProcPtr destroy;
|
||||||
|
NPP_SetWindowProcPtr setwindow;
|
||||||
|
NPP_NewStreamProcPtr newstream;
|
||||||
|
NPP_DestroyStreamProcPtr destroystream;
|
||||||
|
NPP_StreamAsFileProcPtr asfile;
|
||||||
|
NPP_WriteReadyProcPtr writeready;
|
||||||
|
NPP_WriteProcPtr write;
|
||||||
|
NPP_PrintProcPtr print;
|
||||||
|
NPP_HandleEventProcPtr event;
|
||||||
|
NPP_URLNotifyProcPtr urlnotify;
|
||||||
|
void* javaClass;
|
||||||
|
NPP_GetValueProcPtr getvalue;
|
||||||
|
NPP_SetValueProcPtr setvalue;
|
||||||
|
NPP_GotFocusPtr gotfocus;
|
||||||
|
NPP_LostFocusPtr lostfocus;
|
||||||
|
NPP_URLRedirectNotifyPtr urlredirectnotify;
|
||||||
|
NPP_ClearSiteDataPtr clearsitedata;
|
||||||
|
NPP_GetSitesWithDataPtr getsiteswithdata;
|
||||||
|
} NPPluginFuncs;
|
||||||
|
|
||||||
|
typedef struct _NPNetscapeFuncs {
|
||||||
|
uint16_t size;
|
||||||
|
uint16_t version;
|
||||||
|
NPN_GetURLProcPtr geturl;
|
||||||
|
NPN_PostURLProcPtr posturl;
|
||||||
|
NPN_RequestReadProcPtr requestread;
|
||||||
|
NPN_NewStreamProcPtr newstream;
|
||||||
|
NPN_WriteProcPtr write;
|
||||||
|
NPN_DestroyStreamProcPtr destroystream;
|
||||||
|
NPN_StatusProcPtr status;
|
||||||
|
NPN_UserAgentProcPtr uagent;
|
||||||
|
NPN_MemAllocProcPtr memalloc;
|
||||||
|
NPN_MemFreeProcPtr memfree;
|
||||||
|
NPN_MemFlushProcPtr memflush;
|
||||||
|
NPN_ReloadPluginsProcPtr reloadplugins;
|
||||||
|
NPN_GetJavaEnvProcPtr getJavaEnv;
|
||||||
|
NPN_GetJavaPeerProcPtr getJavaPeer;
|
||||||
|
NPN_GetURLNotifyProcPtr geturlnotify;
|
||||||
|
NPN_PostURLNotifyProcPtr posturlnotify;
|
||||||
|
NPN_GetValueProcPtr getvalue;
|
||||||
|
NPN_SetValueProcPtr setvalue;
|
||||||
|
NPN_InvalidateRectProcPtr invalidaterect;
|
||||||
|
NPN_InvalidateRegionProcPtr invalidateregion;
|
||||||
|
NPN_ForceRedrawProcPtr forceredraw;
|
||||||
|
NPN_GetStringIdentifierProcPtr getstringidentifier;
|
||||||
|
NPN_GetStringIdentifiersProcPtr getstringidentifiers;
|
||||||
|
NPN_GetIntIdentifierProcPtr getintidentifier;
|
||||||
|
NPN_IdentifierIsStringProcPtr identifierisstring;
|
||||||
|
NPN_UTF8FromIdentifierProcPtr utf8fromidentifier;
|
||||||
|
NPN_IntFromIdentifierProcPtr intfromidentifier;
|
||||||
|
NPN_CreateObjectProcPtr createobject;
|
||||||
|
NPN_RetainObjectProcPtr retainobject;
|
||||||
|
NPN_ReleaseObjectProcPtr releaseobject;
|
||||||
|
NPN_InvokeProcPtr invoke;
|
||||||
|
NPN_InvokeDefaultProcPtr invokeDefault;
|
||||||
|
NPN_EvaluateProcPtr evaluate;
|
||||||
|
NPN_GetPropertyProcPtr getproperty;
|
||||||
|
NPN_SetPropertyProcPtr setproperty;
|
||||||
|
NPN_RemovePropertyProcPtr removeproperty;
|
||||||
|
NPN_HasPropertyProcPtr hasproperty;
|
||||||
|
NPN_HasMethodProcPtr hasmethod;
|
||||||
|
NPN_ReleaseVariantValueProcPtr releasevariantvalue;
|
||||||
|
NPN_SetExceptionProcPtr setexception;
|
||||||
|
NPN_PushPopupsEnabledStateProcPtr pushpopupsenabledstate;
|
||||||
|
NPN_PopPopupsEnabledStateProcPtr poppopupsenabledstate;
|
||||||
|
NPN_EnumerateProcPtr enumerate;
|
||||||
|
NPN_PluginThreadAsyncCallProcPtr pluginthreadasynccall;
|
||||||
|
NPN_ConstructProcPtr construct;
|
||||||
|
NPN_GetValueForURLPtr getvalueforurl;
|
||||||
|
NPN_SetValueForURLPtr setvalueforurl;
|
||||||
|
NPN_GetAuthenticationInfoPtr getauthenticationinfo;
|
||||||
|
NPN_ScheduleTimerPtr scheduletimer;
|
||||||
|
NPN_UnscheduleTimerPtr unscheduletimer;
|
||||||
|
NPN_PopUpContextMenuPtr popupcontextmenu;
|
||||||
|
NPN_ConvertPointPtr convertpoint;
|
||||||
|
NPN_HandleEventPtr handleevent;
|
||||||
|
NPN_UnfocusInstancePtr unfocusinstance;
|
||||||
|
NPN_URLRedirectResponsePtr urlredirectresponse;
|
||||||
|
} NPNetscapeFuncs;
|
||||||
|
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
/*
|
||||||
|
* Mac OS X version(s) of NP_GetMIMEDescription(const char *)
|
||||||
|
* These can be called to retreive MIME information from the plugin dynamically
|
||||||
|
*
|
||||||
|
* Note: For compatibility with Quicktime, BPSupportedMIMEtypes is another way
|
||||||
|
* to get mime info from the plugin only on OSX and may not be supported
|
||||||
|
* in furture version -- use NP_GetMIMEDescription instead
|
||||||
|
*/
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kBPSupportedMIMETypesStructVers_1 = 1
|
||||||
|
};
|
||||||
|
typedef struct _BPSupportedMIMETypes
|
||||||
|
{
|
||||||
|
SInt32 structVersion; /* struct version */
|
||||||
|
Handle typeStrings; /* STR# formated handle, allocated by plug-in */
|
||||||
|
Handle infoStrings; /* STR# formated handle, allocated by plug-in */
|
||||||
|
} BPSupportedMIMETypes;
|
||||||
|
OSErr BP_GetSupportedMIMETypes(BPSupportedMIMETypes *mimeInfo, UInt32 flags);
|
||||||
|
#define NP_GETMIMEDESCRIPTION_NAME "NP_GetMIMEDescription"
|
||||||
|
typedef const char* (*NP_GetMIMEDescriptionProcPtr)(void);
|
||||||
|
typedef OSErr (*BP_GetSupportedMIMETypesProcPtr)(BPSupportedMIMETypes*, UInt32);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define OSCALL WINAPI
|
||||||
|
#else
|
||||||
|
#if defined(__OS2__)
|
||||||
|
#define OSCALL _System
|
||||||
|
#else
|
||||||
|
#define OSCALL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(XP_UNIX)
|
||||||
|
/* GCC 3.3 and later support the visibility attribute. */
|
||||||
|
#if defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
|
||||||
|
#define NP_VISIBILITY_DEFAULT __attribute__((visibility("default")))
|
||||||
|
#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
|
||||||
|
#define NP_VISIBILITY_DEFAULT __global
|
||||||
|
#else
|
||||||
|
#define NP_VISIBILITY_DEFAULT
|
||||||
|
#endif
|
||||||
|
#define NP_EXPORT(__type) NP_VISIBILITY_DEFAULT __type
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined (__OS2__)
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
/* plugin meta member functions */
|
||||||
|
#if defined(__OS2__)
|
||||||
|
typedef struct _NPPluginData { /* Alternate OS2 Plugin interface */
|
||||||
|
char *pMimeTypes;
|
||||||
|
char *pFileExtents;
|
||||||
|
char *pFileOpenTemplate;
|
||||||
|
char *pProductName;
|
||||||
|
char *pProductDescription;
|
||||||
|
unsigned long dwProductVersionMS;
|
||||||
|
unsigned long dwProductVersionLS;
|
||||||
|
} NPPluginData;
|
||||||
|
typedef NPError (*NP_GetPluginDataFunc)(NPPluginData*);
|
||||||
|
NPError OSCALL NP_GetPluginData(NPPluginData * pPluginData);
|
||||||
|
#endif
|
||||||
|
typedef NPError (*NP_GetEntryPointsFunc)(NPPluginFuncs*);
|
||||||
|
NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs);
|
||||||
|
typedef NPError (*NP_InitializeFunc)(NPNetscapeFuncs*);
|
||||||
|
NPError OSCALL NP_Initialize(NPNetscapeFuncs* bFuncs);
|
||||||
|
typedef NPError (*NP_ShutdownFunc)(void);
|
||||||
|
NPError OSCALL NP_Shutdown(void);
|
||||||
|
typedef const char* (*NP_GetMIMEDescriptionFunc)(void);
|
||||||
|
const char* NP_GetMIMEDescription(void);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__OS2__)
|
||||||
|
#pragma pack()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XP_UNIX
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
typedef char* (*NP_GetPluginVersionFunc)(void);
|
||||||
|
NP_EXPORT(char*) NP_GetPluginVersion(void);
|
||||||
|
typedef const char* (*NP_GetMIMEDescriptionFunc)(void);
|
||||||
|
NP_EXPORT(const char*) NP_GetMIMEDescription(void);
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
typedef NPError (*NP_InitializeFunc)(NPNetscapeFuncs*);
|
||||||
|
NP_EXPORT(NPError) NP_Initialize(NPNetscapeFuncs* bFuncs);
|
||||||
|
typedef NPError (*NP_GetEntryPointsFunc)(NPPluginFuncs*);
|
||||||
|
NP_EXPORT(NPError) NP_GetEntryPoints(NPPluginFuncs* pFuncs);
|
||||||
|
#else
|
||||||
|
typedef NPError (*NP_InitializeFunc)(NPNetscapeFuncs*, NPPluginFuncs*);
|
||||||
|
NP_EXPORT(NPError) NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs* pFuncs);
|
||||||
|
#endif
|
||||||
|
typedef NPError (*NP_ShutdownFunc)(void);
|
||||||
|
NP_EXPORT(NPError) NP_Shutdown(void);
|
||||||
|
typedef NPError (*NP_GetValueFunc)(void *, NPPVariable, void *);
|
||||||
|
NP_EXPORT(NPError) NP_GetValue(void *future, NPPVariable aVariable, void *aValue);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* npfunctions_h_ */
|
393
browser-plugin/npapi/npruntime.h
Normal file
393
browser-plugin/npapi/npruntime.h
Normal file
@ -0,0 +1,393 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004, Apple Computer, Inc. and The Mozilla Foundation.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla
|
||||||
|
* Foundation ("Mozilla") nor the names of their contributors may be used
|
||||||
|
* to endorse or promote products derived from this software without
|
||||||
|
* specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR
|
||||||
|
* THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef _NP_RUNTIME_H_
|
||||||
|
#define _NP_RUNTIME_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "nptypes.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
This API is used to facilitate binding code written in C to script
|
||||||
|
objects. The API in this header does not assume the presence of a
|
||||||
|
user agent. That is, it can be used to bind C code to scripting
|
||||||
|
environments outside of the context of a user agent.
|
||||||
|
|
||||||
|
However, the normal use of the this API is in the context of a
|
||||||
|
scripting environment running in a browser or other user agent.
|
||||||
|
In particular it is used to support the extended Netscape
|
||||||
|
script-ability API for plugins (NP-SAP). NP-SAP is an extension
|
||||||
|
of the Netscape plugin API. As such we have adopted the use of
|
||||||
|
the "NP" prefix for this API.
|
||||||
|
|
||||||
|
The following NP{N|P}Variables were added to the Netscape plugin
|
||||||
|
API (in npapi.h):
|
||||||
|
|
||||||
|
NPNVWindowNPObject
|
||||||
|
NPNVPluginElementNPObject
|
||||||
|
NPPVpluginScriptableNPObject
|
||||||
|
|
||||||
|
These variables are exposed through NPN_GetValue() and
|
||||||
|
NPP_GetValue() (respectively) and are used to establish the
|
||||||
|
initial binding between the user agent and native code. The DOM
|
||||||
|
objects in the user agent can be examined and manipulated using
|
||||||
|
the NPN_ functions that operate on NPObjects described in this
|
||||||
|
header.
|
||||||
|
|
||||||
|
To the extent possible the assumptions about the scripting
|
||||||
|
language used by the scripting environment have been minimized.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NP_BEGIN_MACRO do {
|
||||||
|
#define NP_END_MACRO } while (0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Objects (non-primitive data) passed between 'C' and script is
|
||||||
|
always wrapped in an NPObject. The 'interface' of an NPObject is
|
||||||
|
described by an NPClass.
|
||||||
|
*/
|
||||||
|
typedef struct NPObject NPObject;
|
||||||
|
typedef struct NPClass NPClass;
|
||||||
|
|
||||||
|
typedef char NPUTF8;
|
||||||
|
typedef struct _NPString {
|
||||||
|
const NPUTF8 *UTF8Characters;
|
||||||
|
uint32_t UTF8Length;
|
||||||
|
} NPString;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NPVariantType_Void,
|
||||||
|
NPVariantType_Null,
|
||||||
|
NPVariantType_Bool,
|
||||||
|
NPVariantType_Int32,
|
||||||
|
NPVariantType_Double,
|
||||||
|
NPVariantType_String,
|
||||||
|
NPVariantType_Object
|
||||||
|
} NPVariantType;
|
||||||
|
|
||||||
|
typedef struct _NPVariant {
|
||||||
|
NPVariantType type;
|
||||||
|
union {
|
||||||
|
bool boolValue;
|
||||||
|
int32_t intValue;
|
||||||
|
double doubleValue;
|
||||||
|
NPString stringValue;
|
||||||
|
NPObject *objectValue;
|
||||||
|
} value;
|
||||||
|
} NPVariant;
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPN_ReleaseVariantValue is called on all 'out' parameters
|
||||||
|
references. Specifically it is to be called on variants that own
|
||||||
|
their value, as is the case with all non-const NPVariant*
|
||||||
|
arguments after a successful call to any methods (except this one)
|
||||||
|
in this API.
|
||||||
|
|
||||||
|
After calling NPN_ReleaseVariantValue, the type of the variant
|
||||||
|
will be NPVariantType_Void.
|
||||||
|
*/
|
||||||
|
void NPN_ReleaseVariantValue(NPVariant *variant);
|
||||||
|
|
||||||
|
#define NPVARIANT_IS_VOID(_v) ((_v).type == NPVariantType_Void)
|
||||||
|
#define NPVARIANT_IS_NULL(_v) ((_v).type == NPVariantType_Null)
|
||||||
|
#define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool)
|
||||||
|
#define NPVARIANT_IS_INT32(_v) ((_v).type == NPVariantType_Int32)
|
||||||
|
#define NPVARIANT_IS_DOUBLE(_v) ((_v).type == NPVariantType_Double)
|
||||||
|
#define NPVARIANT_IS_STRING(_v) ((_v).type == NPVariantType_String)
|
||||||
|
#define NPVARIANT_IS_OBJECT(_v) ((_v).type == NPVariantType_Object)
|
||||||
|
|
||||||
|
#define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue)
|
||||||
|
#define NPVARIANT_TO_INT32(_v) ((_v).value.intValue)
|
||||||
|
#define NPVARIANT_TO_DOUBLE(_v) ((_v).value.doubleValue)
|
||||||
|
#define NPVARIANT_TO_STRING(_v) ((_v).value.stringValue)
|
||||||
|
#define NPVARIANT_TO_OBJECT(_v) ((_v).value.objectValue)
|
||||||
|
|
||||||
|
#define VOID_TO_NPVARIANT(_v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Void; \
|
||||||
|
(_v).value.objectValue = NULL; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define NULL_TO_NPVARIANT(_v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Null; \
|
||||||
|
(_v).value.objectValue = NULL; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define BOOLEAN_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Bool; \
|
||||||
|
(_v).value.boolValue = !!(_val); \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define INT32_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Int32; \
|
||||||
|
(_v).value.intValue = _val; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define DOUBLE_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Double; \
|
||||||
|
(_v).value.doubleValue = _val; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define STRINGZ_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_String; \
|
||||||
|
NPString str = { _val, (uint32_t)(strlen(_val)) }; \
|
||||||
|
(_v).value.stringValue = str; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define STRINGN_TO_NPVARIANT(_val, _len, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_String; \
|
||||||
|
NPString str = { _val, (uint32_t)(_len) }; \
|
||||||
|
(_v).value.stringValue = str; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define OBJECT_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Object; \
|
||||||
|
(_v).value.objectValue = _val; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Type mappings (JavaScript types have been used for illustration
|
||||||
|
purposes):
|
||||||
|
|
||||||
|
JavaScript to C (NPVariant with type:)
|
||||||
|
undefined NPVariantType_Void
|
||||||
|
null NPVariantType_Null
|
||||||
|
Boolean NPVariantType_Bool
|
||||||
|
Number NPVariantType_Double or NPVariantType_Int32
|
||||||
|
String NPVariantType_String
|
||||||
|
Object NPVariantType_Object
|
||||||
|
|
||||||
|
C (NPVariant with type:) to JavaScript
|
||||||
|
NPVariantType_Void undefined
|
||||||
|
NPVariantType_Null null
|
||||||
|
NPVariantType_Bool Boolean
|
||||||
|
NPVariantType_Int32 Number
|
||||||
|
NPVariantType_Double Number
|
||||||
|
NPVariantType_String String
|
||||||
|
NPVariantType_Object Object
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef void *NPIdentifier;
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPObjects have methods and properties. Methods and properties are
|
||||||
|
identified with NPIdentifiers. These identifiers may be reflected
|
||||||
|
in script. NPIdentifiers can be either strings or integers, IOW,
|
||||||
|
methods and properties can be identified by either strings or
|
||||||
|
integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be
|
||||||
|
compared using ==. In case of any errors, the requested
|
||||||
|
NPIdentifier(s) will be NULL. NPIdentifier lifetime is controlled
|
||||||
|
by the browser. Plugins do not need to worry about memory management
|
||||||
|
with regards to NPIdentifiers.
|
||||||
|
*/
|
||||||
|
NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name);
|
||||||
|
void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount,
|
||||||
|
NPIdentifier *identifiers);
|
||||||
|
NPIdentifier NPN_GetIntIdentifier(int32_t intid);
|
||||||
|
bool NPN_IdentifierIsString(NPIdentifier identifier);
|
||||||
|
|
||||||
|
/*
|
||||||
|
The NPUTF8 returned from NPN_UTF8FromIdentifier SHOULD be freed.
|
||||||
|
*/
|
||||||
|
NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Get the integer represented by identifier. If identifier is not an
|
||||||
|
integer identifier, the behaviour is undefined.
|
||||||
|
*/
|
||||||
|
int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPObject behavior is implemented using the following set of
|
||||||
|
callback functions.
|
||||||
|
|
||||||
|
The NPVariant *result argument of these functions (where
|
||||||
|
applicable) should be released using NPN_ReleaseVariantValue().
|
||||||
|
*/
|
||||||
|
typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
|
||||||
|
typedef void (*NPDeallocateFunctionPtr)(NPObject *npobj);
|
||||||
|
typedef void (*NPInvalidateFunctionPtr)(NPObject *npobj);
|
||||||
|
typedef bool (*NPHasMethodFunctionPtr)(NPObject *npobj, NPIdentifier name);
|
||||||
|
typedef bool (*NPInvokeFunctionPtr)(NPObject *npobj, NPIdentifier name,
|
||||||
|
const NPVariant *args, uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj,
|
||||||
|
const NPVariant *args,
|
||||||
|
uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
typedef bool (*NPHasPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
|
||||||
|
typedef bool (*NPGetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
|
||||||
|
NPVariant *result);
|
||||||
|
typedef bool (*NPSetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
|
||||||
|
const NPVariant *value);
|
||||||
|
typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj,
|
||||||
|
NPIdentifier name);
|
||||||
|
typedef bool (*NPEnumerationFunctionPtr)(NPObject *npobj, NPIdentifier **value,
|
||||||
|
uint32_t *count);
|
||||||
|
typedef bool (*NPConstructFunctionPtr)(NPObject *npobj,
|
||||||
|
const NPVariant *args,
|
||||||
|
uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPObjects returned by create, retain, invoke, and getProperty pass
|
||||||
|
a reference count to the caller. That is, the callee adds a
|
||||||
|
reference count which passes to the caller. It is the caller's
|
||||||
|
responsibility to release the returned object.
|
||||||
|
|
||||||
|
NPInvokeFunctionPtr function may return 0 to indicate a void
|
||||||
|
result.
|
||||||
|
|
||||||
|
NPInvalidateFunctionPtr is called by the scripting environment
|
||||||
|
when the native code is shutdown. Any attempt to message a
|
||||||
|
NPObject instance after the invalidate callback has been
|
||||||
|
called will result in undefined behavior, even if the native code
|
||||||
|
is still retaining those NPObject instances. (The runtime
|
||||||
|
will typically return immediately, with 0 or NULL, from an attempt
|
||||||
|
to dispatch to a NPObject, but this behavior should not be
|
||||||
|
depended upon.)
|
||||||
|
|
||||||
|
The NPEnumerationFunctionPtr function may pass an array of
|
||||||
|
NPIdentifiers back to the caller. The callee allocs the memory of
|
||||||
|
the array using NPN_MemAlloc(), and it's the caller's responsibility
|
||||||
|
to release it using NPN_MemFree().
|
||||||
|
*/
|
||||||
|
struct NPClass
|
||||||
|
{
|
||||||
|
uint32_t structVersion;
|
||||||
|
NPAllocateFunctionPtr allocate;
|
||||||
|
NPDeallocateFunctionPtr deallocate;
|
||||||
|
NPInvalidateFunctionPtr invalidate;
|
||||||
|
NPHasMethodFunctionPtr hasMethod;
|
||||||
|
NPInvokeFunctionPtr invoke;
|
||||||
|
NPInvokeDefaultFunctionPtr invokeDefault;
|
||||||
|
NPHasPropertyFunctionPtr hasProperty;
|
||||||
|
NPGetPropertyFunctionPtr getProperty;
|
||||||
|
NPSetPropertyFunctionPtr setProperty;
|
||||||
|
NPRemovePropertyFunctionPtr removeProperty;
|
||||||
|
NPEnumerationFunctionPtr enumerate;
|
||||||
|
NPConstructFunctionPtr construct;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NP_CLASS_STRUCT_VERSION 3
|
||||||
|
|
||||||
|
#define NP_CLASS_STRUCT_VERSION_ENUM 2
|
||||||
|
#define NP_CLASS_STRUCT_VERSION_CTOR 3
|
||||||
|
|
||||||
|
#define NP_CLASS_STRUCT_VERSION_HAS_ENUM(npclass) \
|
||||||
|
((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_ENUM)
|
||||||
|
|
||||||
|
#define NP_CLASS_STRUCT_VERSION_HAS_CTOR(npclass) \
|
||||||
|
((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_CTOR)
|
||||||
|
|
||||||
|
struct NPObject {
|
||||||
|
NPClass *_class;
|
||||||
|
uint32_t referenceCount;
|
||||||
|
/*
|
||||||
|
* Additional space may be allocated here by types of NPObjects
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
If the class has an allocate function, NPN_CreateObject invokes
|
||||||
|
that function, otherwise a NPObject is allocated and
|
||||||
|
returned. This method will initialize the referenceCount member of
|
||||||
|
the NPObject to 1.
|
||||||
|
*/
|
||||||
|
NPObject *NPN_CreateObject(NPP npp, NPClass *aClass);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Increment the NPObject's reference count.
|
||||||
|
*/
|
||||||
|
NPObject *NPN_RetainObject(NPObject *npobj);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Decremented the NPObject's reference count. If the reference
|
||||||
|
count goes to zero, the class's destroy function is invoke if
|
||||||
|
specified, otherwise the object is freed directly.
|
||||||
|
*/
|
||||||
|
void NPN_ReleaseObject(NPObject *npobj);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions to access script objects represented by NPObject.
|
||||||
|
|
||||||
|
Calls to script objects are synchronous. If a function returns a
|
||||||
|
value, it will be supplied via the result NPVariant
|
||||||
|
argument. Successful calls will return true, false will be
|
||||||
|
returned in case of an error.
|
||||||
|
|
||||||
|
Calls made from plugin code to script must be made from the thread
|
||||||
|
on which the plugin was initialized.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool NPN_Invoke(NPP npp, NPObject *npobj, NPIdentifier methodName,
|
||||||
|
const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||||
|
bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args,
|
||||||
|
uint32_t argCount, NPVariant *result);
|
||||||
|
bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script,
|
||||||
|
NPVariant *result);
|
||||||
|
bool NPN_GetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
|
||||||
|
NPVariant *result);
|
||||||
|
bool NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
|
||||||
|
const NPVariant *value);
|
||||||
|
bool NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
|
||||||
|
bool NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
|
||||||
|
bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
|
||||||
|
bool NPN_Enumerate(NPP npp, NPObject *npobj, NPIdentifier **identifier,
|
||||||
|
uint32_t *count);
|
||||||
|
bool NPN_Construct(NPP npp, NPObject *npobj, const NPVariant *args,
|
||||||
|
uint32_t argCount, NPVariant *result);
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPN_SetException may be called to trigger a script exception upon
|
||||||
|
return from entry points into NPObjects. Typical usage:
|
||||||
|
|
||||||
|
NPN_SetException (npobj, message);
|
||||||
|
*/
|
||||||
|
void NPN_SetException(NPObject *npobj, const NPUTF8 *message);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
121
browser-plugin/npapi/nptypes.h
Normal file
121
browser-plugin/npapi/nptypes.h
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* mozilla.org.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2004
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Johnny Stenback <jst@mozilla.org> (Original author)
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef nptypes_h_
|
||||||
|
#define nptypes_h_
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Header file for ensuring that C99 types ([u]int32_t, [u]int64_t and bool) and
|
||||||
|
* true/false macros are available.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(WIN32) || defined(OS2)
|
||||||
|
/*
|
||||||
|
* Win32 and OS/2 don't know C99, so define [u]int_16/32/64 here. The bool
|
||||||
|
* is predefined tho, both in C and C++.
|
||||||
|
*/
|
||||||
|
typedef short int16_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
typedef int int32_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
typedef long long int64_t;
|
||||||
|
typedef unsigned long long uint64_t;
|
||||||
|
#elif defined(_AIX) || defined(__sun) || defined(__osf__) || defined(IRIX) || defined(HPUX)
|
||||||
|
/*
|
||||||
|
* AIX and SunOS ship a inttypes.h header that defines [u]int32_t,
|
||||||
|
* but not bool for C.
|
||||||
|
*/
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
typedef int bool;
|
||||||
|
#define true 1
|
||||||
|
#define false 0
|
||||||
|
#endif
|
||||||
|
#elif defined(bsdi) || defined(FREEBSD) || defined(OPENBSD)
|
||||||
|
/*
|
||||||
|
* BSD/OS, FreeBSD, and OpenBSD ship sys/types.h that define int32_t and
|
||||||
|
* u_int32_t.
|
||||||
|
*/
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BSD/OS ships no header that defines uint32_t, nor bool (for C)
|
||||||
|
*/
|
||||||
|
#if defined(bsdi)
|
||||||
|
typedef u_int32_t uint32_t;
|
||||||
|
typedef u_int64_t uint64_t;
|
||||||
|
|
||||||
|
#if !defined(__cplusplus)
|
||||||
|
typedef int bool;
|
||||||
|
#define true 1
|
||||||
|
#define false 0
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* FreeBSD and OpenBSD define uint32_t and bool.
|
||||||
|
*/
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#endif
|
||||||
|
#elif defined(BEOS)
|
||||||
|
#include <inttypes.h>
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* For those that ship a standard C99 stdint.h header file, include
|
||||||
|
* it. Can't do the same for stdbool.h tho, since some systems ship
|
||||||
|
* with a stdbool.h file that doesn't compile!
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#if !defined(__GNUC__) || (__GNUC__ > 2 || __GNUC_MINOR__ > 95)
|
||||||
|
#include <stdbool.h>
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* GCC 2.91 can't deal with a typedef for bool, but a #define
|
||||||
|
* works.
|
||||||
|
*/
|
||||||
|
#define bool int
|
||||||
|
#define true 1
|
||||||
|
#define false 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* nptypes_h_ */
|
@ -1,35 +0,0 @@
|
|||||||
/* The prefix for our gettext translation domains. */
|
|
||||||
#mesondefine GETTEXT_PACKAGE
|
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#mesondefine VERSION
|
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#mesondefine PACKAGE_VERSION
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `fdwalk' function. */
|
|
||||||
#mesondefine HAVE_FDWALK
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `mallinfo' function. */
|
|
||||||
#mesondefine HAVE_MALLINFO
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `mallinfo2' function. */
|
|
||||||
#mesondefine HAVE_MALLINFO2
|
|
||||||
|
|
||||||
/* Define to 1 fi you have the <sys/resource.h> header file. */
|
|
||||||
#mesondefine HAVE_SYS_RESOURCE_H
|
|
||||||
|
|
||||||
/* Define if we have NetworkManager */
|
|
||||||
#mesondefine HAVE_NETWORKMANAGER
|
|
||||||
|
|
||||||
/* Define if we have systemd */
|
|
||||||
#mesondefine HAVE_SYSTEMD
|
|
||||||
|
|
||||||
/* Define if _NL_TIME_FIRST_WEEKDATE is available */
|
|
||||||
#mesondefine HAVE__NL_TIME_FIRST_WEEKDAY
|
|
||||||
|
|
||||||
/* Define if you have the `g_desktop_app_info_launch_uris_as_manager_with_fds` function */
|
|
||||||
#mesondefine HAVE_GIO_DESKTOP_LAUNCH_URIS_WITH_FDS
|
|
||||||
|
|
||||||
/* Define if fdwalk is available in libc */
|
|
||||||
#mesondefine HAVE_FDWALK
|
|
252
configure.ac
Normal file
252
configure.ac
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
AC_PREREQ(2.63)
|
||||||
|
AC_INIT([gnome-shell],[3.2.2.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||||
|
|
||||||
|
AC_CONFIG_HEADERS([config.h])
|
||||||
|
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||||
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
AC_CONFIG_AUX_DIR([config])
|
||||||
|
|
||||||
|
AC_SUBST([PACKAGE_NAME], ["$PACKAGE_NAME"])
|
||||||
|
AC_SUBST([PACKAGE_VERSION], ["$PACKAGE_VERSION"])
|
||||||
|
|
||||||
|
AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar foreign])
|
||||||
|
AM_MAINTAINER_MODE([enable])
|
||||||
|
|
||||||
|
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
||||||
|
|
||||||
|
# Checks for programs.
|
||||||
|
AC_PROG_CC
|
||||||
|
# Needed for per-target cflags, like in gnomeshell-taskpanel
|
||||||
|
AM_PROG_CC_C_O
|
||||||
|
|
||||||
|
# Initialize libtool
|
||||||
|
LT_PREREQ([2.2.6])
|
||||||
|
LT_INIT([disable-static])
|
||||||
|
|
||||||
|
# i18n
|
||||||
|
IT_PROG_INTLTOOL([0.40])
|
||||||
|
|
||||||
|
AM_GNU_GETTEXT([external])
|
||||||
|
AM_GNU_GETTEXT_VERSION([0.17])
|
||||||
|
|
||||||
|
GETTEXT_PACKAGE=gnome-shell
|
||||||
|
AC_SUBST(GETTEXT_PACKAGE)
|
||||||
|
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
|
||||||
|
[The prefix for our gettext translation domains.])
|
||||||
|
|
||||||
|
PKG_PROG_PKG_CONFIG([0.22])
|
||||||
|
|
||||||
|
# GConf stuff
|
||||||
|
AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
|
||||||
|
AM_GCONF_SOURCE_2
|
||||||
|
|
||||||
|
GLIB_GSETTINGS
|
||||||
|
|
||||||
|
# Get a value to substitute into gnome-shell.in
|
||||||
|
AM_PATH_PYTHON([2.5])
|
||||||
|
AC_SUBST(PYTHON)
|
||||||
|
|
||||||
|
# We need at least this, since gst_plugin_register_static() was added
|
||||||
|
# in 0.10.16, but nothing older than 0.10.21 has been tested.
|
||||||
|
GSTREAMER_MIN_VERSION=0.10.16
|
||||||
|
|
||||||
|
recorder_modules=
|
||||||
|
build_recorder=false
|
||||||
|
AC_MSG_CHECKING([for GStreamer (needed for recording functionality)])
|
||||||
|
if $PKG_CONFIG --exists gstreamer-0.10 '>=' $GSTREAMER_MIN_VERSION ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
build_recorder=true
|
||||||
|
recorder_modules="gstreamer-0.10 gstreamer-base-0.10 x11"
|
||||||
|
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules clutter-1.0 xfixes)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
||||||
|
|
||||||
|
CLUTTER_MIN_VERSION=1.7.5
|
||||||
|
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||||
|
GJS_MIN_VERSION=1.29.18
|
||||||
|
MUTTER_MIN_VERSION=3.2.1
|
||||||
|
FOLKS_MIN_VERSION=0.5.2
|
||||||
|
GTK_MIN_VERSION=3.0.0
|
||||||
|
GIO_MIN_VERSION=2.29.10
|
||||||
|
LIBECAL_MIN_VERSION=2.32.0
|
||||||
|
LIBEDATASERVER_MIN_VERSION=1.2.0
|
||||||
|
LIBEDATASERVERUI_MIN_VERSION=2.91.6
|
||||||
|
TELEPATHY_GLIB_MIN_VERSION=0.15.5
|
||||||
|
TELEPATHY_LOGGER_MIN_VERSION=0.2.4
|
||||||
|
POLKIT_MIN_VERSION=0.100
|
||||||
|
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||||
|
|
||||||
|
# Collect more than 20 libraries for a prize!
|
||||||
|
PKG_CHECK_MODULES(GNOME_SHELL, gio-2.0 >= $GIO_MIN_VERSION
|
||||||
|
gio-unix-2.0 dbus-glib-1 libxml-2.0
|
||||||
|
gtk+-3.0 >= $GTK_MIN_VERSION
|
||||||
|
folks >= $FOLKS_MIN_VERSION
|
||||||
|
libmutter >= $MUTTER_MIN_VERSION
|
||||||
|
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
||||||
|
libgnome-menu-3.0 $recorder_modules gconf-2.0
|
||||||
|
gdk-x11-3.0 libsoup-2.4
|
||||||
|
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
|
||||||
|
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
|
||||||
|
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
|
||||||
|
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
||||||
|
libcanberra
|
||||||
|
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
|
||||||
|
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
|
||||||
|
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
|
||||||
|
libnm-glib libnm-util gnome-keyring-1)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(BROWSER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION json-glib-1.0 >= 0.13.2)
|
||||||
|
|
||||||
|
GJS_VERSION=`$PKG_CONFIG --modversion gjs-internals-1.0`
|
||||||
|
AC_DEFINE_UNQUOTED([GJS_VERSION], ["$GJS_VERSION"], [The version of GJS we're linking to])
|
||||||
|
AC_SUBST([GJS_VERSION], ["$GJS_VERSION"])
|
||||||
|
|
||||||
|
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
|
||||||
|
JHBUILD_TYPELIBDIR="$INTROSPECTION_TYPELIBDIR"
|
||||||
|
AC_SUBST(JHBUILD_TYPELIBDIR)
|
||||||
|
|
||||||
|
saved_CFLAGS=$CFLAGS
|
||||||
|
saved_LIBS=$LIBS
|
||||||
|
CFLAGS=$GNOME_SHELL_CFLAGS
|
||||||
|
LIBS=$GNOME_SHELL_LIBS
|
||||||
|
AC_CHECK_FUNCS(JS_NewGlobalObject XFixesCreatePointerBarrier)
|
||||||
|
CFLAGS=$saved_CFLAGS
|
||||||
|
LIBS=$saved_LIBS
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 gnome-desktop-3.0 >= 2.90.0 x11)
|
||||||
|
PKG_CHECK_MODULES(GDMUSER, dbus-glib-1 gtk+-3.0)
|
||||||
|
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
||||||
|
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
|
||||||
|
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 0.1.7)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for bluetooth support])
|
||||||
|
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0],
|
||||||
|
[BLUETOOTH_DIR=`$PKG_CONFIG --variable=applet_libdir gnome-bluetooth-1.0`
|
||||||
|
BLUETOOTH_LIBS=`$PKG_CONFIG --variable=applet_libs gnome-bluetooth-1.0`
|
||||||
|
AC_SUBST([BLUETOOTH_LIBS],["$BLUETOOTH_LIBS"])
|
||||||
|
AC_DEFINE_UNQUOTED([BLUETOOTH_DIR],["$BLUETOOTH_DIR"],[Path to installed GnomeBluetooth typelib and library])
|
||||||
|
AC_DEFINE([HAVE_BLUETOOTH],[1],[Define if you have libgnome-bluetooth-applet])
|
||||||
|
AC_SUBST([HAVE_BLUETOOTH],[1])
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[AC_DEFINE([HAVE_BLUETOOTH],[0])
|
||||||
|
AC_SUBST([HAVE_BLUETOOTH],[0])
|
||||||
|
AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION libedataserverui-3.0 >= $LIBEDATASERVERUI_MIN_VERSION gio-2.0)
|
||||||
|
AC_SUBST(CALENDAR_SERVER_CFLAGS)
|
||||||
|
AC_SUBST(CALENDAR_SERVER_LIBS)
|
||||||
|
|
||||||
|
MUTTER_GIR_DIR=`$PKG_CONFIG --variable=girdir libmutter`
|
||||||
|
MUTTER_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir libmutter`
|
||||||
|
AC_SUBST(MUTTER_GIR_DIR)
|
||||||
|
AC_SUBST(MUTTER_TYPELIB_DIR)
|
||||||
|
|
||||||
|
GJS_CONSOLE=`$PKG_CONFIG --variable=gjs_console gjs-1.0`
|
||||||
|
AC_SUBST(GJS_CONSOLE)
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS(fdwalk)
|
||||||
|
AC_CHECK_FUNCS(mallinfo)
|
||||||
|
AC_CHECK_HEADERS([sys/resource.h])
|
||||||
|
|
||||||
|
# _NL_TIME_FIRST_WEEKDAY is an enum and not a define
|
||||||
|
AC_MSG_CHECKING([for _NL_TIME_FIRST_WEEKDAY])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
|
||||||
|
[[nl_langinfo(_NL_TIME_FIRST_WEEKDAY);]])],
|
||||||
|
[langinfo_ok=yes], [langinfo_ok=no])
|
||||||
|
AC_MSG_RESULT($langinfo_ok)
|
||||||
|
if test "$langinfo_ok" = "yes"; then
|
||||||
|
AC_DEFINE([HAVE__NL_TIME_FIRST_WEEKDAY], [1],
|
||||||
|
[Define if _NL_TIME_FIRST_WEEKDAY is available])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Sets GLIB_GENMARSHAL and GLIB_MKENUMS
|
||||||
|
AM_PATH_GLIB_2_0()
|
||||||
|
G_IR_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
|
||||||
|
AC_SUBST(G_IR_SCANNER)
|
||||||
|
G_IR_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
|
||||||
|
AC_SUBST(G_IR_COMPILER)
|
||||||
|
G_IR_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
|
||||||
|
AC_SUBST(G_IR_GENERATE)
|
||||||
|
GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
|
||||||
|
AC_SUBST(GIRDIR)
|
||||||
|
TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
|
||||||
|
AC_SUBST(TYPELIBDIR)
|
||||||
|
|
||||||
|
# Stay command-line compatible with the gnome-common configure option. Here
|
||||||
|
# minimum/yes/maximum are the same, however.
|
||||||
|
AC_ARG_ENABLE(compile_warnings,
|
||||||
|
AS_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],[Turn on compiler warnings]),,
|
||||||
|
enable_compile_warnings=error)
|
||||||
|
|
||||||
|
changequote(,)dnl
|
||||||
|
if test "$enable_compile_warnings" != no ; then
|
||||||
|
if test "x$GCC" = "xyes"; then
|
||||||
|
case " $CFLAGS " in
|
||||||
|
*[\ \ ]-Wall[\ \ ]*) ;;
|
||||||
|
*) CFLAGS="$CFLAGS -Wall" ;;
|
||||||
|
esac
|
||||||
|
case " $CFLAGS " in
|
||||||
|
*[\ \ ]-Wmissing-prototypes[\ \ ]*) ;;
|
||||||
|
*) CFLAGS="$CFLAGS -Wmissing-prototypes" ;;
|
||||||
|
esac
|
||||||
|
if test "$enable_compile_warnings" = error ; then
|
||||||
|
case " $CFLAGS " in
|
||||||
|
*[\ \ ]-Werror[\ \ ]*) ;;
|
||||||
|
*) CFLAGS="$CFLAGS -Werror" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
changequote([,])dnl
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(jhbuild-wrapper-script,
|
||||||
|
AS_HELP_STRING([--jhbuild-wrapper-script=yes],[Make "gnome-shell" script work for jhbuild]),,enable_jhbuild_wrapper_script=no)
|
||||||
|
AM_CONDITIONAL(USE_JHBUILD_WRAPPER_SCRIPT, test "x$enable_jhbuild_wrapper_script" = xyes)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([location of system Certificate Authority list])
|
||||||
|
AC_ARG_WITH(ca-certificates,
|
||||||
|
[AC_HELP_STRING([--with-ca-certificates=@<:@path@:>@],
|
||||||
|
[path to system Certificate Authority list])])
|
||||||
|
|
||||||
|
if test "$with_ca_certificates" = "no"; then
|
||||||
|
AC_MSG_RESULT([disabled])
|
||||||
|
else
|
||||||
|
if test -z "$with_ca_certificates"; then
|
||||||
|
for f in /etc/pki/tls/certs/ca-bundle.crt \
|
||||||
|
/etc/ssl/certs/ca-certificates.crt; do
|
||||||
|
if test -f "$f"; then
|
||||||
|
with_ca_certificates="$f"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if test -z "$with_ca_certificates"; then
|
||||||
|
AC_MSG_ERROR([could not find. Use --with-ca-certificates=path to set, or --without-ca-certificates to disable])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT($with_ca_certificates)
|
||||||
|
AC_DEFINE_UNQUOTED(SHELL_SYSTEM_CA_FILE, ["$with_ca_certificates"], [The system TLS CA list])
|
||||||
|
fi
|
||||||
|
AC_SUBST(SHELL_SYSTEM_CA_FILE,["$with_ca_certificates"])
|
||||||
|
|
||||||
|
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
|
||||||
|
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([
|
||||||
|
Makefile
|
||||||
|
data/Makefile
|
||||||
|
js/Makefile
|
||||||
|
js/misc/config.js
|
||||||
|
src/Makefile
|
||||||
|
browser-plugin/Makefile
|
||||||
|
tests/Makefile
|
||||||
|
po/Makefile.in
|
||||||
|
man/Makefile
|
||||||
|
])
|
||||||
|
AC_OUTPUT
|
@ -1,6 +0,0 @@
|
|||||||
[org.gnome.mutter:GNOME]
|
|
||||||
attach-modal-dialogs=true
|
|
||||||
edge-tiling=true
|
|
||||||
dynamic-workspaces=true
|
|
||||||
workspaces-only-on-primary=true
|
|
||||||
focus-change-on-pointer-rest=true
|
|
@ -1,45 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<KeyListEntries schema="org.gnome.shell.keybindings"
|
|
||||||
group="system"
|
|
||||||
name="Launchers"
|
|
||||||
wm_name="GNOME Shell"
|
|
||||||
package="gnome-shell">
|
|
||||||
|
|
||||||
<KeyListEntry name="switch-to-application-1"
|
|
||||||
description="Activate favorite application 1"
|
|
||||||
hidden="true"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="switch-to-application-2"
|
|
||||||
description="Activate favorite application 2"
|
|
||||||
hidden="true"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="switch-to-application-3"
|
|
||||||
description="Activate favorite application 3"
|
|
||||||
hidden="true"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="switch-to-application-4"
|
|
||||||
description="Activate favorite application 4"
|
|
||||||
hidden="true"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="switch-to-application-5"
|
|
||||||
description="Activate favorite application 5"
|
|
||||||
hidden="true"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="switch-to-application-6"
|
|
||||||
description="Activate favorite application 6"
|
|
||||||
hidden="true"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="switch-to-application-7"
|
|
||||||
description="Activate favorite application 7"
|
|
||||||
hidden="true"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="switch-to-application-8"
|
|
||||||
description="Activate favorite application 8"
|
|
||||||
hidden="true"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="switch-to-application-9"
|
|
||||||
description="Activate favorite application 9"
|
|
||||||
hidden="true"/>
|
|
||||||
|
|
||||||
</KeyListEntries>
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<KeyListEntries schema="org.gnome.shell.keybindings"
|
|
||||||
group="system"
|
|
||||||
name="System"
|
|
||||||
wm_name="GNOME Shell"
|
|
||||||
package="gnome-shell">
|
|
||||||
|
|
||||||
<KeyListEntry name="toggle-message-tray"
|
|
||||||
description="Show the notification list"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="focus-active-notification"
|
|
||||||
description="Focus the active notification"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="toggle-overview"
|
|
||||||
description="Show the overview"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="toggle-application-view"
|
|
||||||
description="Show all applications"/>
|
|
||||||
|
|
||||||
<KeyListEntry name="open-application-menu"
|
|
||||||
description="Open the application menu"/>
|
|
||||||
|
|
||||||
</KeyListEntries>
|
|
||||||
|
|
88
data/Makefile.am
Normal file
88
data/Makefile.am
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
desktopdir=$(datadir)/applications
|
||||||
|
desktop_DATA = gnome-shell.desktop
|
||||||
|
|
||||||
|
# We substitute in bindir so it works as an autostart
|
||||||
|
# file when built in a non-system prefix
|
||||||
|
%.desktop.in:%.desktop.in.in
|
||||||
|
$(AM_V_GEN) sed -e "s|@bindir[@]|$(bindir)|" \
|
||||||
|
-e "s|@VERSION[@]|$(VERSION)|" \
|
||||||
|
$< > $@ || rm $@
|
||||||
|
|
||||||
|
# Placeholder until we add intltool
|
||||||
|
%.desktop:%.desktop.in
|
||||||
|
$(AM_V_GEN) sed s/^_// < $< > $@ || rm $@
|
||||||
|
|
||||||
|
searchprovidersdir = $(pkgdatadir)/search_providers
|
||||||
|
dist_searchproviders_DATA = \
|
||||||
|
search_providers/google.xml \
|
||||||
|
search_providers/wikipedia.xml
|
||||||
|
|
||||||
|
themedir = $(pkgdatadir)/theme
|
||||||
|
dist_theme_DATA = \
|
||||||
|
theme/calendar-arrow-left.svg \
|
||||||
|
theme/calendar-arrow-right.svg \
|
||||||
|
theme/calendar-today.svg \
|
||||||
|
theme/close-window.svg \
|
||||||
|
theme/close.svg \
|
||||||
|
theme/corner-ripple-ltr.png \
|
||||||
|
theme/corner-ripple-rtl.png \
|
||||||
|
theme/dash-placeholder.svg \
|
||||||
|
theme/filter-selected-ltr.svg \
|
||||||
|
theme/filter-selected-rtl.svg \
|
||||||
|
theme/gdm.css \
|
||||||
|
theme/gnome-shell.css \
|
||||||
|
theme/panel-border.svg \
|
||||||
|
theme/panel-button-border.svg \
|
||||||
|
theme/panel-button-highlight-narrow.svg \
|
||||||
|
theme/panel-button-highlight-wide.svg \
|
||||||
|
theme/process-working.svg \
|
||||||
|
theme/running-indicator.svg \
|
||||||
|
theme/scroll-hhandle.svg \
|
||||||
|
theme/scroll-vhandle.svg \
|
||||||
|
theme/source-button-border.svg \
|
||||||
|
theme/toggle-off-us.svg \
|
||||||
|
theme/toggle-off-intl.svg \
|
||||||
|
theme/toggle-on-us.svg \
|
||||||
|
theme/toggle-on-intl.svg \
|
||||||
|
theme/ws-switch-arrow-up.svg \
|
||||||
|
theme/ws-switch-arrow-down.svg
|
||||||
|
|
||||||
|
gsettings_SCHEMAS = org.gnome.shell.gschema.xml
|
||||||
|
|
||||||
|
@INTLTOOL_XML_NOMERGE_RULE@
|
||||||
|
@GSETTINGS_RULES@
|
||||||
|
|
||||||
|
# We need to compile schemas at make time
|
||||||
|
# to run from source tree
|
||||||
|
gschemas.compiled: $(gsettings_SCHEMAS:.xml=.valid)
|
||||||
|
$(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) --targetdir=. .
|
||||||
|
|
||||||
|
all-local: gschemas.compiled
|
||||||
|
|
||||||
|
|
||||||
|
# GConf schemas: provide defaults for keys from Metacity we are overriding
|
||||||
|
gconfschemadir = @GCONF_SCHEMA_FILE_DIR@
|
||||||
|
gconfschema_DATA = gnome-shell.schemas
|
||||||
|
|
||||||
|
shadersdir = $(pkgdatadir)/shaders
|
||||||
|
shaders_DATA = \
|
||||||
|
shaders/dim-window.glsl
|
||||||
|
|
||||||
|
install-data-local:
|
||||||
|
GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$(gconfschema_DATA)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
gnome-shell.desktop.in.in \
|
||||||
|
$(menu_DATA) \
|
||||||
|
$(gconfschema_DATA) \
|
||||||
|
$(shaders_DATA) \
|
||||||
|
org.gnome.shell.gschema.xml.in
|
||||||
|
|
||||||
|
CLEANFILES = \
|
||||||
|
gnome-shell.desktop.in \
|
||||||
|
$(desktop_DATA) \
|
||||||
|
$(gsettings_SCHEMAS) \
|
||||||
|
gschemas.compiled
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
Gnome-shell OSK layouts are extracted from CLDR layout definitions:
|
|
||||||
https://www.unicode.org/cldr/charts/latest/keyboards/layouts/index.html
|
|
||||||
|
|
||||||
Updating these involves several steps:
|
|
||||||
|
|
||||||
1) Downloading and unzipping the tarball found at:
|
|
||||||
http://www.unicode.org/Public/cldr/latest/keyboards.zip
|
|
||||||
|
|
||||||
This file contains XML files describing the keyboard layouts.
|
|
||||||
|
|
||||||
2) Cloning the cldr2json script at:
|
|
||||||
git://repo.or.cz/cldr2json.git
|
|
||||||
|
|
||||||
It will be used to convert the XML files into JSON that can be
|
|
||||||
directly consumed by gnome-shell.
|
|
||||||
|
|
||||||
3) Running the script to produce the files:
|
|
||||||
./cldr2json <input-directory> <output-directory>
|
|
||||||
|
|
||||||
We shall usually use the "android" folder, since that's most
|
|
||||||
complete, and similar to our UI and target sizes. And the target
|
|
||||||
directory must be data/osk-layouts in this repository.
|
|
||||||
|
|
||||||
4) Modify gnome-shell-osk-layouts.gresource.xml to include the files
|
|
||||||
|
|
||||||
5) Do git add on the updated/new files, and git commit.
|
|
||||||
|
|
||||||
|
|
||||||
Or alternatively:
|
|
||||||
|
|
||||||
1) Run update-osk-layouts.sh
|
|
||||||
|
|
||||||
2) Do git add and git commit
|
|
@ -1,40 +0,0 @@
|
|||||||
cldr2json
|
|
||||||
=========
|
|
||||||
|
|
||||||
This script converts Unicode CLDR android keyboard layouts to JSON usable by
|
|
||||||
GNOME Shell.
|
|
||||||
|
|
||||||
CLDR keyboard layouts can be found at
|
|
||||||
<http://www.unicode.org/Public/cldr/latest/keyboards.zip>
|
|
||||||
|
|
||||||
|
|
||||||
Usage
|
|
||||||
=====
|
|
||||||
|
|
||||||
./cldr2json <input file or directory> <output directory>
|
|
||||||
|
|
||||||
example:
|
|
||||||
|
|
||||||
./cldr2json cldr/keyboards/android/ json_layouts/
|
|
||||||
|
|
||||||
|
|
||||||
Keyboard layout mapping
|
|
||||||
=======================
|
|
||||||
|
|
||||||
Unicode CLDR layout identifiers are language codes, while XKB layout
|
|
||||||
identifiers are... something else. The mapping between the two currently uses
|
|
||||||
heuristic based on the layout descriptions, in this order:
|
|
||||||
|
|
||||||
- if the CLDR layout description matches an XKB layout description, chose its
|
|
||||||
XKB identifier
|
|
||||||
- if one word of the CLDR layout description matches an XKB layout
|
|
||||||
description, chose its XKB identifier
|
|
||||||
- if the CLDR layout description matches one word of an XKB layout description,
|
|
||||||
chose its XKB identifier
|
|
||||||
|
|
||||||
That doesn't always work. For instance it fails for "en" language, that should
|
|
||||||
match "us" XKB identifier. For such cases, there is a mapping in
|
|
||||||
LOCALE_TO_XKB_OVERRIDES at the top of the script. If you discover a weird
|
|
||||||
mapping of if you get a "failed to find XKB mapping for <locale>" warning then
|
|
||||||
please consider adding an override there.
|
|
||||||
|
|
@ -1,212 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
#
|
|
||||||
# Copyright 2015 Daiki Ueno <dueno@src.gnome.org>
|
|
||||||
# 2016 Parag Nemade <pnemade@redhat.com>
|
|
||||||
# 2017 Alan <alan@boum.org>
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Lesser General Public License as
|
|
||||||
# published by the Free Software Foundation; either version 2 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful, but
|
|
||||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
# Lesser General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Lesser General Public
|
|
||||||
# License along with this program; if not, see
|
|
||||||
# <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import glob
|
|
||||||
import json
|
|
||||||
import locale
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
import xml.etree.ElementTree
|
|
||||||
|
|
||||||
import gi
|
|
||||||
gi.require_version('GnomeDesktop', '3.0') # NOQA: E402
|
|
||||||
from gi.repository import GnomeDesktop
|
|
||||||
|
|
||||||
ESCAPE_PATTERN = re.compile(r'\\u\{([0-9A-Fa-f]+?)\}')
|
|
||||||
ISO_PATTERN = re.compile(r'[A-E]([0-9]+)')
|
|
||||||
|
|
||||||
LOCALE_TO_XKB_OVERRIDES = {
|
|
||||||
'af': 'za',
|
|
||||||
'en': 'us',
|
|
||||||
'en-GB': 'uk',
|
|
||||||
'es-US': 'latam',
|
|
||||||
'fr-CA': 'ca',
|
|
||||||
'hi': 'in+bolnagri',
|
|
||||||
'ky': 'kg',
|
|
||||||
'nl-BE': 'be',
|
|
||||||
'zu': None
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def parse_single_key(value):
|
|
||||||
def unescape(m):
|
|
||||||
return chr(int(m.group(1), 16))
|
|
||||||
value = ESCAPE_PATTERN.sub(unescape, value)
|
|
||||||
return value
|
|
||||||
|
|
||||||
|
|
||||||
def parse_rows(keymap):
|
|
||||||
unsorted_rows = {}
|
|
||||||
for _map in keymap.iter('map'):
|
|
||||||
value = _map.get('to')
|
|
||||||
key = [parse_single_key(value)]
|
|
||||||
iso = _map.get('iso')
|
|
||||||
if not ISO_PATTERN.match(iso):
|
|
||||||
sys.stderr.write('invalid ISO key name: %s\n' % iso)
|
|
||||||
continue
|
|
||||||
if not iso[0] in unsorted_rows:
|
|
||||||
unsorted_rows[iso[0]] = []
|
|
||||||
unsorted_rows[iso[0]].append((int(iso[1:]), key))
|
|
||||||
# add subkeys
|
|
||||||
longPress = _map.get('longPress')
|
|
||||||
if longPress:
|
|
||||||
for value in longPress.split(' '):
|
|
||||||
subkey = parse_single_key(value)
|
|
||||||
key.append(subkey)
|
|
||||||
|
|
||||||
rows = []
|
|
||||||
for k, v in sorted(list(unsorted_rows.items()),
|
|
||||||
key=lambda x: x[0],
|
|
||||||
reverse=True):
|
|
||||||
row = []
|
|
||||||
for key in sorted(v, key=lambda x: x):
|
|
||||||
row.append(key[1])
|
|
||||||
rows.append(row)
|
|
||||||
|
|
||||||
return rows
|
|
||||||
|
|
||||||
|
|
||||||
def convert_xml(tree):
|
|
||||||
root = {}
|
|
||||||
for xml_keyboard in tree.iter("keyboard"):
|
|
||||||
locale_full = xml_keyboard.get("locale")
|
|
||||||
locale, sep, end = locale_full.partition("-t-")
|
|
||||||
root["locale"] = locale
|
|
||||||
for xml_name in tree.iter("name"):
|
|
||||||
name = xml_name.get("value")
|
|
||||||
root["name"] = name
|
|
||||||
root["levels"] = []
|
|
||||||
# parse levels
|
|
||||||
for index, keymap in enumerate(tree.iter('keyMap')):
|
|
||||||
# FIXME: heuristics here
|
|
||||||
modifiers = keymap.get('modifiers')
|
|
||||||
if not modifiers:
|
|
||||||
mode = 'default'
|
|
||||||
modifiers = ''
|
|
||||||
elif 'shift' in modifiers.split(' '):
|
|
||||||
mode = 'latched'
|
|
||||||
modifiers = 'shift'
|
|
||||||
else:
|
|
||||||
mode = 'locked'
|
|
||||||
level = {}
|
|
||||||
level["level"] = modifiers
|
|
||||||
level["mode"] = mode
|
|
||||||
level["rows"] = parse_rows(keymap)
|
|
||||||
root["levels"].append(level)
|
|
||||||
return root
|
|
||||||
|
|
||||||
|
|
||||||
def locale_to_xkb(locale, name):
|
|
||||||
if locale in sorted(LOCALE_TO_XKB_OVERRIDES.keys()):
|
|
||||||
xkb = LOCALE_TO_XKB_OVERRIDES[locale]
|
|
||||||
logging.debug("override for %s → %s",
|
|
||||||
locale, xkb)
|
|
||||||
if xkb:
|
|
||||||
return xkb
|
|
||||||
else:
|
|
||||||
raise KeyError("layout %s explicitly disabled in overrides"
|
|
||||||
% locale)
|
|
||||||
xkb_names = sorted(name_to_xkb.keys())
|
|
||||||
if name in xkb_names:
|
|
||||||
return name_to_xkb[name]
|
|
||||||
else:
|
|
||||||
logging.debug("name %s failed" % name)
|
|
||||||
for sub_name in name.split(' '):
|
|
||||||
if sub_name in xkb_names:
|
|
||||||
xkb = name_to_xkb[sub_name]
|
|
||||||
logging.debug("dumb mapping failed but match with locale word: "
|
|
||||||
"%s (%s) → %s (%s)",
|
|
||||||
locale, name, xkb, sub_name)
|
|
||||||
return xkb
|
|
||||||
else:
|
|
||||||
logging.debug("sub_name failed")
|
|
||||||
for xkb_name in xkb_names:
|
|
||||||
for xkb_sub_name in xkb_name.split(' '):
|
|
||||||
if xkb_sub_name.strip('()') == name:
|
|
||||||
xkb = name_to_xkb[xkb_name]
|
|
||||||
logging.debug("dumb mapping failed but match with xkb word: "
|
|
||||||
"%s (%s) → %s (%s)",
|
|
||||||
locale, name, xkb, xkb_name)
|
|
||||||
return xkb
|
|
||||||
raise KeyError("failed to find XKB mapping for %s" % locale)
|
|
||||||
|
|
||||||
|
|
||||||
def convert_file(source_file, destination_path):
|
|
||||||
logging.info("Parsing %s", source_file)
|
|
||||||
|
|
||||||
itree = xml.etree.ElementTree.ElementTree()
|
|
||||||
itree.parse(source_file)
|
|
||||||
|
|
||||||
root = convert_xml(itree)
|
|
||||||
|
|
||||||
try:
|
|
||||||
xkb_name = locale_to_xkb(root["locale"], root["name"])
|
|
||||||
except KeyError as e:
|
|
||||||
logging.warning(e)
|
|
||||||
return False
|
|
||||||
destination_file = os.path.join(destination_path, xkb_name + ".json")
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(destination_file, 'x', encoding="utf-8") as dest_fd:
|
|
||||||
json.dump(root, dest_fd, ensure_ascii=False, indent=2, sort_keys=True)
|
|
||||||
except FileExistsError as e:
|
|
||||||
logging.info("File %s exists, not updating", destination_file)
|
|
||||||
return False
|
|
||||||
|
|
||||||
logging.debug("written %s", destination_file)
|
|
||||||
|
|
||||||
|
|
||||||
def load_xkb_mappings():
|
|
||||||
xkb = GnomeDesktop.XkbInfo()
|
|
||||||
layouts = xkb.get_all_layouts()
|
|
||||||
name_to_xkb = {}
|
|
||||||
|
|
||||||
for layout in layouts:
|
|
||||||
name = xkb.get_layout_info(layout).display_name
|
|
||||||
name_to_xkb[name] = layout
|
|
||||||
|
|
||||||
return name_to_xkb
|
|
||||||
|
|
||||||
|
|
||||||
locale.setlocale(locale.LC_ALL, "C")
|
|
||||||
name_to_xkb = load_xkb_mappings()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
if "DEBUG" in os.environ:
|
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
|
||||||
|
|
||||||
if len(sys.argv) < 2:
|
|
||||||
print("supply a CLDR keyboard file")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if len(sys.argv) < 3:
|
|
||||||
print("supply an output directory")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
source = sys.argv[1]
|
|
||||||
destination = sys.argv[2]
|
|
||||||
if os.path.isfile(source):
|
|
||||||
convert_file(source, destination)
|
|
||||||
elif os.path.isdir(source):
|
|
||||||
for path in glob.glob(source + "/*-t-k0-android.xml"):
|
|
||||||
convert_file(path, destination)
|
|
@ -1,138 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<!DOCTYPE keyboard SYSTEM "../dtd/ldmlKeyboard.dtd">
|
|
||||||
<keyboard locale="fr-t-k0-android">
|
|
||||||
<version platform="4.4" number="$Revision: 11914 $"/>
|
|
||||||
<names>
|
|
||||||
<name value="French"/>
|
|
||||||
</names>
|
|
||||||
<keyMap>
|
|
||||||
<map iso="D01" to="a" longPress="à â % æ á ä ã å ā ª"/> <!-- Q -->
|
|
||||||
<map iso="D02" to="z"/> <!-- W -->
|
|
||||||
<map iso="D03" to="e" longPress="é è ê ë % ę ė ē"/>
|
|
||||||
<map iso="D04" to="r"/>
|
|
||||||
<map iso="D05" to="t"/>
|
|
||||||
<map iso="D06" to="y" longPress="% ÿ"/>
|
|
||||||
<map iso="D07" to="u" longPress="ù û % ü ú ū"/>
|
|
||||||
<map iso="D08" to="i" longPress="î % ï ì í į ī"/>
|
|
||||||
<map iso="D09" to="o" longPress="ô œ % ö ò ó õ ø ō º"/>
|
|
||||||
<map iso="D10" to="p"/>
|
|
||||||
<map iso="C01" to="q"/> <!-- A -->
|
|
||||||
<map iso="C02" to="s"/>
|
|
||||||
<map iso="C03" to="d"/>
|
|
||||||
<map iso="C04" to="f"/>
|
|
||||||
<map iso="C05" to="g"/>
|
|
||||||
<map iso="C06" to="h"/>
|
|
||||||
<map iso="C07" to="j"/>
|
|
||||||
<map iso="C08" to="k"/>
|
|
||||||
<map iso="C09" to="l"/>
|
|
||||||
<map iso="C10" to="m"/> <!-- ; -->
|
|
||||||
<map iso="B01" to="w"/> <!-- Z -->
|
|
||||||
<map iso="B02" to="x"/>
|
|
||||||
<map iso="B03" to="c" longPress="ç ć č"/>
|
|
||||||
<map iso="B04" to="v"/>
|
|
||||||
<map iso="B05" to="b"/>
|
|
||||||
<map iso="B06" to="n"/>
|
|
||||||
<map iso="B07" to="'" longPress="‘ ’ ‹ ›"/> <!-- M -->
|
|
||||||
<map iso="A02" to=","/> <!-- (key to left of space) -->
|
|
||||||
<map iso="A03" to=" "/> <!-- space -->
|
|
||||||
<map iso="A04" to="." longPress="# ! , ? - : ' @"/> <!-- (key to right of space) -->
|
|
||||||
</keyMap>
|
|
||||||
<keyMap modifiers="shift caps">
|
|
||||||
<map iso="D01" to="A" longPress="À Â % Æ Á Ä Ã Å Ā ª"/> <!-- Q -->
|
|
||||||
<map iso="D02" to="Z"/> <!-- W -->
|
|
||||||
<map iso="D03" to="E" longPress="É È Ê Ë % Ę Ė Ē"/>
|
|
||||||
<map iso="D04" to="R"/>
|
|
||||||
<map iso="D05" to="T"/>
|
|
||||||
<map iso="D06" to="Y" longPress="% Ÿ"/>
|
|
||||||
<map iso="D07" to="U" longPress="Ù Û % Ü Ú Ū"/>
|
|
||||||
<map iso="D08" to="I" longPress="Î % Ï Ì Í Į Ī"/>
|
|
||||||
<map iso="D09" to="O" longPress="Ô Œ % Ö Ò Ó Õ Ø Ō º"/>
|
|
||||||
<map iso="D10" to="P"/>
|
|
||||||
<map iso="C01" to="Q"/> <!-- A -->
|
|
||||||
<map iso="C02" to="S"/>
|
|
||||||
<map iso="C03" to="D"/>
|
|
||||||
<map iso="C04" to="F"/>
|
|
||||||
<map iso="C05" to="G"/>
|
|
||||||
<map iso="C06" to="H"/>
|
|
||||||
<map iso="C07" to="J"/>
|
|
||||||
<map iso="C08" to="K"/>
|
|
||||||
<map iso="C09" to="L"/>
|
|
||||||
<map iso="C10" to="M"/> <!-- ; -->
|
|
||||||
<map iso="B01" to="W"/> <!-- Z -->
|
|
||||||
<map iso="B02" to="X"/>
|
|
||||||
<map iso="B03" to="C" longPress="Ç Ć Č"/>
|
|
||||||
<map iso="B04" to="V"/>
|
|
||||||
<map iso="B05" to="B"/>
|
|
||||||
<map iso="B06" to="N"/>
|
|
||||||
<map iso="B07" to="'" longPress="‘ ’ ‹ ›"/> <!-- M -->
|
|
||||||
<map iso="A02" to=","/> <!-- (key to left of space) -->
|
|
||||||
<map iso="A03" to=" "/> <!-- space -->
|
|
||||||
<map iso="A04" to="." longPress="# ! , ? - : ' @"/> <!-- (key to right of space) -->
|
|
||||||
</keyMap>
|
|
||||||
<keyMap modifiers="opt">
|
|
||||||
<map iso="D01" to="1" longPress="¹ ½ ⅓ ¼ ⅛"/> <!-- Q base=a -->
|
|
||||||
<map iso="D02" to="2" longPress="² ⅔"/> <!-- W base=z -->
|
|
||||||
<map iso="D03" to="3" longPress="³ ¾ ⅜"/> <!-- E -->
|
|
||||||
<map iso="D04" to="4" longPress="⁴"/> <!-- R -->
|
|
||||||
<map iso="D05" to="5" longPress="⅝"/> <!-- T -->
|
|
||||||
<map iso="D06" to="6"/> <!-- Y -->
|
|
||||||
<map iso="D07" to="7" longPress="⅞"/> <!-- U -->
|
|
||||||
<map iso="D08" to="8"/> <!-- I -->
|
|
||||||
<map iso="D09" to="9"/> <!-- O -->
|
|
||||||
<map iso="D10" to="0" longPress="ⁿ ∅"/> <!-- P -->
|
|
||||||
<map iso="C01" to="@"/> <!-- A base=q -->
|
|
||||||
<map iso="C02" to="#"/> <!-- S -->
|
|
||||||
<map iso="C03" to="€" longPress="¢ £ $ ¥ ₱"/> <!-- D -->
|
|
||||||
<map iso="C04" to="%" longPress="‰"/> <!-- F -->
|
|
||||||
<map iso="C05" to="&"/> <!-- G -->
|
|
||||||
<map iso="C06" to="-" longPress="_ – — ·"/> <!-- H -->
|
|
||||||
<map iso="C07" to="+" longPress="±"/> <!-- J -->
|
|
||||||
<map iso="C08" to="(" longPress="< { ["/> <!-- K -->
|
|
||||||
<map iso="C09" to=")" longPress="> } ]"/> <!-- L -->
|
|
||||||
<map iso="B01" to="*" longPress="† ‡ ★"/> <!-- Z base=w -->
|
|
||||||
<map iso="B02" to="\u{22}" longPress="“ ” « »"/> <!-- X to= " -->
|
|
||||||
<map iso="B03" to="'" longPress="‘ ’ ‹ ›"/> <!-- C -->
|
|
||||||
<map iso="B04" to=":"/> <!-- V -->
|
|
||||||
<map iso="B05" to=";"/> <!-- B -->
|
|
||||||
<map iso="B06" to="!" longPress="¡"/> <!-- N -->
|
|
||||||
<map iso="B07" to="?" longPress="¿"/> <!-- M base=' -->
|
|
||||||
<map iso="A00" to="_"/> <!-- (3 keys to left of space) -->
|
|
||||||
<map iso="A01" to="/"/> <!-- (2 keys to left of space) -->
|
|
||||||
<map iso="A02" to=" "/> <!-- (key to left of space) base=, -->
|
|
||||||
<map iso="A03" to=","/> <!-- space -->
|
|
||||||
<map iso="A04" to="." longPress="…"/> <!-- (key to right of space) -->
|
|
||||||
</keyMap>
|
|
||||||
<keyMap modifiers="opt+shift">
|
|
||||||
<map iso="D01" to="~"/> <!-- Q base=a -->
|
|
||||||
<map iso="D02" to="`"/> <!-- W base=z -->
|
|
||||||
<map iso="D03" to="|"/> <!-- E -->
|
|
||||||
<map iso="D04" to="•" longPress="♪ ♥ ♠ ♦ ♣"/> <!-- R -->
|
|
||||||
<map iso="D05" to="√"/> <!-- T -->
|
|
||||||
<map iso="D06" to="Π" longPress="π"/> <!-- Y -->
|
|
||||||
<map iso="D07" to="÷"/> <!-- U -->
|
|
||||||
<map iso="D08" to="×"/> <!-- I -->
|
|
||||||
<map iso="D09" to="¶" longPress="§"/> <!-- O -->
|
|
||||||
<map iso="D10" to="∆"/> <!-- P -->
|
|
||||||
<map iso="C01" to="£"/> <!-- A base=q -->
|
|
||||||
<map iso="C02" to="¥"/> <!-- S -->
|
|
||||||
<map iso="C03" to="$" longPress="¢"/> <!-- D -->
|
|
||||||
<map iso="C04" to="¢"/> <!-- F -->
|
|
||||||
<map iso="C05" to="^" longPress="↑ ↓ ← →"/> <!-- G -->
|
|
||||||
<map iso="C06" to="°" longPress="′ ″"/> <!-- H -->
|
|
||||||
<map iso="C07" to="=" longPress="≠ ≈ ∞"/> <!-- J -->
|
|
||||||
<map iso="C08" to="{"/> <!-- K -->
|
|
||||||
<map iso="C09" to="}"/> <!-- L -->
|
|
||||||
<map iso="B01" to="\"/> <!-- Z base=w -->
|
|
||||||
<map iso="B02" to="©"/> <!-- X -->
|
|
||||||
<map iso="B03" to="®"/> <!-- C -->
|
|
||||||
<map iso="B04" to="™"/> <!-- V -->
|
|
||||||
<map iso="B05" to="℅"/> <!-- B -->
|
|
||||||
<map iso="B06" to="["/> <!-- N -->
|
|
||||||
<map iso="B07" to="]"/> <!-- M base=' -->
|
|
||||||
<map iso="A00" to="<" longPress="‹ ≤ «"/> <!-- (3 keys to left of space) -->
|
|
||||||
<map iso="A01" to=">" longPress="› ≥ »"/> <!-- (2 keys to left of space) -->
|
|
||||||
<map iso="A02" to=" "/> <!-- (key to left of space) base=, -->
|
|
||||||
<map iso="A03" to=","/> <!-- space -->
|
|
||||||
<map iso="A04" to="." longPress="…"/> <!-- (key to right of space) -->
|
|
||||||
</keyMap>
|
|
||||||
</keyboard>
|
|
@ -1,614 +0,0 @@
|
|||||||
{
|
|
||||||
"levels": [
|
|
||||||
{
|
|
||||||
"level": "",
|
|
||||||
"mode": "default",
|
|
||||||
"rows": [
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"a",
|
|
||||||
"à",
|
|
||||||
"â",
|
|
||||||
"%",
|
|
||||||
"æ",
|
|
||||||
"á",
|
|
||||||
"ä",
|
|
||||||
"ã",
|
|
||||||
"å",
|
|
||||||
"ā",
|
|
||||||
"ª"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"z"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"e",
|
|
||||||
"é",
|
|
||||||
"è",
|
|
||||||
"ê",
|
|
||||||
"ë",
|
|
||||||
"%",
|
|
||||||
"ę",
|
|
||||||
"ė",
|
|
||||||
"ē"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"r"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"t"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"y",
|
|
||||||
"%",
|
|
||||||
"ÿ"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"u",
|
|
||||||
"ù",
|
|
||||||
"û",
|
|
||||||
"%",
|
|
||||||
"ü",
|
|
||||||
"ú",
|
|
||||||
"ū"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"i",
|
|
||||||
"î",
|
|
||||||
"%",
|
|
||||||
"ï",
|
|
||||||
"ì",
|
|
||||||
"í",
|
|
||||||
"į",
|
|
||||||
"ī"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"o",
|
|
||||||
"ô",
|
|
||||||
"œ",
|
|
||||||
"%",
|
|
||||||
"ö",
|
|
||||||
"ò",
|
|
||||||
"ó",
|
|
||||||
"õ",
|
|
||||||
"ø",
|
|
||||||
"ō",
|
|
||||||
"º"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"p"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"q"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"s"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"d"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"f"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"g"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"h"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"j"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"k"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"l"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"m"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"w"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"x"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"c",
|
|
||||||
"ç",
|
|
||||||
"ć",
|
|
||||||
"č"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"v"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"b"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"n"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"'",
|
|
||||||
"‘",
|
|
||||||
"’",
|
|
||||||
"‹",
|
|
||||||
"›"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
","
|
|
||||||
],
|
|
||||||
[
|
|
||||||
" "
|
|
||||||
],
|
|
||||||
[
|
|
||||||
".",
|
|
||||||
"#",
|
|
||||||
"!",
|
|
||||||
",",
|
|
||||||
"?",
|
|
||||||
"-",
|
|
||||||
":",
|
|
||||||
"'",
|
|
||||||
"@"
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "shift",
|
|
||||||
"mode": "latched",
|
|
||||||
"rows": [
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"A",
|
|
||||||
"À",
|
|
||||||
"Â",
|
|
||||||
"%",
|
|
||||||
"Æ",
|
|
||||||
"Á",
|
|
||||||
"Ä",
|
|
||||||
"Ã",
|
|
||||||
"Å",
|
|
||||||
"Ā",
|
|
||||||
"ª"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"Z"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"E",
|
|
||||||
"É",
|
|
||||||
"È",
|
|
||||||
"Ê",
|
|
||||||
"Ë",
|
|
||||||
"%",
|
|
||||||
"Ę",
|
|
||||||
"Ė",
|
|
||||||
"Ē"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"R"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"T"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"Y",
|
|
||||||
"%",
|
|
||||||
"Ÿ"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"U",
|
|
||||||
"Ù",
|
|
||||||
"Û",
|
|
||||||
"%",
|
|
||||||
"Ü",
|
|
||||||
"Ú",
|
|
||||||
"Ū"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"I",
|
|
||||||
"Î",
|
|
||||||
"%",
|
|
||||||
"Ï",
|
|
||||||
"Ì",
|
|
||||||
"Í",
|
|
||||||
"Į",
|
|
||||||
"Ī"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"O",
|
|
||||||
"Ô",
|
|
||||||
"Œ",
|
|
||||||
"%",
|
|
||||||
"Ö",
|
|
||||||
"Ò",
|
|
||||||
"Ó",
|
|
||||||
"Õ",
|
|
||||||
"Ø",
|
|
||||||
"Ō",
|
|
||||||
"º"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"P"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"Q"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"S"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"D"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"F"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"G"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"H"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"J"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"K"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"L"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"M"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"W"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"X"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"C",
|
|
||||||
"Ç",
|
|
||||||
"Ć",
|
|
||||||
"Č"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"V"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"B"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"N"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"'",
|
|
||||||
"‘",
|
|
||||||
"’",
|
|
||||||
"‹",
|
|
||||||
"›"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
","
|
|
||||||
],
|
|
||||||
[
|
|
||||||
" "
|
|
||||||
],
|
|
||||||
[
|
|
||||||
".",
|
|
||||||
"#",
|
|
||||||
"!",
|
|
||||||
",",
|
|
||||||
"?",
|
|
||||||
"-",
|
|
||||||
":",
|
|
||||||
"'",
|
|
||||||
"@"
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "opt",
|
|
||||||
"mode": "locked",
|
|
||||||
"rows": [
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"1",
|
|
||||||
"¹",
|
|
||||||
"½",
|
|
||||||
"⅓",
|
|
||||||
"¼",
|
|
||||||
"⅛"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"2",
|
|
||||||
"²",
|
|
||||||
"⅔"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"3",
|
|
||||||
"³",
|
|
||||||
"¾",
|
|
||||||
"⅜"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"4",
|
|
||||||
"⁴"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"5",
|
|
||||||
"⅝"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"6"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"7",
|
|
||||||
"⅞"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"8"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"9"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"0",
|
|
||||||
"ⁿ",
|
|
||||||
"∅"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"@"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"#"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"€",
|
|
||||||
"¢",
|
|
||||||
"£",
|
|
||||||
"$",
|
|
||||||
"¥",
|
|
||||||
"₱"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"%",
|
|
||||||
"‰"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"&"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"-",
|
|
||||||
"_",
|
|
||||||
"–",
|
|
||||||
"—",
|
|
||||||
"·"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"+",
|
|
||||||
"±"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"(",
|
|
||||||
"<",
|
|
||||||
"{",
|
|
||||||
"["
|
|
||||||
],
|
|
||||||
[
|
|
||||||
")",
|
|
||||||
">",
|
|
||||||
"}",
|
|
||||||
"]"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"*",
|
|
||||||
"†",
|
|
||||||
"‡",
|
|
||||||
"★"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"\"",
|
|
||||||
"“",
|
|
||||||
"”",
|
|
||||||
"«",
|
|
||||||
"»"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"'",
|
|
||||||
"‘",
|
|
||||||
"’",
|
|
||||||
"‹",
|
|
||||||
"›"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
":"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
";"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"!",
|
|
||||||
"¡"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"?",
|
|
||||||
"¿"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"_"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
" "
|
|
||||||
],
|
|
||||||
[
|
|
||||||
","
|
|
||||||
],
|
|
||||||
[
|
|
||||||
".",
|
|
||||||
"…"
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "opt+shift",
|
|
||||||
"mode": "locked",
|
|
||||||
"rows": [
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"~"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"`"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"|"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"•",
|
|
||||||
"♪",
|
|
||||||
"♥",
|
|
||||||
"♠",
|
|
||||||
"♦",
|
|
||||||
"♣"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"√"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"Π",
|
|
||||||
"π"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"÷"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"×"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"¶",
|
|
||||||
"§"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"∆"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"£"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"¥"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"$",
|
|
||||||
"¢"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"¢"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"^",
|
|
||||||
"↑",
|
|
||||||
"↓",
|
|
||||||
"←",
|
|
||||||
"→"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"°",
|
|
||||||
"′",
|
|
||||||
"″"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"=",
|
|
||||||
"≠",
|
|
||||||
"≈",
|
|
||||||
"∞"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"{"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"}"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"\\"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"©"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"®"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"™"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"℅"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"["
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"]"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"<",
|
|
||||||
"‹",
|
|
||||||
"≤",
|
|
||||||
"«"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
">",
|
|
||||||
"›",
|
|
||||||
"≥",
|
|
||||||
"»"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
" "
|
|
||||||
],
|
|
||||||
[
|
|
||||||
","
|
|
||||||
],
|
|
||||||
[
|
|
||||||
".",
|
|
||||||
"…"
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"locale": "fr",
|
|
||||||
"name": "French"
|
|
||||||
}
|
|
@ -1,212 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
import json
|
|
||||||
import tempfile
|
|
||||||
import unittest
|
|
||||||
import xml.etree.ElementTree
|
|
||||||
|
|
||||||
import cldr2json
|
|
||||||
|
|
||||||
|
|
||||||
class TestParseSingleKey(unittest.TestCase):
|
|
||||||
def test_ascii(self):
|
|
||||||
self.assertEqual(cldr2json.parse_single_key("a"), "a")
|
|
||||||
|
|
||||||
def test_nonascii(self):
|
|
||||||
self.assertEqual(cldr2json.parse_single_key("Æ"), "Æ")
|
|
||||||
|
|
||||||
def test_twochars(self):
|
|
||||||
self.assertEqual(cldr2json.parse_single_key("ԵՒ"), "ԵՒ")
|
|
||||||
|
|
||||||
def test_decode(self):
|
|
||||||
self.assertEqual(cldr2json.parse_single_key("\\u{200D}"), "\u200d")
|
|
||||||
|
|
||||||
def test_decode_threechars(self):
|
|
||||||
self.assertEqual(cldr2json.parse_single_key("ज\\u{94D}ञ"), "ज\u094Dञ")
|
|
||||||
|
|
||||||
|
|
||||||
class TestParseRow(unittest.TestCase):
|
|
||||||
def test_parse_row(self):
|
|
||||||
xml_string = """
|
|
||||||
<keyMap>
|
|
||||||
<map iso="D01" to="a" longPress="à â % æ á ä ã å ā ª"/> <!-- Q -->
|
|
||||||
<map iso="D02" to="z"/> <!-- W -->
|
|
||||||
<map iso="D03" to="e" longPress="é è ê ë % ę ė ē"/>
|
|
||||||
<map iso="D04" to="r"/>
|
|
||||||
<map iso="D05" to="t"/>
|
|
||||||
<map iso="D06" to="y" longPress="% ÿ"/>
|
|
||||||
<map iso="D07" to="u" longPress="ù û % ü ú ū"/>
|
|
||||||
<map iso="D08" to="i" longPress="î % ï ì í į ī"/>
|
|
||||||
<map iso="D09" to="o" longPress="ô œ % ö ò ó õ ø ō º"/>
|
|
||||||
<map iso="D10" to="p"/>
|
|
||||||
<map iso="C01" to="q"/> <!-- A -->
|
|
||||||
<map iso="C02" to="s"/>
|
|
||||||
<map iso="C03" to="d"/>
|
|
||||||
<map iso="C04" to="f"/>
|
|
||||||
<map iso="C05" to="g"/>
|
|
||||||
<map iso="C06" to="h"/>
|
|
||||||
<map iso="C07" to="j"/>
|
|
||||||
<map iso="C08" to="k"/>
|
|
||||||
<map iso="C09" to="l"/>
|
|
||||||
<map iso="C10" to="m"/> <!-- ; -->
|
|
||||||
<map iso="B01" to="w"/> <!-- Z -->
|
|
||||||
<map iso="B02" to="x"/>
|
|
||||||
<map iso="B03" to="c" longPress="ç ć č"/>
|
|
||||||
<map iso="B04" to="v"/>
|
|
||||||
<map iso="B05" to="b"/>
|
|
||||||
<map iso="B06" to="n"/>
|
|
||||||
<map iso="B07" to="'" longPress="‘ ’ ‹ ›"/> <!-- M -->
|
|
||||||
<map iso="A02" to=","/> <!-- (key to left of space) -->
|
|
||||||
<map iso="A03" to=" "/> <!-- space -->
|
|
||||||
<map iso="A04" to="." longPress="# ! , ? - : ' @"/> <!-- (key to right of space) -->
|
|
||||||
</keyMap>
|
|
||||||
"""
|
|
||||||
xml_tree = xml.etree.ElementTree.XML(xml_string)
|
|
||||||
json = [[
|
|
||||||
['a', 'à', 'â', '%', 'æ', 'á', 'ä', 'ã', 'å', 'ā', 'ª'],
|
|
||||||
['z'],
|
|
||||||
['e', 'é', 'è', 'ê', 'ë', '%', 'ę', 'ė', 'ē'],
|
|
||||||
['r'],
|
|
||||||
['t'],
|
|
||||||
['y', '%', 'ÿ'],
|
|
||||||
['u', 'ù', 'û', '%', 'ü', 'ú', 'ū'],
|
|
||||||
['i', 'î', '%', 'ï', 'ì', 'í', 'į', 'ī'],
|
|
||||||
['o', 'ô', 'œ', '%', 'ö', 'ò', 'ó', 'õ', 'ø', 'ō', 'º'],
|
|
||||||
['p']
|
|
||||||
], [
|
|
||||||
['q'],
|
|
||||||
['s'],
|
|
||||||
['d'],
|
|
||||||
['f'],
|
|
||||||
['g'],
|
|
||||||
['h'],
|
|
||||||
['j'],
|
|
||||||
['k'],
|
|
||||||
['l'],
|
|
||||||
['m']
|
|
||||||
], [
|
|
||||||
['w'],
|
|
||||||
['x'],
|
|
||||||
['c', 'ç', 'ć', 'č'],
|
|
||||||
['v'],
|
|
||||||
['b'],
|
|
||||||
['n'],
|
|
||||||
["'", '‘', '’', '‹', '›']
|
|
||||||
], [
|
|
||||||
[','],
|
|
||||||
[' '],
|
|
||||||
['.', '#', '!', ',', '?', '-', ':', "'", '@']
|
|
||||||
]]
|
|
||||||
self.assertEqual(cldr2json.parse_rows(xml_tree), json)
|
|
||||||
|
|
||||||
|
|
||||||
class TestConvertXml(unittest.TestCase):
|
|
||||||
def test_convert_xml(self):
|
|
||||||
xml_string = """<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<!DOCTYPE keyboard SYSTEM "../dtd/ldmlKeyboard.dtd">
|
|
||||||
<keyboard locale="fr-t-k0-android">
|
|
||||||
<version platform="4.4" number="$Revision: 11914 $"/>
|
|
||||||
<names>
|
|
||||||
<name value="French"/>
|
|
||||||
</names>
|
|
||||||
<keyMap>
|
|
||||||
<map iso="D01" to="a" longPress="à â % æ á ä ã å ā ª"/> <!-- Q -->
|
|
||||||
</keyMap>
|
|
||||||
<keyMap modifiers="shift caps">
|
|
||||||
<map iso="D01" to="A" longPress="À Â % Æ Á Ä Ã Å Ā ª"/> <!-- Q -->
|
|
||||||
</keyMap>
|
|
||||||
<keyMap modifiers="opt">
|
|
||||||
<map iso="D01" to="1" longPress="¹ ½ ⅓ ¼ ⅛"/> <!-- Q base=a -->
|
|
||||||
</keyMap>
|
|
||||||
<keyMap modifiers="opt+shift">
|
|
||||||
<map iso="D01" to="~"/> <!-- Q base=a -->
|
|
||||||
</keyMap>
|
|
||||||
</keyboard>
|
|
||||||
"""
|
|
||||||
xml_tree = xml.etree.ElementTree.XML(xml_string)
|
|
||||||
json = {
|
|
||||||
"locale": "fr",
|
|
||||||
"name": "French",
|
|
||||||
"levels": [
|
|
||||||
{
|
|
||||||
"level": "",
|
|
||||||
"mode": "default",
|
|
||||||
"rows": [
|
|
||||||
[
|
|
||||||
['a', 'à', 'â', '%', 'æ', 'á', 'ä', 'ã', 'å', 'ā', 'ª'],
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "shift",
|
|
||||||
"mode": "latched",
|
|
||||||
"rows": [
|
|
||||||
[
|
|
||||||
['A', 'À', 'Â', '%', 'Æ', 'Á', 'Ä', 'Ã', 'Å', 'Ā', 'ª'],
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "opt",
|
|
||||||
"mode": "locked",
|
|
||||||
"rows": [
|
|
||||||
[
|
|
||||||
["1", "¹", "½", "⅓", "¼", "⅛"],
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"level": "opt+shift",
|
|
||||||
"mode": "locked",
|
|
||||||
"rows": [
|
|
||||||
[
|
|
||||||
["~"],
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
self.assertEqual(cldr2json.convert_xml(xml_tree), json)
|
|
||||||
|
|
||||||
|
|
||||||
class TestConvertFile(unittest.TestCase):
|
|
||||||
def test_fr(self):
|
|
||||||
outdir = tempfile.mkdtemp()
|
|
||||||
cldr2json.convert_file("test/data/fr-t-k0-android.xml", outdir)
|
|
||||||
with open("test/data/fr.json", encoding="utf-8") as expected_json_fd:
|
|
||||||
expected_json = json.load(expected_json_fd)
|
|
||||||
with open(outdir + "/fr.json", encoding="utf-8") as actual_json_fd:
|
|
||||||
actual_json = json.load(actual_json_fd)
|
|
||||||
self.assertEqual(expected_json, actual_json)
|
|
||||||
|
|
||||||
|
|
||||||
class TestLocaleToXKB(unittest.TestCase):
|
|
||||||
def test_simple(self):
|
|
||||||
self.assertEqual(cldr2json.locale_to_xkb("fr", "French"),
|
|
||||||
"fr")
|
|
||||||
|
|
||||||
def test_fallback(self):
|
|
||||||
self.assertEqual(cldr2json.locale_to_xkb("nb", "Norwegian Bokmål"),
|
|
||||||
"no")
|
|
||||||
|
|
||||||
def test_fallback2(self):
|
|
||||||
self.assertEqual(cldr2json.locale_to_xkb("km", "Khmer"),
|
|
||||||
"kh")
|
|
||||||
|
|
||||||
def test_override(self):
|
|
||||||
self.assertEqual(cldr2json.locale_to_xkb("en-GB",
|
|
||||||
"English Great Britain"),
|
|
||||||
"uk")
|
|
||||||
|
|
||||||
|
|
||||||
class LoadXKBMapplings(unittest.TestCase):
|
|
||||||
def test_dictionnary(self):
|
|
||||||
self.assertIsInstance(cldr2json.load_xkb_mappings(), dict)
|
|
||||||
|
|
||||||
def test_mapping(self):
|
|
||||||
mapping = cldr2json.load_xkb_mappings()
|
|
||||||
self.assertEqual(mapping["French"], "fr")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
unittest.main()
|
|
@ -1,10 +0,0 @@
|
|||||||
dbus_interfaces = [
|
|
||||||
'org.gnome.Shell.Extensions.xml',
|
|
||||||
'org.gnome.Shell.Introspect.xml',
|
|
||||||
'org.gnome.Shell.PadOsd.xml',
|
|
||||||
'org.gnome.Shell.Screencast.xml',
|
|
||||||
'org.gnome.Shell.Screenshot.xml',
|
|
||||||
'org.gnome.ShellSearchProvider.xml',
|
|
||||||
'org.gnome.ShellSearchProvider2.xml'
|
|
||||||
]
|
|
||||||
install_data(dbus_interfaces, install_dir: ifacedir)
|
|
@ -1,76 +0,0 @@
|
|||||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
|
||||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
|
||||||
|
|
||||||
<node>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
net.hadess.PowerProfiles:
|
|
||||||
@short_description: Power Profiles daemon
|
|
||||||
|
|
||||||
The power-profiles-daemon API is meant to be used by parts of the OS or
|
|
||||||
desktop environment to switch system power profiles based on user choice,
|
|
||||||
or user intent.
|
|
||||||
|
|
||||||
OS components would typically use the "Profiles" property to construct
|
|
||||||
their UI (2 or 3 profiles available), and monitor the "ActiveProfile"
|
|
||||||
and the "PerformanceInhibited" properties to update that UI. The UI
|
|
||||||
would try to set the "ActiveProfile" property if the user selected
|
|
||||||
a different one.
|
|
||||||
|
|
||||||
Note that the reason why the project exists and how it is different from
|
|
||||||
existing projects is explained <ulink href=" https://gitlab.freedesktop.org/hadess/power-profiles-daemon/-/blob/master/README.md">
|
|
||||||
in the project's README file</ulink>.
|
|
||||||
|
|
||||||
The object path will be "/net/hadess/PowerProfiles".
|
|
||||||
-->
|
|
||||||
<interface name="net.hadess.PowerProfiles">
|
|
||||||
<!--
|
|
||||||
ActiveProfile:
|
|
||||||
|
|
||||||
The type of the currently active profile. It might change automatically
|
|
||||||
if the "performance" profile was selected but it got inhibited, in which
|
|
||||||
case the "PerformanceInhibited" property will reflect the reason.
|
|
||||||
-->
|
|
||||||
<property name="ActiveProfile" type="s" access="readwrite"/>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
PerformanceInhibited:
|
|
||||||
|
|
||||||
This will be set if the performance power profile is unavailable, with
|
|
||||||
the value being used to identify the reason for unavailability. As new
|
|
||||||
reasons can be added, it is recommended that front-ends show a generic
|
|
||||||
reason if they do not recognise the value. Possible values are:
|
|
||||||
- "lap-detected" (the computer is sitting on the user's lap)
|
|
||||||
- "high-operating-temperature" (the computer is close to overheating)
|
|
||||||
- "" (the empty string, if not inhibited)
|
|
||||||
-->
|
|
||||||
<property name="PerformanceInhibited" type="s" access="read"/>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Profiles:
|
|
||||||
|
|
||||||
An array of key-pair values representing each profile. The key named
|
|
||||||
"Driver" (s) identifies the power-profiles-daemon backend code used to
|
|
||||||
implement the profile.
|
|
||||||
|
|
||||||
The key named "Profile" (s) will be one of:
|
|
||||||
- "power-saver" (battery saving profile)
|
|
||||||
- "balanced" (the default profile)
|
|
||||||
- "performance" (a profile that does not care about noise or battery consumption)
|
|
||||||
|
|
||||||
Only one of each type of profile will be listed, with the daemon choosing the
|
|
||||||
more appropriate "driver" for each profile type.
|
|
||||||
-->
|
|
||||||
<property name="Profiles" type="aa{sv}" access="read"/>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Actions:
|
|
||||||
|
|
||||||
An array of strings listing each one of the "actions" implemented in
|
|
||||||
the running daemon. This is used by API users to figure out whether
|
|
||||||
particular functionality is available in a version of the daemon.
|
|
||||||
-->
|
|
||||||
<property name="Actions" type="as" access="read"/>
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,5 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="net.hadess.SensorProxy">
|
|
||||||
<property name="HasAccelerometer" type="b" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,46 +0,0 @@
|
|||||||
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
|
||||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
|
||||||
|
|
||||||
<node>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
net.hadess.SwitcherooControl:
|
|
||||||
@short_description: D-Bus proxy to access dual-GPU controls.
|
|
||||||
|
|
||||||
After checking the availability of two switchable GPUs in the machine,
|
|
||||||
check the value of net.hadess.SwitcherooControl.HasDualGpu to see
|
|
||||||
if running applications on the discrete GPU should be offered.
|
|
||||||
|
|
||||||
The object path will be "/net/hadess/SwitcherooControl".
|
|
||||||
-->
|
|
||||||
<interface name="net.hadess.SwitcherooControl">
|
|
||||||
<!--
|
|
||||||
HasDualGpu:
|
|
||||||
|
|
||||||
Whether two switchable GPUs are present on the system. This property
|
|
||||||
has been obsoleted in favour of the "NumGPUs" property.
|
|
||||||
-->
|
|
||||||
<property name="HasDualGpu" type="b" access="read"/>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
NumGPUs:
|
|
||||||
|
|
||||||
The number of GPUs available on the system. Note that while having no
|
|
||||||
GPUs is unlikely, consumers of this API should probably not throw errors
|
|
||||||
if that were the case.
|
|
||||||
-->
|
|
||||||
<property name="NumGPUs" type="u" access="read"/>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
GPUs:
|
|
||||||
|
|
||||||
An array of key-pair values representing each GPU. The key named "Name" (s)
|
|
||||||
will contain a user-facing name for the GPU, the "Environment" (as) key will
|
|
||||||
contain an array of even number of strings, each being an environment
|
|
||||||
variable to set to use the GPU, followed by its value, the "Default" (b) key
|
|
||||||
will tag the default (usually integrated) GPU.
|
|
||||||
-->
|
|
||||||
<property name="GPUs" type="aa{sv}" access="read"/>
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,78 +0,0 @@
|
|||||||
<!DOCTYPE node PUBLIC
|
|
||||||
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
|
||||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
|
||||||
|
|
||||||
<node>
|
|
||||||
<interface name="net.reactivated.Fprint.Device">
|
|
||||||
<method name="ListEnrolledFingers">
|
|
||||||
<arg type="s" name="username" direction="in">
|
|
||||||
</arg>
|
|
||||||
<arg type="as" name="enrolled_fingers" direction="out">
|
|
||||||
</arg>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<method name="DeleteEnrolledFingers">
|
|
||||||
<arg type="s" name="username" direction="in">
|
|
||||||
</arg>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<method name="DeleteEnrolledFingers2">
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<method name="Claim">
|
|
||||||
<arg type="s" name="username" direction="in">
|
|
||||||
</arg>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<method name="Release">
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<method name="VerifyStart">
|
|
||||||
<arg type="s" name="finger_name" direction="in">
|
|
||||||
</arg>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<method name="VerifyStop">
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<signal name="VerifyFingerSelected">
|
|
||||||
<arg type="s" name="finger_name">
|
|
||||||
</arg>
|
|
||||||
</signal>
|
|
||||||
|
|
||||||
<signal name="VerifyStatus">
|
|
||||||
<arg type="s" name="result">
|
|
||||||
</arg>
|
|
||||||
|
|
||||||
<arg type="b" name="done">
|
|
||||||
</arg>
|
|
||||||
|
|
||||||
</signal>
|
|
||||||
|
|
||||||
<method name="EnrollStart">
|
|
||||||
<arg type="s" name="finger_name" direction="in">
|
|
||||||
</arg>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<method name="EnrollStop">
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<signal name="EnrollStatus">
|
|
||||||
<arg type="s" name="result">
|
|
||||||
</arg>
|
|
||||||
|
|
||||||
<arg type="b" name="done">
|
|
||||||
</arg>
|
|
||||||
</signal>
|
|
||||||
|
|
||||||
<property name="name" type="s" access="read">
|
|
||||||
</property>
|
|
||||||
|
|
||||||
<property name="num-enroll-stages" type="i" access="read">
|
|
||||||
</property>
|
|
||||||
|
|
||||||
<property name="scan-type" type="s" access="read">
|
|
||||||
</property>
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,18 +0,0 @@
|
|||||||
<!DOCTYPE node PUBLIC
|
|
||||||
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
|
||||||
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
|
||||||
<node>
|
|
||||||
<interface name="net.reactivated.Fprint.Manager">
|
|
||||||
|
|
||||||
<method name="GetDevices">
|
|
||||||
<arg type="ao" name="devices" direction="out">
|
|
||||||
</arg>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<method name="GetDefaultDevice">
|
|
||||||
<arg type="o" name="device" direction="out">
|
|
||||||
</arg>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,32 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.Gtk.MountOperationHandler">
|
|
||||||
<method name="AskPassword">
|
|
||||||
<arg type="s" direction="in" name="object_id"/>
|
|
||||||
<arg type="s" direction="in" name="message"/>
|
|
||||||
<arg type="s" direction="in" name="icon_name"/>
|
|
||||||
<arg type="s" direction="in" name="default_user"/>
|
|
||||||
<arg type="s" direction="in" name="default_domain"/>
|
|
||||||
<arg type="u" direction="in" name="flags"/>
|
|
||||||
<arg type="u" direction="out" name="response"/>
|
|
||||||
<arg type="a{sv}" direction="out" name="response_details"/>
|
|
||||||
</method>
|
|
||||||
<method name="AskQuestion">
|
|
||||||
<arg type="s" direction="in" name="object_id"/>
|
|
||||||
<arg type="s" direction="in" name="message"/>
|
|
||||||
<arg type="s" direction="in" name="icon_name"/>
|
|
||||||
<arg type="as" direction="in" name="choices"/>
|
|
||||||
<arg type="u" direction="out" name="response"/>
|
|
||||||
<arg type="a{sv}" direction="out" name="response_details"/>
|
|
||||||
</method>
|
|
||||||
<method name="ShowProcesses">
|
|
||||||
<arg type="s" direction="in" name="object_id"/>
|
|
||||||
<arg type="s" direction="in" name="message"/>
|
|
||||||
<arg type="s" direction="in" name="icon_name"/>
|
|
||||||
<arg type="ai" direction="in" name="application_pids"/>
|
|
||||||
<arg type="as" direction="in" name="choices"/>
|
|
||||||
<arg type="u" direction="out" name="response"/>
|
|
||||||
<arg type="a{sv}" direction="out" name="response_details"/>
|
|
||||||
</method>
|
|
||||||
<method name="Close"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,12 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.Application">
|
|
||||||
<method name="ActivateAction">
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="av" direction="in"/>
|
|
||||||
<arg type="a{sv}" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<method name="Activate">
|
|
||||||
<arg type="a{sv}" direction="in"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,16 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.DBus">
|
|
||||||
<method name="ListNames">
|
|
||||||
<arg type="as" direction="out" name="names"/>
|
|
||||||
</method>
|
|
||||||
<method name="GetConnectionUnixProcessID">
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="u" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<signal name="NameOwnerChanged">
|
|
||||||
<arg type="s" direction="out" name="name"/>
|
|
||||||
<arg type="s" direction="out" name="oldOwner"/>
|
|
||||||
<arg type="s" direction="out" name="newOwner"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,11 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.GeoClue2.Agent">
|
|
||||||
<property name="MaxAccuracyLevel" type="u" access="read"/>
|
|
||||||
<method name="AuthorizeApp">
|
|
||||||
<arg name="desktop_id" type="s" direction="in"/>
|
|
||||||
<arg name="req_accuracy_level" type="u" direction="in"/>
|
|
||||||
<arg name="authorized" type="b" direction="out"/>
|
|
||||||
<arg name="allowed_accuracy_level" type="u" direction="out"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,9 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.GeoClue2.Manager">
|
|
||||||
<property name="InUse" type="b" access="read"/>
|
|
||||||
<property name="AvailableAccuracyLevel" type="u" access="read"/>
|
|
||||||
<method name="AddAgent">
|
|
||||||
<arg name="id" type="s" direction="in"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,13 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.ModemManager.Modem.Cdma">
|
|
||||||
<method name="GetSignalQuality">
|
|
||||||
<arg type="u" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="GetServingSystem">
|
|
||||||
<arg type="(usu)" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<signal name="SignalQuality">
|
|
||||||
<arg type="u" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,19 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.ModemManager.Modem.Gsm.Network">
|
|
||||||
<method name="GetRegistrationInfo">
|
|
||||||
<arg type="(uss)" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="GetSignalQuality">
|
|
||||||
<arg type="u" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<property name="AccessTechnology" type="u" access="read"/>
|
|
||||||
<signal name="SignalQuality">
|
|
||||||
<arg type="u" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
<signal name="RegistrationInfo">
|
|
||||||
<arg type="u" direction="out"/>
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,6 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.ModemManager1.Modem.Modem3gpp">
|
|
||||||
<property name="OperatorCode" type="s" access="read"/>
|
|
||||||
<property name="OperatorName" type="s" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,5 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.ModemManager1.Modem.ModemCdma">
|
|
||||||
<property name="Sid" type="u" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,5 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.ModemManager1.Modem">
|
|
||||||
<property name="SignalQuality" type="(ub)" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,35 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.Notifications">
|
|
||||||
<method name="Notify">
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="u" direction="in"/>
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="as" direction="in"/>
|
|
||||||
<arg type="a{sv}" direction="in"/>
|
|
||||||
<arg type="i" direction="in"/>
|
|
||||||
<arg type="u" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="CloseNotification">
|
|
||||||
<arg type="u" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<method name="GetCapabilities">
|
|
||||||
<arg type="as" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="GetServerInformation">
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<signal name="NotificationClosed">
|
|
||||||
<arg type="u"/>
|
|
||||||
<arg type="u"/>
|
|
||||||
</signal>
|
|
||||||
<signal name="ActionInvoked">
|
|
||||||
<arg type="u"/>
|
|
||||||
<arg type="s"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,13 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.PackageKit.Offline">
|
|
||||||
<property name="UpdatePrepared" type="b" access="read"/>
|
|
||||||
<property name="UpdateTriggered" type="b" access="read"/>
|
|
||||||
<property name="UpgradePrepared" type="b" access="read"/>
|
|
||||||
<property name="UpgradeTriggered" type="b" access="read"/>
|
|
||||||
<property name="PreparedUpgrade" type="a{sv}" access="read"/>
|
|
||||||
<method name="Trigger">
|
|
||||||
<arg type="s" name="action" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<method name="Cancel"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,11 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.UPower.Device">
|
|
||||||
<property name="Type" type="u" access="read"/>
|
|
||||||
<property name="State" type="u" access="read"/>
|
|
||||||
<property name="Percentage" type="d" access="read"/>
|
|
||||||
<property name="TimeToEmpty" type="x" access="read"/>
|
|
||||||
<property name="TimeToFull" type="x" access="read"/>
|
|
||||||
<property name="IsPresent" type="b" access="read"/>
|
|
||||||
<property name="IconName" type="s" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,5 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.UPower">
|
|
||||||
<property name="OnBattery" type="b" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,18 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.bolt1.Device">
|
|
||||||
<property name="Uid" type="s" access="read"></property>
|
|
||||||
<property name="Name" type="s" access="read"></property>
|
|
||||||
<property name="Vendor" type="s" access="read"></property>
|
|
||||||
<property name="Type" type="s" access="read"></property>
|
|
||||||
<property name="Status" type="s" access="read"></property>
|
|
||||||
<property name="Parent" type="s" access="read"></property>
|
|
||||||
<property name="SysfsPath" type="s" access="read"></property>
|
|
||||||
<property name="Stored" type="b" access="read"></property>
|
|
||||||
<property name="Policy" type="s" access="read"></property>
|
|
||||||
<property name="Key" type="s" access="read"></property>
|
|
||||||
<property name="Label" type="s" access="read"></property>
|
|
||||||
<property name="ConnectTime" type="t" access="read"></property>
|
|
||||||
<property name="AuthorizeTime" type="t" access="read"></property>
|
|
||||||
<property name="StoreTime" type="t" access="read"></property>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,15 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.bolt1.Manager">
|
|
||||||
<property name="Probing" type="b" access="read"></property>
|
|
||||||
<property name="AuthMode" type="s" access="readwrite"></property>
|
|
||||||
<method name="EnrollDevice">
|
|
||||||
<arg type="s" name="uid" direction="in"/>
|
|
||||||
<arg type="s" name="policy" direction="in"/>
|
|
||||||
<arg type="s" name="flags" direction="in"/>
|
|
||||||
<arg name="device" direction="out" type="o"/>
|
|
||||||
</method>
|
|
||||||
<signal name="DeviceAdded">
|
|
||||||
<arg name="device" type="o"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,15 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.impl.portal.Access">
|
|
||||||
<method name="AccessDialog">
|
|
||||||
<arg type="o" name="handle" direction="in"/>
|
|
||||||
<arg type="s" name="app_id" direction="in"/>
|
|
||||||
<arg type="s" name="parent_window" direction="in"/>
|
|
||||||
<arg type="s" name="title" direction="in"/>
|
|
||||||
<arg type="s" name="subtitle" direction="in"/>
|
|
||||||
<arg type="s" name="body" direction="in"/>
|
|
||||||
<arg type="a{sv}" name="options" direction="in"/>
|
|
||||||
<arg type="u" name="response" direction="out"/>
|
|
||||||
<arg type="a{sv}" name="results" direction="out"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,24 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.impl.portal.PermissionStore">
|
|
||||||
<method name="Lookup">
|
|
||||||
<arg name="table" type="s" direction="in"/>
|
|
||||||
<arg name="id" type="s" direction="in"/>
|
|
||||||
<arg name="permissions" type="a{sas}" direction="out"/>
|
|
||||||
<arg name="data" type="v" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="Set">
|
|
||||||
<arg name="table" type="s" direction="in"/>
|
|
||||||
<arg name="create" type="b" direction="in"/>
|
|
||||||
<arg name="id" type="s" direction="in"/>
|
|
||||||
<arg name="app_permissions" type="a{sas}" direction="in"/>
|
|
||||||
<arg name="data" type="v" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<signal name="Changed">
|
|
||||||
<arg name="table" type="s" direction="out"/>
|
|
||||||
<arg name="id" type="s" direction="out"/>
|
|
||||||
<arg name="deleted" type="b" direction="out"/>
|
|
||||||
<arg name="data" type="v" direction="out"/>
|
|
||||||
<arg name="permissions" type="a{sas}" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,5 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.impl.portal.Request">
|
|
||||||
<method name="Close"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,33 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.login1.Manager">
|
|
||||||
<method name="Suspend">
|
|
||||||
<arg type="b" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<method name="CanSuspend">
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="Inhibit">
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="h" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="GetSession">
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="o" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="ListSessions">
|
|
||||||
<arg name="sessions" type="a(susso)" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="CanRebootToBootLoaderMenu">
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="SetRebootToBootLoaderMenu">
|
|
||||||
<arg type="t" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<signal name="PrepareForSleep">
|
|
||||||
<arg type="b" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,15 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.login1.Session">
|
|
||||||
<signal name="Lock"/>
|
|
||||||
<signal name="Unlock"/>
|
|
||||||
<property name="Active" type="b" access="read"/>
|
|
||||||
<property name="Class" type="s" access="read"/>
|
|
||||||
<property name="Id" type="s" access="read"/>
|
|
||||||
<property name="Remote" type="b" access="read"/>
|
|
||||||
<property name="Type" type="s" access="read"/>
|
|
||||||
<property name="State" type="s" access="read"/>
|
|
||||||
<method name="SetLockedHint">
|
|
||||||
<arg type="b" direction="in"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,6 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.login1.User">
|
|
||||||
<property name="Display" type="(so)" access="read"/>
|
|
||||||
<property name="Sessions" type="a(so)" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,13 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.realmd.Provider">
|
|
||||||
<property name="Name" type="s" access="read"/>
|
|
||||||
<property name="Version" type="s" access="read"/>
|
|
||||||
<property name="Realms" type="ao" access="read"/>
|
|
||||||
<method name="Discover">
|
|
||||||
<arg name="string" type="s" direction="in"/>
|
|
||||||
<arg name="options" type="a{sv}" direction="in"/>
|
|
||||||
<arg name="relevance" type="i" direction="out"/>
|
|
||||||
<arg name="realm" type="ao" direction="out"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,20 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.realmd.Realm">
|
|
||||||
<property name="Name" type="s" access="read"/>
|
|
||||||
<property name="Configured" type="s" access="read"/>
|
|
||||||
<property name="Details" type="a(ss)" access="read"/>
|
|
||||||
<property name="LoginFormats" type="as" access="read"/>
|
|
||||||
<property name="LoginPolicy" type="s" access="read"/>
|
|
||||||
<property name="PermittedLogins" type="as" access="read"/>
|
|
||||||
<property name="SupportedInterfaces" type="as" access="read"/>
|
|
||||||
<method name="ChangeLoginPolicy">
|
|
||||||
<arg name="login_policy" type="s" direction="in"/>
|
|
||||||
<arg name="permitted_add" type="as" direction="in"/>
|
|
||||||
<arg name="permitted_remove" type="as" direction="in"/>
|
|
||||||
<arg name="options" type="a{sv}" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<method name="Deconfigure">
|
|
||||||
<arg name="options" type="a{sv}" direction="in"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,15 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.freedesktop.realmd.Service">
|
|
||||||
<method name="Cancel">
|
|
||||||
<arg name="operation" type="s" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<method name="Release"/>
|
|
||||||
<method name="SetLocale">
|
|
||||||
<arg name="locale" type="s" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<signal name="Diagnostics">
|
|
||||||
<arg name="data" type="s"/>
|
|
||||||
<arg name="operation" type="s"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,191 +0,0 @@
|
|||||||
<!DOCTYPE node PUBLIC
|
|
||||||
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
|
|
||||||
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
|
|
||||||
<node>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
org.gnome.Mutter.ScreenCast:
|
|
||||||
@short_description: Screen cast interface
|
|
||||||
|
|
||||||
This API is private and not intended to be used outside of the integrated
|
|
||||||
system that uses libmutter. No compatibility between versions are
|
|
||||||
promised.
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Mutter.ScreenCast">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
CreateSession:
|
|
||||||
@properties: Properties
|
|
||||||
@session_path: Path to the new session object
|
|
||||||
|
|
||||||
* "remote-desktop-session-id" (s): The ID of a remote desktop session.
|
|
||||||
Remote desktop driven screen casts
|
|
||||||
are started and stopped by the remote
|
|
||||||
desktop session.
|
|
||||||
* "disable-animations" (b): Set to "true" if the screen cast application
|
|
||||||
would prefer animations to be globally
|
|
||||||
disabled, while the session is running. Default
|
|
||||||
is "false". Available since version 3.
|
|
||||||
-->
|
|
||||||
<method name="CreateSession">
|
|
||||||
<arg name="properties" type="a{sv}" direction="in" />
|
|
||||||
<arg name="session_path" type="o" direction="out" />
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Version:
|
|
||||||
@short_description: API version
|
|
||||||
-->
|
|
||||||
<property name="Version" type="i" access="read" />
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
org.gnome.Mutter.ScreenCast.Session:
|
|
||||||
@short_description: Screen cast session
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Mutter.ScreenCast.Session">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Start:
|
|
||||||
|
|
||||||
Start the screen cast session
|
|
||||||
-->
|
|
||||||
<method name="Start" />
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Stop:
|
|
||||||
|
|
||||||
Stop the screen cast session
|
|
||||||
-->
|
|
||||||
<method name="Stop" />
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Closed:
|
|
||||||
|
|
||||||
The session has closed.
|
|
||||||
-->
|
|
||||||
<signal name="Closed" />
|
|
||||||
|
|
||||||
<!--
|
|
||||||
RecordMonitor:
|
|
||||||
@connector: Connector of the monitor to record
|
|
||||||
@properties: Properties
|
|
||||||
@stream_path: Path to the new stream object
|
|
||||||
|
|
||||||
Record a single monitor.
|
|
||||||
|
|
||||||
Available @properties include:
|
|
||||||
|
|
||||||
* "cursor-mode" (u): Cursor mode. Default: 'hidden' (see below)
|
|
||||||
Available since API version 2.
|
|
||||||
* "is-recording" (b): Whether this is a screen recording. May be
|
|
||||||
be used for choosing panel icon.
|
|
||||||
Default: false. Available since API version 4.
|
|
||||||
|
|
||||||
Available cursor mode values:
|
|
||||||
|
|
||||||
0: hidden - cursor is not included in the stream
|
|
||||||
1: embedded - cursor is included in the framebuffer
|
|
||||||
2: metadata - cursor is included as metadata in the PipeWire stream
|
|
||||||
-->
|
|
||||||
<method name="RecordMonitor">
|
|
||||||
<arg name="connector" type="s" direction="in" />
|
|
||||||
<arg name="properties" type="a{sv}" direction="in" />
|
|
||||||
<arg name="stream_path" type="o" direction="out" />
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
RecordWindow:
|
|
||||||
@properties: Properties used determining what window to select
|
|
||||||
@stream_path: Path to the new stream object
|
|
||||||
|
|
||||||
Supported since API version 2.
|
|
||||||
|
|
||||||
Record a single window. The cursor will not be included.
|
|
||||||
|
|
||||||
Available @properties include:
|
|
||||||
|
|
||||||
* "window-id" (t): Id of the window to record.
|
|
||||||
* "cursor-mode" (u): Cursor mode. Default: 'hidden' (see RecordMonitor).
|
|
||||||
* "is-recording" (b): Whether this is a screen recording. May be
|
|
||||||
be used for choosing panel icon.
|
|
||||||
Default: false. Available since API version 4.
|
|
||||||
|
|
||||||
-->
|
|
||||||
<method name="RecordWindow">
|
|
||||||
<arg name="properties" type="a{sv}" direction="in" />
|
|
||||||
<arg name="stream_path" type="o" direction="out" />
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
RecordArea:
|
|
||||||
@x: X position of the recorded area
|
|
||||||
@y: Y position of the recorded area
|
|
||||||
@width: width of the recorded area
|
|
||||||
@height: height of the recorded area
|
|
||||||
@properties: Properties
|
|
||||||
@stream_path: Path to the new stream object
|
|
||||||
|
|
||||||
Record an area of the stage. The coordinates are in stage coordinates.
|
|
||||||
The size of the stream does not necessarily match the size of the
|
|
||||||
recorded area, and will depend on DPI scale of the affected monitors.
|
|
||||||
|
|
||||||
Available @properties include:
|
|
||||||
|
|
||||||
* "cursor-mode" (u): Cursor mode. Default: 'hidden' (see below)
|
|
||||||
Available since API version 2.
|
|
||||||
* "is-recording" (b): Whether this is a screen recording. May be
|
|
||||||
be used for choosing panel icon.
|
|
||||||
Default: false. Available since API version 4.
|
|
||||||
|
|
||||||
Available cursor mode values:
|
|
||||||
|
|
||||||
0: hidden - cursor is not included in the stream
|
|
||||||
1: embedded - cursor is included in the framebuffer
|
|
||||||
2: metadata - cursor is included as metadata in the PipeWire stream
|
|
||||||
-->
|
|
||||||
<method name="RecordArea">
|
|
||||||
<arg name="x" type="i" direction="in" />
|
|
||||||
<arg name="y" type="i" direction="in" />
|
|
||||||
<arg name="width" type="i" direction="in" />
|
|
||||||
<arg name="height" type="i" direction="in" />
|
|
||||||
<arg name="properties" type="a{sv}" direction="in" />
|
|
||||||
<arg name="stream_path" type="o" direction="out" />
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
org.gnome.Mutter.ScreenCast.Stream:
|
|
||||||
@short_description: Screen cast stream
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Mutter.ScreenCast.Stream">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
PipeWireStreamAdded:
|
|
||||||
@short_description: Pipewire stream added
|
|
||||||
|
|
||||||
A signal emitted when PipeWire stream for the screen cast stream has
|
|
||||||
been created. The @node_id corresponds to the PipeWire stream node.
|
|
||||||
-->
|
|
||||||
<signal name="PipeWireStreamAdded">
|
|
||||||
<annotation name="org.gtk.GDBus.C.Name" value="pipewire-stream-added"/>
|
|
||||||
<arg name="node_id" type="u" direction="out" />
|
|
||||||
</signal>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Parameters:
|
|
||||||
@short_description: Optional stream parameters
|
|
||||||
|
|
||||||
Available parameters include:
|
|
||||||
|
|
||||||
* "position" (ii): Position of the source of the stream in the
|
|
||||||
compositor coordinate space.
|
|
||||||
* "size" (ii): Size of the source of the stream in the compositor
|
|
||||||
coordinate space.
|
|
||||||
-->
|
|
||||||
<property name="Parameters" type="a{sv}" access="read" />
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
|
|
||||||
</node>
|
|
@ -1,18 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.ScreenSaver">
|
|
||||||
<method name="Lock"/>
|
|
||||||
<method name="GetActive">
|
|
||||||
<arg type="b" direction="out" name="active"/>
|
|
||||||
</method>
|
|
||||||
<method name="SetActive">
|
|
||||||
<arg type="b" direction="in" name="value"/>
|
|
||||||
</method>
|
|
||||||
<method name="GetActiveTime">
|
|
||||||
<arg type="u" direction="out" name="value"/>
|
|
||||||
</method>
|
|
||||||
<signal name="ActiveChanged">
|
|
||||||
<arg name="new_value" type="b"/>
|
|
||||||
</signal>
|
|
||||||
<signal name="WakeUpScreen"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,16 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.SessionManager.EndSessionDialog">
|
|
||||||
<method name="Open">
|
|
||||||
<arg type="u" direction="in"/>
|
|
||||||
<arg type="u" direction="in"/>
|
|
||||||
<arg type="u" direction="in"/>
|
|
||||||
<arg type="ao" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<method name="Close"/>
|
|
||||||
<signal name="ConfirmedLogout"/>
|
|
||||||
<signal name="ConfirmedReboot"/>
|
|
||||||
<signal name="ConfirmedShutdown"/>
|
|
||||||
<signal name="Canceled"/>
|
|
||||||
<signal name="Closed"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,13 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.SessionManager.Inhibitor">
|
|
||||||
<method name="GetAppId">
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="GetFlags">
|
|
||||||
<arg type="u" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="GetReason">
|
|
||||||
<arg type="s" direction="out"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,11 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.SessionManager.Presence">
|
|
||||||
<method name="SetStatus">
|
|
||||||
<arg type="u" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<property name="status" type="u" access="readwrite"/>
|
|
||||||
<signal name="StatusChanged">
|
|
||||||
<arg type="u" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,23 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.SessionManager">
|
|
||||||
<method name="Logout">
|
|
||||||
<arg type="u" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<method name="Shutdown"/>
|
|
||||||
<method name="Reboot"/>
|
|
||||||
<method name="CanShutdown">
|
|
||||||
<arg type="b" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<method name="IsInhibited">
|
|
||||||
<arg type="u" direction="in"/>
|
|
||||||
<arg type="b" direction="out"/>
|
|
||||||
</method>
|
|
||||||
<property name="SessionIsActive" type="b" access="read"/>
|
|
||||||
<signal name="InhibitorAdded">
|
|
||||||
<arg type="o" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
<signal name="InhibitorRemoved">
|
|
||||||
<arg type="o" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,6 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.SettingsDaemon.Color">
|
|
||||||
<property name="DisabledUntilTomorrow" type="b" access="readwrite"/>
|
|
||||||
<property name="NightLightActive" type="b" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,5 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.SettingsDaemon.Power.Screen">
|
|
||||||
<property name="Brightness" type="i" access="readwrite"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,10 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.SettingsDaemon.Rfkill">
|
|
||||||
<property name="AirplaneMode" type="b" access="readwrite"/>
|
|
||||||
<property name="HardwareAirplaneMode" type="b" access="read"/>
|
|
||||||
<property name="BluetoothAirplaneMode" type="b" access="readwrite"/>
|
|
||||||
<property name="BluetoothHasAirplaneMode" type="b" access="read"/>
|
|
||||||
<property name="BluetoothHardwareAirplaneMode" type="b" access="readwrite"/>
|
|
||||||
<property name="ShouldShowAirplaneMode" type="b" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,13 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.SettingsDaemon.Wacom">
|
|
||||||
<method name="SetGroupModeLED">
|
|
||||||
<arg name="device_path" direction="in" type="s"/>
|
|
||||||
<arg name="group" direction="in" type="u"/>
|
|
||||||
<arg name="mode" direction="in" type="u"/>
|
|
||||||
</method>
|
|
||||||
<method name="SetOLEDLabels">
|
|
||||||
<arg name="device_path" direction="in" type="s"/>
|
|
||||||
<arg name="labels" direction="in" type="as"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,12 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.Shell.AudioDeviceSelection">
|
|
||||||
<method name="Open">
|
|
||||||
<arg name="devices" direction="in" type="as"/>
|
|
||||||
</method>
|
|
||||||
<method name="Close">
|
|
||||||
</method>
|
|
||||||
<signal name="DeviceSelected">
|
|
||||||
<arg name="device" type="s"/>
|
|
||||||
</signal>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,19 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.Shell.CalendarServer">
|
|
||||||
<method name="SetTimeRange">
|
|
||||||
<arg type="x" name="since" direction="in"/>
|
|
||||||
<arg type="x" name="until" direction="in"/>
|
|
||||||
<arg type="b" name="force_reload" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<signal name="EventsAddedOrUpdated">
|
|
||||||
<arg type="a(ssbxxa{sv})" name="events" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
<signal name="EventsRemoved">
|
|
||||||
<arg type="as" name="ids" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
<signal name="ClientDisappeared">
|
|
||||||
<arg type="s" name="source_uid" direction="out"/>
|
|
||||||
</signal>
|
|
||||||
<property name="HasCalendars" type="b" access="read" />
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,15 +0,0 @@
|
|||||||
<node>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
org.gnome.Shell.ClocksIntegration:
|
|
||||||
@short_description: Clocks integration interface
|
|
||||||
|
|
||||||
The interface used for exporting location settings to GNOME Shell's
|
|
||||||
world clocks integration.
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Shell.ClocksIntegration">
|
|
||||||
|
|
||||||
<property name="Locations" type="av" access="read"/>
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,267 +0,0 @@
|
|||||||
<!DOCTYPE node PUBLIC
|
|
||||||
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
|
|
||||||
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
|
|
||||||
<node>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
org.gnome.Shell.Extensions:
|
|
||||||
@short_description: Extensions interface
|
|
||||||
|
|
||||||
The interface used to query and manage extensions.
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Shell.Extensions">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ListExtensions:
|
|
||||||
@extensions: A dictionary of extension infos
|
|
||||||
|
|
||||||
Get a list of installed extensions. The returned @extensions
|
|
||||||
dictionary maps extension UUIDs to info vardicts. See
|
|
||||||
GetExtensionInfo() for documentation on possible keys.
|
|
||||||
-->
|
|
||||||
<method name="ListExtensions">
|
|
||||||
<arg type="a{sa{sv}}" direction="out" name="extensions"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
GetExtensionInfo:
|
|
||||||
@uuid: The UUID of the extension
|
|
||||||
@info: The returned extension info
|
|
||||||
|
|
||||||
The information returned in the @info vardict depends on the
|
|
||||||
metadata the extension provides, however it is guaranteed to
|
|
||||||
contain the following keys:
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term>uuid s</term>
|
|
||||||
<listitem><para>The UUID of the extension</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>name s</term>
|
|
||||||
<listitem><para>The name of the extension</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>description s</term>
|
|
||||||
<listitem><para>
|
|
||||||
A short summary that describes what the extension does
|
|
||||||
</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>shell-version as</term>
|
|
||||||
<listitem><para>An array of support shell versions</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>type d</term>
|
|
||||||
<listitem><para>
|
|
||||||
The type of extension:
|
|
||||||
<simplelist>
|
|
||||||
<member>1: SYSTEM</member>
|
|
||||||
<member>2: PER_USER</member>
|
|
||||||
</simplelist>
|
|
||||||
</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>state d</term>
|
|
||||||
<listitem><para>
|
|
||||||
The state the extension is in:
|
|
||||||
<simplelist>
|
|
||||||
<member>1: ENABLED</member>
|
|
||||||
<member>2: DISABLED</member>
|
|
||||||
<member>3: ERROR</member>
|
|
||||||
<member>4: OUT_OF_DATE</member>
|
|
||||||
<member>5: DOWNLOADING</member>
|
|
||||||
<member>6: INITIALIZED</member>
|
|
||||||
<member>99: UNINSTALLED</member>
|
|
||||||
</simplelist>
|
|
||||||
</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>path s</term>
|
|
||||||
<listitem><para>The extension directory</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>error s</term>
|
|
||||||
<listitem><para>The most recent error caught in init(), enable() or disable()</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>hasPrefs b</term>
|
|
||||||
<listitem><para>Whether the extension includes preference UI</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
By convention, many extensions will also include the following keys:
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term>version d</term>
|
|
||||||
<listitem><para>The extension version</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>url s</term>
|
|
||||||
<listitem><para>The URL to the extension homepage or repository</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>settings-schema s</term>
|
|
||||||
<listitem><para>The ID of a bundled GSettings schema</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>gettext-domain s</term>
|
|
||||||
<listitem><para>The domain used for translations</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
-->
|
|
||||||
<method name="GetExtensionInfo">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
<arg type="a{sv}" direction="out" name="info"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
GetExtensionErrors:
|
|
||||||
@uuid: The UUID of the extension
|
|
||||||
@errors: The returned errors
|
|
||||||
|
|
||||||
Get the list of errors that caused the extension
|
|
||||||
to be in ERROR state.
|
|
||||||
-->
|
|
||||||
<method name="GetExtensionErrors">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
<arg type="as" direction="out" name="errors"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
InstallRemoteExtension:
|
|
||||||
@uuid: The UUID of the extension
|
|
||||||
@result: The result of the operation
|
|
||||||
|
|
||||||
Download and install an extension.
|
|
||||||
-->
|
|
||||||
<method name="InstallRemoteExtension">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
<arg type="s" direction="out" name="result"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
UninstallExtension:
|
|
||||||
@uuid: The UUID of the extension
|
|
||||||
@success: Whether the operation was successful
|
|
||||||
|
|
||||||
Uninstall an extension.
|
|
||||||
-->
|
|
||||||
<method name="UninstallExtension">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ReloadExtension:
|
|
||||||
@uuid: The UUID of the extension
|
|
||||||
|
|
||||||
Reload an extension.
|
|
||||||
-->
|
|
||||||
<method name="ReloadExtension">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
EnableExtension:
|
|
||||||
@uuid: The UUID of the extension
|
|
||||||
@success: Whether the operation was successful
|
|
||||||
|
|
||||||
Enable an extension.
|
|
||||||
-->
|
|
||||||
<method name="EnableExtension">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
DisableExtension:
|
|
||||||
@uuid: The UUID of the extension
|
|
||||||
@success: Whether the operation was successful
|
|
||||||
|
|
||||||
Disable an extension.
|
|
||||||
-->
|
|
||||||
<method name="DisableExtension">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
LaunchExtensionPrefs:
|
|
||||||
Deprecated for OpenExtensionPrefs
|
|
||||||
-->
|
|
||||||
<method name="LaunchExtensionPrefs">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
OpenExtensionPrefs:
|
|
||||||
@uuid: The UUID of the extension
|
|
||||||
@parent_window: Identifier for the application window
|
|
||||||
@options: Vardict with further options
|
|
||||||
|
|
||||||
Opens the prefs dialog of extension @uuid.
|
|
||||||
|
|
||||||
The following @options are recognized:
|
|
||||||
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term>modal b</term>
|
|
||||||
<listitem>
|
|
||||||
<para>Whether the prefs window should be modal, default: false</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
-->
|
|
||||||
<method name="OpenExtensionPrefs">
|
|
||||||
<arg type="s" direction="in" name="uuid"/>
|
|
||||||
<arg type="s" direction="in" name="parent_window"/>
|
|
||||||
<arg type="a{sv}" direction="in" name="options"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
CheckForUpdates:
|
|
||||||
Update all extensions for which updates are available
|
|
||||||
-->
|
|
||||||
<method name="CheckForUpdates"/>
|
|
||||||
|
|
||||||
<signal name="ExtensionStateChanged">
|
|
||||||
<arg type="s" name="uuid"/>
|
|
||||||
<arg type="a{sv}" name="state"/>
|
|
||||||
</signal>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ExtensionStatusChanged:
|
|
||||||
Deprecated for ExtensionStateChanged
|
|
||||||
-->
|
|
||||||
<signal name="ExtensionStatusChanged">
|
|
||||||
<arg type="s" name="uuid"/>
|
|
||||||
<arg type="i" name="state"/>
|
|
||||||
<arg type="s" name="error"/>
|
|
||||||
</signal>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ShellVersion:
|
|
||||||
The GNOME Shell version
|
|
||||||
-->
|
|
||||||
<property name="ShellVersion" type="s" access="read"/>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
UserExtensionsEnabled:
|
|
||||||
Whether user extensions are enabled
|
|
||||||
-->
|
|
||||||
<property name="UserExtensionsEnabled" type="b" access="readwrite"/>
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,8 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.Shell.HotplugSniffer">
|
|
||||||
<method name="SniffURI">
|
|
||||||
<arg type="s" direction="in"/>
|
|
||||||
<arg type="as" direction="out"/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,83 +0,0 @@
|
|||||||
<!DOCTYPE node PUBLIC
|
|
||||||
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
|
|
||||||
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
|
|
||||||
<node>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
org.gnome.Shell.Introspect:
|
|
||||||
@short_description: Introspection interface
|
|
||||||
|
|
||||||
The interface used to introspect the state of Shell, such as running
|
|
||||||
applications, currently active application, etc.
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Shell.Introspect">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
RunningApplicationsChanged:
|
|
||||||
@short_description: Notifies when the running applications changes
|
|
||||||
-->
|
|
||||||
<signal name="RunningApplicationsChanged" />
|
|
||||||
|
|
||||||
<!--
|
|
||||||
GetRunningApplications:
|
|
||||||
@short_description: Retrieves the description of all running applications
|
|
||||||
|
|
||||||
Each application is associated by an application ID. The details of
|
|
||||||
each application consists of a varlist of keys and values. Available
|
|
||||||
keys are listed below.
|
|
||||||
|
|
||||||
'active-on-seats' - (as) list of seats the application is active on
|
|
||||||
(a seat only has at most one active
|
|
||||||
application)
|
|
||||||
-->
|
|
||||||
<method name="GetRunningApplications">
|
|
||||||
<arg name="apps" direction="out" type="a{sa{sv}}" />
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
GetWindows:
|
|
||||||
@short_description: Retrieves the current list of windows and their properties
|
|
||||||
|
|
||||||
A window is exposed as:
|
|
||||||
* t ID: unique ID of the window
|
|
||||||
* a{sv} properties: high-level properties
|
|
||||||
|
|
||||||
Known properties:
|
|
||||||
|
|
||||||
- "title" (s): (readonly) title of the window
|
|
||||||
- "app-id" (s): (readonly) application ID of the window
|
|
||||||
- "wm-class" (s): (readonly) class of the window
|
|
||||||
- "client-type" (u): (readonly) 0 for Wayland, 1 for X11
|
|
||||||
- "is-hidden" (b): (readonly) if the window is currently hidden
|
|
||||||
- "has-focus" (b): (readonly) if the window currently have
|
|
||||||
keyboard focus
|
|
||||||
- "width" (u): (readonly) width of the window
|
|
||||||
- "height" (u): (readonly) height of the window
|
|
||||||
-->
|
|
||||||
<method name="GetWindows">
|
|
||||||
<arg name="windows" direction="out" type="a{ta{sv}}" />
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
AnimationsEnabled:
|
|
||||||
@short_description: Whether the shell animations are enabled
|
|
||||||
|
|
||||||
By default determined by the org.gnome.desktop.interface enable-animations
|
|
||||||
gsetting, but may be overridden, e.g. if there is an active screen cast or
|
|
||||||
remote desktop session that asked for animations to be disabled.
|
|
||||||
|
|
||||||
Since: 2
|
|
||||||
-->
|
|
||||||
<property name="AnimationsEnabled" type="b" access="read"/>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ScreenSize:
|
|
||||||
@short_description: The size of the screen
|
|
||||||
|
|
||||||
Since: 3
|
|
||||||
-->
|
|
||||||
<property name="ScreenSize" type="(ii)" access="read"/>
|
|
||||||
|
|
||||||
<property name="version" type="u" access="read"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,28 +0,0 @@
|
|||||||
<!DOCTYPE node PUBLIC
|
|
||||||
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
|
|
||||||
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
|
|
||||||
<node>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
org.gnome.Shell.PadOSD:
|
|
||||||
@short_description: Pad OSD interface
|
|
||||||
|
|
||||||
The interface used to show button map OSD on pad devices.
|
|
||||||
-->
|
|
||||||
<interface name='org.gnome.Shell.Wacom.PadOsd'>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Show:
|
|
||||||
@device_node: device node file, usually in /dev/input/...
|
|
||||||
@edition_mode: whether toggling edition mode on when showing
|
|
||||||
|
|
||||||
Shows the pad button map OSD for the requested device, the OSD
|
|
||||||
will be shown according the current device settings (output
|
|
||||||
mapping, left handed mode, ...)
|
|
||||||
-->
|
|
||||||
<method name='Show'>
|
|
||||||
<arg name='device_node' direction='in' type='o'/>
|
|
||||||
<arg name='edition_mode' direction='in' type='b'/>
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,13 +0,0 @@
|
|||||||
<node>
|
|
||||||
<interface name="org.gnome.Shell.PerfHelper">
|
|
||||||
<method name="CreateWindow">
|
|
||||||
<arg type="i" direction="in"/>
|
|
||||||
<arg type="i" direction="in"/>
|
|
||||||
<arg type="b" direction="in"/>
|
|
||||||
<arg type="b" direction="in"/>
|
|
||||||
<arg type="b" direction="in"/>
|
|
||||||
</method>
|
|
||||||
<method name="WaitWindows"/>
|
|
||||||
<method name="DestroyWindows"/>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user