Compare commits
7 Commits
wip/raresv
...
wip/input-
Author | SHA1 | Date | |
---|---|---|---|
d4802861ed | |||
a8fa0b8146 | |||
cf0bb62f40 | |||
de8106967d | |||
1a24f061cf | |||
e038845458 | |||
b03273c765 |
25
.gitignore
vendored
@ -16,18 +16,15 @@ config.log
|
|||||||
config.status
|
config.status
|
||||||
config
|
config
|
||||||
configure
|
configure
|
||||||
data/org.gnome.Shell.desktop
|
data/gnome-shell.desktop
|
||||||
data/org.gnome.Shell.desktop.in
|
data/gnome-shell.desktop.in
|
||||||
data/gnome-shell-extension-prefs.desktop
|
data/gnome-shell-extension-prefs.desktop
|
||||||
data/gnome-shell-extension-prefs.desktop.in
|
data/gnome-shell-extension-prefs.desktop.in
|
||||||
data/gnome-shell-theme.gresource
|
|
||||||
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.evolution.calendar.gschema.xml
|
||||||
data/org.gnome.Shell.PortalHelper.service
|
data/org.gnome.shell.evolution.calendar.gschema.valid
|
||||||
data/theme/.sass-cache
|
|
||||||
docs/reference/*/*.args
|
docs/reference/*/*.args
|
||||||
docs/reference/*/*.bak
|
docs/reference/*/*.bak
|
||||||
docs/reference/*/*.hierarchy
|
docs/reference/*/*.hierarchy
|
||||||
@ -40,24 +37,19 @@ docs/reference/*/*.txt
|
|||||||
docs/reference/*/*.types
|
docs/reference/*/*.types
|
||||||
docs/reference/*/html/
|
docs/reference/*/html/
|
||||||
docs/reference/*/xml/
|
docs/reference/*/xml/
|
||||||
docs/reference/shell/doc-gen-*
|
|
||||||
gtk-doc.make
|
gtk-doc.make
|
||||||
js/misc/config.js
|
js/misc/config.js
|
||||||
js/js-resources.c
|
|
||||||
js/js-resources.h
|
|
||||||
intltool-extract.in
|
intltool-extract.in
|
||||||
intltool-merge.in
|
intltool-merge.in
|
||||||
intltool-update.in
|
intltool-update.in
|
||||||
libtool
|
libtool
|
||||||
m4/
|
m4/
|
||||||
man/gnome-shell.1
|
|
||||||
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/Makefile.in.in
|
||||||
po/Makevars.template
|
po/Makevars.template
|
||||||
po/POTFILES
|
po/POTFILES
|
||||||
@ -70,18 +62,17 @@ src/*-enum-types.[ch]
|
|||||||
src/*-marshal.[ch]
|
src/*-marshal.[ch]
|
||||||
src/Makefile
|
src/Makefile
|
||||||
src/Makefile.in
|
src/Makefile.in
|
||||||
src/calendar-server/evolution-calendar.desktop
|
|
||||||
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-prefs
|
|
||||||
src/gnome-shell-extension-tool
|
src/gnome-shell-extension-tool
|
||||||
|
src/gnome-shell-extension-prefs
|
||||||
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-perf-tool
|
||||||
src/gnome-shell-portal-helper
|
src/gnome-shell-real
|
||||||
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
|
||||||
@ -89,8 +80,6 @@ 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
|
xmldocs.make
|
||||||
|
6
.gitmodules
vendored
@ -1,6 +0,0 @@
|
|||||||
[submodule "src/gvc"]
|
|
||||||
path = src/gvc
|
|
||||||
url = git://git.gnome.org/libgnome-volume-control
|
|
||||||
[submodule "data/theme/gnome-shell-sass"]
|
|
||||||
path = data/theme/gnome-shell-sass
|
|
||||||
url = git://git.gnome.org/gnome-shell-sass
|
|
41
COPYING
@ -1,12 +1,12 @@
|
|||||||
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.
|
||||||
|
|
||||||
Preamble
|
Preamble
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
The licenses for most software are designed to take away your
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
@ -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,8 +55,8 @@ 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
|
||||||
|
|
||||||
0. This License applies to any program or other work which contains
|
0. This License applies to any program or other work which contains
|
||||||
@ -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
|
||||||
@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
|
|||||||
of preserving the free status of all derivatives of our free software and
|
of preserving the free status of all derivatives of our free software and
|
||||||
of promoting the sharing and reuse of software generally.
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
NO WARRANTY
|
NO WARRANTY
|
||||||
|
|
||||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
|||||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
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
|
||||||
possible use to the public, the best way to achieve this is to make it
|
possible use to the public, the best way to achieve this is to make it
|
||||||
@ -303,16 +303,17 @@ 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.
|
||||||
|
|
||||||
If the program is interactive, make it output a short notice like this
|
If the program is interactive, make it output a short notice like this
|
||||||
when it starts in an interactive mode:
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
Gnomovision version 69, Copyright (C) year name of author
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
This is free software, and you are welcome to redistribute it
|
This is free software, and you are welcome to redistribute it
|
||||||
under certain conditions; type `show c' for details.
|
under certain conditions; type `show c' for details.
|
||||||
@ -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.
|
||||||
|
331
HACKING
@ -1,331 +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 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.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const St = imports.gi.St;
|
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
const Params = imports.misc.params;
|
|
||||||
const Tweener = imports.ui.tweener;
|
|
||||||
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:
|
|
||||||
|
|
||||||
const MY_DBUS_INTERFACE = 'org.my.Interface';
|
|
||||||
|
|
||||||
Variable declaration
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
Always use either `const` or `let` when defining a variable.
|
|
||||||
|
|
||||||
// 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 our own class framework
|
|
||||||
(sigh), which is built in gjs. The advantage is that it supports inheriting from
|
|
||||||
GObjects, although this feature isn't used very often in the Shell itself.
|
|
||||||
|
|
||||||
const IconLabelMenuItem = new Lang.Class({
|
|
||||||
Name: 'IconLabelMenuItem',
|
|
||||||
Extends: PopupMenu.PopupMenuBaseItem,
|
|
||||||
|
|
||||||
_init: function(icon, label) {
|
|
||||||
this.parent({ reactive: false });
|
|
||||||
this.actor.add_child(icon);
|
|
||||||
this.actor.add_child(label);
|
|
||||||
},
|
|
||||||
|
|
||||||
open: function() {
|
|
||||||
log("menu opened!");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
* 'Name' is required. 'Extends' is optional. If you leave it out, you will
|
|
||||||
automatically inherit from Object.
|
|
||||||
|
|
||||||
* Leave a blank line between the "class header" (Name, Extends, and other
|
|
||||||
things) and the "class body" (methods). Leave a blank line between each
|
|
||||||
method.
|
|
||||||
|
|
||||||
* No space before the colon, one space after.
|
|
||||||
|
|
||||||
* No trailing comma after the last item.
|
|
||||||
|
|
||||||
* Make sure to use a semicolon after the closing paren to the class. It's
|
|
||||||
still a giant function call, even though it may resemble a more
|
|
||||||
conventional syntax.
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
const MyClutterActor = new Lang.Class({
|
|
||||||
Name: 'MyClutterActor',
|
|
||||||
Extends: Clutter.Actor,
|
|
||||||
|
|
||||||
vfunc_get_preferred_width: function(actor, forHeight) {
|
|
||||||
return [100, 100];
|
|
||||||
},
|
|
||||||
|
|
||||||
vfunc_get_preferred_height: function(actor, forWidth) {
|
|
||||||
return [100, 100];
|
|
||||||
},
|
|
||||||
|
|
||||||
vfunc_paint: function(actor) {
|
|
||||||
let alloc = this.get_allocation_box();
|
|
||||||
Cogl.set_source_color4ub(255, 0, 0, 255);
|
|
||||||
Cogl.rectangle(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` 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, we usually have a wrapper class
|
|
||||||
that has a property called `actor`. We call this wrapper class the "delegate".
|
|
||||||
|
|
||||||
We sometimes use expando properties to set a property called `_delegate` on
|
|
||||||
the actor itself:
|
|
||||||
|
|
||||||
const MyClass = new Lang.Class({
|
|
||||||
Name: 'MyClass',
|
|
||||||
|
|
||||||
_init: function() {
|
|
||||||
this.actor = new St.Button({ text: "This is a button" });
|
|
||||||
this.actor._delegate = this;
|
|
||||||
|
|
||||||
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
|
||||||
},
|
|
||||||
|
|
||||||
_onClicked: function(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.
|
|
||||||
|
|
||||||
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 a Lang.bind.
|
|
||||||
|
|
||||||
const Lang = imports.lang;
|
|
||||||
|
|
||||||
let closure = Lang.bind(this, function() { this._fnorbate(); });
|
|
||||||
|
|
||||||
A more realistic example would be connecting to a signal on a method of a
|
|
||||||
prototype:
|
|
||||||
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const FnorbLib = imports.fborbLib;
|
|
||||||
|
|
||||||
const MyClass = new Lang.Class({
|
|
||||||
_init: function() {
|
|
||||||
let fnorb = new FnorbLib.Fnorb();
|
|
||||||
fnorb.connect('frobate', Lang.bind(this, this._onFnorbFrobate));
|
|
||||||
},
|
|
||||||
|
|
||||||
_onFnorbFrobate: function(fnorb) {
|
|
||||||
this._updateFnorb();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Object literal syntax
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
In JavaScript, these are equivalent:
|
|
||||||
|
|
||||||
foo = { 'bar': 42 };
|
|
||||||
foo = { bar: 42 };
|
|
||||||
|
|
||||||
and so are these:
|
|
||||||
|
|
||||||
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']`.
|
|
||||||
|
|
||||||
Getters, setters, and Tweener
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
Getters and setters should be used when you are dealing with an API that is
|
|
||||||
designed around setting properties, like Tweener. If you want to animate an
|
|
||||||
arbitrary property, create a getter and setter, and use Tweener to animate the
|
|
||||||
property.
|
|
||||||
|
|
||||||
const ANIMATION_TIME = 2000;
|
|
||||||
|
|
||||||
const MyClass = new Lang.Class({
|
|
||||||
Name: 'MyClass',
|
|
||||||
|
|
||||||
_init: function() {
|
|
||||||
this.actor = new St.BoxLayout();
|
|
||||||
this._position = 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
get position() {
|
|
||||||
return this._position;
|
|
||||||
},
|
|
||||||
|
|
||||||
set position(value) {
|
|
||||||
this._position = value;
|
|
||||||
this.actor.set_position(value, value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let myThing = new MyClass();
|
|
||||||
Tweener.addTween(myThing,
|
|
||||||
{ position: 100,
|
|
||||||
time: ANIMATION_TIME,
|
|
||||||
transition: 'easeOutQuad' });
|
|
14
Makefile.am
@ -1,15 +1,7 @@
|
|||||||
# Point to our macro directory and pick up user flags from the environment
|
# Point to our macro directory and pick up user flags from the environment
|
||||||
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||||
|
|
||||||
SUBDIRS = data js src tests po docs
|
SUBDIRS = data js src browser-plugin tests po man docs
|
||||||
|
|
||||||
if BUILD_BROWSER_PLUGIN
|
|
||||||
SUBDIRS += browser-plugin
|
|
||||||
endif
|
|
||||||
|
|
||||||
if ENABLE_MAN
|
|
||||||
SUBDIRS += man
|
|
||||||
endif
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
.project \
|
.project \
|
||||||
@ -20,9 +12,7 @@ EXTRA_DIST = \
|
|||||||
# These are files checked into Git that we don't want to distribute
|
# These are files checked into Git that we don't want to distribute
|
||||||
DIST_EXCLUDE = \
|
DIST_EXCLUDE = \
|
||||||
.gitignore \
|
.gitignore \
|
||||||
.gitmodules \
|
|
||||||
gnome-shell.doap \
|
gnome-shell.doap \
|
||||||
HACKING \
|
|
||||||
MAINTAINERS \
|
MAINTAINERS \
|
||||||
tools/build/*
|
tools/build/*
|
||||||
|
|
||||||
@ -30,4 +20,4 @@ distcheck-hook:
|
|||||||
@echo "Checking disted files against files in git"
|
@echo "Checking disted files against files in git"
|
||||||
@$(srcdir)/tools/check-for-missing.py $(srcdir) $(distdir) $(DIST_EXCLUDE)
|
@$(srcdir)/tools/check-for-missing.py $(srcdir) $(distdir) $(DIST_EXCLUDE)
|
||||||
|
|
||||||
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man
|
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
|
||||||
|
2
README
@ -8,7 +8,7 @@ For more information about GNOME Shell, including instructions on how
|
|||||||
to build GNOME Shell from source and how to get involved with the project,
|
to build GNOME Shell from source and how to get involved with the project,
|
||||||
see:
|
see:
|
||||||
|
|
||||||
https://wiki.gnome.org/Projects/GnomeShell
|
http://live.gnome.org/GnomeShell
|
||||||
|
|
||||||
Bugs should be reported at http://bugzilla.gnome.org against the 'gnome-shell'
|
Bugs should be reported at http://bugzilla.gnome.org against the 'gnome-shell'
|
||||||
product.
|
product.
|
||||||
|
34
autogen.sh
@ -1,35 +1,21 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
# Run this to generate all the initial makefiles, etc.
|
# Run this to generate all the initial makefiles, etc.
|
||||||
|
|
||||||
srcdir=`dirname $0`
|
srcdir=`dirname $0`
|
||||||
test -z "$srcdir" && srcdir=.
|
test -z "$srcdir" && srcdir=.
|
||||||
|
|
||||||
olddir="$(pwd)"
|
PKG_NAME="gnome-shell"
|
||||||
|
|
||||||
cd "${srcdir}"
|
(test -f $srcdir/configure.ac \
|
||||||
|
&& test -d $srcdir/src) || {
|
||||||
(test -f configure.ac \
|
|
||||||
&& test -d src) || {
|
|
||||||
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
|
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
|
||||||
echo " top-level gnome-shell directory"
|
echo " top-level gnome-shell directory"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Fetch submodules if needed
|
which gnome-autogen.sh || {
|
||||||
if test ! -f src/gvc/Makefile.am || test ! -f data/theme/gnome-shell-sass/COPYING;
|
echo "You need to install gnome-common from GNOME Git (or from"
|
||||||
then
|
echo "your OS vendor's package manager)."
|
||||||
echo "+ Setting up submodules"
|
exit 1
|
||||||
git submodule init
|
}
|
||||||
fi
|
USE_GNOME2_MACROS=1 USE_COMMON_DOC_BUILD=yes . gnome-autogen.sh
|
||||||
git submodule update
|
|
||||||
|
|
||||||
aclocal --install || exit 1
|
|
||||||
gtkdocize --copy || exit 1
|
|
||||||
intltoolize --force --copy --automake || exit 1
|
|
||||||
autoreconf --verbose --force --install || exit 1
|
|
||||||
|
|
||||||
cd "${olddir}"
|
|
||||||
|
|
||||||
if [ "$NOCONFIGURE" = "" ]; then
|
|
||||||
"${srcdir}/configure" "$@" || exit 1
|
|
||||||
fi
|
|
||||||
|
@ -3,10 +3,7 @@ mozillalibdir = $(BROWSER_PLUGIN_DIR)
|
|||||||
|
|
||||||
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
|
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
|
||||||
|
|
||||||
# Browsers can unload and reload the module while browsing, which is not supported by GObject.
|
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined
|
||||||
# We pass -Wl,-z,nodelete to the linker to ensure the module is never unloaded.
|
|
||||||
# https://bugzilla.gnome.org/show_bug.cgi?id=737932
|
|
||||||
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,-z,nodelete
|
|
||||||
|
|
||||||
libgnome_shell_browser_plugin_la_LIBADD = \
|
libgnome_shell_browser_plugin_la_LIBADD = \
|
||||||
$(BROWSER_PLUGIN_LIBS)
|
$(BROWSER_PLUGIN_LIBS)
|
||||||
@ -20,4 +17,5 @@ libgnome_shell_browser_plugin_la_SOURCES = \
|
|||||||
|
|
||||||
libgnome_shell_browser_plugin_la_CFLAGS = \
|
libgnome_shell_browser_plugin_la_CFLAGS = \
|
||||||
$(BROWSER_PLUGIN_CFLAGS) \
|
$(BROWSER_PLUGIN_CFLAGS) \
|
||||||
|
-DG_DISABLE_DEPRECATED \
|
||||||
-DG_LOG_DOMAIN=\"GnomeShellBrowserPlugin\"
|
-DG_LOG_DOMAIN=\"GnomeShellBrowserPlugin\"
|
||||||
|
@ -13,7 +13,9 @@
|
|||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* Jasper St. Pierre <jstpierre@mecheye.net>
|
* Jasper St. Pierre <jstpierre@mecheye.net>
|
||||||
@ -33,15 +35,17 @@
|
|||||||
#include <json-glib/json-glib.h>
|
#include <json-glib/json-glib.h>
|
||||||
|
|
||||||
#define ORIGIN "extensions.gnome.org"
|
#define ORIGIN "extensions.gnome.org"
|
||||||
#define PLUGIN_NAME "GNOME Shell Integration"
|
#define PLUGIN_NAME "Gnome Shell Integration"
|
||||||
#define PLUGIN_DESCRIPTION "This plugin provides integration with GNOME Shell " \
|
#define PLUGIN_DESCRIPTION "This plugin provides integration with Gnome Shell " \
|
||||||
"for live extension enabling and disabling. " \
|
"for live extension enabling and disabling. " \
|
||||||
"It can be used only by extensions.gnome.org"
|
"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_MIME_STRING "application/x-gnome-shell-integration::Gnome Shell Integration Dummy Content-Type";
|
||||||
|
|
||||||
#define PLUGIN_API_VERSION 5
|
#define PLUGIN_API_VERSION 3
|
||||||
|
|
||||||
#define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation"
|
typedef struct {
|
||||||
|
GDBusProxy *proxy;
|
||||||
|
} PluginData;
|
||||||
|
|
||||||
static NPNetscapeFuncs funcs;
|
static NPNetscapeFuncs funcs;
|
||||||
|
|
||||||
@ -141,13 +145,128 @@ check_origin_and_protocol (NPP instance)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* =============== public entry points =================== */
|
||||||
|
|
||||||
|
NPError
|
||||||
|
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
|
||||||
|
{
|
||||||
|
/* global initialization routine, called once when plugin
|
||||||
|
is loaded */
|
||||||
|
|
||||||
|
g_type_init ();
|
||||||
|
|
||||||
|
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 =================== */
|
/* =================== scripting interface =================== */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
NPObject parent;
|
NPObject parent;
|
||||||
NPP instance;
|
NPP instance;
|
||||||
GDBusProxy *proxy;
|
GDBusProxy *proxy;
|
||||||
GSettings *settings;
|
|
||||||
NPObject *listener;
|
NPObject *listener;
|
||||||
NPObject *restart_listener;
|
NPObject *restart_listener;
|
||||||
gint signal_id;
|
gint signal_id;
|
||||||
@ -204,35 +323,83 @@ on_shell_appeared (GDBusConnection *connection,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SHELL_SCHEMA "org.gnome.shell"
|
|
||||||
#define ENABLED_EXTENSIONS_KEY "enabled-extensions"
|
|
||||||
|
|
||||||
static NPObject *
|
static NPObject *
|
||||||
plugin_object_allocate (NPP instance,
|
plugin_object_allocate (NPP instance,
|
||||||
NPClass *klass)
|
NPClass *klass)
|
||||||
{
|
{
|
||||||
PluginObject *obj = (PluginObject *) funcs.memalloc (sizeof (PluginObject));
|
PluginData *data = instance->pdata;
|
||||||
|
PluginObject *obj = g_slice_new0 (PluginObject);
|
||||||
|
|
||||||
memset (obj, 0, sizeof (PluginObject));
|
|
||||||
obj->instance = instance;
|
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);
|
||||||
|
|
||||||
return (NPObject*) obj;
|
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
|
||||||
|
"org.gnome.Shell",
|
||||||
|
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
||||||
|
on_shell_appeared,
|
||||||
|
NULL,
|
||||||
|
obj,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_debug ("plugin object created");
|
||||||
|
|
||||||
|
return (NPObject*)obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
plugin_object_deallocate (NPObject *npobj)
|
plugin_object_deallocate (NPObject *npobj)
|
||||||
{
|
{
|
||||||
funcs.memfree (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);
|
||||||
|
|
||||||
|
if (obj->watch_name_id)
|
||||||
|
g_bus_unwatch_name (obj->watch_name_id);
|
||||||
|
|
||||||
|
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 onrestart_id;
|
||||||
|
static NPIdentifier get_errors_id;
|
||||||
|
static NPIdentifier launch_extension_prefs_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 ||
|
||||||
|
name == launch_extension_prefs_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline gboolean
|
static inline gboolean
|
||||||
uuid_is_valid (NPString string)
|
uuid_is_valid (const gchar *uuid)
|
||||||
{
|
{
|
||||||
gsize i;
|
gsize i;
|
||||||
|
|
||||||
for (i = 0; i < string.UTF8Length; i++)
|
for (i = 0; uuid[i]; i ++)
|
||||||
{
|
{
|
||||||
gchar c = string.UTF8Characters[i];
|
gchar c = uuid[i];
|
||||||
if (c < 32 || c >= 127)
|
if (c < 32 || c >= 127)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -296,73 +463,8 @@ jsonify_variant (GVariant *variant,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
parse_args (const gchar *format_str,
|
plugin_list_extensions (PluginObject *obj,
|
||||||
uint32_t argc,
|
NPVariant *result)
|
||||||
const NPVariant *argv,
|
|
||||||
...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
gsize i;
|
|
||||||
gboolean ret = FALSE;
|
|
||||||
|
|
||||||
if (strlen (format_str) != argc)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
va_start (args, argv);
|
|
||||||
|
|
||||||
for (i = 0; format_str[i]; i++)
|
|
||||||
{
|
|
||||||
gpointer arg_location;
|
|
||||||
const NPVariant arg = argv[i];
|
|
||||||
|
|
||||||
arg_location = va_arg (args, gpointer);
|
|
||||||
|
|
||||||
switch (format_str[i])
|
|
||||||
{
|
|
||||||
case 'u':
|
|
||||||
{
|
|
||||||
NPString string;
|
|
||||||
|
|
||||||
if (!NPVARIANT_IS_STRING (arg))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
string = NPVARIANT_TO_STRING (arg);
|
|
||||||
|
|
||||||
if (!uuid_is_valid (string))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
*(gchar **) arg_location = g_strndup (string.UTF8Characters, string.UTF8Length);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'b':
|
|
||||||
if (!NPVARIANT_IS_BOOLEAN (arg))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
*(gboolean *) arg_location = NPVARIANT_TO_BOOLEAN (arg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'o':
|
|
||||||
if (!NPVARIANT_IS_OBJECT (arg))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
*(NPObject **) arg_location = NPVARIANT_TO_OBJECT (arg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = TRUE;
|
|
||||||
|
|
||||||
out:
|
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
plugin_list_extensions (PluginObject *obj,
|
|
||||||
uint32_t argc,
|
|
||||||
const NPVariant *args,
|
|
||||||
NPVariant *result)
|
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
GVariant *res;
|
GVariant *res;
|
||||||
@ -386,159 +488,91 @@ plugin_list_extensions (PluginObject *obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
plugin_enable_extension (PluginObject *obj,
|
plugin_enable_extension (PluginObject *obj,
|
||||||
uint32_t argc,
|
NPString uuid,
|
||||||
const NPVariant *argv,
|
gboolean enabled)
|
||||||
NPVariant *result)
|
|
||||||
{
|
{
|
||||||
gboolean ret;
|
gchar *uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
gchar *uuid;
|
if (!uuid_is_valid (uuid_str))
|
||||||
gboolean enabled;
|
|
||||||
gsize length;
|
|
||||||
gchar **uuids;
|
|
||||||
const gchar **new_uuids;
|
|
||||||
|
|
||||||
if (!parse_args ("ub", argc, argv, &uuid, &enabled))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
uuids = g_settings_get_strv (obj->settings, ENABLED_EXTENSIONS_KEY);
|
|
||||||
length = g_strv_length (uuids);
|
|
||||||
|
|
||||||
if (enabled)
|
|
||||||
{
|
{
|
||||||
new_uuids = g_new (const gchar *, length + 2); /* New key, NULL */
|
g_free (uuid_str);
|
||||||
memcpy (new_uuids, uuids, length * sizeof (*new_uuids));
|
return FALSE;
|
||||||
new_uuids[length] = uuid;
|
|
||||||
new_uuids[length + 1] = NULL;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
gsize i = 0, j = 0;
|
|
||||||
new_uuids = g_new (const gchar *, length);
|
|
||||||
for (i = 0; i < length; i ++)
|
|
||||||
{
|
|
||||||
if (g_str_equal (uuids[i], uuid))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
new_uuids[j] = uuids[i];
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
|
|
||||||
new_uuids[j] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = g_settings_set_strv (obj->settings,
|
|
||||||
ENABLED_EXTENSIONS_KEY,
|
|
||||||
new_uuids);
|
|
||||||
|
|
||||||
g_strfreev (uuids);
|
|
||||||
g_free (new_uuids);
|
|
||||||
g_free (uuid);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct _AsyncClosure AsyncClosure;
|
|
||||||
|
|
||||||
struct _AsyncClosure {
|
|
||||||
PluginObject *obj;
|
|
||||||
NPObject *callback;
|
|
||||||
NPObject *errback;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
install_extension_cb (GObject *proxy,
|
|
||||||
GAsyncResult *async_res,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
AsyncClosure *async_closure = (AsyncClosure *) user_data;
|
|
||||||
GError *error = NULL;
|
|
||||||
GVariant *res;
|
|
||||||
NPVariant args[1];
|
|
||||||
NPVariant result = { NPVariantType_Void };
|
|
||||||
NPObject *callback;
|
|
||||||
|
|
||||||
res = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), async_res, &error);
|
|
||||||
|
|
||||||
if (res == NULL)
|
|
||||||
{
|
|
||||||
if (g_dbus_error_is_remote_error (error))
|
|
||||||
g_dbus_error_strip_remote_error (error);
|
|
||||||
STRINGZ_TO_NPVARIANT (error->message, args[0]);
|
|
||||||
callback = async_closure->errback;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char *string_result;
|
|
||||||
g_variant_get (res, "(&s)", &string_result);
|
|
||||||
STRINGZ_TO_NPVARIANT (string_result, args[0]);
|
|
||||||
callback = async_closure->callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
funcs.invokeDefault (async_closure->obj->instance,
|
|
||||||
callback, args, 1, &result);
|
|
||||||
|
|
||||||
funcs.releasevariantvalue (&result);
|
|
||||||
|
|
||||||
funcs.releaseobject (async_closure->callback);
|
|
||||||
funcs.releaseobject (async_closure->errback);
|
|
||||||
g_slice_free (AsyncClosure, async_closure);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
plugin_install_extension (PluginObject *obj,
|
|
||||||
uint32_t argc,
|
|
||||||
const NPVariant *argv,
|
|
||||||
NPVariant *result)
|
|
||||||
{
|
|
||||||
gchar *uuid;
|
|
||||||
NPObject *callback, *errback;
|
|
||||||
AsyncClosure *async_closure;
|
|
||||||
|
|
||||||
if (!parse_args ("uoo", argc, argv, &uuid, &callback, &errback))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
async_closure = g_slice_new (AsyncClosure);
|
|
||||||
async_closure->obj = obj;
|
|
||||||
async_closure->callback = funcs.retainobject (callback);
|
|
||||||
async_closure->errback = funcs.retainobject (errback);
|
|
||||||
|
|
||||||
g_dbus_proxy_call (obj->proxy,
|
g_dbus_proxy_call (obj->proxy,
|
||||||
"InstallRemoteExtension",
|
(enabled ? "EnableExtension" : "DisableExtension"),
|
||||||
g_variant_new ("(s)", uuid),
|
g_variant_new ("(s)", uuid_str),
|
||||||
G_DBUS_CALL_FLAGS_NONE,
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
-1, /* timeout */
|
-1, /* timeout */
|
||||||
NULL, /* cancellable */
|
NULL, /* cancellable */
|
||||||
install_extension_cb,
|
NULL, /* callback */
|
||||||
async_closure);
|
NULL /* user_data */);
|
||||||
|
|
||||||
g_free (uuid);
|
g_free (uuid_str);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
plugin_uninstall_extension (PluginObject *obj,
|
plugin_install_extension (PluginObject *obj,
|
||||||
uint32_t argc,
|
NPString uuid,
|
||||||
const NPVariant *argv,
|
NPString version_tag)
|
||||||
NPVariant *result)
|
{
|
||||||
|
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;
|
GError *error = NULL;
|
||||||
GVariant *res;
|
GVariant *res;
|
||||||
gchar *uuid;
|
gchar *uuid_str;
|
||||||
|
|
||||||
if (!parse_args ("u", argc, argv, &uuid))
|
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
return FALSE;
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
{
|
||||||
|
g_free (uuid_str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
res = g_dbus_proxy_call_sync (obj->proxy,
|
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||||
"UninstallExtension",
|
"UninstallExtension",
|
||||||
g_variant_new ("(s)", uuid),
|
g_variant_new ("(s)",
|
||||||
|
uuid_str),
|
||||||
G_DBUS_CALL_FLAGS_NONE,
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
-1, /* timeout */
|
-1, /* timeout */
|
||||||
NULL, /* cancellable */
|
NULL, /* cancellable */
|
||||||
&error);
|
&error);
|
||||||
|
|
||||||
g_free (uuid);
|
g_free (uuid_str);
|
||||||
|
|
||||||
if (!res)
|
if (!res)
|
||||||
{
|
{
|
||||||
@ -551,27 +585,30 @@ plugin_uninstall_extension (PluginObject *obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
plugin_get_info (PluginObject *obj,
|
plugin_get_info (PluginObject *obj,
|
||||||
uint32_t argc,
|
NPString uuid,
|
||||||
const NPVariant *argv,
|
NPVariant *result)
|
||||||
NPVariant *result)
|
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
GVariant *res;
|
GVariant *res;
|
||||||
gchar *uuid;
|
gchar *uuid_str;
|
||||||
|
|
||||||
if (!parse_args ("u", argc, argv, &uuid))
|
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
return FALSE;
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
{
|
||||||
|
g_free (uuid_str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
res = g_dbus_proxy_call_sync (obj->proxy,
|
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||||
"GetExtensionInfo",
|
"GetExtensionInfo",
|
||||||
g_variant_new ("(s)", uuid),
|
g_variant_new ("(s)", uuid_str),
|
||||||
G_DBUS_CALL_FLAGS_NONE,
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
-1, /* timeout */
|
-1, /* timeout */
|
||||||
NULL, /* cancellable */
|
NULL, /* cancellable */
|
||||||
&error);
|
&error);
|
||||||
|
|
||||||
g_free (uuid);
|
g_free (uuid_str);
|
||||||
|
|
||||||
if (!res)
|
if (!res)
|
||||||
{
|
{
|
||||||
@ -584,26 +621,31 @@ plugin_get_info (PluginObject *obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
plugin_get_errors (PluginObject *obj,
|
plugin_get_errors (PluginObject *obj,
|
||||||
uint32_t argc,
|
NPString uuid,
|
||||||
const NPVariant *argv,
|
NPVariant *result)
|
||||||
NPVariant *result)
|
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
GVariant *res;
|
GVariant *res;
|
||||||
gchar *uuid;
|
gchar *uuid_str;
|
||||||
|
|
||||||
if (!parse_args ("u", argc, argv, &uuid))
|
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
return FALSE;
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
{
|
||||||
|
g_free (uuid_str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
res = g_dbus_proxy_call_sync (obj->proxy,
|
res = g_dbus_proxy_call_sync (obj->proxy,
|
||||||
"GetExtensionErrors",
|
"GetExtensionErrors",
|
||||||
g_variant_new ("(s)", uuid),
|
g_variant_new ("(s)", uuid_str),
|
||||||
G_DBUS_CALL_FLAGS_NONE,
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
-1, /* timeout */
|
-1, /* timeout */
|
||||||
NULL, /* cancellable */
|
NULL, /* cancellable */
|
||||||
&error);
|
&error);
|
||||||
|
|
||||||
|
g_free (uuid_str);
|
||||||
|
|
||||||
if (!res)
|
if (!res)
|
||||||
{
|
{
|
||||||
g_warning ("Failed to retrieve errors: %s", error->message);
|
g_warning ("Failed to retrieve errors: %s", error->message);
|
||||||
@ -615,25 +657,29 @@ plugin_get_errors (PluginObject *obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
plugin_launch_extension_prefs (PluginObject *obj,
|
plugin_launch_extension_prefs (PluginObject *obj,
|
||||||
uint32_t argc,
|
NPString uuid,
|
||||||
const NPVariant *argv,
|
NPVariant *result)
|
||||||
NPVariant *result)
|
|
||||||
{
|
{
|
||||||
gchar *uuid;
|
gchar *uuid_str;
|
||||||
|
|
||||||
if (!parse_args ("u", argc, argv, &uuid))
|
uuid_str = g_strndup (uuid.UTF8Characters, uuid.UTF8Length);
|
||||||
return FALSE;
|
if (!uuid_is_valid (uuid_str))
|
||||||
|
{
|
||||||
|
g_free (uuid_str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
g_dbus_proxy_call (obj->proxy,
|
g_dbus_proxy_call (obj->proxy,
|
||||||
"LaunchExtensionPrefs",
|
"LaunchExtensionPrefs",
|
||||||
g_variant_new ("(s)", uuid),
|
g_variant_new ("(s)", uuid_str),
|
||||||
G_DBUS_CALL_FLAGS_NONE,
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
-1, /* timeout */
|
-1, /* timeout */
|
||||||
NULL, /* cancellable */
|
NULL, /* cancellable */
|
||||||
NULL, /* callback */
|
NULL, /* callback */
|
||||||
NULL /* user_data */);
|
NULL /* user_data */);
|
||||||
|
|
||||||
|
g_free (uuid_str);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -687,52 +733,10 @@ plugin_get_shell_version (PluginObject *obj,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
plugin_get_version_validation_enabled (PluginObject *obj,
|
|
||||||
NPVariant *result)
|
|
||||||
{
|
|
||||||
gboolean is_enabled = !g_settings_get_boolean (obj->settings, EXTENSION_DISABLE_VERSION_CHECK_KEY);
|
|
||||||
BOOLEAN_TO_NPVARIANT(is_enabled, *result);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define METHODS \
|
|
||||||
METHOD (list_extensions) \
|
|
||||||
METHOD (get_info) \
|
|
||||||
METHOD (enable_extension) \
|
|
||||||
METHOD (install_extension) \
|
|
||||||
METHOD (uninstall_extension) \
|
|
||||||
METHOD (get_errors) \
|
|
||||||
METHOD (launch_extension_prefs) \
|
|
||||||
/* */
|
|
||||||
|
|
||||||
#define METHOD(x) \
|
|
||||||
static NPIdentifier x##_id;
|
|
||||||
METHODS
|
|
||||||
#undef METHOD
|
|
||||||
|
|
||||||
static NPIdentifier api_version_id;
|
|
||||||
static NPIdentifier shell_version_id;
|
|
||||||
static NPIdentifier onextension_changed_id;
|
|
||||||
static NPIdentifier onrestart_id;
|
|
||||||
static NPIdentifier version_validation_enabled_id;
|
|
||||||
|
|
||||||
|
|
||||||
static bool
|
|
||||||
plugin_object_has_method (NPObject *npobj,
|
|
||||||
NPIdentifier name)
|
|
||||||
{
|
|
||||||
#define METHOD(x) (name == (x##_id)) ||
|
|
||||||
/* expands to (name == list_extensions_id) || FALSE; */
|
|
||||||
return METHODS FALSE;
|
|
||||||
#undef METHOD
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
plugin_object_invoke (NPObject *npobj,
|
plugin_object_invoke (NPObject *npobj,
|
||||||
NPIdentifier name,
|
NPIdentifier name,
|
||||||
const NPVariant *argv,
|
const NPVariant *args,
|
||||||
uint32_t argc,
|
uint32_t argc,
|
||||||
NPVariant *result)
|
NPVariant *result)
|
||||||
{
|
{
|
||||||
@ -744,13 +748,61 @@ plugin_object_invoke (NPObject *npobj,
|
|||||||
|
|
||||||
VOID_TO_NPVARIANT (*result);
|
VOID_TO_NPVARIANT (*result);
|
||||||
|
|
||||||
#define METHOD(x) \
|
if (!plugin_object_has_method (npobj, name))
|
||||||
if (name == x##_id) \
|
return FALSE;
|
||||||
return plugin_##x (obj, argc, argv, result);
|
|
||||||
METHODS
|
|
||||||
#undef METHOD
|
|
||||||
|
|
||||||
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);
|
||||||
|
}
|
||||||
|
else if (name == launch_extension_prefs_id)
|
||||||
|
{
|
||||||
|
if (!NPVARIANT_IS_STRING(args[0])) return FALSE;
|
||||||
|
|
||||||
|
return plugin_launch_extension_prefs (obj,
|
||||||
|
NPVARIANT_TO_STRING(args[0]),
|
||||||
|
result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@ -760,8 +812,7 @@ plugin_object_has_property (NPObject *npobj,
|
|||||||
return (name == onextension_changed_id ||
|
return (name == onextension_changed_id ||
|
||||||
name == onrestart_id ||
|
name == onrestart_id ||
|
||||||
name == api_version_id ||
|
name == api_version_id ||
|
||||||
name == shell_version_id ||
|
name == shell_version_id);
|
||||||
name == version_validation_enabled_id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@ -779,8 +830,6 @@ plugin_object_get_property (NPObject *npobj,
|
|||||||
return plugin_get_api_version (obj, result);
|
return plugin_get_api_version (obj, result);
|
||||||
else if (name == shell_version_id)
|
else if (name == shell_version_id)
|
||||||
return plugin_get_shell_version (obj, result);
|
return plugin_get_shell_version (obj, result);
|
||||||
else if (name == version_validation_enabled_id)
|
|
||||||
return plugin_get_version_validation_enabled (obj, result);
|
|
||||||
else if (name == onextension_changed_id)
|
else if (name == onextension_changed_id)
|
||||||
{
|
{
|
||||||
if (obj->listener)
|
if (obj->listener)
|
||||||
@ -859,7 +908,6 @@ init_methods_and_properties (void)
|
|||||||
/* this is the JS public API; it is manipulated through NPIdentifiers for speed */
|
/* this is the JS public API; it is manipulated through NPIdentifiers for speed */
|
||||||
api_version_id = funcs.getstringidentifier ("apiVersion");
|
api_version_id = funcs.getstringidentifier ("apiVersion");
|
||||||
shell_version_id = funcs.getstringidentifier ("shellVersion");
|
shell_version_id = funcs.getstringidentifier ("shellVersion");
|
||||||
version_validation_enabled_id = funcs.getstringidentifier ("versionValidationEnabled");
|
|
||||||
|
|
||||||
get_info_id = funcs.getstringidentifier ("getExtensionInfo");
|
get_info_id = funcs.getstringidentifier ("getExtensionInfo");
|
||||||
list_extensions_id = funcs.getstringidentifier ("listExtensions");
|
list_extensions_id = funcs.getstringidentifier ("listExtensions");
|
||||||
@ -873,149 +921,6 @@ init_methods_and_properties (void)
|
|||||||
onextension_changed_id = funcs.getstringidentifier ("onchange");
|
onextension_changed_id = funcs.getstringidentifier ("onchange");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =============== 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;
|
|
||||||
plugin->setwindow = NPP_SetWindow;
|
|
||||||
plugin->event = NPP_HandleEvent;
|
|
||||||
|
|
||||||
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 */
|
|
||||||
PluginObject *obj;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
g_debug ("plugin created");
|
|
||||||
|
|
||||||
if (!check_origin_and_protocol (instance))
|
|
||||||
return NPERR_GENERIC_ERROR;
|
|
||||||
|
|
||||||
/* set windowless mode */
|
|
||||||
funcs.setvalue(instance, NPPVpluginWindowBool, NULL);
|
|
||||||
|
|
||||||
g_debug ("creating scriptable object");
|
|
||||||
init_methods_and_properties ();
|
|
||||||
obj = (PluginObject *) funcs.createobject (instance, &plugin_class);
|
|
||||||
instance->pdata = obj;
|
|
||||||
|
|
||||||
obj->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.Extensions",
|
|
||||||
NULL, /* GCancellable */
|
|
||||||
&error);
|
|
||||||
if (!obj->proxy)
|
|
||||||
{
|
|
||||||
/* ignore error if the shell is not running, otherwise warn */
|
|
||||||
if (!g_error_matches (error, G_DBUS_ERROR, 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj->settings = g_settings_new (SHELL_SCHEMA);
|
|
||||||
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
|
|
||||||
G_CALLBACK (on_shell_signal), obj);
|
|
||||||
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
|
|
||||||
"org.gnome.Shell",
|
|
||||||
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
|
||||||
on_shell_appeared,
|
|
||||||
NULL,
|
|
||||||
obj,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
g_debug ("plugin created successfully");
|
|
||||||
|
|
||||||
return NPERR_NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
NPError
|
|
||||||
NPP_Destroy(NPP instance,
|
|
||||||
NPSavedData **saved)
|
|
||||||
{
|
|
||||||
/* instance finalization function */
|
|
||||||
PluginObject *obj = (PluginObject *) instance->pdata;
|
|
||||||
|
|
||||||
if (!obj)
|
|
||||||
return NPERR_INVALID_INSTANCE_ERROR;
|
|
||||||
|
|
||||||
g_debug ("plugin destroyed");
|
|
||||||
|
|
||||||
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
|
|
||||||
g_object_unref (obj->proxy);
|
|
||||||
|
|
||||||
if (obj->listener)
|
|
||||||
funcs.releaseobject (obj->listener);
|
|
||||||
|
|
||||||
if (obj->restart_listener)
|
|
||||||
funcs.releaseobject (obj->restart_listener);
|
|
||||||
|
|
||||||
if (obj->watch_name_id)
|
|
||||||
g_bus_unwatch_name (obj->watch_name_id);
|
|
||||||
|
|
||||||
funcs.releaseobject((NPObject *)obj);
|
|
||||||
|
|
||||||
return NPERR_NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
NPError
|
NPError
|
||||||
NPP_GetValue(NPP instance,
|
NPP_GetValue(NPP instance,
|
||||||
NPPVariable variable,
|
NPPVariable variable,
|
||||||
@ -1026,11 +931,13 @@ NPP_GetValue(NPP instance,
|
|||||||
switch (variable) {
|
switch (variable) {
|
||||||
case NPPVpluginScriptableNPObject:
|
case NPPVpluginScriptableNPObject:
|
||||||
g_debug ("creating scriptable object");
|
g_debug ("creating scriptable object");
|
||||||
if (!instance->pdata)
|
init_methods_and_properties ();
|
||||||
return NPERR_INVALID_INSTANCE_ERROR;
|
|
||||||
|
|
||||||
funcs.retainobject (instance->pdata);
|
*(NPObject**)value = funcs.createobject (instance, &plugin_class);
|
||||||
*(NPObject**)value = instance->pdata;
|
break;
|
||||||
|
|
||||||
|
case NPPVpluginNeedsXEmbed:
|
||||||
|
*(bool *)value = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -1039,20 +946,3 @@ NPP_GetValue(NPP instance,
|
|||||||
|
|
||||||
return NPERR_NO_ERROR;
|
return NPERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Opera tries to call NPP_SetWindow without checking the
|
|
||||||
* NULL pointer beforehand. */
|
|
||||||
NPError
|
|
||||||
NPP_SetWindow(NPP instance,
|
|
||||||
NPWindow *window)
|
|
||||||
{
|
|
||||||
return NPERR_NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
int16_t
|
|
||||||
NPP_HandleEvent(NPP instance,
|
|
||||||
void *event)
|
|
||||||
{
|
|
||||||
/* Ignore the event */
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
344
configure.ac
@ -1,6 +1,5 @@
|
|||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AC_INIT([gnome-shell],[3.25.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
AC_INIT([gnome-shell],[3.4.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||||
AX_IS_RELEASE([git-directory])
|
|
||||||
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||||
@ -17,149 +16,165 @@ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
|||||||
|
|
||||||
# Checks for programs.
|
# Checks for programs.
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
# Needed for per-target cflags, like in gnomeshell-taskpanel
|
||||||
|
AM_PROG_CC_C_O
|
||||||
|
|
||||||
# Initialize libtool
|
# Initialize libtool
|
||||||
LT_PREREQ([2.2.6])
|
LT_PREREQ([2.2.6])
|
||||||
LT_INIT([disable-static])
|
LT_INIT([disable-static])
|
||||||
|
|
||||||
# i18n
|
# i18n
|
||||||
|
IT_PROG_INTLTOOL([0.40])
|
||||||
|
|
||||||
|
AM_GNU_GETTEXT([external])
|
||||||
|
AM_GNU_GETTEXT_VERSION([0.17])
|
||||||
|
|
||||||
GETTEXT_PACKAGE=gnome-shell
|
GETTEXT_PACKAGE=gnome-shell
|
||||||
AC_SUBST(GETTEXT_PACKAGE)
|
AC_SUBST(GETTEXT_PACKAGE)
|
||||||
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
|
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
|
||||||
[The prefix for our gettext translation domains.])
|
[The prefix for our gettext translation domains.])
|
||||||
|
|
||||||
AM_GNU_GETTEXT_VERSION([0.19.6])
|
|
||||||
AM_GNU_GETTEXT([external])
|
|
||||||
|
|
||||||
PKG_PROG_PKG_CONFIG([0.22])
|
PKG_PROG_PKG_CONFIG([0.22])
|
||||||
|
|
||||||
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
|
||||||
|
|
||||||
GLIB_GSETTINGS
|
GLIB_GSETTINGS
|
||||||
|
|
||||||
# Get a value to substitute into gnome-shell.in
|
# Get a value to substitute into gnome-shell.in
|
||||||
AM_PATH_PYTHON([3])
|
AM_PATH_PYTHON([2.5])
|
||||||
AC_SUBST(PYTHON)
|
AC_SUBST(PYTHON)
|
||||||
|
|
||||||
# We depend on a specific version of the libmutter API. The mutter variants of
|
|
||||||
# the Cogl and Clutter libraries also use this API version.
|
|
||||||
LIBMUTTER_API_VERSION=0
|
|
||||||
|
|
||||||
LIBMUTTER=libmutter-$LIBMUTTER_API_VERSION
|
|
||||||
LIBMUTTER_COGL=mutter-cogl-$LIBMUTTER_API_VERSION
|
|
||||||
LIBMUTTER_COGL_PANGO=mutter-cogl-pango-$LIBMUTTER_API_VERSION
|
|
||||||
LIBMUTTER_CLUTTER=mutter-clutter-$LIBMUTTER_API_VERSION
|
|
||||||
|
|
||||||
# We need at least this, since gst_plugin_register_static() was added
|
# 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.
|
# in 0.10.16, but nothing older than 0.10.21 has been tested.
|
||||||
GSTREAMER_MIN_VERSION=0.11.92
|
GSTREAMER_MIN_VERSION=0.10.16
|
||||||
|
|
||||||
recorder_modules=
|
recorder_modules=
|
||||||
build_recorder=false
|
build_recorder=false
|
||||||
AC_MSG_CHECKING([for GStreamer (needed for recording functionality)])
|
AC_MSG_CHECKING([for GStreamer (needed for recording functionality)])
|
||||||
if $PKG_CONFIG --exists gstreamer-1.0 '>=' $GSTREAMER_MIN_VERSION ; then
|
if $PKG_CONFIG --exists gstreamer-0.10 '>=' $GSTREAMER_MIN_VERSION ; then
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
build_recorder=true
|
build_recorder=true
|
||||||
recorder_modules="gstreamer-1.0 gstreamer-base-1.0 x11 gtk+-3.0"
|
recorder_modules="gstreamer-0.10 gstreamer-base-0.10 x11"
|
||||||
|
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules clutter-1.0 xfixes gl)
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
||||||
|
|
||||||
AC_ARG_ENABLE([systemd],
|
CLUTTER_MIN_VERSION=1.9.16
|
||||||
AS_HELP_STRING([--enable-systemd], [Use systemd]),
|
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||||
[enable_systemd=$enableval],
|
GJS_MIN_VERSION=1.29.18
|
||||||
[enable_systemd=auto])
|
MUTTER_MIN_VERSION=3.4.1
|
||||||
AS_IF([test x$enable_systemd != xno], [
|
FOLKS_MIN_VERSION=0.5.2
|
||||||
AC_MSG_CHECKING([for libsystemd])
|
GTK_MIN_VERSION=3.3.9
|
||||||
PKG_CHECK_EXISTS([libsystemd],
|
GIO_MIN_VERSION=2.31.6
|
||||||
[have_systemd=yes
|
LIBECAL_MIN_VERSION=2.32.0
|
||||||
AC_DEFINE([HAVE_SYSTEMD], [1], [Define if we have systemd])],
|
LIBEDATASERVER_MIN_VERSION=1.2.0
|
||||||
[have_systemd=no])
|
LIBEDATASERVERUI_MIN_VERSION=2.91.6
|
||||||
AC_MSG_RESULT($have_systemd)
|
TELEPATHY_GLIB_MIN_VERSION=0.17.5
|
||||||
])
|
TELEPATHY_LOGGER_MIN_VERSION=0.2.4
|
||||||
|
|
||||||
AC_MSG_RESULT($enable_systemd)
|
|
||||||
|
|
||||||
GOBJECT_INTROSPECTION_MIN_VERSION=1.49.1
|
|
||||||
GJS_MIN_VERSION=1.47.0
|
|
||||||
MUTTER_MIN_VERSION=3.25.3
|
|
||||||
GTK_MIN_VERSION=3.15.0
|
|
||||||
GIO_MIN_VERSION=2.53.0
|
|
||||||
LIBECAL_MIN_VERSION=3.5.3
|
|
||||||
LIBEDATASERVER_MIN_VERSION=3.17.2
|
|
||||||
POLKIT_MIN_VERSION=0.100
|
POLKIT_MIN_VERSION=0.100
|
||||||
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||||
GCR_MIN_VERSION=3.7.5
|
GCR_MIN_VERSION=3.3.90
|
||||||
GNOME_DESKTOP_REQUIRED_VERSION=3.7.90
|
|
||||||
NETWORKMANAGER_MIN_VERSION=0.9.8
|
|
||||||
PULSE_MIN_VERS=2.0
|
|
||||||
|
|
||||||
# Collect more than 20 libraries for a prize!
|
# Collect more than 20 libraries for a prize!
|
||||||
SHARED_PCS="gio-unix-2.0 >= $GIO_MIN_VERSION
|
PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
|
||||||
libxml-2.0
|
libxml-2.0
|
||||||
gtk+-3.0 >= $GTK_MIN_VERSION
|
gtk+-3.0 >= $GTK_MIN_VERSION
|
||||||
atk-bridge-2.0
|
folks >= $FOLKS_MIN_VERSION
|
||||||
gjs-1.0 >= $GJS_MIN_VERSION
|
libmutter >= $MUTTER_MIN_VERSION
|
||||||
$recorder_modules
|
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
||||||
gdk-x11-3.0 libsoup-2.4
|
libgnome-menu-3.0 $recorder_modules
|
||||||
$LIBMUTTER_CLUTTER >= $MUTTER_MIN_VERSION
|
gdk-x11-3.0 libsoup-2.4
|
||||||
$LIBMUTTER_COGL_PANGO
|
gl
|
||||||
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
|
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
|
||||||
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
|
||||||
libcanberra libcanberra-gtk3
|
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
|
||||||
polkit-agent-1 >= $POLKIT_MIN_VERSION
|
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
||||||
gcr-base-3 >= $GCR_MIN_VERSION"
|
libcanberra
|
||||||
if test x$have_systemd = xyes; then
|
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
|
||||||
SHARED_PCS="${SHARED_PCS} libsystemd"
|
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
|
||||||
fi
|
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
|
||||||
|
libnm-glib libnm-util gnome-keyring-1
|
||||||
|
gcr-3 >= $GCR_MIN_VERSION)
|
||||||
|
|
||||||
PKG_CHECK_MODULES(GNOME_SHELL, $SHARED_PCS)
|
|
||||||
PKG_CHECK_MODULES(MUTTER, $LIBMUTTER >= $MUTTER_MIN_VERSION)
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-1.0 >= $GJS_MIN_VERSION)
|
|
||||||
PKG_CHECK_MODULES(ST, $LIBMUTTER_CLUTTER gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
|
|
||||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
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(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
|
||||||
PKG_CHECK_MODULES(TRAY, $LIBMUTTER_CLUTTER gtk+-3.0)
|
|
||||||
PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0)
|
|
||||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.21.3)
|
|
||||||
|
|
||||||
AC_SUBST(LIBMUTTER_API_VERSION)
|
PKG_CHECK_MODULES(BROWSER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION json-glib-1.0 >= 0.13.2)
|
||||||
|
|
||||||
AC_ARG_ENABLE(browser-plugin,
|
GJS_VERSION=`$PKG_CONFIG --modversion gjs-internals-1.0`
|
||||||
[AS_HELP_STRING([--enable-browser-plugin],
|
AC_DEFINE_UNQUOTED([GJS_VERSION], ["$GJS_VERSION"], [The version of GJS we're linking to])
|
||||||
[Enable browser plugin [default=yes]])],,
|
AC_SUBST([GJS_VERSION], ["$GJS_VERSION"])
|
||||||
enable_browser_plugin=yes)
|
|
||||||
AS_IF([test x$enable_browser_plugin = xyes], [
|
|
||||||
PKG_CHECK_MODULES(BROWSER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION json-glib-1.0 >= 0.13.2)
|
|
||||||
])
|
|
||||||
AM_CONDITIONAL(BUILD_BROWSER_PLUGIN, test x$enable_browser_plugin = xyes)
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES(BLUETOOTH, gnome-bluetooth-1.0 >= 3.9.0,
|
|
||||||
[AC_DEFINE([HAVE_BLUETOOTH],[1],[Define if you have libgnome-bluetooth-applet])
|
|
||||||
AC_SUBST([HAVE_BLUETOOTH],[1])],
|
|
||||||
[AC_DEFINE([HAVE_BLUETOOTH],[0])
|
|
||||||
AC_SUBST([HAVE_BLUETOOTH],[0])])
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION gio-2.0)
|
|
||||||
AC_SUBST(CALENDAR_SERVER_CFLAGS)
|
|
||||||
AC_SUBST(CALENDAR_SERVER_LIBS)
|
|
||||||
|
|
||||||
GNOME_KEYBINDINGS_KEYSDIR=`$PKG_CONFIG --variable keysdir gnome-keybindings`
|
|
||||||
AC_SUBST([GNOME_KEYBINDINGS_KEYSDIR])
|
|
||||||
|
|
||||||
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
|
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
|
||||||
|
|
||||||
MUTTER_GIR_DIR=`$PKG_CONFIG --variable=girdir $LIBMUTTER`
|
saved_CFLAGS=$CFLAGS
|
||||||
AC_SUBST(MUTTER_GIR_DIR)
|
saved_LIBS=$LIBS
|
||||||
|
CFLAGS=$GNOME_SHELL_CFLAGS
|
||||||
|
LIBS=$GNOME_SHELL_LIBS
|
||||||
|
AC_CHECK_FUNCS(JS_NewGlobalObject XFixesCreatePointerBarrier)
|
||||||
|
CFLAGS=$saved_CFLAGS
|
||||||
|
LIBS=$saved_LIBS
|
||||||
|
|
||||||
MUTTER_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir $LIBMUTTER`
|
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
|
||||||
|
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 x11)
|
||||||
|
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_SUBST([BLUETOOTH_DIR],["$BLUETOOTH_DIR"])
|
||||||
|
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)
|
||||||
|
|
||||||
|
AC_ARG_WITH(systemd,
|
||||||
|
AS_HELP_STRING([--with-systemd],
|
||||||
|
[Add systemd support]),
|
||||||
|
[with_systemd=$withval], [with_systemd=auto])
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(SYSTEMD,
|
||||||
|
[libsystemd-login libsystemd-daemon],
|
||||||
|
[have_systemd=yes], [have_systemd=no])
|
||||||
|
|
||||||
|
if test "x$with_systemd" = "xauto" ; then
|
||||||
|
if test x$have_systemd = xno ; then
|
||||||
|
use_systemd=no
|
||||||
|
else
|
||||||
|
use_systemd=yes
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
use_systemd=$with_systemd
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$use_systemd" = "xyes"; then
|
||||||
|
if test "x$have_systemd" = "xno"; then
|
||||||
|
AC_MSG_ERROR([Systemd support explicitly required, but systemd not found])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_DEFINE(WITH_SYSTEMD, 1, [systemd support])
|
||||||
|
fi
|
||||||
|
|
||||||
|
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)
|
AC_SUBST(MUTTER_TYPELIB_DIR)
|
||||||
|
|
||||||
GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable glib_compile_resources gio-2.0`
|
GJS_CONSOLE=`$PKG_CONFIG --variable=gjs_console gjs-1.0`
|
||||||
AC_SUBST(GLIB_COMPILE_RESOURCES)
|
AC_SUBST(GJS_CONSOLE)
|
||||||
|
|
||||||
AC_CHECK_FUNCS(fdwalk)
|
AC_CHECK_FUNCS(fdwalk)
|
||||||
AC_CHECK_FUNCS(mallinfo)
|
AC_CHECK_FUNCS(mallinfo)
|
||||||
@ -176,78 +191,80 @@ if test "$langinfo_ok" = "yes"; then
|
|||||||
[Define if _NL_TIME_FIRST_WEEKDAY is available])
|
[Define if _NL_TIME_FIRST_WEEKDAY is available])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE(networkmanager,
|
|
||||||
AS_HELP_STRING([--disable-networkmanager],
|
|
||||||
[disable NetworkManager support @<:@default=auto@:>@]),,
|
|
||||||
[enable_networkmanager=auto])
|
|
||||||
|
|
||||||
if test "x$enable_networkmanager" != "xno"; then
|
|
||||||
PKG_CHECK_MODULES(NETWORKMANAGER,
|
|
||||||
[libnm-glib
|
|
||||||
libnm-util >= $NETWORKMANAGER_MIN_VERSION
|
|
||||||
libnm-gtk >= $NETWORKMANAGER_MIN_VERSION
|
|
||||||
libsecret-1 >= 0.18],
|
|
||||||
[have_networkmanager=yes],
|
|
||||||
[have_networkmanager=no])
|
|
||||||
|
|
||||||
GNOME_SHELL_CFLAGS="$GNOME_SHELL_CFLAGS $NETWORKMANAGER_CFLAGS"
|
|
||||||
GNOME_SHELL_LIBS="$GNOME_SHELL_LIBS $NETWORKMANAGER_LIBS"
|
|
||||||
else
|
|
||||||
have_networkmanager="no (disabled)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$have_networkmanager" = "xyes"; then
|
|
||||||
AC_DEFINE(HAVE_NETWORKMANAGER, [1], [Define if we have NetworkManager])
|
|
||||||
AC_SUBST([HAVE_NETWORKMANAGER], [1])
|
|
||||||
else
|
|
||||||
if test "x$enable_networkmanager" = "xyes"; then
|
|
||||||
AC_MSG_ERROR([Couldn't find NetworkManager.])
|
|
||||||
fi
|
|
||||||
AC_SUBST([HAVE_NETWORKMANAGER], [0])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AM_CONDITIONAL(HAVE_NETWORKMANAGER, test "$have_networkmanager" = "yes")
|
|
||||||
|
|
||||||
# Sets GLIB_GENMARSHAL and GLIB_MKENUMS
|
# Sets GLIB_GENMARSHAL and GLIB_MKENUMS
|
||||||
AM_PATH_GLIB_2_0()
|
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)
|
||||||
|
|
||||||
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
|
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
|
||||||
|
|
||||||
AC_ARG_ENABLE(man,
|
# Stay command-line compatible with the gnome-common configure option. Here
|
||||||
[AS_HELP_STRING([--enable-man],
|
# minimum/yes/maximum are the same, however.
|
||||||
[generate man pages [default=yes]])],,
|
AC_ARG_ENABLE(compile_warnings,
|
||||||
enable_man=yes)
|
AS_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],[Turn on compiler warnings]),,
|
||||||
if test "$enable_man" != no; then
|
enable_compile_warnings=error)
|
||||||
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
|
||||||
if test -z "$XSLTPROC"; then
|
changequote(,)dnl
|
||||||
AC_MSG_ERROR([xsltproc is required for --enable-man])
|
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 -Wno-error=deprecated-declarations" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
|
changequote([,])dnl
|
||||||
|
|
||||||
AX_COMPILER_FLAGS()
|
AC_ARG_ENABLE(jhbuild-wrapper-script,
|
||||||
case "$WARN_CFLAGS" in
|
AS_HELP_STRING([--enable-jhbuild-wrapper-script],[Make "gnome-shell" script work for jhbuild]),,enable_jhbuild_wrapper_script=no)
|
||||||
*-Werror*)
|
AM_CONDITIONAL(USE_JHBUILD_WRAPPER_SCRIPT, test "x$enable_jhbuild_wrapper_script" = xyes)
|
||||||
WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
|
AC_MSG_CHECKING([location of system Certificate Authority list])
|
||||||
AC_SUBST(AM_CFLAGS)
|
AC_ARG_WITH(ca-certificates,
|
||||||
|
[AC_HELP_STRING([--with-ca-certificates=@<:@path@:>@],
|
||||||
|
[path to system Certificate Authority list])])
|
||||||
|
|
||||||
if test -z "${BROWSER_PLUGIN_DIR}"; then
|
if test "$with_ca_certificates" = "no"; then
|
||||||
BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins"
|
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
|
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_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
||||||
|
|
||||||
AC_ARG_VAR([GDBUS_CODEGEN],[the gdbus-codegen programme])
|
|
||||||
AC_PATH_PROG([GDBUS_CODEGEN],[gdbus-codegen],[])
|
|
||||||
if test -z "$GDBUS_CODEGEN"; then
|
|
||||||
AC_MSG_ERROR([gdbus-codegen not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_PATH_PROG([SASSC],[sassc],[])
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
data/Makefile
|
data/Makefile
|
||||||
@ -259,22 +276,9 @@ AC_CONFIG_FILES([
|
|||||||
docs/reference/st/st-docs.sgml
|
docs/reference/st/st-docs.sgml
|
||||||
js/Makefile
|
js/Makefile
|
||||||
src/Makefile
|
src/Makefile
|
||||||
src/gvc/Makefile
|
|
||||||
browser-plugin/Makefile
|
browser-plugin/Makefile
|
||||||
tests/Makefile
|
tests/Makefile
|
||||||
po/Makefile.in
|
po/Makefile.in
|
||||||
man/Makefile
|
man/Makefile
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
echo "
|
|
||||||
Build configuration:
|
|
||||||
|
|
||||||
Prefix: ${prefix}
|
|
||||||
Source code location: ${srcdir}
|
|
||||||
Compiler: ${CC}
|
|
||||||
Compiler Warnings: $ax_enable_compile_warnings
|
|
||||||
|
|
||||||
Support for NetworkManager: $have_networkmanager
|
|
||||||
Support for GStreamer recording: $build_recorder
|
|
||||||
"
|
|
||||||
|
@ -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>
|
|
||||||
|
|
156
data/Makefile.am
@ -1,29 +1,5 @@
|
|||||||
CLEANFILES =
|
|
||||||
NULL =
|
|
||||||
|
|
||||||
portaldir = $(datadir)/xdg-desktop-portal/portals
|
|
||||||
portal_DATA = gnome-shell.portal
|
|
||||||
|
|
||||||
desktopdir=$(datadir)/applications
|
desktopdir=$(datadir)/applications
|
||||||
desktop_DATA = org.gnome.Shell.desktop gnome-shell-extension-prefs.desktop
|
desktop_DATA = gnome-shell.desktop gnome-shell-extension-prefs.desktop
|
||||||
|
|
||||||
if HAVE_NETWORKMANAGER
|
|
||||||
desktop_DATA += org.gnome.Shell.PortalHelper.desktop
|
|
||||||
|
|
||||||
servicedir = $(datadir)/dbus-1/services
|
|
||||||
service_DATA = org.gnome.Shell.PortalHelper.service
|
|
||||||
|
|
||||||
CLEANFILES += \
|
|
||||||
org.gnome.Shell.PortalHelper.service \
|
|
||||||
org.gnome.Shell.PortalHelper.desktop \
|
|
||||||
org.gnome.Shell.PortalHelper.desktop.in \
|
|
||||||
$(NULL)
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
%.service: %.service.in
|
|
||||||
$(AM_V_GEN) sed -e "s|@libexecdir[@]|$(libexecdir)|" \
|
|
||||||
$< > $@ || rm $@
|
|
||||||
|
|
||||||
# We substitute in bindir so it works as an autostart
|
# We substitute in bindir so it works as an autostart
|
||||||
# file when built in a non-system prefix
|
# file when built in a non-system prefix
|
||||||
@ -32,69 +8,54 @@ endif
|
|||||||
-e "s|@VERSION[@]|$(VERSION)|" \
|
-e "s|@VERSION[@]|$(VERSION)|" \
|
||||||
$< > $@ || rm $@
|
$< > $@ || rm $@
|
||||||
|
|
||||||
|
# Placeholder until we add intltool
|
||||||
%.desktop:%.desktop.in
|
%.desktop:%.desktop.in
|
||||||
$(AM_V_GEN) $(MSGFMT) --desktop --template $(builddir)/$< \
|
$(AM_V_GEN) sed s/^_// < $< > $@ || rm $@
|
||||||
-d $(top_srcdir)/po -o $@
|
|
||||||
|
searchprovidersdir = $(pkgdatadir)/open-search-providers
|
||||||
|
dist_searchproviders_DATA = \
|
||||||
|
open-search-providers/google.xml \
|
||||||
|
open-search-providers/wikipedia.xml
|
||||||
|
|
||||||
introspectiondir = $(datadir)/dbus-1/interfaces
|
introspectiondir = $(datadir)/dbus-1/interfaces
|
||||||
introspection_DATA = \
|
introspection_DATA = org.gnome.ShellSearchProvider.xml
|
||||||
org.gnome.Shell.PadOsd.xml \
|
|
||||||
org.gnome.Shell.Screencast.xml \
|
|
||||||
org.gnome.Shell.Screenshot.xml \
|
|
||||||
org.gnome.ShellSearchProvider.xml \
|
|
||||||
org.gnome.ShellSearchProvider2.xml \
|
|
||||||
$(NULL)
|
|
||||||
|
|
||||||
theme_sources = \
|
themedir = $(pkgdatadir)/theme
|
||||||
theme/gnome-shell-high-contrast.scss \
|
dist_theme_DATA = \
|
||||||
theme/gnome-shell.scss \
|
theme/calendar-arrow-left.svg \
|
||||||
theme/gnome-shell-sass/_colors.scss \
|
theme/calendar-arrow-right.svg \
|
||||||
theme/gnome-shell-sass/_common.scss \
|
theme/calendar-today.svg \
|
||||||
theme/gnome-shell-sass/_drawing.scss \
|
theme/checkbox-focused.svg \
|
||||||
theme/gnome-shell-sass/_high-contrast-colors.scss \
|
theme/checkbox-off-focused.svg \
|
||||||
$(NULL)
|
theme/checkbox-off.svg \
|
||||||
|
theme/checkbox.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-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
|
||||||
|
|
||||||
dist_theme_files = \
|
gsettings_SCHEMAS = org.gnome.shell.gschema.xml org.gnome.shell.evolution.calendar.gschema.xml
|
||||||
$(theme_sources) \
|
|
||||||
theme/HACKING \
|
|
||||||
theme/README \
|
|
||||||
theme/gnome-shell-sass/COPYING \
|
|
||||||
theme/gnome-shell-sass/HACKING \
|
|
||||||
theme/gnome-shell-sass/NEWS \
|
|
||||||
theme/gnome-shell-sass/README \
|
|
||||||
theme/gnome-shell-sass/gnome-shell-sass.doap \
|
|
||||||
theme/pad-osd.css \
|
|
||||||
theme/parse-sass.sh \
|
|
||||||
$(NULL)
|
|
||||||
|
|
||||||
%.css: %.scss $(theme_sources)
|
|
||||||
@if test -n "$(SASSC)"; then \
|
|
||||||
if $(AM_V_P); then PS4= set -x; else echo " GEN $@"; fi; \
|
|
||||||
$(SASSC) -a $< $@; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/theme --generate-dependencies $(srcdir)/gnome-shell-theme.gresource.xml)
|
|
||||||
gnome-shell-theme.gresource: gnome-shell-theme.gresource.xml $(resource_files)
|
|
||||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/theme $<
|
|
||||||
resourcedir = $(pkgdatadir)
|
|
||||||
resource_DATA = gnome-shell-theme.gresource
|
|
||||||
|
|
||||||
backgrounddir = $(pkgdatadir)
|
|
||||||
background_DATA = perf-background.xml
|
|
||||||
|
|
||||||
perf-background.xml: perf-background.xml.in
|
|
||||||
$(AM_V_GEN) sed -e "s|@datadir[@]|$(datadir)|" \
|
|
||||||
$< > $@ || rm $@
|
|
||||||
|
|
||||||
keysdir = @GNOME_KEYBINDINGS_KEYSDIR@
|
|
||||||
keys_DATA = 50-gnome-shell-system.xml
|
|
||||||
|
|
||||||
gsettings_SCHEMAS = org.gnome.shell.gschema.xml
|
|
||||||
|
|
||||||
%.gschema.xml: %.gschema.xml.in Makefile
|
|
||||||
$(AM_V_GEN) sed -e 's|@GETTEXT_PACKAGE[@]|$(GETTEXT_PACKAGE)|g' \
|
|
||||||
$< > $@ || rm $@
|
|
||||||
|
|
||||||
|
@INTLTOOL_XML_NOMERGE_RULE@
|
||||||
@GSETTINGS_RULES@
|
@GSETTINGS_RULES@
|
||||||
|
|
||||||
# We need to compile schemas at make time
|
# We need to compile schemas at make time
|
||||||
@ -107,30 +68,25 @@ all-local: gschemas.compiled
|
|||||||
convertdir = $(datadir)/GConf/gsettings
|
convertdir = $(datadir)/GConf/gsettings
|
||||||
convert_DATA = gnome-shell-overrides.convert
|
convert_DATA = gnome-shell-overrides.convert
|
||||||
|
|
||||||
|
shadersdir = $(pkgdatadir)/shaders
|
||||||
|
shaders_DATA = \
|
||||||
|
shaders/dim-window.glsl
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
org.gnome.Shell.desktop.in.in \
|
gnome-shell.desktop.in.in \
|
||||||
gnome-shell-extension-prefs.desktop.in.in \
|
gnome-shell-extension-prefs.desktop.in.in \
|
||||||
$(portal_DATA) \
|
|
||||||
$(introspection_DATA) \
|
$(introspection_DATA) \
|
||||||
$(menu_DATA) \
|
$(menu_DATA) \
|
||||||
|
$(shaders_DATA) \
|
||||||
$(convert_DATA) \
|
$(convert_DATA) \
|
||||||
$(keys_DATA) \
|
org.gnome.shell.evolution.calendar.gschema.xml.in \
|
||||||
$(dist_theme_files) \
|
org.gnome.shell.gschema.xml.in
|
||||||
perf-background.xml.in \
|
|
||||||
org.gnome.Shell.PortalHelper.desktop.in.in \
|
|
||||||
org.gnome.Shell.PortalHelper.service.in \
|
|
||||||
org.gnome.shell.gschema.xml.in \
|
|
||||||
gnome-shell-theme.gresource.xml \
|
|
||||||
$(resource_files) \
|
|
||||||
$(NULL)
|
|
||||||
|
|
||||||
CLEANFILES += \
|
CLEANFILES = \
|
||||||
org.gnome.Shell.desktop.in \
|
gnome-shell.desktop.in \
|
||||||
gnome-shell-extension-prefs.in \
|
gnome-shell-extension-prefs.in \
|
||||||
$(desktop_DATA) \
|
$(desktop_DATA) \
|
||||||
$(gsettings_SCHEMAS) \
|
$(gsettings_SCHEMAS) \
|
||||||
perf-background.xml \
|
gschemas.compiled
|
||||||
gschemas.compiled \
|
|
||||||
org.gnome.shell.gschema.valid \
|
|
||||||
gnome-shell-theme.gresource \
|
|
||||||
$(NULL)
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Type=Application
|
Type=Application
|
||||||
Name=Shell Extensions
|
_Name=GNOME Shell Extension Preferences
|
||||||
Comment=Configure GNOME Shell Extensions
|
_Comment=Configure GNOME Shell Extensions
|
||||||
Exec=@bindir@/gnome-shell-extension-prefs %u
|
Exec=@bindir@/gnome-shell-extension-prefs %u
|
||||||
X-GNOME-Bugzilla-Bugzilla=GNOME
|
X-GNOME-Bugzilla-Bugzilla=GNOME
|
||||||
X-GNOME-Bugzilla-Product=gnome-shell
|
X-GNOME-Bugzilla-Product=gnome-shell
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
[org.gnome.shell.overrides]
|
[org.gnome.shell.overrides]
|
||||||
attach-modal-dialogs = /desktop/gnome/shell/windows/attach_modal_dialogs
|
attach-modal-dialogs = /desktop/gnome/shell/windows/attach_modal_dialogs
|
||||||
|
button-layout = /desktop/gnome/shell/windows/button_layout
|
||||||
edge-tiling = /desktop/gnome/shell/windows/edge_tiling
|
edge-tiling = /desktop/gnome/shell/windows/edge_tiling
|
||||||
workspaces-only-on-primary = /desktop/gnome/shell/windows/workspaces_only_on_primary
|
workspaces-only-on-primary = /desktop/gnome/shell/windows/workspaces_only_on_primary
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<gresources>
|
|
||||||
<gresource prefix="/org/gnome/shell/theme">
|
|
||||||
<file>calendar-arrow-left.svg</file>
|
|
||||||
<file>calendar-arrow-right.svg</file>
|
|
||||||
<file>calendar-today.svg</file>
|
|
||||||
<file>checkbox-focused.svg</file>
|
|
||||||
<file>checkbox-off-focused.svg</file>
|
|
||||||
<file>checkbox-off.svg</file>
|
|
||||||
<file>checkbox.svg</file>
|
|
||||||
<file>close-window.svg</file>
|
|
||||||
<file>close.svg</file>
|
|
||||||
<file>corner-ripple-ltr.png</file>
|
|
||||||
<file>corner-ripple-rtl.png</file>
|
|
||||||
<file>dash-placeholder.svg</file>
|
|
||||||
<file>filter-selected-ltr.svg</file>
|
|
||||||
<file>filter-selected-rtl.svg</file>
|
|
||||||
<file>gnome-shell.css</file>
|
|
||||||
<file>gnome-shell-high-contrast.css</file>
|
|
||||||
<file>logged-in-indicator.svg</file>
|
|
||||||
<file>more-results.svg</file>
|
|
||||||
<file>no-events.svg</file>
|
|
||||||
<file>no-notifications.svg</file>
|
|
||||||
<file>noise-texture.png</file>
|
|
||||||
<file>pad-osd.css</file>
|
|
||||||
<file>page-indicator-active.svg</file>
|
|
||||||
<file>page-indicator-inactive.svg</file>
|
|
||||||
<file>page-indicator-checked.svg</file>
|
|
||||||
<file>page-indicator-hover.svg</file>
|
|
||||||
<file>process-working.svg</file>
|
|
||||||
<file>running-indicator.svg</file>
|
|
||||||
<file>source-button-border.svg</file>
|
|
||||||
<file>summary-counter.svg</file>
|
|
||||||
<file>toggle-off-us.svg</file>
|
|
||||||
<file>toggle-off-intl.svg</file>
|
|
||||||
<file>toggle-off-hc.svg</file>
|
|
||||||
<file>toggle-on-us.svg</file>
|
|
||||||
<file>toggle-on-intl.svg</file>
|
|
||||||
<file>toggle-on-hc.svg</file>
|
|
||||||
<file>ws-switch-arrow-up.png</file>
|
|
||||||
<file>ws-switch-arrow-down.png</file>
|
|
||||||
</gresource>
|
|
||||||
</gresources>
|
|
@ -1,7 +1,7 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Type=Application
|
Type=Application
|
||||||
Name=GNOME Shell
|
_Name=GNOME Shell
|
||||||
Comment=Window management and application launching
|
_Comment=Window management and application launching
|
||||||
Exec=@bindir@/gnome-shell
|
Exec=@bindir@/gnome-shell
|
||||||
X-GNOME-Bugzilla-Bugzilla=GNOME
|
X-GNOME-Bugzilla-Bugzilla=GNOME
|
||||||
X-GNOME-Bugzilla-Product=gnome-shell
|
X-GNOME-Bugzilla-Product=gnome-shell
|
||||||
@ -10,7 +10,7 @@ X-GNOME-Bugzilla-Version=@VERSION@
|
|||||||
Categories=GNOME;GTK;Core;
|
Categories=GNOME;GTK;Core;
|
||||||
OnlyShowIn=GNOME;
|
OnlyShowIn=GNOME;
|
||||||
NoDisplay=true
|
NoDisplay=true
|
||||||
X-GNOME-Autostart-Phase=DisplayServer
|
X-GNOME-Autostart-Phase=WindowManager
|
||||||
X-GNOME-Provides=panel;windowmanager;
|
X-GNOME-Provides=panel;windowmanager;
|
||||||
X-GNOME-Autostart-Notify=true
|
X-GNOME-Autostart-Notify=true
|
||||||
X-GNOME-AutoRestart=false
|
X-GNOME-AutoRestart=false
|
@ -1,4 +0,0 @@
|
|||||||
[portal]
|
|
||||||
DBusName=org.freedesktop.impl.portal.desktop.gnome
|
|
||||||
Interfaces=org.freedesktop.impl.portal.Access
|
|
||||||
UseIn=gnome
|
|
7
data/open-search-providers/google.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||||
|
<ShortName>Google</ShortName>
|
||||||
|
<Description>Google Search</Description>
|
||||||
|
<InputEncoding>UTF-8</InputEncoding>
|
||||||
|
<Image width="16" height="16">data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F39%2F%2F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%2F%2B%2Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%2BooT8%2Fv%2F7%2F%2F%2FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%2BhwGfXifWvqz%2B%2Ff%2F58u%2Fev6Dt4tr%2B%2F%2F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%2FkwBChwHt4dv%2F%2F%2F728ei1bCi7VAC5XQ7kz7n%2F%2F%2F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%2F%2F%2F9%2F%2F%2FSqYK5UwDKZAS9WALIkFn%2B%2F%2F3%2F%2BP8oKccGGcIRJrERILYFEMwAAuEAAdX%2F%2Ff7%2F%2FP%2B%2BfDvGXQLIZgLEWgLOjlf7%2F%2F%2F%2F%2F%2F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%2F%2F%2F%2F7%2B%2Fu2bCTIYwDPZgDBWQDSr4P%2F%2Fv%2F%2F%2FP5GRuABAPkAA%2FwBAfkDAPAAAesAAN%2F%2F%2B%2Fz%2F%2F%2F64g1C5VwDMYwK8Yg7y5tz8%2Fv%2FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%2F%2FPvi28ymXyChTATRrIb8%2F%2F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA</Image>
|
||||||
|
<Url type="text/html" method="GET" template="http://www.google.com/search?q={searchTerms}"/>
|
||||||
|
</OpenSearchDescription>
|
44
data/open-search-providers/wikipedia.xml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||||
|
<ShortName>Wikipedia</ShortName>
|
||||||
|
<Description>Wikipedia, the free encyclopedia</Description>
|
||||||
|
<InputEncoding>UTF-8</InputEncoding>
|
||||||
|
<Image width="16" height="16">data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAEAgQAhIOEAMjHyABIR0gA6ejpAGlqaQCpqKkAKCgoAPz9%2FAAZGBkAmJiYANjZ2ABXWFcAent6ALm6uQA8OjwAiIiIiIiIiIiIiI4oiL6IiIiIgzuIV4iIiIhndo53KIiIiB%2FWvXoYiIiIfEZfWBSIiIEGi%2FfoqoiIgzuL84i9iIjpGIoMiEHoiMkos3FojmiLlUipYliEWIF%2BiDe0GoRa7D6GPbjcu1yIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</Image>
|
||||||
|
<Url type="text/html" method="GET" template="http://{language}.wikipedia.org/wiki/Special:Search?search={searchTerms}"/>
|
||||||
|
<!-- The criterion for being below is being listed with more than 100,000
|
||||||
|
articles on http://meta.wikimedia.org/wiki/List_of_Wikipedias -->
|
||||||
|
<Language>ar</Language>
|
||||||
|
<Language>bg</Language>
|
||||||
|
<Language>ca</Language>
|
||||||
|
<Language>cs</Language>
|
||||||
|
<Language>da</Language>
|
||||||
|
<Language>de</Language>
|
||||||
|
<Language>en</Language>
|
||||||
|
<Language>eo</Language>
|
||||||
|
<Language>es</Language>
|
||||||
|
<Language>fa</Language>
|
||||||
|
<Language>fi</Language>
|
||||||
|
<Language>fr</Language>
|
||||||
|
<Language>he</Language>
|
||||||
|
<Language>hu</Language>
|
||||||
|
<Language>id</Language>
|
||||||
|
<Language>it</Language>
|
||||||
|
<Language>ja</Language>
|
||||||
|
<Language>ko</Language>
|
||||||
|
<Language>lt</Language>
|
||||||
|
<Language>nl</Language>
|
||||||
|
<Language>no</Language>
|
||||||
|
<Language>pl</Language>
|
||||||
|
<Language>pt</Language>
|
||||||
|
<Language>ro</Language>
|
||||||
|
<Language>ru</Language>
|
||||||
|
<Language>sk</Language>
|
||||||
|
<Language>sl</Language>
|
||||||
|
<Language>sr</Language>
|
||||||
|
<Language>sv</Language>
|
||||||
|
<Language>tr</Language>
|
||||||
|
<Language>uk</Language>
|
||||||
|
<Language>vi</Language>
|
||||||
|
<Language>vo</Language>
|
||||||
|
<Language>war</Language>
|
||||||
|
<Language>zh</Language>
|
||||||
|
</OpenSearchDescription>
|
@ -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,10 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Name=Network Login
|
|
||||||
Type=Application
|
|
||||||
Exec=gapplication launch org.gnome.Shell.PortalHelper
|
|
||||||
DBusActivatable=true
|
|
||||||
NoDisplay=true
|
|
||||||
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
|
||||||
Icon=network-workgroup
|
|
||||||
StartupNotify=true
|
|
||||||
OnlyShowIn=GNOME;
|
|
@ -1,3 +0,0 @@
|
|||||||
[D-BUS Service]
|
|
||||||
Name=org.gnome.Shell.PortalHelper
|
|
||||||
Exec=@libexecdir@/gnome-shell-portal-helper
|
|
@ -1,95 +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.Screencast:
|
|
||||||
@short_description: Screencast interface
|
|
||||||
|
|
||||||
The interface used to record screen contents.
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Shell.Screencast">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Screencast:
|
|
||||||
@file_template: the template for the filename to use
|
|
||||||
@options: a dictionary of optional parameters
|
|
||||||
@success: whether the screencast was started successfully
|
|
||||||
@filename_used: the file where the screencast is being saved
|
|
||||||
|
|
||||||
Records a screencast of the whole screen and saves it
|
|
||||||
(by default) as webm video under a filename derived from
|
|
||||||
@file_template. The template is either a relative or absolute
|
|
||||||
filename which may contain some escape sequences - %d and %t
|
|
||||||
will be replaced by the start date and time of the recording.
|
|
||||||
If a relative name is used, the screencast will be saved in the
|
|
||||||
$XDG_VIDEOS_DIR if it exists, or the home directory otherwise.
|
|
||||||
The actual filename of the saved video is returned in @filename_used.
|
|
||||||
The set of optional parameters in @options currently consists of:
|
|
||||||
'draw-cursor'(b): whether the cursor should be included in the
|
|
||||||
recording (true)
|
|
||||||
'framerate'(i): the number of frames per second that should be
|
|
||||||
recorded if possible (30)
|
|
||||||
'pipeline'(s): the GStreamer pipeline used to encode recordings
|
|
||||||
in gst-launch format; if not specified, the
|
|
||||||
recorder will produce vp8 (webm) video (unset)
|
|
||||||
-->
|
|
||||||
<method name="Screencast">
|
|
||||||
<arg type="s" direction="in" name="file_template"/>
|
|
||||||
<arg type="a{sv}" direction="in" name="options"/>
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
|
||||||
<arg type="s" direction="out" name="filename_used"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ScreencastArea:
|
|
||||||
@x: the X coordinate of the area to capture
|
|
||||||
@y: the Y coordinate of the area to capture
|
|
||||||
@width: the width of the area to capture
|
|
||||||
@height: the height of the area to capture
|
|
||||||
@file_template: the template for the filename to use
|
|
||||||
@options: a dictionary of optional parameters
|
|
||||||
@success: whether the screencast was started successfully
|
|
||||||
@filename_used: the file where the screencast is being saved
|
|
||||||
|
|
||||||
Records a screencast of the passed in area and saves it
|
|
||||||
(by default) as webm video under a filename derived from
|
|
||||||
@file_template. The template is either a relative or absolute
|
|
||||||
filename which may contain some escape sequences - %d and %t
|
|
||||||
will be replaced by the start date and time of the recording.
|
|
||||||
If a relative name is used, the screencast will be saved in the
|
|
||||||
$XDG_VIDEOS_DIR if it exists, or the home directory otherwise.
|
|
||||||
The actual filename of the saved video is returned in @filename_used.
|
|
||||||
The set of optional parameters in @options currently consists of:
|
|
||||||
'draw-cursor'(b): whether the cursor should be included in the
|
|
||||||
recording (true)
|
|
||||||
'framerate'(i): the number of frames per second that should be
|
|
||||||
recorded if possible (30)
|
|
||||||
'pipeline'(s): the GStreamer pipeline used to encode recordings
|
|
||||||
in gst-launch format; if not specified, the
|
|
||||||
recorder will produce vp8 (webm) video (unset)
|
|
||||||
-->
|
|
||||||
<method name="ScreencastArea">
|
|
||||||
<arg type="i" direction="in" name="x"/>
|
|
||||||
<arg type="i" direction="in" name="y"/>
|
|
||||||
<arg type="i" direction="in" name="width"/>
|
|
||||||
<arg type="i" direction="in" name="height"/>
|
|
||||||
<arg type="s" direction="in" name="file_template"/>
|
|
||||||
<arg type="a{sv}" direction="in" name="options"/>
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
|
||||||
<arg type="s" direction="out" name="filename_used"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
StopScreencast:
|
|
||||||
@success: whether stopping the recording was successful
|
|
||||||
|
|
||||||
Stop the recording started by either Screencast or ScreencastArea.
|
|
||||||
-->
|
|
||||||
<method name="StopScreencast">
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -1,128 +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.Screenshot:
|
|
||||||
@short_description: Screenshot interface
|
|
||||||
|
|
||||||
The interface used to capture pictures of the screen contents.
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Shell.Screenshot">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Screenshot:
|
|
||||||
@filename: The filename for the screenshot
|
|
||||||
@include_cursor: Whether to include the cursor image or not
|
|
||||||
@flash: Whether to flash the screen or not
|
|
||||||
@success: whether the screenshot was captured
|
|
||||||
@filename_used: the file where the screenshot was saved
|
|
||||||
|
|
||||||
Takes a screenshot of the whole screen and saves it
|
|
||||||
in @filename as png image, it returns a boolean
|
|
||||||
indicating whether the operation was successful or not.
|
|
||||||
@filename can either be an absolute path or a basename, in
|
|
||||||
which case the screenshot will be saved in the $XDG_PICTURES_DIR
|
|
||||||
or the home directory if it doesn't exist. The filename used
|
|
||||||
to save the screenshot will be returned in @filename_used.
|
|
||||||
-->
|
|
||||||
<method name="Screenshot">
|
|
||||||
<arg type="b" direction="in" name="include_cursor"/>
|
|
||||||
<arg type="b" direction="in" name="flash"/>
|
|
||||||
<arg type="s" direction="in" name="filename"/>
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
|
||||||
<arg type="s" direction="out" name="filename_used"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ScreenshotWindow:
|
|
||||||
@include_frame: Whether to include the frame or not
|
|
||||||
@include_cursor: Whether to include the cursor image or not
|
|
||||||
@flash: Whether to flash the window area or not
|
|
||||||
@filename: The filename for the screenshot
|
|
||||||
@success: whether the screenshot was captured
|
|
||||||
@filename_used: the file where the screenshot was saved
|
|
||||||
|
|
||||||
Takes a screenshot of the focused window (optionally omitting the frame)
|
|
||||||
and saves it in @filename as png image, it returns a boolean
|
|
||||||
indicating whether the operation was successful or not.
|
|
||||||
@filename can either be an absolute path or a basename, in
|
|
||||||
which case the screenshot will be saved in the $XDG_PICTURES_DIR
|
|
||||||
or the home directory if it doesn't exist. The filename used
|
|
||||||
to save the screenshot will be returned in @filename_used.
|
|
||||||
-->
|
|
||||||
<method name="ScreenshotWindow">
|
|
||||||
<arg type="b" direction="in" name="include_frame"/>
|
|
||||||
<arg type="b" direction="in" name="include_cursor"/>
|
|
||||||
<arg type="b" direction="in" name="flash"/>
|
|
||||||
<arg type="s" direction="in" name="filename"/>
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
|
||||||
<arg type="s" direction="out" name="filename_used"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ScreenshotArea:
|
|
||||||
@x: the X coordinate of the area to capture
|
|
||||||
@y: the Y coordinate of the area to capture
|
|
||||||
@width: the width of the area to capture
|
|
||||||
@height: the height of the area to capture
|
|
||||||
@flash: whether to flash the area or not
|
|
||||||
@filename: the filename for the screenshot
|
|
||||||
@success: whether the screenshot was captured
|
|
||||||
@filename_used: the file where the screenshot was saved
|
|
||||||
|
|
||||||
Takes a screenshot of the passed in area and saves it
|
|
||||||
in @filename as png image, it returns a boolean
|
|
||||||
indicating whether the operation was successful or not.
|
|
||||||
@filename can either be an absolute path or a basename, in
|
|
||||||
which case the screenshot will be saved in the $XDG_PICTURES_DIR
|
|
||||||
or the home directory if it doesn't exist. The filename used
|
|
||||||
to save the screenshot will be returned in @filename_used.
|
|
||||||
-->
|
|
||||||
<method name="ScreenshotArea">
|
|
||||||
<arg type="i" direction="in" name="x"/>
|
|
||||||
<arg type="i" direction="in" name="y"/>
|
|
||||||
<arg type="i" direction="in" name="width"/>
|
|
||||||
<arg type="i" direction="in" name="height"/>
|
|
||||||
<arg type="b" direction="in" name="flash"/>
|
|
||||||
<arg type="s" direction="in" name="filename"/>
|
|
||||||
<arg type="b" direction="out" name="success"/>
|
|
||||||
<arg type="s" direction="out" name="filename_used"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
FlashArea:
|
|
||||||
@x: the X coordinate of the area to flash
|
|
||||||
@y: the Y coordinate of the area to flash
|
|
||||||
@width: the width of the area to flash
|
|
||||||
@height: the height of the area to flash
|
|
||||||
|
|
||||||
Renders a flash spot effect in the specified rectangle of the screen.
|
|
||||||
-->
|
|
||||||
<method name="FlashArea">
|
|
||||||
<arg type="i" direction="in" name="x"/>
|
|
||||||
<arg type="i" direction="in" name="y"/>
|
|
||||||
<arg type="i" direction="in" name="width"/>
|
|
||||||
<arg type="i" direction="in" name="height"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
SelectArea:
|
|
||||||
@x: the X coordinate of the selected area
|
|
||||||
@y: the Y coordinate of the selected area
|
|
||||||
@width: the width of the selected area
|
|
||||||
@height: the height of the selected area
|
|
||||||
|
|
||||||
Interactively allows the user to select a rectangular area of
|
|
||||||
the screen, and returns its coordinates.
|
|
||||||
-->
|
|
||||||
<method name="SelectArea">
|
|
||||||
<arg type="i" direction="out" name="x"/>
|
|
||||||
<arg type="i" direction="out" name="y"/>
|
|
||||||
<arg type="i" direction="out" name="width"/>
|
|
||||||
<arg type="i" direction="out" name="height"/>
|
|
||||||
</method>
|
|
||||||
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
@ -2,72 +2,146 @@
|
|||||||
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
|
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
|
||||||
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
|
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
|
||||||
<node>
|
<node>
|
||||||
|
|
||||||
<!--
|
|
||||||
org.gnome.Shell.SearchProvider:
|
|
||||||
@short_description: Search provider interface
|
|
||||||
|
|
||||||
The interface used for integrating into GNOME Shell's search
|
|
||||||
interface. This interface is deprecated, and org.gnome.Shell.SearchProvider2 should be used instead.
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Shell.SearchProvider">
|
<interface name="org.gnome.Shell.SearchProvider">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:description>
|
||||||
|
<doc:para>
|
||||||
|
The interface used for integrating into GNOME Shell's search
|
||||||
|
interface.
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
|
||||||
<!--
|
|
||||||
GetInitialResultSet:
|
|
||||||
@terms: Array of search terms, which the provider should treat as logical AND.
|
|
||||||
@results: An array of result identifier strings representing items which match the given search terms. Identifiers must be unique within the provider's domain, but other than that may be chosen freely by the provider.
|
|
||||||
|
|
||||||
Called when the user first begins a search.
|
|
||||||
-->
|
|
||||||
<method name="GetInitialResultSet">
|
<method name="GetInitialResultSet">
|
||||||
<arg type="as" name="terms" direction="in" />
|
<doc:doc>
|
||||||
<arg type="as" name="results" direction="out" />
|
<doc:description>
|
||||||
|
<doc:para>
|
||||||
|
Called when the user first begins a search.
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
<arg type="as" direction="in">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>
|
||||||
|
Array of search terms, which the provider should treat as
|
||||||
|
logical AND.
|
||||||
|
</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
|
<arg type="as" direction="out">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>
|
||||||
|
An array of result identifier strings representing items which
|
||||||
|
match the given search terms. Identifiers must be unique within
|
||||||
|
the provider's domain, but other than that may be chosen freely
|
||||||
|
by the provider.
|
||||||
|
</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
<!--
|
|
||||||
GetSubsearchResultSet:
|
|
||||||
@previous_results: Array of results previously returned by GetInitialResultSet().
|
|
||||||
@terms: Array of updated search terms, which the provider should treat as logical AND.
|
|
||||||
@results: An array of result identifier strings representing items which match the given search terms. Identifiers must be unique within the provider's domain, but other than that may be chosen freely by the provider.
|
|
||||||
|
|
||||||
Called when a search is performed which is a "subsearch" of
|
|
||||||
the previous search, e.g. the method may return less results, but
|
|
||||||
not more or different results.
|
|
||||||
|
|
||||||
This allows search providers to only search through the previous
|
|
||||||
result set, rather than possibly performing a full re-query.
|
|
||||||
-->
|
|
||||||
<method name="GetSubsearchResultSet">
|
<method name="GetSubsearchResultSet">
|
||||||
<arg type="as" name="previous_results" direction="in" />
|
<doc:doc>
|
||||||
<arg type="as" name="terms" direction="in" />
|
<doc:description>
|
||||||
<arg type="as" name="results" direction="out" />
|
<doc:para>
|
||||||
|
Called when a search is performed which is a "subsearch" of
|
||||||
|
the previous search, e.g. the method may return less results, but
|
||||||
|
not more or different results.
|
||||||
|
|
||||||
|
This allows search providers to only search through the previous
|
||||||
|
result set, rather than possibly performing a full re-query.
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
<arg type="as" direction="in">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>
|
||||||
|
Array of item identifiers
|
||||||
|
</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
|
<arg type="as" direction="in">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>
|
||||||
|
Array of updated search terms, which the provider should treat as
|
||||||
|
logical AND.
|
||||||
|
</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
|
<arg type="as" direction="out">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>
|
||||||
|
An array of result identifier strings representing items which
|
||||||
|
match the given search terms. Identifiers must be unique within
|
||||||
|
the provider's domain, but other than that may be chosen freely
|
||||||
|
by the provider.
|
||||||
|
</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
<!--
|
|
||||||
GetResultMetas:
|
|
||||||
@identifiers: An array of result identifiers as returned by GetInitialResultSet() or GetSubsearchResultSet()
|
|
||||||
@metas: A dictionary describing the given search result, containing a human-readable 'name' (string), along with the result identifier this meta is for, 'id' (string). Optionally, either 'gicon' (a serialized GIcon) or 'icon-data' (raw image data as (iiibiiay) - width, height, rowstride, has-alpha, bits per sample, channels, data) can be specified if the result can be better served with a thumbnail of the content (such as with images). A 'description' field (string) may also be specified if more context would help the user find the desired result.
|
|
||||||
|
|
||||||
Return an array of meta data used to display each given result
|
|
||||||
-->
|
|
||||||
<method name="GetResultMetas">
|
<method name="GetResultMetas">
|
||||||
<arg type="as" name="identifiers" direction="in" />
|
<doc:doc>
|
||||||
<arg type="aa{sv}" name="metas" direction="out" />
|
<doc:description>
|
||||||
|
<doc:para>
|
||||||
|
Return an array of meta data used to display each given result
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
<arg type="as" direction="in">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>
|
||||||
|
An array of result identifiers as returned by
|
||||||
|
GetInitialResultSet() or GetSubsearchResultSet()
|
||||||
|
</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
|
<arg type="a{sv}" direction="out">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>
|
||||||
|
A dictionary describing the given search result, containing
|
||||||
|
'id', 'name' (both strings) and either 'icon' (a serialized
|
||||||
|
GIcon) or 'icon-data' (raw image data as (iiibiiay) - width,
|
||||||
|
height, rowstride, has-alpha, bits per sample, channels, data)
|
||||||
|
</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
<!--
|
|
||||||
ActivateResult:
|
|
||||||
@identifier: A result identifier as returned by GetInitialResultSet() or GetSubsearchResultSet()
|
|
||||||
|
|
||||||
Called when the users chooses a given result. The result should
|
|
||||||
be displayed in the application associated with the corresponding
|
|
||||||
provider.
|
|
||||||
|
|
||||||
This method is deprecated, and providers should implement ActivateResult2()
|
|
||||||
instead.
|
|
||||||
-->
|
|
||||||
<method name="ActivateResult">
|
<method name="ActivateResult">
|
||||||
<arg type="s" name="identifier" direction="in" />
|
<doc:doc>
|
||||||
|
<doc:description>
|
||||||
|
<doc:para>
|
||||||
|
Called when the users chooses a given result. The result should
|
||||||
|
be displayed in the application associated with the corresponding
|
||||||
|
provider.
|
||||||
|
</doc:para>
|
||||||
|
</doc:description>
|
||||||
|
</doc:doc>
|
||||||
|
<arg type="s" direction="in">
|
||||||
|
<doc:doc>
|
||||||
|
<doc:summary>
|
||||||
|
<doc:para>
|
||||||
|
A result identifier as returned by GetInitialResultSet() or
|
||||||
|
GetSubsearchResultSet()
|
||||||
|
</doc:para>
|
||||||
|
</doc:summary>
|
||||||
|
</doc:doc>
|
||||||
|
</arg>
|
||||||
</method>
|
</method>
|
||||||
</interface>
|
</interface>
|
||||||
</node>
|
</node>
|
||||||
|
@ -1,87 +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.SearchProvider2:
|
|
||||||
@short_description: Search provider interface
|
|
||||||
|
|
||||||
The interface used for integrating into GNOME Shell's search
|
|
||||||
interface (version 2).
|
|
||||||
-->
|
|
||||||
<interface name="org.gnome.Shell.SearchProvider2">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
GetInitialResultSet:
|
|
||||||
@terms: Array of search terms, which the provider should treat as logical AND.
|
|
||||||
@results: An array of result identifier strings representing items which match the given search terms. Identifiers must be unique within the provider's domain, but other than that may be chosen freely by the provider.
|
|
||||||
|
|
||||||
Called when the user first begins a search.
|
|
||||||
-->
|
|
||||||
<method name="GetInitialResultSet">
|
|
||||||
<arg type="as" name="terms" direction="in" />
|
|
||||||
<arg type="as" name="results" direction="out" />
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
GetSubsearchResultSet:
|
|
||||||
@previous_results: Array of results previously returned by GetInitialResultSet().
|
|
||||||
@terms: Array of updated search terms, which the provider should treat as logical AND.
|
|
||||||
@results: An array of result identifier strings representing items which match the given search terms. Identifiers must be unique within the provider's domain, but other than that may be chosen freely by the provider.
|
|
||||||
|
|
||||||
Called when a search is performed which is a "subsearch" of
|
|
||||||
the previous search, e.g. the method may return less results, but
|
|
||||||
not more or different results.
|
|
||||||
|
|
||||||
This allows search providers to only search through the previous
|
|
||||||
result set, rather than possibly performing a full re-query.
|
|
||||||
-->
|
|
||||||
<method name="GetSubsearchResultSet">
|
|
||||||
<arg type="as" name="previous_results" direction="in" />
|
|
||||||
<arg type="as" name="terms" direction="in" />
|
|
||||||
<arg type="as" name="results" direction="out" />
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
GetResultMetas:
|
|
||||||
@identifiers: An array of result identifiers as returned by GetInitialResultSet() or GetSubsearchResultSet()
|
|
||||||
@metas: A dictionary describing the given search result, containing a human-readable 'name' (string), along with the result identifier this meta is for, 'id' (string). Optionally, 'icon' (a serialized GIcon as obtained by g_icon_serialize) can be specified if the result can be better served with a thumbnail of the content (such as with images). 'gicon' (a serialized GIcon as obtained by g_icon_to_string) or 'icon-data' (raw image data as (iiibiiay) - width, height, rowstride, has-alpha, bits per sample, channels, data) are deprecated values that can also be used for that purpose. A 'description' field (string) may also be specified if more context would help the user find the desired result.
|
|
||||||
|
|
||||||
Return an array of meta data used to display each given result
|
|
||||||
-->
|
|
||||||
<method name="GetResultMetas">
|
|
||||||
<arg type="as" name="identifiers" direction="in" />
|
|
||||||
<arg type="aa{sv}" name="metas" direction="out" />
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ActivateResult:
|
|
||||||
@identifier: A result identifier as returned by GetInitialResultSet() or GetSubsearchResultSet()
|
|
||||||
@terms: Array of search terms, which the provider should treat as logical AND.
|
|
||||||
@timestamp: A timestamp of the user interaction that triggered this call
|
|
||||||
|
|
||||||
Called when the users chooses a given result. The result should
|
|
||||||
be displayed in the application associated with the corresponding
|
|
||||||
provider. The provided search terms can be used to allow launching a full search in
|
|
||||||
the application.
|
|
||||||
-->
|
|
||||||
<method name="ActivateResult">
|
|
||||||
<arg type="s" name="identifier" direction="in" />
|
|
||||||
<arg type="as" name="terms" direction="in" />
|
|
||||||
<arg type="u" name="timestamp" direction="in" />
|
|
||||||
</method>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
LaunchSearch:
|
|
||||||
@terms: Array of search terms, which the provider should treat as logical AND.
|
|
||||||
@timestamp: A timestamp of the user interaction that triggered this call
|
|
||||||
|
|
||||||
Asks the search provider to launch a full search in the application for the provided terms.
|
|
||||||
-->
|
|
||||||
<method name="LaunchSearch">
|
|
||||||
<arg type="as" name="terms" direction="in" />
|
|
||||||
<arg type="u" name="timestamp" direction="in" />
|
|
||||||
</method>
|
|
||||||
</interface>
|
|
||||||
</node>
|
|
21
data/org.gnome.shell.evolution.calendar.gschema.xml.in
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- NOTE: This schema is a GNOME 3.4 workaround - it uses the same path
|
||||||
|
as org.gnome.evolution.calendar, but avoids us requiring Evolution
|
||||||
|
be installed. In GNOME 3.6 the selected state will become a flag
|
||||||
|
on the calendar. Because the translations are in Evolution,
|
||||||
|
this is untranslated and in POTFILES.skip.
|
||||||
|
-->
|
||||||
|
<schemalist>
|
||||||
|
<schema path="/org/gnome/evolution/calendar/" id="org.gnome.shell.evolution.calendar" gettext-domain="evolution">
|
||||||
|
<key type="as" name="selected-calendars">
|
||||||
|
<default>[]</default>
|
||||||
|
<summary>List of selected calendars</summary>
|
||||||
|
<description>List of calendars to load</description>
|
||||||
|
</key>
|
||||||
|
<key type="as" name="selected-tasks">
|
||||||
|
<default>[]</default>
|
||||||
|
<summary>List of selected task lists</summary>
|
||||||
|
<description>List of task lists to load</description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
@ -3,139 +3,97 @@
|
|||||||
gettext-domain="@GETTEXT_PACKAGE@">
|
gettext-domain="@GETTEXT_PACKAGE@">
|
||||||
<key name="development-tools" type="b">
|
<key name="development-tools" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>
|
<_summary>
|
||||||
Enable internal tools useful for developers and testers from Alt-F2
|
Enable internal tools useful for developers and testers from Alt-F2
|
||||||
</summary>
|
</_summary>
|
||||||
<description>
|
<_description>
|
||||||
Allows access to internal debugging and monitoring tools
|
Allows access to internal debugging and monitoring tools
|
||||||
using the Alt-F2 dialog.
|
using the Alt-F2 dialog.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
<key name="enabled-extensions" type="as">
|
<key name="enabled-extensions" type="as">
|
||||||
<default>[]</default>
|
<default>[]</default>
|
||||||
<summary>UUIDs of extensions to enable</summary>
|
<_summary>Uuids of extensions to enable</_summary>
|
||||||
<description>
|
<_description>
|
||||||
GNOME Shell extensions have a UUID property; this key lists extensions
|
GNOME Shell extensions have a uuid property; this key lists extensions
|
||||||
which should be loaded. Any extension that wants to be loaded needs
|
which should be loaded. Any extension that wants to be loaded needs
|
||||||
to be in this list. You can also manipulate this list with the
|
to be in this list. You can also manipulate this list with the
|
||||||
EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell.
|
EnableExtension and DisableExtension DBus methods on org.gnome.Shell.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
<key name="disable-user-extensions" type="b">
|
<key name="enable-app-monitoring" type="b">
|
||||||
<default>false</default>
|
|
||||||
<summary>Disable user extensions</summary>
|
|
||||||
<description>
|
|
||||||
Disable all extensions the user has enabled without affecting
|
|
||||||
the “enabled-extension” setting.
|
|
||||||
</description>
|
|
||||||
</key>
|
|
||||||
<key name="disable-extension-version-validation" type="b">
|
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Disables the validation of extension version compatibility</summary>
|
<_summary>Whether to collect stats about applications usage</_summary>
|
||||||
<description>
|
<_description>
|
||||||
GNOME Shell will only load extensions that claim to support the current
|
The shell normally monitors active applications in order to present
|
||||||
running version. Enabling this option will disable this check and try to
|
the most used ones (e.g. in launchers). While this data will be
|
||||||
load all extensions regardless of the versions they claim to support.
|
kept private, you may want to disable this for privacy reasons.
|
||||||
</description>
|
Please note that doing so won't remove already saved data.
|
||||||
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
<key name="favorite-apps" type="as">
|
<key name="favorite-apps" type="as">
|
||||||
<default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
|
<default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default>
|
||||||
<summary>List of desktop file IDs for favorite applications</summary>
|
<_summary>List of desktop file IDs for favorite applications</_summary>
|
||||||
<description>
|
<_description>
|
||||||
The applications corresponding to these identifiers
|
The applications corresponding to these identifiers
|
||||||
will be displayed in the favorites area.
|
will be displayed in the favorites area.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
<key name="app-picker-view" type="u">
|
<key name="disabled-open-search-providers" type="as">
|
||||||
<default>0</default>
|
<default>[]</default>
|
||||||
<summary>App Picker View</summary>
|
<_summary>disabled OpenSearch providers</_summary>
|
||||||
<description>
|
|
||||||
Index of the currently selected view in the application picker.
|
|
||||||
</description>
|
|
||||||
</key>
|
</key>
|
||||||
<key name="command-history" type="as">
|
<key name="command-history" type="as">
|
||||||
<default>[]</default>
|
<default>[]</default>
|
||||||
<summary>History for command (Alt-F2) dialog</summary>
|
<_summary>History for command (Alt-F2) dialog</_summary>
|
||||||
</key>
|
</key>
|
||||||
<key name="looking-glass-history" type="as">
|
<key name="looking-glass-history" type="as">
|
||||||
<default>[]</default>
|
<default>[]</default>
|
||||||
<!-- Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass -->
|
<_summary>History for the looking glass dialog</_summary>
|
||||||
<summary>History for the looking glass dialog</summary>
|
|
||||||
</key>
|
</key>
|
||||||
<key name="always-show-log-out" type="b">
|
<key name="saved-im-presence" type="i">
|
||||||
<default>false</default>
|
<default>1</default>
|
||||||
<summary>Always show the “Log out” menu item in the user menu.</summary>
|
<_summary>Internally used to store the last IM presence explicitly set by the user. The
|
||||||
<description>
|
value here is from the TpConnectionPresenceType enumeration.</_summary>
|
||||||
This key overrides the automatic hiding of the “Log out”
|
|
||||||
menu item in single-user, single-session situations.
|
|
||||||
</description>
|
|
||||||
</key>
|
</key>
|
||||||
<key name="remember-mount-password" type="b">
|
<key name="saved-session-presence" type="i">
|
||||||
<default>false</default>
|
<default>0</default>
|
||||||
<summary>Whether to remember password for mounting encrypted or remote filesystems</summary>
|
<_summary>Internally used to store the last session presence status for the user. The
|
||||||
<description>
|
value here is from the GsmPresenceStatus enumeration.</_summary>
|
||||||
The shell will request a password when an encrypted device or a
|
|
||||||
remote filesystem is mounted. If the password can be saved for
|
|
||||||
future use a “Remember Password” checkbox will be present.
|
|
||||||
This key sets the default state of the checkbox.
|
|
||||||
</description>
|
|
||||||
</key>
|
|
||||||
<key name="had-bluetooth-devices-setup" type="b">
|
|
||||||
<default>false</default>
|
|
||||||
<summary>Whether the default Bluetooth adapter had set up devices associated to it</summary>
|
|
||||||
<description>
|
|
||||||
The shell will only show a Bluetooth menu item if a Bluetooth
|
|
||||||
adapter is powered, or if there were devices set up associated
|
|
||||||
with the default adapter. This will be reset if the default
|
|
||||||
adapter is ever seen not to have devices associated to it.
|
|
||||||
</description>
|
|
||||||
</key>
|
</key>
|
||||||
|
<child name="clock" schema="org.gnome.shell.clock"/>
|
||||||
|
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
||||||
|
<child name="recorder" schema="org.gnome.shell.recorder"/>
|
||||||
<child name="keybindings" schema="org.gnome.shell.keybindings"/>
|
<child name="keybindings" schema="org.gnome.shell.keybindings"/>
|
||||||
<child name="keyboard" schema="org.gnome.shell.keyboard"/>
|
<child name="keyboard" schema="org.gnome.shell.keyboard"/>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
|
<schema id="org.gnome.shell.calendar" path="/org/gnome/shell/calendar/"
|
||||||
|
gettext-domain="@GETTEXT_PACKAGE@">
|
||||||
|
<key name="show-weekdate" type="b">
|
||||||
|
<default>false</default>
|
||||||
|
<_summary>Show the week date in the calendar</_summary>
|
||||||
|
<_description>
|
||||||
|
If true, display the ISO week date in the calendar.
|
||||||
|
</_description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
|
||||||
<schema id="org.gnome.shell.keybindings" path="/org/gnome/shell/keybindings/"
|
<schema id="org.gnome.shell.keybindings" path="/org/gnome/shell/keybindings/"
|
||||||
gettext-domain="@GETTEXT_PACKAGE@">
|
gettext-domain="@GETTEXT_PACKAGE@">
|
||||||
<key name="open-application-menu" type="as">
|
<key name="open-application-menu" type="as">
|
||||||
<default>["<Super>F10"]</default>
|
<default>["<Super>F10"]</default>
|
||||||
<summary>Keybinding to open the application menu</summary>
|
<_summary>Keybinding to open the application menu</_summary>
|
||||||
<description>
|
<_description>
|
||||||
Keybinding to open the application menu.
|
Keybinding to open the application menu.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
<key name="toggle-application-view" type="as">
|
<key name="toggle-recording" type="as">
|
||||||
<default>["<Super>a"]</default>
|
<default><![CDATA[['<Control><Shift><Alt>r']]]></default>
|
||||||
<summary>Keybinding to open the “Show Applications” view</summary>
|
<_summary>Keybinding to toggle the screen recorder</_summary>
|
||||||
<description>
|
<_description>
|
||||||
Keybinding to open the “Show Applications” view of the Activities
|
Keybinding to start/stop the builtin screen recorder.
|
||||||
Overview.
|
</_description>
|
||||||
</description>
|
|
||||||
</key>
|
|
||||||
<key name="toggle-overview" type="as">
|
|
||||||
<default>["<Super>s"]</default>
|
|
||||||
<summary>Keybinding to open the overview</summary>
|
|
||||||
<description>
|
|
||||||
Keybinding to open the Activities Overview.
|
|
||||||
</description>
|
|
||||||
</key>
|
|
||||||
<key name="toggle-message-tray" type="as">
|
|
||||||
<default>["<Super>v","<Super>m"]</default>
|
|
||||||
<summary>Keybinding to toggle the visibility of the notification list</summary>
|
|
||||||
<description>
|
|
||||||
Keybinding to toggle the visibility of the notification list.
|
|
||||||
</description>
|
|
||||||
</key>
|
|
||||||
<key name="focus-active-notification" type="as">
|
|
||||||
<default>["<Super>n"]</default>
|
|
||||||
<summary>Keybinding to focus the active notification</summary>
|
|
||||||
<description>
|
|
||||||
Keybinding to focus the active notification.
|
|
||||||
</description>
|
|
||||||
</key>
|
|
||||||
<key name="pause-resume-tweens" type="as">
|
|
||||||
<default>[]</default>
|
|
||||||
<summary>Keybinding that pauses and resumes all running tweens, for debugging purposes</summary>
|
|
||||||
<description></description>
|
|
||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
@ -143,55 +101,70 @@
|
|||||||
gettext-domain="@GETTEXT_PACKAGE@">
|
gettext-domain="@GETTEXT_PACKAGE@">
|
||||||
<key name="keyboard-type" type="s">
|
<key name="keyboard-type" type="s">
|
||||||
<default>'touch'</default>
|
<default>'touch'</default>
|
||||||
<summary>Which keyboard to use</summary>
|
<_summary>Which keyboard to use</_summary>
|
||||||
<description>
|
<_description>
|
||||||
The type of keyboard to use.
|
The type of keyboard to use.
|
||||||
</description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
<schema id="org.gnome.shell.app-switcher"
|
<schema id="org.gnome.shell.clock" path="/org/gnome/shell/clock/"
|
||||||
path="/org/gnome/shell/app-switcher/"
|
|
||||||
gettext-domain="@GETTEXT_PACKAGE@">
|
gettext-domain="@GETTEXT_PACKAGE@">
|
||||||
<key type="b" name="current-workspace-only">
|
<key name="show-seconds" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
<summary>Limit switcher to current workspace.</summary>
|
<_summary>Show time with seconds</_summary>
|
||||||
<description>
|
<_description>
|
||||||
If true, only applications that have windows on the current workspace are shown in the switcher.
|
If true, display seconds in time.
|
||||||
Otherwise, all applications are included.
|
</_description>
|
||||||
</description>
|
</key>
|
||||||
|
<key name="show-date" type="b">
|
||||||
|
<default>false</default>
|
||||||
|
<_summary>Show date in clock</_summary>
|
||||||
|
<_description>
|
||||||
|
If true, display date in the clock, in addition to time.
|
||||||
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
<enum id="org.gnome.shell.window-switcher.AppIconMode">
|
<schema id="org.gnome.shell.recorder" path="/org/gnome/shell/recorder/"
|
||||||
<value value="1" nick="thumbnail-only"/>
|
|
||||||
<value value="2" nick="app-icon-only"/>
|
|
||||||
<value value="3" nick="both"/>
|
|
||||||
</enum>
|
|
||||||
<schema id="org.gnome.shell.window-switcher"
|
|
||||||
path="/org/gnome/shell/window-switcher/"
|
|
||||||
gettext-domain="@GETTEXT_PACKAGE@">
|
gettext-domain="@GETTEXT_PACKAGE@">
|
||||||
<key name="app-icon-mode" enum="org.gnome.shell.window-switcher.AppIconMode">
|
<key name="framerate" type="i">
|
||||||
<default>'both'</default>
|
<default>30</default>
|
||||||
<summary>The application icon mode.</summary>
|
<_summary>Framerate used for recording screencasts.</_summary>
|
||||||
<description>
|
<_description>
|
||||||
Configures how the windows are shown in the switcher. Valid possibilities
|
The framerate of the resulting screencast recordered
|
||||||
are “thumbnail-only” (shows a thumbnail of the window), “app-icon-only”
|
by GNOME Shell's screencast recorder in frames-per-second.
|
||||||
(shows only the application icon) or “both”.
|
</_description>
|
||||||
</description>
|
|
||||||
</key>
|
</key>
|
||||||
<key type="b" name="current-workspace-only">
|
<key name="pipeline" type="s">
|
||||||
<default>true</default>
|
<default>''</default>
|
||||||
<summary>Limit switcher to current workspace.</summary>
|
<_summary>The gstreamer pipeline used to encode the screencast</_summary>
|
||||||
<description>
|
<_description>
|
||||||
If true, only windows from the current workspace are shown in the switcher.
|
Sets the GStreamer pipeline used to encode recordings.
|
||||||
Otherwise, all windows are included.
|
It follows the syntax used for gst-launch. The pipeline should have
|
||||||
</description>
|
an unconnected sink pad where the recorded video is recorded. It will
|
||||||
|
normally have a unconnected source pad; output from that pad
|
||||||
|
will be written into the output file. However the pipeline can also
|
||||||
|
take care of its own output - this might be used to send the output
|
||||||
|
to an icecast server via shout2send or similar. When unset or set
|
||||||
|
to an empty value, the default pipeline will be used. This is currently
|
||||||
|
'vp8enc quality=8 speed=6 threads=%T ! queue ! webmmux'
|
||||||
|
and records to WEBM using the VP8 codec. %T is used as a placeholder
|
||||||
|
for a guess at the optimal thread count on the system.
|
||||||
|
</_description>
|
||||||
|
</key>
|
||||||
|
<key name="file-extension" type="s">
|
||||||
|
<default>'webm'</default>
|
||||||
|
<_summary>File extension used for storing the screencast</_summary>
|
||||||
|
<_description>
|
||||||
|
The filename for recorded screencasts will be a unique filename
|
||||||
|
based on the current date, and use this extension. It should be
|
||||||
|
changed when recording to a different container format.
|
||||||
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
<schema id="org.gnome.shell.overrides" path="/org/gnome/shell/overrides/"
|
<schema id="org.gnome.shell.overrides" path="/org/gnome/shell/overrides/">
|
||||||
gettext-domain="@GETTEXT_PACKAGE@">
|
|
||||||
<key name="attach-modal-dialogs" type="b">
|
<key name="attach-modal-dialogs" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Attach modal dialog to the parent window</summary>
|
<summary>Attach modal dialog to the parent window</summary>
|
||||||
@ -201,6 +174,15 @@
|
|||||||
</description>
|
</description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
|
<key name="button-layout" type="s">
|
||||||
|
<default>":close"</default>
|
||||||
|
<summary>Arrangement of buttons on the titlebar</summary>
|
||||||
|
<description>
|
||||||
|
This key overrides the key in org.gnome.desktop.wm.preferences when
|
||||||
|
running GNOME Shell.
|
||||||
|
</description>
|
||||||
|
</key>
|
||||||
|
|
||||||
<key name="edge-tiling" type="b">
|
<key name="edge-tiling" type="b">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Enable edge tiling when dropping windows on screen edges</summary>
|
<summary>Enable edge tiling when dropping windows on screen edges</summary>
|
||||||
@ -224,13 +206,5 @@
|
|||||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||||
</description>
|
</description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
<key name="focus-change-on-pointer-rest" type="b">
|
|
||||||
<default>true</default>
|
|
||||||
<summary>Delay focus changes in mouse mode until the pointer stops moving</summary>
|
|
||||||
<description>
|
|
||||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
|
||||||
</description>
|
|
||||||
</key>
|
|
||||||
</schema>
|
</schema>
|
||||||
</schemalist>
|
</schemalist>
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
<!-- With an animated background, performance will differ depending on whether
|
|
||||||
one layer or two layers are being blended together. This messes up our
|
|
||||||
benchmarks. We could just benchmark a single image, but since blended
|
|
||||||
images are present for much of the day with the GNOME default background,
|
|
||||||
we want to make sure that also performs well; for that reason we ship
|
|
||||||
an "animated" background that animates super-slowly to use during
|
|
||||||
performance tests; it will be in the blended state until 2030. -->
|
|
||||||
<background>
|
|
||||||
<starttime>
|
|
||||||
<year>1990</year>
|
|
||||||
<month>1</month>
|
|
||||||
<day>1</day>
|
|
||||||
<hour>0</hour>
|
|
||||||
<minute>00</minute>
|
|
||||||
<second>00</second>
|
|
||||||
</starttime>
|
|
||||||
|
|
||||||
<!-- One transition that takes 40 years -->
|
|
||||||
<transition type="overlay">
|
|
||||||
<duration>1261440000.0</duration>
|
|
||||||
<from>@datadir@/backgrounds/gnome/adwaita-morning.jpg</from>
|
|
||||||
<to>@datadir@/backgrounds/gnome/adwaita-day.jpg</to>
|
|
||||||
</transition>
|
|
||||||
|
|
||||||
<!-- A single slide doesn't work, so another slide for 1 minute after 40 years -->
|
|
||||||
<static>
|
|
||||||
<duration>60</duration>
|
|
||||||
<file>/usr/share/backgrounds/gnome/Sandstone.jpg</file>
|
|
||||||
</static>
|
|
||||||
|
|
||||||
</background>
|
|
27
data/shaders/dim-window.glsl
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#version 110
|
||||||
|
uniform sampler2D tex;
|
||||||
|
uniform float fraction;
|
||||||
|
uniform float height;
|
||||||
|
const float c = -0.2;
|
||||||
|
const float border_max_height = 60.0;
|
||||||
|
|
||||||
|
mat4 contrast = mat4 (1.0 + c, 0.0, 0.0, 0.0,
|
||||||
|
0.0, 1.0 + c, 0.0, 0.0,
|
||||||
|
0.0, 0.0, 1.0 + c, 0.0,
|
||||||
|
0.0, 0.0, 0.0, 1.0);
|
||||||
|
vec4 off = vec4(0.633, 0.633, 0.633, 0);
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec4 color = texture2D(tex, cogl_tex_coord_in[0].xy);
|
||||||
|
float y = height * cogl_tex_coord_in[0].y;
|
||||||
|
|
||||||
|
// To reduce contrast, blend with a mid gray
|
||||||
|
cogl_color_out = color * contrast - off * c * color.a;
|
||||||
|
|
||||||
|
// We only fully dim at a distance of BORDER_MAX_HEIGHT from the top and
|
||||||
|
// when the fraction is 1.0. For other locations and fractions we linearly
|
||||||
|
// interpolate back to the original undimmed color, so the top of the window
|
||||||
|
// is at full color.
|
||||||
|
cogl_color_out = color + (cogl_color_out - color) * max(min(y / border_max_height, 1.0), 0.0);
|
||||||
|
cogl_color_out = color + (cogl_color_out - color) * fraction;
|
||||||
|
}
|
@ -1,3 +0,0 @@
|
|||||||
To generate the css files, from the project directory:
|
|
||||||
|
|
||||||
sass --sourcemap=none --update .
|
|
@ -1,34 +0,0 @@
|
|||||||
Summary
|
|
||||||
-------
|
|
||||||
|
|
||||||
* Do not edit the CSS directly, edit the source SCSS files and process them with SASS (running
|
|
||||||
`make` should do that when you have the required software installed, as described below;
|
|
||||||
run `./parse-sass.sh` manually if it doesn't)
|
|
||||||
* Most SASS preprocessors should produce similar results, however the build system
|
|
||||||
integration and 'parse-sass.sh' script use sassc. You should be able to install
|
|
||||||
it with `pkcon install sassc` or your distribution's package manager.
|
|
||||||
|
|
||||||
How to tweak the theme
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Adwaita is a complex theme, so to keep it maintainable it's written and processed in SASS, the
|
|
||||||
generated CSS is then transformed into a gresource file during gtk build and used at runtime in a
|
|
||||||
non-legible or editable form.
|
|
||||||
|
|
||||||
It is very likely your change will happen in the _common.scss file. That's where all the widget
|
|
||||||
selectors are defined. Here's a rundown of the "supporting" stylesheets, that are unlikely to be the
|
|
||||||
right place for a drive by stylesheet fix:
|
|
||||||
|
|
||||||
_colors.scss - global color definitions. We keep the number of defined colors to a necessary minimum,
|
|
||||||
most colors are derived from a handful of basics. It is an exact copy of the gtk+
|
|
||||||
counterpart. Light theme is used for the classic theme and dark is for GNOME3 shell
|
|
||||||
default.
|
|
||||||
|
|
||||||
_drawing.scss - drawing helper mixings/functions to allow easier definition of widget drawing under
|
|
||||||
specific context. This is why Adwaita isn't 15000 LOC.
|
|
||||||
|
|
||||||
_common.scss - actual definitions of style for each widget. This is where you are likely to add/remove
|
|
||||||
your changes.
|
|
||||||
|
|
||||||
You can read about SASS at http://sass-lang.com/documentation/. Once you make your changes to the
|
|
||||||
_common.scss file, you can either run make or the ./parse-sass.sh script.
|
|
@ -10,11 +10,11 @@
|
|||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
width="24"
|
width="28"
|
||||||
height="24"
|
height="25"
|
||||||
id="svg10621"
|
id="svg10621"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.91 r13725"
|
inkscape:version="0.48.1 r9760"
|
||||||
sodipodi:docname="calendar-today.svg">
|
sodipodi:docname="calendar-today.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs10623">
|
id="defs10623">
|
||||||
@ -126,9 +126,9 @@
|
|||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0"
|
inkscape:pageopacity="0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="8"
|
inkscape:zoom="15.839192"
|
||||||
inkscape:cx="-23.537329"
|
inkscape:cx="8.3750933"
|
||||||
inkscape:cy="-31.442864"
|
inkscape:cy="8.0837211"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
@ -136,21 +136,11 @@
|
|||||||
fit-margin-left="0"
|
fit-margin-left="0"
|
||||||
fit-margin-right="0"
|
fit-margin-right="0"
|
||||||
fit-margin-bottom="0"
|
fit-margin-bottom="0"
|
||||||
inkscape:window-width="2133"
|
inkscape:window-width="1440"
|
||||||
inkscape:window-height="1241"
|
inkscape:window-height="843"
|
||||||
inkscape:window-x="238"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="88"
|
inkscape:window-y="26"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="1" />
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid3109"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata10626">
|
id="metadata10626">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
@ -159,7 +149,7 @@
|
|||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:type
|
<dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
<dc:title></dc:title>
|
<dc:title />
|
||||||
</cc:Work>
|
</cc:Work>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
@ -167,12 +157,31 @@
|
|||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-469.08263,-537.99307)">
|
transform="translate(-469.08263,-536.99307)">
|
||||||
<circle
|
<g
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:0.23756906;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
id="g3003">
|
||||||
id="path7305"
|
<path
|
||||||
cx="481.57138"
|
inkscape:export-ydpi="90"
|
||||||
cy="559.4649"
|
inkscape:export-xdpi="90"
|
||||||
r="1.5" />
|
inkscape:export-filename="/home/jimmac/src/cvs/gnome/gnome-shell-design/mockups/motion/textures/panel.png"
|
||||||
|
transform="matrix(0.43692393,0,0,1.3783114,460.60467,517.48289)"
|
||||||
|
sodipodi:end="6.2831853"
|
||||||
|
sodipodi:start="3.1415927"
|
||||||
|
d="M 9,29.999999 C 9.0000011,21.163443 27.804042,14 51.000002,14 74.195961,14 93,21.163444 93,30 l -42,0 z"
|
||||||
|
sodipodi:ry="16"
|
||||||
|
sodipodi:rx="42"
|
||||||
|
sodipodi:cy="30"
|
||||||
|
sodipodi:cx="51"
|
||||||
|
id="path34506-3"
|
||||||
|
style="opacity:0.4625;color:#000000;fill:url(#radialGradient2997);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<rect
|
||||||
|
y="558.85046"
|
||||||
|
x="468.96878"
|
||||||
|
height="3.1425927"
|
||||||
|
width="28.149134"
|
||||||
|
id="rect2996"
|
||||||
|
style="fill:#ffffff;fill-opacity:0.50196078;stroke-width:0.43599999;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.7 KiB |
@ -14,7 +14,7 @@
|
|||||||
height="22"
|
height="22"
|
||||||
id="svg3199"
|
id="svg3199"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.48.5 r10040"
|
inkscape:version="0.48.1 r9760"
|
||||||
sodipodi:docname="checkbox.svg">
|
sodipodi:docname="checkbox.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs3201">
|
id="defs3201">
|
||||||
@ -132,54 +132,51 @@
|
|||||||
xlink:href="#linearGradient10597-5"
|
xlink:href="#linearGradient10597-5"
|
||||||
inkscape:collect="always" />
|
inkscape:collect="always" />
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
y2="-388.72955"
|
||||||
xlink:href="#linearGradient5581-5-2-4-6-8-7-35-8"
|
x2="-93.031357"
|
||||||
id="linearGradient11811"
|
y1="-396.34738"
|
||||||
|
x1="-93.031357"
|
||||||
|
gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.685418)"
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(3.0317573,0,0,1.0053174,-102.66338,-0.82153381)"
|
id="linearGradient14219-6"
|
||||||
x1="63.568954"
|
xlink:href="#linearGradient15404-9"
|
||||||
y1="127.16142"
|
inkscape:collect="always" />
|
||||||
x2="63.568954"
|
|
||||||
y2="152.6618" />
|
|
||||||
<linearGradient
|
<linearGradient
|
||||||
id="linearGradient5581-5-2-4-6-8-7-35-8">
|
id="linearGradient15404-9"
|
||||||
|
inkscape:collect="always">
|
||||||
<stop
|
<stop
|
||||||
id="stop5583-0-92-8-0-7-6-5-1"
|
id="stop15406-6"
|
||||||
offset="0"
|
offset="0"
|
||||||
style="stop-color:#454c4c;stop-opacity:1;" />
|
style="stop-color:#515151;stop-opacity:1" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#393f3f;stop-opacity:1;"
|
id="stop15408-7"
|
||||||
offset="0.40000001"
|
|
||||||
id="stop5585-4-7-2-7-9-9-92-0" />
|
|
||||||
<stop
|
|
||||||
id="stop5587-6-7-2-0-3-1-21-5"
|
|
||||||
offset="1"
|
offset="1"
|
||||||
style="stop-color:#2d3232;stop-opacity:1;" />
|
style="stop-color:#292929;stop-opacity:1" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#a2a2a2"
|
pagecolor="#000000"
|
||||||
bordercolor="#2d2d2d"
|
bordercolor="#2d2d2d"
|
||||||
borderopacity="1"
|
borderopacity="1"
|
||||||
inkscape:pageopacity="1"
|
inkscape:pageopacity="1"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="22.627417"
|
inkscape:zoom="1"
|
||||||
inkscape:cx="9.6447897"
|
inkscape:cx="71.516955"
|
||||||
inkscape:cy="12.591409"
|
inkscape:cy="5.8710559"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="1412"
|
inkscape:window-width="1412"
|
||||||
inkscape:window-height="1067"
|
inkscape:window-height="1067"
|
||||||
inkscape:window-x="184"
|
inkscape:window-x="2635"
|
||||||
inkscape:window-y="233"
|
inkscape:window-y="226"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="0"
|
||||||
borderlayer="true"
|
borderlayer="true"
|
||||||
inkscape:showpageshadow="false"
|
inkscape:showpageshadow="false"
|
||||||
inkscape:snap-nodes="false"
|
inkscape:snap-nodes="false"
|
||||||
inkscape:snap-bbox="true"
|
inkscape:snap-bbox="true"
|
||||||
showborder="true">
|
showborder="false">
|
||||||
<inkscape:grid
|
<inkscape:grid
|
||||||
type="xygrid"
|
type="xygrid"
|
||||||
id="grid14843"
|
id="grid14843"
|
||||||
@ -206,56 +203,87 @@
|
|||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-342.5,-521.36218)">
|
transform="translate(-342.5,-521.36218)">
|
||||||
<g
|
<g
|
||||||
style="display:inline"
|
transform="matrix(0.80230061,0,0,0.80230061,-87.624044,-453.10297)"
|
||||||
id="use5671"
|
id="g14586-0"
|
||||||
transform="matrix(1.3594109,0,0,1.3564242,319.2059,481.99447)">
|
style="stroke-width:2.3714385;stroke-miterlimit:4;stroke-dasharray:none">
|
||||||
<rect
|
<g
|
||||||
transform="matrix(0.47304779,0,0,0.4807373,-6.3607039,-29.396216)"
|
inkscape:export-ydpi="90"
|
||||||
rx="4.4136767"
|
inkscape:export-xdpi="90"
|
||||||
y="125.3458"
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
x="50.440369"
|
transform="matrix(1.9969286,0,0,1.9969286,-397.05491,877.00482)"
|
||||||
height="29.154205"
|
id="g15291-9-6"
|
||||||
width="29.559635"
|
style="stroke-width:1.18754292;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new">
|
||||||
id="rect11803"
|
<g
|
||||||
style="color:#000000;fill:url(#linearGradient11811);fill-opacity:1;stroke:#3465a4;stroke-width:1.54426003000000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
transform="translate(877.50354,-102.83507)"
|
||||||
ry="4.4233952" />
|
id="g16853-4-9"
|
||||||
<path
|
style="stroke-width:1.18754292;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new">
|
||||||
inkscape:connector-curvature="0"
|
<rect
|
||||||
id="path11809"
|
transform="scale(1,-1)"
|
||||||
d="m 17.87105,33.844107 0,-0.773112 c 0,-1.031264 0.807171,-1.836142 1.811982,-1.836142 l 9.612456,0 c 1.004811,0 1.787822,0.804878 1.787822,1.836142 l 0,0.773112 c 0,-1.031264 -0.783011,-1.836142 -1.787822,-1.836142 l -9.612456,0 c -1.004811,0 -1.811982,0.804878 -1.811982,1.836142 z"
|
style="color:#000000;fill:url(#linearGradient14219-6);fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:1.24833274;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
id="rect6506-6"
|
||||||
sodipodi:nodetypes="csssscssc" />
|
width="11.281681"
|
||||||
<path
|
height="11.26221"
|
||||||
sodipodi:nodetypes="csssscssc"
|
x="-409.59354"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
y="-284.40115"
|
||||||
d="m 17.87105,41.158551 0,0.773112 c 0,1.031264 0.807171,1.836142 1.811982,1.836142 l 9.612456,0 c 1.004811,0 1.787822,-0.804878 1.787822,-1.836142 l 0,-0.773112 c 0,1.031264 -0.783011,1.836142 -1.787822,1.836142 l -9.612456,0 c -1.004811,0 -1.811982,-0.804878 -1.811982,-1.836142 z"
|
rx="1.0052766"
|
||||||
id="path11867"
|
ry="1.0052764" />
|
||||||
inkscape:connector-curvature="0" />
|
</g>
|
||||||
<path
|
</g>
|
||||||
inkscape:connector-curvature="0"
|
<g
|
||||||
id="path11869"
|
inkscape:export-ydpi="90"
|
||||||
d="m 17.87105,41.895784 0,0.773112 c 0,1.031264 0.644622,1.836142 1.649433,1.836142 l 10.067593,0 c 1.004811,0 1.495234,-0.804878 1.495234,-1.836142 l 0,-0.773112 c 0,1.031264 -0.783011,1.836142 -1.787822,1.836142 l -9.612456,0 c -1.004811,0 -1.811982,-0.804878 -1.811982,-1.836142 z"
|
inkscape:export-xdpi="90"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#000000;fill-opacity:0.85253451;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
sodipodi:nodetypes="csssscssc" />
|
transform="translate(343.99999,987.99997)"
|
||||||
|
id="g5886-5"
|
||||||
|
style="stroke-width:2.3714385;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.84337,0,0,0.84337,-110.16632,-503.56182)"
|
||||||
|
id="g14586">
|
||||||
|
<g
|
||||||
|
inkscape:export-ydpi="90"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
|
transform="matrix(1.9969286,0,0,1.9969286,-397.05491,877.00482)"
|
||||||
|
id="g15291-9"
|
||||||
|
style="display:inline;enable-background:new">
|
||||||
|
<g
|
||||||
|
transform="translate(877.50354,-102.83507)"
|
||||||
|
id="g16853-4"
|
||||||
|
style="enable-background:new" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:export-ydpi="90"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
|
transform="translate(343.99999,987.99997)"
|
||||||
|
id="g5886"
|
||||||
|
style="display:inline;enable-background:new">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:url(#linearGradient5891-0-4);stroke-width:7.11431503;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 198.5,240 5.25,5.25 13.98616,-14.43081"
|
||||||
|
id="path5835"
|
||||||
|
inkscape:path-effect="#path-effect5837-4-6"
|
||||||
|
inkscape:original-d="m 198.5,240 5.25,5.25 13.98616,-14.43081"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
inkscape:original-d="m 198.5,240 5.25,5.25 13.91205,-14.31964"
|
||||||
|
inkscape:path-effect="#path-effect5837-4-6"
|
||||||
|
id="path5880"
|
||||||
|
d="m 198.5,240 5.25,5.25 13.91205,-14.31964"
|
||||||
|
style="fill:none;stroke:#4787c8;stroke-width:3.55715752;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#7ea7d3;stroke-width:1.18571913px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 197.45937,240.47455 c -0.17828,-0.29362 -0.20087,-0.67548 -0.0603,-0.98892 0.14055,-0.31344 0.43739,-0.54812 0.77144,-0.62817 0.33405,-0.08 0.69314,-0.01 0.99635,0.15175 0.30321,0.16144 0.55146,0.40727 0.79165,0.65284 l 3.66429,3.74643 12.87946,-12.98973 c 0.20796,-0.20974 0.42306,-0.41969 0.68548,-0.55522 0.26242,-0.13553 0.57293,-0.19052 0.85827,-0.11426 0.14267,0.0381 0.27708,0.10787 0.38874,0.20452 0.11167,0.0966 0.20021,0.22004 0.25479,0.35726 0.0546,0.13722 0.075,0.28793 0.0585,0.43468 -0.0165,0.14674 -0.07,0.28919 -0.15422,0.41052"
|
||||||
|
id="path5882"
|
||||||
|
inkscape:path-effect="#path-effect5884-4-7"
|
||||||
|
inkscape:original-d="m 197.45937,240.47455 c 0.65604,-0.56057 2.02485,-1.34847 2.49911,-0.8125 l 3.66429,3.74643 12.87946,-12.98973 c 0.6875,-0.6875 2.09152,0.7375 2.09152,0.7375"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="csccc" />
|
||||||
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<rect
|
|
||||||
style="color:#000000;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
id="rect17347"
|
|
||||||
width="21.943846"
|
|
||||||
height="21.943846"
|
|
||||||
x="342.29913"
|
|
||||||
y="521.58435" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="opacity:0.8;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
d="m 359.97505,524.8252 -7.88606,7.71465 -2.57155,-2.57155 -2.91442,-0.0427 0,2.35727 4.02875,3.98587 c 0.80342,0.80309 2.111,0.80309 2.91442,0 l 8.18609,-8.22894 0,-0.38573 c 0,-1.24128 0.19944,-1.76801 -0.82915,-2.29836 z"
|
|
||||||
id="rect5147-9-1-5-7-6-5-8-7"
|
|
||||||
sodipodi:nodetypes="ccccccccscc" />
|
|
||||||
<path
|
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:sans-serif;-inkscape-font-specification:sans-serif"
|
|
||||||
d="m 361.65223,524.52745 -9.5602,9.36735 -2.56345,-2.56344 -2.92846,-0.0214 0.0153,2.32639 4.02203,4.02206 c 0.80341,0.80309 2.10565,0.80309 2.90906,0 l 10.95049,-11.05765 0.003,-2.1502 z"
|
|
||||||
id="path12830-4-17-0"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="cccccccccc" />
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
@ -14,10 +14,22 @@
|
|||||||
height="22"
|
height="22"
|
||||||
id="svg3199"
|
id="svg3199"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.48.5 r10040"
|
inkscape:version="0.48.1 r9760"
|
||||||
sodipodi:docname="checkbox-off.svg">
|
sodipodi:docname="checkbox-off.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs3201">
|
id="defs3201">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient15404"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<stop
|
||||||
|
id="stop15406"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#515151;stop-opacity:1" />
|
||||||
|
<stop
|
||||||
|
id="stop15408"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#292929;stop-opacity:1" />
|
||||||
|
</linearGradient>
|
||||||
<inkscape:perspective
|
<inkscape:perspective
|
||||||
sodipodi:type="inkscape:persp3d"
|
sodipodi:type="inkscape:persp3d"
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
@ -44,6 +56,16 @@
|
|||||||
effect="spiro"
|
effect="spiro"
|
||||||
id="path-effect5884-4-7"
|
id="path-effect5884-4-7"
|
||||||
is_visible="true" />
|
is_visible="true" />
|
||||||
|
<linearGradient
|
||||||
|
y2="-388.72955"
|
||||||
|
x2="-93.031357"
|
||||||
|
y1="-396.34738"
|
||||||
|
x1="-93.031357"
|
||||||
|
gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.685418)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient14219"
|
||||||
|
xlink:href="#linearGradient15404"
|
||||||
|
inkscape:collect="always" />
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient10013-4-63-6">
|
id="linearGradient10013-4-63-6">
|
||||||
@ -88,55 +110,30 @@
|
|||||||
id="linearGradient15376"
|
id="linearGradient15376"
|
||||||
xlink:href="#linearGradient10597-5"
|
xlink:href="#linearGradient10597-5"
|
||||||
inkscape:collect="always" />
|
inkscape:collect="always" />
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient5581-5-2-4-6-8-7-35-8"
|
|
||||||
id="linearGradient11811"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(3.0317573,0,0,1.0053174,-102.66338,-0.82153381)"
|
|
||||||
x1="63.568954"
|
|
||||||
y1="127.16142"
|
|
||||||
x2="63.568954"
|
|
||||||
y2="152.6618" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient5581-5-2-4-6-8-7-35-8">
|
|
||||||
<stop
|
|
||||||
id="stop5583-0-92-8-0-7-6-5-1"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#454c4c;stop-opacity:1;" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#393f3f;stop-opacity:1;"
|
|
||||||
offset="0.40000001"
|
|
||||||
id="stop5585-4-7-2-7-9-9-92-0" />
|
|
||||||
<stop
|
|
||||||
id="stop5587-6-7-2-0-3-1-21-5"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#2d3232;stop-opacity:1;" />
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#a2a2a2"
|
pagecolor="#000000"
|
||||||
bordercolor="#2d2d2d"
|
bordercolor="#2d2d2d"
|
||||||
borderopacity="1"
|
borderopacity="1"
|
||||||
inkscape:pageopacity="1"
|
inkscape:pageopacity="1"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="5.6568542"
|
inkscape:zoom="1"
|
||||||
inkscape:cx="19.79113"
|
inkscape:cx="6.1225392"
|
||||||
inkscape:cy="11.232334"
|
inkscape:cy="3.6003241"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="1412"
|
inkscape:window-width="1412"
|
||||||
inkscape:window-height="1067"
|
inkscape:window-height="1067"
|
||||||
inkscape:window-x="184"
|
inkscape:window-x="2116"
|
||||||
inkscape:window-y="233"
|
inkscape:window-y="261"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="0"
|
||||||
borderlayer="true"
|
borderlayer="true"
|
||||||
inkscape:showpageshadow="false"
|
inkscape:showpageshadow="false"
|
||||||
inkscape:snap-nodes="false"
|
inkscape:snap-nodes="false"
|
||||||
inkscape:snap-bbox="true"
|
inkscape:snap-bbox="true"
|
||||||
showborder="true">
|
showborder="false">
|
||||||
<inkscape:grid
|
<inkscape:grid
|
||||||
type="xygrid"
|
type="xygrid"
|
||||||
id="grid14843"
|
id="grid14843"
|
||||||
@ -163,44 +160,39 @@
|
|||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-342.5,-521.36218)">
|
transform="translate(-342.5,-521.36218)">
|
||||||
<g
|
<g
|
||||||
style="display:inline"
|
transform="matrix(0.80230061,0,0,0.80230061,-87.624044,-453.10297)"
|
||||||
id="use5671"
|
id="g14586"
|
||||||
transform="matrix(1.3594109,0,0,1.3564242,319.2059,481.99447)">
|
style="stroke-width:2.3714385;stroke-miterlimit:4;stroke-dasharray:none">
|
||||||
<rect
|
<g
|
||||||
transform="matrix(0.47304779,0,0,0.4807373,-6.3607039,-29.396216)"
|
inkscape:export-ydpi="90"
|
||||||
rx="4.4136767"
|
inkscape:export-xdpi="90"
|
||||||
y="125.3458"
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
x="50.440369"
|
transform="matrix(1.9969286,0,0,1.9969286,-397.05491,877.00482)"
|
||||||
height="29.154205"
|
id="g15291-9"
|
||||||
width="29.559635"
|
style="stroke-width:1.18754292;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new">
|
||||||
id="rect11803"
|
<g
|
||||||
style="color:#000000;fill:url(#linearGradient11811);fill-opacity:1;stroke:#3465a4;stroke-width:1.54426003000000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
transform="translate(877.50354,-102.83507)"
|
||||||
ry="4.4233952" />
|
id="g16853-4"
|
||||||
<path
|
style="stroke-width:1.18754292;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new">
|
||||||
inkscape:connector-curvature="0"
|
<rect
|
||||||
id="path11809"
|
transform="scale(1,-1)"
|
||||||
d="m 17.87105,33.844107 0,-0.773112 c 0,-1.031264 0.807171,-1.836142 1.811982,-1.836142 l 9.612456,0 c 1.004811,0 1.787822,0.804878 1.787822,1.836142 l 0,0.773112 c 0,-1.031264 -0.783011,-1.836142 -1.787822,-1.836142 l -9.612456,0 c -1.004811,0 -1.811982,0.804878 -1.811982,1.836142 z"
|
style="color:#000000;fill:url(#linearGradient14219);fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:1.24833274;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
id="rect6506-6"
|
||||||
sodipodi:nodetypes="csssscssc" />
|
width="11.281681"
|
||||||
<path
|
height="11.26221"
|
||||||
sodipodi:nodetypes="csssscssc"
|
x="-409.59354"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
y="-284.40115"
|
||||||
d="m 17.87105,41.158551 0,0.773112 c 0,1.031264 0.807171,1.836142 1.811982,1.836142 l 9.612456,0 c 1.004811,0 1.787822,-0.804878 1.787822,-1.836142 l 0,-0.773112 c 0,1.031264 -0.783011,1.836142 -1.787822,1.836142 l -9.612456,0 c -1.004811,0 -1.811982,-0.804878 -1.811982,-1.836142 z"
|
rx="1.0052766"
|
||||||
id="path11867"
|
ry="1.0052764" />
|
||||||
inkscape:connector-curvature="0" />
|
</g>
|
||||||
<path
|
</g>
|
||||||
inkscape:connector-curvature="0"
|
<g
|
||||||
id="path11869"
|
inkscape:export-ydpi="90"
|
||||||
d="m 17.87105,41.895784 0,0.773112 c 0,1.031264 0.644622,1.836142 1.649433,1.836142 l 10.067593,0 c 1.004811,0 1.495234,-0.804878 1.495234,-1.836142 l 0,-0.773112 c 0,1.031264 -0.783011,1.836142 -1.787822,1.836142 l -9.612456,0 c -1.004811,0 -1.811982,-0.804878 -1.811982,-1.836142 z"
|
inkscape:export-xdpi="90"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#000000;fill-opacity:0.85253451;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
sodipodi:nodetypes="csssscssc" />
|
transform="translate(343.99999,987.99997)"
|
||||||
|
id="g5886"
|
||||||
|
style="stroke-width:2.3714385;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new" />
|
||||||
</g>
|
</g>
|
||||||
<rect
|
|
||||||
style="color:#000000;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
id="rect17347"
|
|
||||||
width="21.943846"
|
|
||||||
height="21.943846"
|
|
||||||
x="342.29913"
|
|
||||||
y="521.58435" />
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 6.5 KiB |
@ -14,10 +14,22 @@
|
|||||||
height="22"
|
height="22"
|
||||||
id="svg3199"
|
id="svg3199"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.48.5 r10040"
|
inkscape:version="0.48.1 r9760"
|
||||||
sodipodi:docname="checkbox-focused.svg">
|
sodipodi:docname="checkbox.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs3201">
|
id="defs3201">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient15404"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<stop
|
||||||
|
id="stop15406"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#515151;stop-opacity:1" />
|
||||||
|
<stop
|
||||||
|
id="stop15408"
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#292929;stop-opacity:1" />
|
||||||
|
</linearGradient>
|
||||||
<inkscape:perspective
|
<inkscape:perspective
|
||||||
sodipodi:type="inkscape:persp3d"
|
sodipodi:type="inkscape:persp3d"
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
@ -32,6 +44,27 @@
|
|||||||
inkscape:vp_y="0 : 1000 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_x="0 : 0.5 : 1"
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
sodipodi:type="inkscape:persp3d" />
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5872-5-1"
|
||||||
|
id="linearGradient5891-0-4"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="205.84143"
|
||||||
|
y1="246.7094"
|
||||||
|
x2="206.74803"
|
||||||
|
y2="231.24142" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient5872-5-1">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#0b2e52;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop5874-4-4" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#1862af;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop5876-0-5" />
|
||||||
|
</linearGradient>
|
||||||
<inkscape:path-effect
|
<inkscape:path-effect
|
||||||
effect="spiro"
|
effect="spiro"
|
||||||
id="path-effect5837-4-6"
|
id="path-effect5837-4-6"
|
||||||
@ -44,6 +77,16 @@
|
|||||||
effect="spiro"
|
effect="spiro"
|
||||||
id="path-effect5884-4-7"
|
id="path-effect5884-4-7"
|
||||||
is_visible="true" />
|
is_visible="true" />
|
||||||
|
<linearGradient
|
||||||
|
y2="-388.72955"
|
||||||
|
x2="-93.031357"
|
||||||
|
y1="-396.34738"
|
||||||
|
x1="-93.031357"
|
||||||
|
gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.685418)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient14219"
|
||||||
|
xlink:href="#linearGradient15404"
|
||||||
|
inkscape:collect="always" />
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
id="linearGradient10013-4-63-6">
|
id="linearGradient10013-4-63-6">
|
||||||
@ -88,55 +131,30 @@
|
|||||||
id="linearGradient15376"
|
id="linearGradient15376"
|
||||||
xlink:href="#linearGradient10597-5"
|
xlink:href="#linearGradient10597-5"
|
||||||
inkscape:collect="always" />
|
inkscape:collect="always" />
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient5581-5-2-4-6-8-7-35-8"
|
|
||||||
id="linearGradient11811"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(3.0317573,0,0,1.0053174,-102.66338,-0.82153381)"
|
|
||||||
x1="63.568954"
|
|
||||||
y1="127.16142"
|
|
||||||
x2="63.568954"
|
|
||||||
y2="152.6618" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient5581-5-2-4-6-8-7-35-8">
|
|
||||||
<stop
|
|
||||||
id="stop5583-0-92-8-0-7-6-5-1"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#454c4c;stop-opacity:1;" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#393f3f;stop-opacity:1;"
|
|
||||||
offset="0.40000001"
|
|
||||||
id="stop5585-4-7-2-7-9-9-92-0" />
|
|
||||||
<stop
|
|
||||||
id="stop5587-6-7-2-0-3-1-21-5"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#2d3232;stop-opacity:1;" />
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#a2a2a2"
|
pagecolor="#000000"
|
||||||
bordercolor="#2d2d2d"
|
bordercolor="#2d2d2d"
|
||||||
borderopacity="1"
|
borderopacity="1"
|
||||||
inkscape:pageopacity="1"
|
inkscape:pageopacity="1"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1"
|
inkscape:zoom="4"
|
||||||
inkscape:cx="9.6447897"
|
inkscape:cx="71.247925"
|
||||||
inkscape:cy="12.591409"
|
inkscape:cy="33.339093"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="1412"
|
inkscape:window-width="1412"
|
||||||
inkscape:window-height="1067"
|
inkscape:window-height="1067"
|
||||||
inkscape:window-x="184"
|
inkscape:window-x="2116"
|
||||||
inkscape:window-y="233"
|
inkscape:window-y="261"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="0"
|
||||||
borderlayer="true"
|
borderlayer="true"
|
||||||
inkscape:showpageshadow="false"
|
inkscape:showpageshadow="false"
|
||||||
inkscape:snap-nodes="false"
|
inkscape:snap-nodes="false"
|
||||||
inkscape:snap-bbox="true"
|
inkscape:snap-bbox="true"
|
||||||
showborder="true">
|
showborder="false">
|
||||||
<inkscape:grid
|
<inkscape:grid
|
||||||
type="xygrid"
|
type="xygrid"
|
||||||
id="grid14843"
|
id="grid14843"
|
||||||
@ -163,44 +181,38 @@
|
|||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-342.5,-521.36218)">
|
transform="translate(-342.5,-521.36218)">
|
||||||
<g
|
<g
|
||||||
style="display:inline"
|
transform="matrix(0.84337,0,0,0.84337,-110.16632,-503.56182)"
|
||||||
id="use5671"
|
id="g14586">
|
||||||
transform="matrix(1.3594109,0,0,1.3564242,319.2059,481.99447)">
|
<g
|
||||||
<rect
|
inkscape:export-ydpi="90"
|
||||||
transform="matrix(0.47304779,0,0,0.4807373,-6.3607039,-29.396216)"
|
inkscape:export-xdpi="90"
|
||||||
rx="4.4136767"
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
y="125.3458"
|
transform="matrix(1.9969286,0,0,1.9969286,-397.05491,877.00482)"
|
||||||
x="50.440369"
|
id="g15291-9"
|
||||||
height="29.154205"
|
style="display:inline;enable-background:new">
|
||||||
width="29.559635"
|
<g
|
||||||
id="rect11803"
|
transform="translate(877.50354,-102.83507)"
|
||||||
style="color:#000000;fill:url(#linearGradient11811);fill-opacity:1;stroke:#1c1f1f;stroke-width:1.54426003;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
id="g16853-4"
|
||||||
ry="4.4233952" />
|
style="enable-background:new">
|
||||||
<path
|
<rect
|
||||||
inkscape:connector-curvature="0"
|
transform="scale(1,-1)"
|
||||||
id="path11809"
|
style="color:#000000;fill:url(#linearGradient14219);fill-opacity:1;fill-rule:nonzero;stroke:#868686;stroke-width:0.59377144999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
|
||||||
d="m 17.87105,33.844107 0,-0.773112 c 0,-1.031264 0.807171,-1.836142 1.811982,-1.836142 l 9.612456,0 c 1.004811,0 1.787822,0.804878 1.787822,1.836142 l 0,0.773112 c 0,-1.031264 -0.783011,-1.836142 -1.787822,-1.836142 l -9.612456,0 c -1.004811,0 -1.811982,0.804878 -1.811982,1.836142 z"
|
id="rect6506-6"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
width="11.281681"
|
||||||
sodipodi:nodetypes="csssscssc" />
|
height="11.26221"
|
||||||
<path
|
x="-409.59354"
|
||||||
sodipodi:nodetypes="csssscssc"
|
y="-284.40115"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
rx="0.95632279"
|
||||||
d="m 17.87105,41.158551 0,0.773112 c 0,1.031264 0.807171,1.836142 1.811982,1.836142 l 9.612456,0 c 1.004811,0 1.787822,-0.804878 1.787822,-1.836142 l 0,-0.773112 c 0,1.031264 -0.783011,1.836142 -1.787822,1.836142 l -9.612456,0 c -1.004811,0 -1.811982,-0.804878 -1.811982,-1.836142 z"
|
ry="0.95632273" />
|
||||||
id="path11867"
|
</g>
|
||||||
inkscape:connector-curvature="0" />
|
</g>
|
||||||
<path
|
<g
|
||||||
inkscape:connector-curvature="0"
|
inkscape:export-ydpi="90"
|
||||||
id="path11869"
|
inkscape:export-xdpi="90"
|
||||||
d="m 17.87105,41.895784 0,0.773112 c 0,1.031264 0.644622,1.836142 1.649433,1.836142 l 10.067593,0 c 1.004811,0 1.495234,-0.804878 1.495234,-1.836142 l 0,-0.773112 c 0,1.031264 -0.783011,1.836142 -1.787822,1.836142 l -9.612456,0 c -1.004811,0 -1.811982,-0.804878 -1.811982,-1.836142 z"
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#000000;fill-opacity:0.85253451;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
transform="translate(343.99999,987.99997)"
|
||||||
sodipodi:nodetypes="csssscssc" />
|
id="g5886"
|
||||||
|
style="display:inline;enable-background:new" />
|
||||||
</g>
|
</g>
|
||||||
<rect
|
|
||||||
style="color:#000000;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
id="rect17347"
|
|
||||||
width="21.943846"
|
|
||||||
height="21.943846"
|
|
||||||
x="342.29913"
|
|
||||||
y="521.58435" />
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 6.8 KiB |
@ -14,8 +14,8 @@
|
|||||||
height="22"
|
height="22"
|
||||||
id="svg3199"
|
id="svg3199"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.48.5 r10040"
|
inkscape:version="0.48.1 r9760"
|
||||||
sodipodi:docname="checkbox.svg">
|
sodipodi:docname="checkbox-focused.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs3201">
|
id="defs3201">
|
||||||
<linearGradient
|
<linearGradient
|
||||||
@ -131,55 +131,30 @@
|
|||||||
id="linearGradient15376"
|
id="linearGradient15376"
|
||||||
xlink:href="#linearGradient10597-5"
|
xlink:href="#linearGradient10597-5"
|
||||||
inkscape:collect="always" />
|
inkscape:collect="always" />
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient5581-5-2-4-6-8-7-35-8"
|
|
||||||
id="linearGradient11811"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(3.0317573,0,0,1.0053174,-102.66338,-0.82153381)"
|
|
||||||
x1="63.568954"
|
|
||||||
y1="127.16142"
|
|
||||||
x2="63.568954"
|
|
||||||
y2="152.6618" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient5581-5-2-4-6-8-7-35-8">
|
|
||||||
<stop
|
|
||||||
id="stop5583-0-92-8-0-7-6-5-1"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#454c4c;stop-opacity:1;" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#393f3f;stop-opacity:1;"
|
|
||||||
offset="0.40000001"
|
|
||||||
id="stop5585-4-7-2-7-9-9-92-0" />
|
|
||||||
<stop
|
|
||||||
id="stop5587-6-7-2-0-3-1-21-5"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#2d3232;stop-opacity:1;" />
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#a2a2a2"
|
pagecolor="#000000"
|
||||||
bordercolor="#2d2d2d"
|
bordercolor="#2d2d2d"
|
||||||
borderopacity="1"
|
borderopacity="1"
|
||||||
inkscape:pageopacity="1"
|
inkscape:pageopacity="1"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1"
|
inkscape:zoom="1"
|
||||||
inkscape:cx="-0.17876005"
|
inkscape:cx="64.516955"
|
||||||
inkscape:cy="11.944326"
|
inkscape:cy="13.871056"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="2560"
|
inkscape:window-width="1412"
|
||||||
inkscape:window-height="1375"
|
inkscape:window-height="1067"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="2635"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="226"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="0"
|
||||||
borderlayer="true"
|
borderlayer="true"
|
||||||
inkscape:showpageshadow="false"
|
inkscape:showpageshadow="false"
|
||||||
inkscape:snap-nodes="false"
|
inkscape:snap-nodes="false"
|
||||||
inkscape:snap-bbox="true"
|
inkscape:snap-bbox="true"
|
||||||
showborder="true">
|
showborder="false">
|
||||||
<inkscape:grid
|
<inkscape:grid
|
||||||
type="xygrid"
|
type="xygrid"
|
||||||
id="grid14843"
|
id="grid14843"
|
||||||
@ -196,7 +171,7 @@
|
|||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:type
|
<dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
<dc:title />
|
<dc:title></dc:title>
|
||||||
</cc:Work>
|
</cc:Work>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
@ -206,56 +181,63 @@
|
|||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-342.5,-521.36218)">
|
transform="translate(-342.5,-521.36218)">
|
||||||
<g
|
<g
|
||||||
style="display:inline"
|
transform="matrix(0.84337,0,0,0.84337,-110.16632,-503.56182)"
|
||||||
id="use5671"
|
id="g14586">
|
||||||
transform="matrix(1.3594109,0,0,1.3564242,319.2059,481.99447)">
|
<g
|
||||||
<rect
|
inkscape:export-ydpi="90"
|
||||||
transform="matrix(0.47304779,0,0,0.4807373,-6.3607039,-29.396216)"
|
inkscape:export-xdpi="90"
|
||||||
rx="4.4136767"
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
y="125.3458"
|
transform="matrix(1.9969286,0,0,1.9969286,-397.05491,877.00482)"
|
||||||
x="50.440369"
|
id="g15291-9"
|
||||||
height="29.154205"
|
style="display:inline;enable-background:new">
|
||||||
width="29.559635"
|
<g
|
||||||
id="rect11803"
|
transform="translate(877.50354,-102.83507)"
|
||||||
style="color:#000000;fill:url(#linearGradient11811);fill-opacity:1;stroke:#1c1f1f;stroke-width:1.54426003;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
id="g16853-4"
|
||||||
ry="4.4233952" />
|
style="enable-background:new">
|
||||||
<path
|
<rect
|
||||||
inkscape:connector-curvature="0"
|
transform="scale(1,-1)"
|
||||||
id="path11809"
|
style="color:#000000;fill:url(#linearGradient14219);fill-opacity:1;fill-rule:nonzero;stroke:#868686;stroke-width:0.59377144999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
|
||||||
d="m 17.87105,33.844107 0,-0.773112 c 0,-1.031264 0.807171,-1.836142 1.811982,-1.836142 l 9.612456,0 c 1.004811,0 1.787822,0.804878 1.787822,1.836142 l 0,0.773112 c 0,-1.031264 -0.783011,-1.836142 -1.787822,-1.836142 l -9.612456,0 c -1.004811,0 -1.811982,0.804878 -1.811982,1.836142 z"
|
id="rect6506-6"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
width="11.281681"
|
||||||
sodipodi:nodetypes="csssscssc" />
|
height="11.26221"
|
||||||
<path
|
x="-409.59354"
|
||||||
sodipodi:nodetypes="csssscssc"
|
y="-284.40115"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
rx="0.95632279"
|
||||||
d="m 17.87105,41.158551 0,0.773112 c 0,1.031264 0.807171,1.836142 1.811982,1.836142 l 9.612456,0 c 1.004811,0 1.787822,-0.804878 1.787822,-1.836142 l 0,-0.773112 c 0,1.031264 -0.783011,1.836142 -1.787822,1.836142 l -9.612456,0 c -1.004811,0 -1.811982,-0.804878 -1.811982,-1.836142 z"
|
ry="0.95632273" />
|
||||||
id="path11867"
|
</g>
|
||||||
inkscape:connector-curvature="0" />
|
</g>
|
||||||
<path
|
<g
|
||||||
inkscape:connector-curvature="0"
|
inkscape:export-ydpi="90"
|
||||||
id="path11869"
|
inkscape:export-xdpi="90"
|
||||||
d="m 17.87105,41.895784 0,0.773112 c 0,1.031264 0.644622,1.836142 1.649433,1.836142 l 10.067593,0 c 1.004811,0 1.495234,-0.804878 1.495234,-1.836142 l 0,-0.773112 c 0,1.031264 -0.783011,1.836142 -1.787822,1.836142 l -9.612456,0 c -1.004811,0 -1.811982,-0.804878 -1.811982,-1.836142 z"
|
inkscape:export-filename="/home/jimmac/SparkleShare/gnome-mockups/boxes/interactive/img/checkbox-on.png"
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.15;color:#000000;fill:#000000;fill-opacity:0.85253451;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
transform="translate(343.99999,987.99997)"
|
||||||
sodipodi:nodetypes="csssscssc" />
|
id="g5886"
|
||||||
|
style="display:inline;enable-background:new">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:url(#linearGradient5891-0-4);stroke-width:7.11431503;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 198.5,240 5.25,5.25 13.98616,-14.43081"
|
||||||
|
id="path5835"
|
||||||
|
inkscape:path-effect="#path-effect5837-4-6"
|
||||||
|
inkscape:original-d="m 198.5,240 5.25,5.25 13.98616,-14.43081"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
inkscape:original-d="m 198.5,240 5.25,5.25 13.91205,-14.31964"
|
||||||
|
inkscape:path-effect="#path-effect5837-4-6"
|
||||||
|
id="path5880"
|
||||||
|
d="m 198.5,240 5.25,5.25 13.91205,-14.31964"
|
||||||
|
style="fill:none;stroke:#4787c8;stroke-width:3.55715752;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#7ea7d3;stroke-width:1.18571913px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 197.45937,240.47455 c -0.17828,-0.29362 -0.20087,-0.67548 -0.0603,-0.98892 0.14055,-0.31344 0.43739,-0.54812 0.77144,-0.62817 0.33405,-0.08 0.69314,-0.01 0.99635,0.15175 0.30321,0.16144 0.55146,0.40727 0.79165,0.65284 l 3.66429,3.74643 12.87946,-12.98973 c 0.20796,-0.20974 0.42306,-0.41969 0.68548,-0.55522 0.26242,-0.13553 0.57293,-0.19052 0.85827,-0.11426 0.14267,0.0381 0.27708,0.10787 0.38874,0.20452 0.11167,0.0966 0.20021,0.22004 0.25479,0.35726 0.0546,0.13722 0.075,0.28793 0.0585,0.43468 -0.0165,0.14674 -0.07,0.28919 -0.15422,0.41052"
|
||||||
|
id="path5882"
|
||||||
|
inkscape:path-effect="#path-effect5884-4-7"
|
||||||
|
inkscape:original-d="m 197.45937,240.47455 c 0.65604,-0.56057 2.02485,-1.34847 2.49911,-0.8125 l 3.66429,3.74643 12.87946,-12.98973 c 0.6875,-0.6875 2.09152,0.7375 2.09152,0.7375"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="csccc" />
|
||||||
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<rect
|
|
||||||
style="color:#000000;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
id="rect17347"
|
|
||||||
width="21.943846"
|
|
||||||
height="21.943846"
|
|
||||||
x="342.29913"
|
|
||||||
y="521.58435" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="opacity:0.8;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
d="m 359.97505,524.8252 -7.88606,7.71465 -2.57155,-2.57155 -2.91442,-0.0427 0,2.35727 4.02875,3.98587 c 0.80342,0.80309 2.111,0.80309 2.91442,0 l 8.18609,-8.22894 0,-0.38573 c 0,-1.24128 0.19944,-1.76801 -0.82915,-2.29836 z"
|
|
||||||
id="rect5147-9-1-5-7-6-5-8-7"
|
|
||||||
sodipodi:nodetypes="ccccccccscc" />
|
|
||||||
<path
|
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:sans-serif;-inkscape-font-specification:sans-serif"
|
|
||||||
d="m 361.65223,524.52745 -9.5602,9.36735 -2.56345,-2.56344 -2.92846,-0.0214 0.0153,2.32639 4.02203,4.02206 c 0.80341,0.80309 2.10565,0.80309 2.90906,0 l 10.95049,-11.05765 0.003,-2.1502 z"
|
|
||||||
id="path12830-4-17-0"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="cccccccccc" />
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 8.8 KiB |
180
data/theme/gdm.css
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
/* Copyright 2011, Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU Lesser General Public License,
|
||||||
|
* version 2.1, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope 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, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Login Dialog */
|
||||||
|
|
||||||
|
.login-dialog-title {
|
||||||
|
font-size: 14pt;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666666;
|
||||||
|
padding-bottom: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog {
|
||||||
|
border-radius: 16px;
|
||||||
|
min-height: 150px;
|
||||||
|
max-height: 700px;
|
||||||
|
min-width: 350px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-prompt-fingerprint-message {
|
||||||
|
font-size: 10.5pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-view {
|
||||||
|
-st-vfade-offset: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list {
|
||||||
|
spacing: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item {
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item:ltr {
|
||||||
|
padding-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item:rtl {
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item .login-dialog-user-list-item-name {
|
||||||
|
font-size: 20pt;
|
||||||
|
padding-left: 1em;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item:hover .login-dialog-user-list-item-name {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item:focus .login-dialog-user-list-item-name {
|
||||||
|
color: white;
|
||||||
|
text-shadow: black 0px 2px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item-vertical-layout {
|
||||||
|
spacing: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item .login-dialog-user-list-item-focus-bin {
|
||||||
|
background-color: rgba(0,0,0,0.0);
|
||||||
|
height: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item:focus .login-dialog-user-list-item-focus-bin {
|
||||||
|
background-color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-user-list-item-icon {
|
||||||
|
border: 2px solid #8b8b8b;
|
||||||
|
border-radius: 8px;
|
||||||
|
width: 64px;
|
||||||
|
height: 64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-not-listed-button {
|
||||||
|
padding-top: 2em;
|
||||||
|
}
|
||||||
|
.login-dialog-not-listed-label {
|
||||||
|
font-size: 14pt;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-prompt-layout {
|
||||||
|
padding-bottom: 32px;
|
||||||
|
}
|
||||||
|
.login-dialog-prompt-label {
|
||||||
|
color: white;
|
||||||
|
font-size: 20pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-prompt-entry {
|
||||||
|
padding: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 2px solid #5656cc;
|
||||||
|
color: black;
|
||||||
|
background-color: white;
|
||||||
|
caret-color: black;
|
||||||
|
caret-size: 1px;
|
||||||
|
width: 15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-prompt-entry .capslock-warning {
|
||||||
|
icon-size: 16px;
|
||||||
|
warning-color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-prompt-entry:insensitive {
|
||||||
|
color: rgba(0,0,0,0.7);
|
||||||
|
border: 2px solid #565656;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list {
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 10.5pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list-button {
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list-button:focus {
|
||||||
|
background-color: #4c4c4c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list-button:active {
|
||||||
|
background-color: #4c4c4c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list-button:hover {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list-scroll-view {
|
||||||
|
background-gradient-start: rgba(80,80,80,0.3);
|
||||||
|
background-gradient-end: rgba(80,80,80,0.7);
|
||||||
|
background-gradient-direction: vertical;
|
||||||
|
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.9);
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid rgba(80,80,80,1.0);
|
||||||
|
padding: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list-item:focus {
|
||||||
|
background-color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list-triangle {
|
||||||
|
padding-right: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list-item-box {
|
||||||
|
spacing: .25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-dialog-session-list-item-dot {
|
||||||
|
width: .75em;
|
||||||
|
height: .75em;
|
||||||
|
}
|
@ -1,14 +0,0 @@
|
|||||||
@import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors
|
|
||||||
@import "gnome-shell-sass/_drawing";
|
|
||||||
@import "gnome-shell-sass/_common";
|
|
||||||
|
|
||||||
//force symbolic icons
|
|
||||||
stage {
|
|
||||||
-st-icon-style: symbolic;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toggle-switch { width: 48px; }
|
|
||||||
.toggle-switch-us, .toggle-switch-intl {
|
|
||||||
background-image: url("resource:///org/gnome/shell/theme/toggle-off-hc.svg");
|
|
||||||
&:checked { background-image: url("resource:///org/gnome/shell/theme/toggle-on-hc.svg"); }
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
$variant: 'dark';
|
|
||||||
|
|
||||||
@import "gnome-shell-sass/_colors"; //use gtk colors
|
|
||||||
@import "gnome-shell-sass/_drawing";
|
|
||||||
@import "gnome-shell-sass/_common";
|
|
@ -1,130 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="300"
|
|
||||||
height="80"
|
|
||||||
id="svg7355"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.2 r9819"
|
|
||||||
sodipodi:docname="logged-in-indicator.svg">
|
|
||||||
<metadata
|
|
||||||
id="metadata4175">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<sodipodi:namedview
|
|
||||||
pagecolor="#2c1cff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="1"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1440"
|
|
||||||
inkscape:window-height="843"
|
|
||||||
id="namedview4173"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="2.8760889"
|
|
||||||
inkscape:cx="106.00403"
|
|
||||||
inkscape:cy="80.68078"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="g30864" />
|
|
||||||
<defs
|
|
||||||
id="defs7357">
|
|
||||||
<radialGradient
|
|
||||||
xlink:href="#linearGradient36429"
|
|
||||||
id="radialGradient7461"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(2.5919312,0,0,0.57582113,-20.687059,48.400487)"
|
|
||||||
cx="47.428951"
|
|
||||||
cy="167.16817"
|
|
||||||
fx="47.428951"
|
|
||||||
fy="167.16817"
|
|
||||||
r="37" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient36429">
|
|
||||||
<stop
|
|
||||||
id="stop36431"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
|
||||||
<stop
|
|
||||||
id="stop36433"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
|
||||||
</linearGradient>
|
|
||||||
<radialGradient
|
|
||||||
xlink:href="#linearGradient36471"
|
|
||||||
id="radialGradient7463"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.1891549,0,0,0.55513246,-9.281289,36.12653)"
|
|
||||||
cx="49.067139"
|
|
||||||
cy="242.50381"
|
|
||||||
fx="49.067139"
|
|
||||||
fy="242.50381"
|
|
||||||
r="37.00671" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient36471">
|
|
||||||
<stop
|
|
||||||
id="stop36473"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
|
||||||
<stop
|
|
||||||
id="stop36475"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
|
||||||
</linearGradient>
|
|
||||||
<radialGradient
|
|
||||||
r="37.00671"
|
|
||||||
fy="242.50381"
|
|
||||||
fx="49.067139"
|
|
||||||
cy="242.50381"
|
|
||||||
cx="49.067139"
|
|
||||||
gradientTransform="matrix(3.4218418,0,0,0.03365337,-61.309005,138.5071)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="radialGradient7488"
|
|
||||||
xlink:href="#linearGradient36471" />
|
|
||||||
</defs>
|
|
||||||
<g
|
|
||||||
id="layer1"
|
|
||||||
transform="matrix(1.6213276,0,0,1.6213276,-431.6347,-272.5745)">
|
|
||||||
<g
|
|
||||||
style="display:inline"
|
|
||||||
id="g30864"
|
|
||||||
transform="translate(255.223,70.118091)">
|
|
||||||
<rect
|
|
||||||
ry="3.4593496"
|
|
||||||
rx="8.8641119"
|
|
||||||
y="76.159348"
|
|
||||||
x="12.596948"
|
|
||||||
height="71.116341"
|
|
||||||
width="182.22595"
|
|
||||||
id="rect14000"
|
|
||||||
style="opacity:0.371875;fill:url(#radialGradient7461);fill-opacity:1;stroke:none" />
|
|
||||||
<path
|
|
||||||
id="rect34520"
|
|
||||||
d="m 194.80022,146.83551 -182.559919,0"
|
|
||||||
style="opacity:0.35;fill:none;stroke:url(#radialGradient7488);stroke-width:0.61184424;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
|
||||||
connector-curvature="0"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="cc" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.8 KiB |
@ -1,114 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="16"
|
|
||||||
height="16"
|
|
||||||
id="svg12430"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.4 r9939"
|
|
||||||
sodipodi:docname="more-results.svg">
|
|
||||||
<defs
|
|
||||||
id="defs12432" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#7a7a7a"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="1"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="90.509668"
|
|
||||||
inkscape:cx="6.5009792"
|
|
||||||
inkscape:cy="8.3589595"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="g14642-3-0"
|
|
||||||
showgrid="false"
|
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:window-width="1440"
|
|
||||||
inkscape:window-height="840"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid13002" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata12435">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(0,-1036.3622)">
|
|
||||||
<g
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-141.99984,638.37113)"
|
|
||||||
inkscape:label="zoom-in"
|
|
||||||
id="g14642-3-0">
|
|
||||||
<path
|
|
||||||
sodipodi:type="inkscape:offset"
|
|
||||||
inkscape:radius="0"
|
|
||||||
inkscape:original="M 145.1875 400 C 144.5248 400 144 400.54899 144 401.21875 L 144 410.78125 C 144 411.45101 144.5248 412 145.1875 412 L 154.8125 412 C 155.4752 412 156 411.45101 156 410.78125 L 156 401.21875 C 156 400.54899 155.4752 400 154.8125 400 L 145.1875 400 z M 149 403 L 151 403 L 151 405 L 153 405 L 153 407 L 151 407 L 151 409 L 149 409 L 149 407 L 147 407 L 147 405 L 149 405 L 149 403 z "
|
|
||||||
xlink:href="#rect11749-5-0-1-8"
|
|
||||||
style="color:#bebebe;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;opacity:0.8"
|
|
||||||
id="path13004"
|
|
||||||
inkscape:href="#rect11749-5-0-1-8"
|
|
||||||
d="M 145.1875,400 C 144.5248,400 144,400.54899 144,401.21875 l 0,9.5625 c 0,0.66976 0.5248,1.21875 1.1875,1.21875 l 9.625,0 c 0.6627,0 1.1875,-0.54899 1.1875,-1.21875 l 0,-9.5625 C 156,400.54899 155.4752,400 154.8125,400 L 145.1875,400 z m 3.8125,3 2,0 0,2 2,0 0,2 -2,0 0,2 -2,0 0,-2 -2,0 0,-2 2,0 L 149,403 Z"
|
|
||||||
transform="translate(0,1)" />
|
|
||||||
<use
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
xlink:href="#path13004"
|
|
||||||
id="use11960"
|
|
||||||
transform="translate(1,-1)"
|
|
||||||
width="16"
|
|
||||||
height="16" />
|
|
||||||
<use
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
xlink:href="#use11960"
|
|
||||||
id="use11962"
|
|
||||||
transform="translate(-2,0)"
|
|
||||||
width="16"
|
|
||||||
height="16" />
|
|
||||||
<path
|
|
||||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
|
|
||||||
d="M 7 5 L 7 7 L 5 7 L 5 9 L 7 9 L 7 11 L 9 11 L 9 9 L 11 9 L 11 7 L 9 7 L 9 5 L 7 5 z "
|
|
||||||
transform="translate(141.99984,397.99107)"
|
|
||||||
id="rect3757" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
style="color:#bebebe;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
|
|
||||||
d="M 145.1875,400 C 144.5248,400 144,400.54899 144,401.21875 l 0,9.5625 c 0,0.66976 0.5248,1.21875 1.1875,1.21875 l 9.625,0 c 0.6627,0 1.1875,-0.54899 1.1875,-1.21875 l 0,-9.5625 C 156,400.54899 155.4752,400 154.8125,400 L 145.1875,400 z m 3.8125,3 2,0 0,2 2,0 0,2 -2,0 0,2 -2,0 0,-2 -2,0 0,-2 2,0 L 149,403 Z"
|
|
||||||
id="rect11749-5-0-1-8" />
|
|
||||||
<rect
|
|
||||||
style="fill:none;stroke:none"
|
|
||||||
id="rect3620-5-4"
|
|
||||||
width="15.981825"
|
|
||||||
height="16"
|
|
||||||
x="142"
|
|
||||||
y="398"
|
|
||||||
rx="0"
|
|
||||||
ry="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.4 KiB |
@ -1,119 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="64px"
|
|
||||||
height="64px"
|
|
||||||
id="svg3471"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.5 r10040"
|
|
||||||
sodipodi:docname="New document 5">
|
|
||||||
<defs
|
|
||||||
id="defs3473" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="5.5"
|
|
||||||
inkscape:cx="32"
|
|
||||||
inkscape:cy="32"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="true"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:grid-bbox="true"
|
|
||||||
inkscape:window-width="1461"
|
|
||||||
inkscape:window-height="772"
|
|
||||||
inkscape:window-x="37"
|
|
||||||
inkscape:window-y="64"
|
|
||||||
inkscape:window-maximized="0" />
|
|
||||||
<metadata
|
|
||||||
id="metadata3476">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
id="layer1"
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer">
|
|
||||||
<g
|
|
||||||
transform="matrix(4,0,0,4,1.9999997,2.3636364)"
|
|
||||||
id="g19145"
|
|
||||||
style="fill:#bebebe;fill-opacity:1;display:inline">
|
|
||||||
<g
|
|
||||||
id="g19147"
|
|
||||||
inkscape:label="status"
|
|
||||||
style="fill:#bebebe;fill-opacity:1;display:inline"
|
|
||||||
transform="translate(-541.0002,-301)" />
|
|
||||||
<g
|
|
||||||
style="fill:#bebebe;fill-opacity:1"
|
|
||||||
id="g19149"
|
|
||||||
inkscape:label="devices"
|
|
||||||
transform="translate(-541.0002,-301)" />
|
|
||||||
<g
|
|
||||||
style="fill:#bebebe;fill-opacity:1"
|
|
||||||
id="g19151"
|
|
||||||
inkscape:label="apps"
|
|
||||||
transform="translate(-541.0002,-301)" />
|
|
||||||
<g
|
|
||||||
style="fill:#bebebe;fill-opacity:1"
|
|
||||||
id="g19153"
|
|
||||||
inkscape:label="places"
|
|
||||||
transform="translate(-541.0002,-301)" />
|
|
||||||
<g
|
|
||||||
style="fill:#bebebe;fill-opacity:1"
|
|
||||||
id="g19155"
|
|
||||||
inkscape:label="mimetypes"
|
|
||||||
transform="translate(-541.0002,-301)">
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="m 543.0002,301 c -1.05237,0 -2,0.84508 -2,1.9375 l 0,11.125 c 0,1.09242 0.94763,1.9375 2,1.9375 l 11,0 c 1.05237,0 2,-0.84508 2,-1.9375 l 0,-11.125 c 0,-1.09242 -0.94763,-1.9375 -2,-1.9375 l -11,0 z m 0,5 3.03125,0 0,2 -3.03125,0 0,-2 z m 4.03125,0 2.96875,0 0,2 -2.96875,0 0,-2 z m 3.96875,0 3,0 0,2 -3,0 0,-2 z m -8,3 3.03125,0 0,2 -3.03125,0 0,-2 z m 4.03125,0 2.96875,0 0,2 -2.96875,0 0,-2 z m 3.96875,0 3,0 0,2 -3,0 0,-2 z m -8,3 3.03125,0 0,2 -3.03125,0 0,-2 z m 4.03125,0 2.96875,0 0,2 -2.96875,0 0,-2 z m 3.96875,0 3,0 0,2 -3,0 0,-2 z"
|
|
||||||
id="path19157"
|
|
||||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;font-family:Sans;-inkscape-font-specification:Sans" />
|
|
||||||
<rect
|
|
||||||
height="1.9999993"
|
|
||||||
id="rect19159"
|
|
||||||
style="opacity:0.35;color:#000000;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
width="2.9999993"
|
|
||||||
x="551.00018"
|
|
||||||
y="309" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g19161"
|
|
||||||
inkscape:label="emblems"
|
|
||||||
style="fill:#bebebe;fill-opacity:1;display:inline"
|
|
||||||
transform="translate(-541.0002,-301)" />
|
|
||||||
<g
|
|
||||||
id="g19163"
|
|
||||||
inkscape:label="emotes"
|
|
||||||
style="fill:#bebebe;fill-opacity:1;display:inline"
|
|
||||||
transform="translate(-541.0002,-301)" />
|
|
||||||
<g
|
|
||||||
id="g19165"
|
|
||||||
inkscape:label="categories"
|
|
||||||
style="fill:#bebebe;fill-opacity:1;display:inline"
|
|
||||||
transform="translate(-541.0002,-301)" />
|
|
||||||
<g
|
|
||||||
id="g19167"
|
|
||||||
inkscape:label="actions"
|
|
||||||
style="fill:#bebebe;fill-opacity:1;display:inline"
|
|
||||||
transform="translate(-541.0002,-301)" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.7 KiB |
@ -1,114 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="64px"
|
|
||||||
height="64px"
|
|
||||||
id="svg3393"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.5 r10040"
|
|
||||||
sodipodi:docname="New document 2">
|
|
||||||
<defs
|
|
||||||
id="defs3395" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="5.5"
|
|
||||||
inkscape:cx="32"
|
|
||||||
inkscape:cy="32"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="true"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:grid-bbox="true"
|
|
||||||
inkscape:window-width="697"
|
|
||||||
inkscape:window-height="613"
|
|
||||||
inkscape:window-x="100"
|
|
||||||
inkscape:window-y="77"
|
|
||||||
inkscape:window-maximized="0" />
|
|
||||||
<metadata
|
|
||||||
id="metadata3398">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
id="layer1"
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer">
|
|
||||||
<g
|
|
||||||
style="display:inline"
|
|
||||||
transform="matrix(4,0,0,4,0.29733827,-0.35415646)"
|
|
||||||
id="g19245">
|
|
||||||
<g
|
|
||||||
id="g19247"
|
|
||||||
inkscape:label="status"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-323.02908,-649.02581)" />
|
|
||||||
<g
|
|
||||||
id="g19249"
|
|
||||||
inkscape:label="devices"
|
|
||||||
transform="translate(-323.02908,-649.02581)" />
|
|
||||||
<g
|
|
||||||
id="g19251"
|
|
||||||
inkscape:label="apps"
|
|
||||||
transform="translate(-323.02908,-649.02581)">
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="m 331.9377,653 c 0.0187,0.16677 0.0625,0.32822 0.0625,0.5 0,2.48528 -2.01472,4.5 -4.5,4.5 -0.11769,0 -0.22834,-0.0224 -0.34375,-0.0312 l 0,2.21875 c 0,1.00412 0.80838,1.8125 1.8125,1.8125 l 1.54511,-5e-5 2,2.04688 2.0625,-2.04688 1.61114,0 c 1.00413,0 1.8125,-0.80838 1.8125,-1.8125 l 0,-5.375 c 0,-1.00412 -0.80837,-1.8125 -1.8125,-1.8125 z"
|
|
||||||
id="path19253"
|
|
||||||
sodipodi:nodetypes="csscsscccssssc"
|
|
||||||
style="opacity:0.5;color:#000000;fill:#c3c3c3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="m 327.5002,650 c -1.933,0 -3.5,1.567 -3.5,3.5 0,1.933 1.567,3.5 3.5,3.5 1.933,0 3.5,-1.567 3.5,-3.5 0,-1.933 -1.567,-3.5 -3.5,-3.5 z m -0.53125,1 1.03125,0 -0.0625,1.375 a 0.19951718,0.19951718 0 0 0 0,0.0625 0.19951718,0.19951718 0 0 0 0,0.0312 0.19951718,0.19951718 0 0 0 0.125,0.125 0.19951718,0.19951718 0 0 0 0.0312,0 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 l 1.15625,-0.75 0.5,0.90625 -1.21875,0.625 a 0.19951718,0.19951718 0 0 0 -0.0312,0 0.19951718,0.19951718 0 0 0 -0.0312,0.0312 0.19951718,0.19951718 0 0 0 -0.0312,0.0937 0.19951718,0.19951718 0 0 0 0,0.0625 0.19951718,0.19951718 0 0 0 0,0.0312 0.19951718,0.19951718 0 0 0 0.0312,0.0625 0.19951718,0.19951718 0 0 0 0.0312,0.0312 0.19951718,0.19951718 0 0 0 0.0312,0.0312 l 1.25,0.625 -0.53125,0.90625 -1.15625,-0.781 a 0.19951718,0.19951718 0 0 0 -0.0312,0 0.19951718,0.19951718 0 0 0 -0.0625,-0.0312 0.19951718,0.19951718 0 0 0 -0.0625,0 0.19951718,0.19951718 0 0 0 -0.125,0.0937 0.19951718,0.19951718 0 0 0 -0.0312,0.0312 0.19951718,0.19951718 0 0 0 0,0.0312 0.19951718,0.19951718 0 0 0 0,0.0625 l 0.0625,1.3751 -1.03125,0 0.0937,-1.375 a 0.19951718,0.19951718 0 0 0 -0.0312,-0.0937 0.19951718,0.19951718 0 0 0 -0.0312,-0.0625 0.19951718,0.19951718 0 0 0 -0.0625,-0.0312 0.19951718,0.19951718 0 0 0 -0.0625,-0.0312 0.19951718,0.19951718 0 0 0 -0.0312,0 0.19951718,0.19951718 0 0 0 -0.0937,0.0312 l -1.1875,0.78125 -0.5,-0.90625 1.25,-0.625 a 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0625 0.19951718,0.19951718 0 0 0 0,-0.0312 0.19951718,0.19951718 0 0 0 0,-0.0625 0.19951718,0.19951718 0 0 0 0,-0.0312 0.19951718,0.19951718 0 0 0 -0.0312,-0.0625 0.19951718,0.19951718 0 0 0 -0.0312,-0.0312 0.19951718,0.19951718 0 0 0 -0.0312,0 l -1.25,-0.625 0.5,-0.90625 1.1875,0.75 a 0.19951718,0.19951718 0 0 0 0.0312,0.0312 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0625,0 0.19951718,0.19951718 0 0 0 0.0312,0 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0312 0.19951718,0.19951718 0 0 0 0,-0.0312 0.19951718,0.19951718 0 0 0 0.0312,-0.0625 0.19951718,0.19951718 0 0 0 0,-0.0312 L 326.96895,651 z"
|
|
||||||
id="path19255"
|
|
||||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g19257"
|
|
||||||
inkscape:label="places"
|
|
||||||
transform="translate(-323.02908,-649.02581)" />
|
|
||||||
<g
|
|
||||||
id="g19259"
|
|
||||||
inkscape:label="mimetypes"
|
|
||||||
transform="translate(-323.02908,-649.02581)" />
|
|
||||||
<g
|
|
||||||
id="g19261"
|
|
||||||
inkscape:label="emblems"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-323.02908,-649.02581)" />
|
|
||||||
<g
|
|
||||||
id="g19263"
|
|
||||||
inkscape:label="emotes"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-323.02908,-649.02581)" />
|
|
||||||
<g
|
|
||||||
id="g19265"
|
|
||||||
inkscape:label="categories"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-323.02908,-649.02581)" />
|
|
||||||
<g
|
|
||||||
id="g19267"
|
|
||||||
inkscape:label="actions"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(-323.02908,-649.02581)" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 78 KiB |
@ -1,30 +0,0 @@
|
|||||||
.Leader {
|
|
||||||
stroke-width: .5 !important;
|
|
||||||
stroke: #535353;
|
|
||||||
fill: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Button {
|
|
||||||
stroke-width: .25;
|
|
||||||
stroke: #ededed;
|
|
||||||
fill: #ededed;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Ring {
|
|
||||||
stroke-width: .5 !important;
|
|
||||||
stroke: #535353 !important;
|
|
||||||
fill: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Label {
|
|
||||||
stroke: none !important;
|
|
||||||
stroke-width: .1 !important;
|
|
||||||
font-size: .1 !important;
|
|
||||||
fill: transparent !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.TouchStrip, .TouchRing {
|
|
||||||
stroke-width: .1 !important;
|
|
||||||
stroke: #ededed !important;
|
|
||||||
fill: #535353 !important;
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="18"
|
|
||||||
height="18"
|
|
||||||
id="svg4703"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.4 r9939"
|
|
||||||
sodipodi:docname="page-indicator-active.svg">
|
|
||||||
<defs
|
|
||||||
id="defs4705" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="22.197802"
|
|
||||||
inkscape:cx="2.1522887"
|
|
||||||
inkscape:cy="16.782904"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="true"
|
|
||||||
inkscape:grid-bbox="true"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1021"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1" />
|
|
||||||
<metadata
|
|
||||||
id="metadata4708">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
id="layer1"
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
transform="translate(0,2)">
|
|
||||||
<path
|
|
||||||
transform="matrix(0.72823872,0,0,0.8336417,-1512.2872,-525.55618)"
|
|
||||||
d="m 2099.9808,638.83099 c 0,5.29998 -4.9184,9.59645 -10.9854,9.59645 -6.0671,0 -10.9854,-4.29647 -10.9854,-9.59645 0,-5.29997 4.9183,-9.59645 10.9854,-9.59645 6.067,0 10.9854,4.29648 10.9854,9.59645 z"
|
|
||||||
sodipodi:ry="9.5964489"
|
|
||||||
sodipodi:rx="10.985409"
|
|
||||||
sodipodi:cy="638.83099"
|
|
||||||
sodipodi:cx="2088.9954"
|
|
||||||
id="path4711"
|
|
||||||
style="fill:#fdffff;fill-opacity:0.94117647;stroke:none"
|
|
||||||
sodipodi:type="arc" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.1 KiB |
@ -1,67 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="18"
|
|
||||||
height="18"
|
|
||||||
id="svg5266"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.4 r9939"
|
|
||||||
sodipodi:docname="page-indicator-inactive.svg">
|
|
||||||
<defs
|
|
||||||
id="defs5268" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="11.313709"
|
|
||||||
inkscape:cx="-2.307566"
|
|
||||||
inkscape:cy="17.859535"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="true"
|
|
||||||
inkscape:grid-bbox="true"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:window-width="2560"
|
|
||||||
inkscape:window-height="1374"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1" />
|
|
||||||
<metadata
|
|
||||||
id="metadata5271">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
id="layer1"
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
transform="translate(0,2)">
|
|
||||||
<path
|
|
||||||
sodipodi:type="arc"
|
|
||||||
style="fill:none;fill-opacity:0;stroke:#ffffff;stroke-width:2.93356276000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
|
||||||
id="path5274"
|
|
||||||
sodipodi:cx="2088.9954"
|
|
||||||
sodipodi:cy="638.83099"
|
|
||||||
sodipodi:rx="10.985409"
|
|
||||||
sodipodi:ry="9.5964489"
|
|
||||||
d="m 2099.9808,638.83099 c 0,5.29998 -4.9184,9.59645 -10.9854,9.59645 -6.0671,0 -10.9854,-4.29647 -10.9854,-9.59645 0,-5.29997 4.9183,-9.59645 10.9854,-9.59645 6.067,0 10.9854,4.29648 10.9854,9.59645 z"
|
|
||||||
transform="matrix(0.63720887,0,0,0.72943648,-1322.1264,-458.98661)" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,67 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="18"
|
|
||||||
height="18"
|
|
||||||
id="svg5266"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.4 r9939"
|
|
||||||
sodipodi:docname="page-indicator-inactive.svg">
|
|
||||||
<defs
|
|
||||||
id="defs5268" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="11.313709"
|
|
||||||
inkscape:cx="-2.307566"
|
|
||||||
inkscape:cy="17.859535"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="true"
|
|
||||||
inkscape:grid-bbox="true"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:window-width="2560"
|
|
||||||
inkscape:window-height="1374"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1" />
|
|
||||||
<metadata
|
|
||||||
id="metadata5271">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
id="layer1"
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
transform="translate(0,2)">
|
|
||||||
<path
|
|
||||||
sodipodi:type="arc"
|
|
||||||
style="fill:none;fill-opacity:0;stroke:#ffffff;stroke-width:2.93356276000000005;stroke-miterlimit:4;stroke-opacity:0.39215686000000000;stroke-dasharray:none"
|
|
||||||
id="path5274"
|
|
||||||
sodipodi:cx="2088.9954"
|
|
||||||
sodipodi:cy="638.83099"
|
|
||||||
sodipodi:rx="10.985409"
|
|
||||||
sodipodi:ry="9.5964489"
|
|
||||||
d="m 2099.9808,638.83099 c 0,5.29998 -4.9184,9.59645 -10.9854,9.59645 -6.0671,0 -10.9854,-4.29647 -10.9854,-9.59645 0,-5.29997 4.9183,-9.59645 10.9854,-9.59645 6.067,0 10.9854,4.29648 10.9854,9.59645 z"
|
|
||||||
transform="matrix(0.63720887,0,0,0.72943648,-1322.1264,-458.98661)" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.2 KiB |
@ -9,63 +9,66 @@
|
|||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
width="18"
|
width="21"
|
||||||
height="18"
|
height="10"
|
||||||
id="svg4703"
|
id="svg2"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.48.4 r9939"
|
inkscape:version="0.48.1 r9760"
|
||||||
sodipodi:docname="page-indicator-pushed.svg">
|
sodipodi:docname="panel-button-border.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs4705" />
|
id="defs4" />
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#ffffff"
|
pagecolor="#000000"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="31.392433"
|
inkscape:zoom="44.8"
|
||||||
inkscape:cx="1.0245308"
|
inkscape:cx="8.6594891"
|
||||||
inkscape:cy="13.3715"
|
inkscape:cy="5.7029946"
|
||||||
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="true"
|
showgrid="true"
|
||||||
inkscape:grid-bbox="true"
|
showguides="true"
|
||||||
inkscape:document-units="px"
|
inkscape:guide-bbox="true"
|
||||||
inkscape:window-width="2560"
|
inkscape:window-width="1440"
|
||||||
inkscape:window-height="1374"
|
inkscape:window-height="843"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="26"
|
||||||
inkscape:window-maximized="1">
|
inkscape:window-maximized="1"
|
||||||
|
guidetolerance="10000"
|
||||||
|
objecttolerance="10000">
|
||||||
<inkscape:grid
|
<inkscape:grid
|
||||||
type="xygrid"
|
type="xygrid"
|
||||||
id="grid6140" />
|
id="grid3792"
|
||||||
|
empspacing="10"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" />
|
||||||
</sodipodi:namedview>
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata4708">
|
id="metadata7">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
<cc:Work
|
<cc:Work
|
||||||
rdf:about="">
|
rdf:about="">
|
||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:type
|
<dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
<dc:title></dc:title>
|
<dc:title />
|
||||||
</cc:Work>
|
</cc:Work>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
<g
|
<g
|
||||||
id="layer1"
|
|
||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
transform="translate(0,2)">
|
id="layer1">
|
||||||
<path
|
<rect
|
||||||
transform="matrix(0.54617904,0,0,0.62523128,-1131.9904,-392.39214)"
|
style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke-width:0.43599999;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
d="m 2099.9808,638.83099 a 10.985409,9.5964489 0 1 1 -21.9708,0 10.985409,9.5964489 0 1 1 21.9708,0 z"
|
id="rect3796"
|
||||||
sodipodi:ry="9.5964489"
|
width="3"
|
||||||
sodipodi:rx="10.985409"
|
height="2"
|
||||||
sodipodi:cy="638.83099"
|
x="9"
|
||||||
sodipodi:cx="2088.9954"
|
y="8" />
|
||||||
id="path4711"
|
|
||||||
style="fill:#fdffff;fill-opacity:1;stroke:none"
|
|
||||||
sodipodi:type="arc" />
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.0 KiB |
111
data/theme/panel-button-highlight-narrow.svg
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="30"
|
||||||
|
height="25"
|
||||||
|
id="svg10621"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.1 r9760"
|
||||||
|
sodipodi:docname="panel-button-highlight-narrow.svg">
|
||||||
|
<defs
|
||||||
|
id="defs10623">
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient34508-1-3"
|
||||||
|
id="radialGradient99561-1"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||||
|
cx="51"
|
||||||
|
cy="30"
|
||||||
|
fx="51"
|
||||||
|
fy="30"
|
||||||
|
r="42" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient34508-1-3">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop34510-1-9" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop34512-4-5" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
r="42"
|
||||||
|
fy="30"
|
||||||
|
fx="51"
|
||||||
|
cy="30"
|
||||||
|
cx="51"
|
||||||
|
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient10592"
|
||||||
|
xlink:href="#linearGradient34508-1-3"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#000000"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.979899"
|
||||||
|
inkscape:cx="-171.36384"
|
||||||
|
inkscape:cy="-53.255157"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1440"
|
||||||
|
inkscape:window-height="843"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="26"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata10626">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-468.08632,-537.03477)">
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="opacity:0.4625;color:#000000;fill:url(#radialGradient10592);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="path34506-3"
|
||||||
|
sodipodi:cx="51"
|
||||||
|
sodipodi:cy="30"
|
||||||
|
sodipodi:rx="42"
|
||||||
|
sodipodi:ry="16"
|
||||||
|
d="M 9,29.999999 C 9.0000011,21.163443 27.804042,14 51.000002,14 74.195961,14 93,21.163444 93,30 l -42,0 z"
|
||||||
|
sodipodi:start="3.1415927"
|
||||||
|
sodipodi:end="6.2831853"
|
||||||
|
transform="matrix(0.35714286,0,0,1.5625,464.87203,515.15977)"
|
||||||
|
inkscape:export-filename="/home/jimmac/src/cvs/gnome/gnome-shell-design/mockups/motion/textures/panel.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
111
data/theme/panel-button-highlight-wide.svg
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="84"
|
||||||
|
height="25"
|
||||||
|
id="svg10621"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.0 r9654"
|
||||||
|
sodipodi:docname="panel-button-highlight-wide.svg">
|
||||||
|
<defs
|
||||||
|
id="defs10623">
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient34508-1-3"
|
||||||
|
id="radialGradient99561-1"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||||
|
cx="51"
|
||||||
|
cy="30"
|
||||||
|
fx="51"
|
||||||
|
fy="30"
|
||||||
|
r="42" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient34508-1-3">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop34510-1-9" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop34512-4-5" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
r="42"
|
||||||
|
fy="30"
|
||||||
|
fx="51"
|
||||||
|
cy="30"
|
||||||
|
cx="51"
|
||||||
|
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient10592"
|
||||||
|
xlink:href="#linearGradient34508-1-3"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#000000"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.979899"
|
||||||
|
inkscape:cx="-118.50071"
|
||||||
|
inkscape:cy="27.304508"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1440"
|
||||||
|
inkscape:window-height="843"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="26"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata10626">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-441.08632,-537.03477)">
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="opacity:0.4625;color:#000000;fill:url(#radialGradient10592);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="path34506-3"
|
||||||
|
sodipodi:cx="51"
|
||||||
|
sodipodi:cy="30"
|
||||||
|
sodipodi:rx="42"
|
||||||
|
sodipodi:ry="16"
|
||||||
|
d="M 9,29.999999 C 9.0000011,21.163443 27.804042,14 51.000002,14 74.195961,14 93,21.163444 93,30 l -42,0 z"
|
||||||
|
sodipodi:start="3.1415927"
|
||||||
|
sodipodi:end="6.2831853"
|
||||||
|
transform="matrix(1,0,0,1.5625,432.08632,515.15977)"
|
||||||
|
inkscape:export-filename="/home/jimmac/src/cvs/gnome/gnome-shell-design/mockups/motion/textures/panel.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
@ -1,7 +0,0 @@
|
|||||||
#!/usr/bin/sh
|
|
||||||
|
|
||||||
srcdir=`dirname $0`
|
|
||||||
for scss in $srcdir/*.scss
|
|
||||||
do
|
|
||||||
sassc -a $scss ${scss%%.scss}.css
|
|
||||||
done
|
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 9.8 KiB |
64
data/theme/scroll-hhandle.svg
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="10"
|
||||||
|
height="4"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.47 r22583"
|
||||||
|
sodipodi:docname="scroll-hhandle.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
</defs>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<rect
|
||||||
|
style="fill:#323232;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||||
|
id="rect3592"
|
||||||
|
width="2"
|
||||||
|
height="4"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
rx="0"
|
||||||
|
ry="0" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#rect3592"
|
||||||
|
id="use2825"
|
||||||
|
transform="translate(8,0)"
|
||||||
|
width="10"
|
||||||
|
height="4" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#use2825"
|
||||||
|
id="use2827"
|
||||||
|
transform="translate(-4,0)"
|
||||||
|
width="10"
|
||||||
|
height="4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
62
data/theme/scroll-vhandle.svg
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="4"
|
||||||
|
height="10"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.47 r22583"
|
||||||
|
sodipodi:docname="scroll-hhandle.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<rect
|
||||||
|
style="fill:#323232;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||||
|
id="rect3592"
|
||||||
|
width="2"
|
||||||
|
height="4"
|
||||||
|
x="0"
|
||||||
|
y="-4"
|
||||||
|
rx="0"
|
||||||
|
ry="0"
|
||||||
|
transform="matrix(0,1,-1,0,0,0)" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#rect3592"
|
||||||
|
id="use3705"
|
||||||
|
transform="translate(0,4)"
|
||||||
|
width="4"
|
||||||
|
height="10" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#use3705"
|
||||||
|
id="use3707"
|
||||||
|
transform="translate(0,4)"
|
||||||
|
width="4"
|
||||||
|
height="10" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
@ -1,120 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
version="1.0"
|
|
||||||
id="Foreground"
|
|
||||||
x="0px"
|
|
||||||
y="0px"
|
|
||||||
width="32"
|
|
||||||
height="32"
|
|
||||||
viewBox="0 0 23.272727 23.272727"
|
|
||||||
enable-background="new 0 0 16 16"
|
|
||||||
xml:space="preserve"
|
|
||||||
sodipodi:version="0.32"
|
|
||||||
inkscape:version="0.48.2 r9819"
|
|
||||||
sodipodi:docname="summary-counter.svg"
|
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
|
|
||||||
id="metadata2399"><rdf:RDF><cc:Work
|
|
||||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
|
||||||
id="defs2397"><linearGradient
|
|
||||||
id="linearGradient3173"><stop
|
|
||||||
style="stop-color:#c4c4c4;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3175" /><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop3177" /></linearGradient><inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="0 : 8 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_z="16 : 8 : 1"
|
|
||||||
inkscape:persp3d-origin="8 : 5.3333333 : 1"
|
|
||||||
id="perspective2401" /><filter
|
|
||||||
color-interpolation-filters="sRGB"
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="filter16494-4"
|
|
||||||
x="-0.20989846"
|
|
||||||
width="1.4197969"
|
|
||||||
y="-0.20903821"
|
|
||||||
height="1.4180764"><feGaussianBlur
|
|
||||||
inkscape:collect="always"
|
|
||||||
stdDeviation="1.3282637"
|
|
||||||
id="feGaussianBlur16496-8" /></filter><radialGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient16498-6"
|
|
||||||
id="radialGradient16504-1"
|
|
||||||
cx="7.6582627"
|
|
||||||
cy="5.8191104"
|
|
||||||
fx="7.6582627"
|
|
||||||
fy="5.8191104"
|
|
||||||
r="8.6928644"
|
|
||||||
gradientTransform="matrix(1.0474339,0,0,1.0517402,-0.3632615,-0.42032492)"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient16498-6"><stop
|
|
||||||
style="stop-color:#9FD0FF;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop16500-8" /><stop
|
|
||||||
style="stop-color:#3465A4;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop16502-0" /></linearGradient></defs><sodipodi:namedview
|
|
||||||
inkscape:window-height="709"
|
|
||||||
inkscape:window-width="1366"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
guidetolerance="10.0"
|
|
||||||
gridtolerance="10.0"
|
|
||||||
objecttolerance="10.0"
|
|
||||||
borderopacity="1.0"
|
|
||||||
bordercolor="#666666"
|
|
||||||
pagecolor="#000000"
|
|
||||||
id="base"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="11.313708"
|
|
||||||
inkscape:cx="15.386407"
|
|
||||||
inkscape:cy="13.739577"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="1179"
|
|
||||||
inkscape:current-layer="g16402-8"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:window-maximized="1"><inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid11246"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" /></sodipodi:namedview><g
|
|
||||||
style="display:inline"
|
|
||||||
id="g16402-8"
|
|
||||||
transform="translate(4.7533483,2.8238929)"><g
|
|
||||||
id="g3175-4"
|
|
||||||
transform="translate(-0.89995416,0.94028614)"><path
|
|
||||||
sodipodi:type="inkscape:offset"
|
|
||||||
inkscape:radius="0"
|
|
||||||
inkscape:original="M 7.65625 0.125 C 3.2589349 0.125 -0.3125 3.7070002 -0.3125 8.125 C -0.3125 12.543001 3.2589349 16.125 7.65625 16.125 C 12.053566 16.125 15.625 12.543001 15.625 8.125 C 15.625 3.7070002 12.053566 0.125 7.65625 0.125 z "
|
|
||||||
xlink:href="#path2394-32"
|
|
||||||
style="opacity:0.52994014;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.18181825;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter16494-4);enable-background:accumulate"
|
|
||||||
id="path16480-5"
|
|
||||||
inkscape:href="#path2394-32"
|
|
||||||
d="m 7.65625,0.125 c -4.3973151,0 -7.96875,3.5820002 -7.96875,8 0,4.418001 3.5714349,8 7.96875,8 4.397316,0 7.96875,-3.581999 7.96875,-8 0,-4.4179998 -3.571434,-8 -7.96875,-8 z"
|
|
||||||
transform="translate(0,1.028519)" /><path
|
|
||||||
clip-rule="evenodd"
|
|
||||||
d="m -0.30428257,8.1237596 c 0,-4.4179998 3.56522987,-7.9999996 7.96254497,-7.9999996 4.3973156,0 7.9625456,3.5819998 7.9625456,7.9999996 0,4.4180014 -3.56523,8.0000004 -7.9625456,8.0000004 -4.3973151,0 -7.96254497,-3.581999 -7.96254497,-8.0000004 z"
|
|
||||||
id="path2394-32"
|
|
||||||
style="color:#000000;fill:url(#radialGradient16504-1);fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:1.4545455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
sodipodi:nodetypes="csssc"
|
|
||||||
inkscape:connector-curvature="0" /><g
|
|
||||||
id="g3172-6" /></g></g></svg>
|
|
Before Width: | Height: | Size: 5.4 KiB |
@ -1,133 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="48"
|
|
||||||
height="22"
|
|
||||||
id="svg2857"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.91 r13725"
|
|
||||||
sodipodi:docname="toggle-off-hc.svg">
|
|
||||||
<defs
|
|
||||||
id="defs2859">
|
|
||||||
<inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
|
||||||
id="perspective2865" />
|
|
||||||
<inkscape:perspective
|
|
||||||
id="perspective2843"
|
|
||||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
||||||
inkscape:vp_z="1 : 0.5 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_x="0 : 0.5 : 1"
|
|
||||||
sodipodi:type="inkscape:persp3d" />
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4"
|
|
||||||
is_visible="true" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#000000"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="1"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="1"
|
|
||||||
inkscape:cx="-6.1820581"
|
|
||||||
inkscape:cy="-16.463788"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="g37994"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="2560"
|
|
||||||
inkscape:window-height="1364"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:snap-nodes="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
showborder="true">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid12954"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata2862">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(-444.64286,-781.36218)">
|
|
||||||
<g
|
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
|
||||||
id="g37994">
|
|
||||||
<g
|
|
||||||
transform="matrix(1.5323214,0,0,1.2413968,-324.76058,489.69039)"
|
|
||||||
id="toggle-off"
|
|
||||||
inkscape:label="#g8477">
|
|
||||||
<circle
|
|
||||||
cy="1033.993"
|
|
||||||
cx="571.95966"
|
|
||||||
id="path8444"
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
r="7" />
|
|
||||||
<rect
|
|
||||||
ry="2.0108337"
|
|
||||||
rx="1.9562569"
|
|
||||||
y="1031.9885"
|
|
||||||
x="565.0083"
|
|
||||||
height="4.0216675"
|
|
||||||
width="34.850178"
|
|
||||||
id="rect8461"
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
transform="matrix(1.5323214,0,0,1.2413968,-324.85635,491.16456)"
|
|
||||||
id="toggle-on"
|
|
||||||
inkscape:label="#g8481">
|
|
||||||
<rect
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
id="rect8475"
|
|
||||||
width="34.850178"
|
|
||||||
height="4.0216675"
|
|
||||||
x="565.0083"
|
|
||||||
y="1070.9279"
|
|
||||||
rx="1.9562569"
|
|
||||||
ry="2.0108337" />
|
|
||||||
<circle
|
|
||||||
transform="scale(-1,1)"
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
id="circle8463"
|
|
||||||
cx="-591.0213"
|
|
||||||
cy="1072.9402"
|
|
||||||
r="9" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 6.1 KiB |
@ -7,127 +7,51 @@
|
|||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
width="65"
|
width="65"
|
||||||
height="22"
|
height="22"
|
||||||
id="svg2857"
|
id="svg3273"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.48.5 r10040"
|
inkscape:version="0.47 r22583"
|
||||||
sodipodi:docname="toggle-off-us.svg">
|
sodipodi:docname="New document 14">
|
||||||
<defs
|
<defs
|
||||||
id="defs2859">
|
id="defs3275">
|
||||||
<inkscape:perspective
|
<inkscape:perspective
|
||||||
sodipodi:type="inkscape:persp3d"
|
sodipodi:type="inkscape:persp3d"
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||||
id="perspective2865" />
|
id="perspective3281" />
|
||||||
<inkscape:perspective
|
<inkscape:perspective
|
||||||
id="perspective2843"
|
id="perspective3261"
|
||||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
inkscape:vp_z="1 : 0.5 : 1"
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_x="0 : 0.5 : 1"
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
sodipodi:type="inkscape:persp3d" />
|
sodipodi:type="inkscape:persp3d" />
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient76469-7-7-4"
|
|
||||||
id="linearGradient38024"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)"
|
|
||||||
x1="6"
|
|
||||||
y1="102.95528"
|
|
||||||
x2="6"
|
|
||||||
y2="84.505203" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient76469-7-7-4">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2e3232;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop76471-7-1-5" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3e4545;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop76473-9-0-0" />
|
|
||||||
</linearGradient>
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4"
|
|
||||||
is_visible="true" />
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4-0"
|
|
||||||
is_visible="true" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient37802-8"
|
|
||||||
id="linearGradient12311-3-1-0-5-4"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.071426)"
|
|
||||||
x1="610.13782"
|
|
||||||
y1="501.43866"
|
|
||||||
x2="610.13782"
|
|
||||||
y2="492.52756" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient37802-8"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
id="stop37804-1"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#2c2c2c;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
id="stop37806-8"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#16191a;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
y2="492.52756"
|
|
||||||
x2="610.13782"
|
|
||||||
y1="501.43866"
|
|
||||||
x1="610.13782"
|
|
||||||
gradientTransform="matrix(1.5918367,0,0,0.85714285,-900.56122,-423.92857)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient13602"
|
|
||||||
xlink:href="#linearGradient37802-8"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#000000"
|
pagecolor="#ffffff"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="1"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1"
|
inkscape:zoom="0.35"
|
||||||
inkscape:cx="-5.0602834"
|
inkscape:cx="32.000004"
|
||||||
inkscape:cy="16.473273"
|
inkscape:cy="10.999997"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="g37994"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="2560"
|
inkscape:window-width="609"
|
||||||
inkscape:window-height="1375"
|
inkscape:window-height="501"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="26"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="0" />
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:snap-nodes="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
showborder="false">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid12954"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata2862">
|
id="metadata3278">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
<cc:Work
|
<cc:Work
|
||||||
rdf:about="">
|
rdf:about="">
|
||||||
@ -142,68 +66,61 @@
|
|||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-444.64286,-781.36218)">
|
transform="translate(-343,-521.36218)">
|
||||||
<g
|
<g
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
id="g17454"
|
||||||
id="g37994">
|
transform="translate(-453,448.36218)"
|
||||||
|
style="display:inline">
|
||||||
|
<rect
|
||||||
|
transform="scale(-1,1)"
|
||||||
|
ry="4"
|
||||||
|
rx="4"
|
||||||
|
y="74.5"
|
||||||
|
x="-859.5"
|
||||||
|
height="19"
|
||||||
|
width="63.000004"
|
||||||
|
id="rect17456"
|
||||||
|
style="color:#000000;fill:none;stroke:#2e3436;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||||
|
<rect
|
||||||
|
transform="scale(-1,1)"
|
||||||
|
ry="4"
|
||||||
|
rx="4"
|
||||||
|
y="74"
|
||||||
|
x="-828"
|
||||||
|
height="20"
|
||||||
|
width="31"
|
||||||
|
id="rect17458"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#5f5f5f;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
|
||||||
<g
|
<g
|
||||||
id="g37996"
|
transform="matrix(-1,0,0,1,1619.1239,-33.986291)"
|
||||||
transform="translate(-115,1277)">
|
id="g17460"
|
||||||
<rect
|
style="display:inline">
|
||||||
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837"
|
<path
|
||||||
id="rect13475"
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
width="98"
|
d="m 803.6322,115.48629 0,4.29495"
|
||||||
height="25"
|
id="path17462"
|
||||||
x="644.5"
|
inkscape:connector-curvature="0" />
|
||||||
y="484.61118"
|
<path
|
||||||
rx="4.7429576"
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||||
ry="3.8424656" />
|
d="m 806.62805,115.48629 0,4.29495"
|
||||||
<rect
|
id="path17464"
|
||||||
ry="3.8424656"
|
inkscape:connector-curvature="0" />
|
||||||
rx="4.7429576"
|
<path
|
||||||
y="483.5"
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||||
x="644.5"
|
d="m 809.6239,115.48629 0,4.29495"
|
||||||
height="25"
|
id="path17466"
|
||||||
width="98"
|
inkscape:connector-curvature="0" />
|
||||||
id="rect38000"
|
|
||||||
style="color:#000000;fill:url(#linearGradient12311-3-1-0-5-4);fill-opacity:1;fill-rule:nonzero;stroke:#16191a;stroke-width:1.37920942;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
transform="translate(-49.946213,-1.890275)"
|
|
||||||
id="g38002">
|
|
||||||
<g
|
|
||||||
transform="translate(-115,1247)"
|
|
||||||
style="display:inline"
|
|
||||||
id="g38004">
|
|
||||||
<rect
|
|
||||||
ry="3.7972314"
|
|
||||||
rx="4.6871223"
|
|
||||||
y="515.5"
|
|
||||||
x="694.53046"
|
|
||||||
height="25"
|
|
||||||
width="45.969578"
|
|
||||||
id="rect38006"
|
|
||||||
style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
id="path38016"
|
|
||||||
inkscape:path-effect="#path-effect77541-4"
|
|
||||||
inkscape:original-d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
</g>
|
||||||
<path
|
<path
|
||||||
sodipodi:type="arc"
|
sodipodi:type="arc"
|
||||||
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:2.15627193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
|
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.96875012;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
id="path13479"
|
id="path18722"
|
||||||
sodipodi:cx="16.4375"
|
sodipodi:cx="47.6875"
|
||||||
sodipodi:cy="10.8125"
|
sodipodi:cy="11.5625"
|
||||||
sodipodi:rx="4.3125"
|
sodipodi:rx="3.9375"
|
||||||
sodipodi:ry="4.3125"
|
sodipodi:ry="3.9375"
|
||||||
d="m 20.75,10.8125 a 4.3125,4.3125 0 1 1 -8.625,0 4.3125,4.3125 0 1 1 8.625,0 z"
|
d="m 51.625,11.5625 c 0,2.174621 -1.762879,3.9375 -3.9375,3.9375 -2.174621,0 -3.9375,-1.762879 -3.9375,-3.9375 0,-2.1746212 1.762879,-3.9375 3.9375,-3.9375 2.174621,0 3.9375,1.7628788 3.9375,3.9375 z"
|
||||||
transform="matrix(1.4212691,0,0,1.1514287,577.38488,1761.1138)" />
|
transform="matrix(1.0158729,0,0,1.0158729,795.55556,72.25399)" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 4.7 KiB |
@ -7,171 +7,51 @@
|
|||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
width="65"
|
width="65"
|
||||||
height="22"
|
height="22"
|
||||||
id="svg2857"
|
id="svg3012"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.48.5 r10040"
|
inkscape:version="0.47 r22583"
|
||||||
sodipodi:docname="toggle-on-intl.svg">
|
sodipodi:docname="New document 6">
|
||||||
<defs
|
<defs
|
||||||
id="defs2859">
|
id="defs3014">
|
||||||
<inkscape:perspective
|
<inkscape:perspective
|
||||||
sodipodi:type="inkscape:persp3d"
|
sodipodi:type="inkscape:persp3d"
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||||
id="perspective2865" />
|
id="perspective3020" />
|
||||||
<inkscape:perspective
|
<inkscape:perspective
|
||||||
id="perspective2843"
|
id="perspective2997"
|
||||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
inkscape:vp_z="1 : 0.5 : 1"
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_x="0 : 0.5 : 1"
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
sodipodi:type="inkscape:persp3d" />
|
sodipodi:type="inkscape:persp3d" />
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient76469-7-7-4"
|
|
||||||
id="linearGradient38024"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)"
|
|
||||||
x1="6"
|
|
||||||
y1="102.95528"
|
|
||||||
x2="6"
|
|
||||||
y2="84.505203" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient76469-7-7-4">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2e3232;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop76471-7-1-5" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3e4545;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop76473-9-0-0" />
|
|
||||||
</linearGradient>
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4"
|
|
||||||
is_visible="true" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient37802"
|
|
||||||
id="linearGradient12311-3-1-0-5"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.071426)"
|
|
||||||
x1="610.13782"
|
|
||||||
y1="501.43866"
|
|
||||||
x2="610.13782"
|
|
||||||
y2="492.52756" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient37802"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
id="stop37804"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#2c2c2c;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
id="stop37806"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#16191a;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient76469-7-7-4-3"
|
|
||||||
id="linearGradient77680"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1,0,0,1.0322581,717.71949,428.68472)"
|
|
||||||
x1="6"
|
|
||||||
y1="102.95528"
|
|
||||||
x2="6"
|
|
||||||
y2="84.505203" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient76469-7-7-4-3">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2e3232;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop76471-7-1-5-7" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3e4545;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop76473-9-0-0-9" />
|
|
||||||
</linearGradient>
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4-0"
|
|
||||||
is_visible="true" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient37802-8"
|
|
||||||
id="linearGradient12311-3-1-0-5-4"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.5918367,0,0,0.85714285,-256.56122,59.071426)"
|
|
||||||
x1="610.13782"
|
|
||||||
y1="501.43866"
|
|
||||||
x2="610.13782"
|
|
||||||
y2="492.52756" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient37802-8"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
id="stop37804-1"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#2c2c2c;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
id="stop37806-8"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#16191a;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
y2="492.52756"
|
|
||||||
x2="610.13782"
|
|
||||||
y1="501.43866"
|
|
||||||
x1="610.13782"
|
|
||||||
gradientTransform="matrix(1.5918367,0,0,0.85714285,-900.56122,-423.92857)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient13602"
|
|
||||||
xlink:href="#linearGradient37802-8"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#000000"
|
pagecolor="#ffffff"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="1"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1"
|
inkscape:zoom="0.35"
|
||||||
inkscape:cx="16.760995"
|
inkscape:cx="32.000004"
|
||||||
inkscape:cy="21.955673"
|
inkscape:cy="10.999997"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="g37994"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="2560"
|
inkscape:window-width="609"
|
||||||
inkscape:window-height="1375"
|
inkscape:window-height="501"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="26"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="0" />
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:snap-nodes="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
showborder="false">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid12954"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata2862">
|
id="metadata3017">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
<cc:Work
|
<cc:Work
|
||||||
rdf:about="">
|
rdf:about="">
|
||||||
@ -186,70 +66,73 @@
|
|||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-444.64286,-781.36218)">
|
transform="translate(-343,-521.36218)">
|
||||||
<g
|
<g
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
id="g17454"
|
||||||
id="g37994">
|
transform="translate(-453,448.36218)"
|
||||||
|
style="display:inline">
|
||||||
|
<rect
|
||||||
|
transform="scale(-1,1)"
|
||||||
|
ry="4"
|
||||||
|
rx="4"
|
||||||
|
y="74.5"
|
||||||
|
x="-859.5"
|
||||||
|
height="19"
|
||||||
|
width="63.000004"
|
||||||
|
id="rect17456"
|
||||||
|
style="color:#000000;fill:none;stroke:#2e3436;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||||
|
<rect
|
||||||
|
transform="scale(-1,1)"
|
||||||
|
ry="4"
|
||||||
|
rx="4"
|
||||||
|
y="74"
|
||||||
|
x="-828"
|
||||||
|
height="20"
|
||||||
|
width="31"
|
||||||
|
id="rect17458"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#5f5f5f;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
|
||||||
<g
|
<g
|
||||||
id="g37996"
|
transform="matrix(-1,0,0,1,1619.1239,-33.986291)"
|
||||||
transform="translate(-115,1277)">
|
id="g17460"
|
||||||
<rect
|
style="display:inline">
|
||||||
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837"
|
<path
|
||||||
id="rect13475"
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
width="98"
|
d="m 803.6322,115.48629 0,4.29495"
|
||||||
height="25"
|
id="path17462"
|
||||||
x="644.5"
|
inkscape:connector-curvature="0" />
|
||||||
y="484.61118"
|
<path
|
||||||
rx="4.7429576"
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||||
ry="3.8424656" />
|
d="m 806.62805,115.48629 0,4.29495"
|
||||||
<rect
|
id="path17464"
|
||||||
ry="3.8424656"
|
inkscape:connector-curvature="0" />
|
||||||
rx="4.7429576"
|
<path
|
||||||
y="483.5"
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
|
||||||
x="644.5"
|
d="m 809.6239,115.48629 0,4.29495"
|
||||||
height="25"
|
id="path17466"
|
||||||
width="98"
|
inkscape:connector-curvature="0" />
|
||||||
id="rect38000"
|
|
||||||
style="color:#000000;fill:url(#linearGradient12311-3-1-0-5-4);fill-opacity:1;fill-rule:nonzero;stroke:#16191a;stroke-width:1.37920942;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
transform="translate(-49.946213,-1.890275)"
|
style="font-size:8.95877075px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
||||||
id="g38002">
|
id="text17468"
|
||||||
<g
|
transform="translate(0.34375,0)">
|
||||||
transform="translate(-115,1247)"
|
<path
|
||||||
style="display:inline"
|
d="m 837.28518,80.750726 c 0.63282,6e-6 1.19566,0.123947 1.68852,0.371824 0.49284,0.247888 0.8807,0.609505 1.16359,1.084851 0.28287,0.472439 0.42431,1.022155 0.42431,1.649149 0,0.635748 -0.13853,1.200045 -0.41556,1.692892 -0.27706,0.489934 -0.66638,0.870507 -1.16797,1.141719 -0.5016,0.271213 -1.07756,0.406819 -1.72789,0.406819 -0.42869,0 -0.83551,-0.06562 -1.22045,-0.196848 -0.38495,-0.134148 -0.73053,-0.32808 -1.03674,-0.581795 -0.30329,-0.256631 -0.54534,-0.589085 -0.72615,-0.997363 -0.17789,-0.408276 -0.26684,-0.869045 -0.26683,-1.382311 -10e-6,-0.638658 0.13997,-1.200039 0.41994,-1.684144 0.27996,-0.487011 0.66782,-0.858835 1.16359,-1.115472 0.49576,-0.259541 1.06297,-0.389315 1.70164,-0.389321 m 0.57305,1.089225 c -0.20123,-0.05249 -0.40683,-0.07873 -0.61679,-0.07874 -0.20998,5e-6 -0.41412,0.02625 -0.61242,0.07874 -0.19831,0.04958 -0.38933,0.129779 -0.57305,0.240592 -0.18081,0.107907 -0.33974,0.242055 -0.47681,0.402445 -0.13706,0.160399 -0.24642,0.358705 -0.32808,0.594918 -0.0816,0.233306 -0.12248,0.491395 -0.12248,0.774269 0,0.67366 0.20851,1.214627 0.62554,1.622903 0.41702,0.408278 0.93758,0.612416 1.56166,0.612416 0.25954,0 0.51034,-0.04229 0.7524,-0.126858 0.24496,-0.08457 0.47097,-0.20997 0.67803,-0.376198 0.20705,-0.166226 0.37328,-0.392236 0.49868,-0.678032 0.12539,-0.285792 0.18809,-0.610956 0.1881,-0.975492 -10e-6,-0.297455 -0.0437,-0.568668 -0.13123,-0.813638 -0.0875,-0.247878 -0.20415,-0.453475 -0.34995,-0.61679 -0.14291,-0.163307 -0.31059,-0.301829 -0.50306,-0.415568 -0.18956,-0.11373 -0.38641,-0.195385 -0.59054,-0.244967"
|
||||||
id="g38004">
|
style="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
||||||
<rect
|
id="path18599"
|
||||||
ry="3.7972314"
|
inkscape:connector-curvature="0" />
|
||||||
rx="4.6871223"
|
<path
|
||||||
y="515.5"
|
d="m 843.5362,81.831203 0,1.17917 2.94834,0 0,1.014861 -2.94834,0 0,3.00713 -1.10673,0 0,-6.216022 4.31754,0 0,1.014861 -3.21081,0"
|
||||||
x="694.53046"
|
style="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
||||||
height="25"
|
id="path18601"
|
||||||
width="45.969578"
|
inkscape:connector-curvature="0"
|
||||||
id="rect38006"
|
sodipodi:nodetypes="ccccccccccc" />
|
||||||
style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
<path
|
||||||
<path
|
d="m 849.71285,81.831203 0,1.17917 2.94834,0 0,1.014861 -2.94834,0 0,3.00713 -1.10672,0 0,-6.216022 4.31753,0 0,1.014861 -3.21081,0"
|
||||||
sodipodi:nodetypes="cc"
|
style="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
||||||
style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
id="path18603"
|
||||||
d="m 699.09675,516.7365 36.86904,0"
|
inkscape:connector-curvature="0"
|
||||||
id="path38016"
|
sodipodi:nodetypes="ccccccccccc" />
|
||||||
inkscape:path-effect="#path-effect77541-4"
|
|
||||||
inkscape:original-d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
</g>
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-size:13.79166794px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
|
||||||
x="520.29974"
|
|
||||||
y="1997.0011"
|
|
||||||
id="text75614"
|
|
||||||
sodipodi:linespacing="125%"
|
|
||||||
transform="scale(1.1236771,0.88993537)"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan75616"
|
|
||||||
x="520.29974"
|
|
||||||
y="1997.0011">OFF</tspan></text>
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 7.2 KiB |
@ -1,113 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="48"
|
|
||||||
height="22"
|
|
||||||
id="svg2857"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.91 r13725"
|
|
||||||
sodipodi:docname="toggle-on-hc.svg">
|
|
||||||
<defs
|
|
||||||
id="defs2859">
|
|
||||||
<inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
|
||||||
id="perspective2865" />
|
|
||||||
<inkscape:perspective
|
|
||||||
id="perspective2843"
|
|
||||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
||||||
inkscape:vp_z="1 : 0.5 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_x="0 : 0.5 : 1"
|
|
||||||
sodipodi:type="inkscape:persp3d" />
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4"
|
|
||||||
is_visible="true" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#000000"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="1"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="1"
|
|
||||||
inkscape:cx="-222.95215"
|
|
||||||
inkscape:cy="3.9378433"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="g37994"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="2560"
|
|
||||||
inkscape:window-height="1364"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:snap-nodes="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
showborder="true">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid12954"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata2862">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(-444.64286,-781.36218)">
|
|
||||||
<g
|
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
|
||||||
id="g37994">
|
|
||||||
<g
|
|
||||||
transform="matrix(1.5323214,0,0,1.2413968,-324.85635,441.50868)"
|
|
||||||
id="toggle-on"
|
|
||||||
inkscape:label="#g8481">
|
|
||||||
<rect
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
id="rect8475"
|
|
||||||
width="34.850178"
|
|
||||||
height="4.0216675"
|
|
||||||
x="565.0083"
|
|
||||||
y="1070.9279"
|
|
||||||
rx="1.9562569"
|
|
||||||
ry="2.0108337" />
|
|
||||||
<circle
|
|
||||||
transform="scale(-1,1)"
|
|
||||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
|
||||||
id="circle8463"
|
|
||||||
cx="-591.0213"
|
|
||||||
cy="1072.9402"
|
|
||||||
r="9" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.4 KiB |
@ -7,113 +7,51 @@
|
|||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
width="65"
|
width="65"
|
||||||
height="22"
|
height="22"
|
||||||
id="svg2857"
|
id="svg3199"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.91 r13725"
|
inkscape:version="0.48.1 r9760"
|
||||||
sodipodi:docname="toggle-on-intl.svg">
|
sodipodi:docname="toggle-on-intl.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs2859">
|
id="defs3201">
|
||||||
<inkscape:perspective
|
<inkscape:perspective
|
||||||
sodipodi:type="inkscape:persp3d"
|
sodipodi:type="inkscape:persp3d"
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
inkscape:vp_x="0 : 526.18109 : 1"
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||||
id="perspective2865" />
|
id="perspective3207" />
|
||||||
<inkscape:perspective
|
<inkscape:perspective
|
||||||
id="perspective2843"
|
id="perspective3187"
|
||||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
inkscape:vp_z="1 : 0.5 : 1"
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_x="0 : 0.5 : 1"
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
sodipodi:type="inkscape:persp3d" />
|
sodipodi:type="inkscape:persp3d" />
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient77461"
|
|
||||||
id="linearGradient77551"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.3066667,0,0,1,-841.64667,-483)"
|
|
||||||
x1="1164.7644"
|
|
||||||
y1="962.93695"
|
|
||||||
x2="1164.7644"
|
|
||||||
y2="970.51404" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient77461"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
id="stop77463"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#182f4c;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
id="stop77465"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#205b9a;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient76469-7-7-4"
|
|
||||||
id="linearGradient38024"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)"
|
|
||||||
x1="6"
|
|
||||||
y1="102.95528"
|
|
||||||
x2="6"
|
|
||||||
y2="84.505203" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient76469-7-7-4">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2e3232;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop76471-7-1-5" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3e4545;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop76473-9-0-0" />
|
|
||||||
</linearGradient>
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4"
|
|
||||||
is_visible="true" />
|
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#000000"
|
pagecolor="#ffffff"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="1"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1"
|
inkscape:zoom="1"
|
||||||
inkscape:cx="37.410841"
|
inkscape:cx="49.147112"
|
||||||
inkscape:cy="16.009314"
|
inkscape:cy="17.532036"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="g37994"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="2560"
|
inkscape:window-width="1412"
|
||||||
inkscape:window-height="1376"
|
inkscape:window-height="1067"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="26"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="0" />
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:snap-nodes="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
showborder="false">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid12954"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata2862">
|
id="metadata3204">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
<cc:Work
|
<cc:Work
|
||||||
rdf:about="">
|
rdf:about="">
|
||||||
@ -128,65 +66,57 @@
|
|||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-444.64286,-781.36218)">
|
transform="translate(-342.5,-521.36218)">
|
||||||
<g
|
<g
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
style="display:inline"
|
||||||
id="g37994">
|
transform="translate(-453.5,448.36218)"
|
||||||
<g
|
id="g16453">
|
||||||
id="g37996"
|
|
||||||
transform="translate(-115,1277)">
|
|
||||||
<rect
|
|
||||||
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837"
|
|
||||||
id="rect13475"
|
|
||||||
width="98"
|
|
||||||
height="25"
|
|
||||||
x="644.5"
|
|
||||||
y="484.61118"
|
|
||||||
rx="4.7429576"
|
|
||||||
ry="3.8424656" />
|
|
||||||
<rect
|
|
||||||
ry="3.8424656"
|
|
||||||
rx="4.7429576"
|
|
||||||
y="483.5"
|
|
||||||
x="644.5"
|
|
||||||
height="25"
|
|
||||||
width="98"
|
|
||||||
id="rect38000"
|
|
||||||
style="color:#000000;fill:url(#linearGradient77551);fill-opacity:1;fill-rule:nonzero;stroke:#182f4c;stroke-width:1.37920964;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
transform="translate(2.0625,-2)"
|
|
||||||
id="g38002">
|
|
||||||
<g
|
|
||||||
transform="translate(-115,1247)"
|
|
||||||
style="display:inline"
|
|
||||||
id="g38004">
|
|
||||||
<rect
|
|
||||||
ry="3.7972314"
|
|
||||||
rx="4.6871223"
|
|
||||||
y="515.5"
|
|
||||||
x="694.53046"
|
|
||||||
height="25"
|
|
||||||
width="45.969578"
|
|
||||||
id="rect38006"
|
|
||||||
style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
id="path38016"
|
|
||||||
inkscape:path-effect="#path-effect77541-4"
|
|
||||||
inkscape:original-d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<rect
|
<rect
|
||||||
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
|
style="color:#000000;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
id="rect13678"
|
id="rect16256-9-4"
|
||||||
width="3.0646207"
|
width="63.000004"
|
||||||
height="12.414008"
|
height="19"
|
||||||
x="554.77728"
|
x="-859.5"
|
||||||
y="1767.3566" />
|
y="74.5"
|
||||||
|
rx="4"
|
||||||
|
ry="4"
|
||||||
|
transform="scale(-1,1)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#5f5f5f;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||||
|
id="rect16258-5-4"
|
||||||
|
width="31"
|
||||||
|
height="20"
|
||||||
|
x="-860"
|
||||||
|
y="74"
|
||||||
|
rx="4"
|
||||||
|
ry="4"
|
||||||
|
transform="scale(-1,1)" />
|
||||||
|
<g
|
||||||
|
style="display:inline"
|
||||||
|
id="g16298-3-6"
|
||||||
|
transform="matrix(-1,0,0,1,1651.1322,-33.986291)">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path16265-3-5"
|
||||||
|
d="m 803.6322,115.48629 0,4.29495"
|
||||||
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path16265-0-2-0"
|
||||||
|
d="m 806.62805,115.48629 0,4.29495"
|
||||||
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path16265-8-7-1"
|
||||||
|
d="m 809.6239,115.48629 0,4.29495"
|
||||||
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="color:#000000;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
d="m 16,27.9375 0,10.125"
|
||||||
|
id="path19232"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
transform="translate(796,51.00002)" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 4.5 KiB |
@ -7,14 +7,13 @@
|
|||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
width="65"
|
width="65"
|
||||||
height="22"
|
height="22"
|
||||||
id="svg2857"
|
id="svg2857"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.91 r13725"
|
inkscape:version="0.48.1 r9760"
|
||||||
sodipodi:docname="toggle-on-us.svg">
|
sodipodi:docname="toggle-on-us.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs2859">
|
id="defs2859">
|
||||||
@ -32,96 +31,27 @@
|
|||||||
inkscape:vp_y="0 : 1000 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_x="0 : 0.5 : 1"
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
sodipodi:type="inkscape:persp3d" />
|
sodipodi:type="inkscape:persp3d" />
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient76469-7-7-4"
|
|
||||||
id="linearGradient38024"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.0215462,0,0,1.0322581,717.22867,428.68472)"
|
|
||||||
x1="6"
|
|
||||||
y1="102.95528"
|
|
||||||
x2="6"
|
|
||||||
y2="84.505203" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient76469-7-7-4">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2e3232;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop76471-7-1-5" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3e4545;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop76473-9-0-0" />
|
|
||||||
</linearGradient>
|
|
||||||
<inkscape:path-effect
|
|
||||||
effect="spiro"
|
|
||||||
id="path-effect77541-4"
|
|
||||||
is_visible="true" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient77461-1"
|
|
||||||
inkscape:collect="always">
|
|
||||||
<stop
|
|
||||||
id="stop77463-1"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#182f4c;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
id="stop77465-4"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#205b9a;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient77461-1"
|
|
||||||
id="linearGradient77551-6-5"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.8527367,0,0,0.80554422,-969.41608,-778.00299)"
|
|
||||||
x1="1164.7644"
|
|
||||||
y1="962.93695"
|
|
||||||
x2="1164.7644"
|
|
||||||
y2="970.51404" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient77461-1"
|
|
||||||
id="linearGradient11198"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.3066667,0,0,1,-1066.3709,794.25325)"
|
|
||||||
x1="1322.5831"
|
|
||||||
y1="-312.51855"
|
|
||||||
x2="1322.5831"
|
|
||||||
y2="-306.53461" />
|
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="base"
|
id="base"
|
||||||
pagecolor="#000000"
|
pagecolor="#ffffff"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="1"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="1"
|
inkscape:zoom="1"
|
||||||
inkscape:cx="-26.798898"
|
inkscape:cx="19.689855"
|
||||||
inkscape:cy="5.3753009"
|
inkscape:cy="2.0517979"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="g37994"
|
inkscape:current-layer="layer1"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="2560"
|
inkscape:window-width="941"
|
||||||
inkscape:window-height="1376"
|
inkscape:window-height="751"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="2577"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="206"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="0"
|
||||||
borderlayer="true"
|
borderlayer="true"
|
||||||
inkscape:showpageshadow="false"
|
inkscape:showpageshadow="false" />
|
||||||
inkscape:snap-nodes="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
showborder="false">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid12954"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata2862">
|
id="metadata2862">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
@ -140,68 +70,61 @@
|
|||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-444.64286,-781.36218)">
|
transform="translate(-444.64286,-781.36218)">
|
||||||
<g
|
<g
|
||||||
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
|
style="display:inline"
|
||||||
id="g37994">
|
transform="translate(-351.35714,708.36218)"
|
||||||
|
id="g16453">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="rect16256-9-4"
|
||||||
|
width="63.000004"
|
||||||
|
height="19"
|
||||||
|
x="-859.5"
|
||||||
|
y="74.5"
|
||||||
|
rx="4"
|
||||||
|
ry="4"
|
||||||
|
transform="scale(-1,1)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#5f5f5f;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||||
|
id="rect16258-5-4"
|
||||||
|
width="31"
|
||||||
|
height="20"
|
||||||
|
x="-860"
|
||||||
|
y="74"
|
||||||
|
rx="4"
|
||||||
|
ry="4"
|
||||||
|
transform="scale(-1,1)" />
|
||||||
<g
|
<g
|
||||||
id="g37996"
|
style="display:inline"
|
||||||
transform="translate(-115,1277)">
|
id="g16298-3-6"
|
||||||
<rect
|
transform="matrix(-1,0,0,1,1651.1322,-33.986291)">
|
||||||
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.19591837"
|
<path
|
||||||
id="rect13475"
|
inkscape:connector-curvature="0"
|
||||||
width="98"
|
id="path16265-3-5"
|
||||||
height="25"
|
d="m 803.6322,115.48629 0,4.29495"
|
||||||
x="644.5"
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
y="484.61118"
|
<path
|
||||||
rx="4.7429576"
|
inkscape:connector-curvature="0"
|
||||||
ry="3.8424656" />
|
id="path16265-0-2-0"
|
||||||
<rect
|
d="m 806.62805,115.48629 0,4.29495"
|
||||||
ry="3.8424656"
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
|
||||||
rx="4.7429576"
|
<path
|
||||||
y="483.5"
|
inkscape:connector-curvature="0"
|
||||||
x="644.5"
|
id="path16265-8-7-1"
|
||||||
height="25"
|
d="m 809.6239,115.48629 0,4.29495"
|
||||||
width="98"
|
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
|
||||||
id="rect38000"
|
|
||||||
style="color:#000000;fill:url(#linearGradient11198);fill-opacity:1;fill-rule:nonzero;stroke:#182f4c;stroke-width:1.37920964;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
transform="translate(2.0625,-2)"
|
style="font-size:8.95877075px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
||||||
id="g38002">
|
id="text42229-3-0">
|
||||||
<g
|
<path
|
||||||
transform="translate(-115,1247)"
|
d="m 808.01473,80.573953 c 0.63283,6e-6 1.19567,0.123947 1.68852,0.371824 0.49284,0.247888 0.88071,0.609505 1.16359,1.084851 0.28287,0.472439 0.42431,1.022155 0.42432,1.649149 -10e-6,0.635748 -0.13853,1.200045 -0.41557,1.692892 -0.27705,0.489934 -0.66637,0.870506 -1.16796,1.141719 -0.50161,0.271212 -1.07757,0.406819 -1.72789,0.406819 -0.4287,0 -0.83552,-0.06562 -1.22046,-0.196848 -0.38495,-0.134148 -0.73053,-0.32808 -1.03673,-0.581795 -0.3033,-0.256631 -0.54535,-0.589085 -0.72615,-0.997363 -0.1779,-0.408276 -0.26684,-0.869045 -0.26684,-1.382311 0,-0.638658 0.13998,-1.200039 0.41994,-1.684144 0.27996,-0.487011 0.66782,-0.858835 1.16359,-1.115472 0.49576,-0.259541 1.06298,-0.389315 1.70164,-0.389321 m 0.57305,1.089225 c -0.20123,-0.05249 -0.40682,-0.07873 -0.61679,-0.07874 -0.20998,5e-6 -0.41411,0.02625 -0.61242,0.07874 -0.19831,0.04958 -0.38932,0.129779 -0.57304,0.240592 -0.18081,0.107907 -0.33975,0.242055 -0.47681,0.402445 -0.13707,0.160399 -0.24643,0.358705 -0.32808,0.594918 -0.0817,0.233305 -0.12249,0.491395 -0.12249,0.774269 0,0.67366 0.20851,1.214627 0.62554,1.622902 0.41703,0.408279 0.93758,0.612417 1.56166,0.612416 0.25955,10e-7 0.51035,-0.04228 0.7524,-0.126857 0.24496,-0.08457 0.47097,-0.20997 0.67803,-0.376199 0.20705,-0.166225 0.37328,-0.392236 0.49868,-0.678031 0.1254,-0.285792 0.1881,-0.610956 0.1881,-0.975492 0,-0.297455 -0.0437,-0.568668 -0.13123,-0.813638 -0.0875,-0.247878 -0.20414,-0.453475 -0.34995,-0.61679 -0.1429,-0.163307 -0.31059,-0.301829 -0.50306,-0.415568 -0.18956,-0.11373 -0.38641,-0.195385 -0.59054,-0.244967"
|
||||||
style="display:inline"
|
style="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
||||||
id="g38004">
|
id="path18606" />
|
||||||
<rect
|
<path
|
||||||
ry="3.7972314"
|
d="m 813.15903,80.639569 1.21608,0 3.4689,4.776844 0,-4.776844 1.10235,0 0,6.216022 -1.22921,0 -3.45577,-4.785594 0,4.785594 -1.10235,0 0,-6.216022"
|
||||||
rx="4.6871223"
|
style="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
||||||
y="515.5"
|
id="path18608" />
|
||||||
x="694.53046"
|
|
||||||
height="25"
|
|
||||||
width="45.969578"
|
|
||||||
id="rect38006"
|
|
||||||
style="color:#000000;fill:url(#linearGradient38024);fill-opacity:1;fill-rule:nonzero;stroke:#1f2020;stroke-width:1.37920964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
style="opacity:0.1;color:#000000;fill:none;stroke:#ffffff;stroke-width:1.37920964px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
|
||||||
d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
id="path38016"
|
|
||||||
inkscape:path-effect="#path-effect77541-4"
|
|
||||||
inkscape:original-d="m 699.09675,516.7365 36.86904,0"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
</g>
|
||||||
<text
|
|
||||||
transform="scale(1.1000946,0.90901274)"
|
|
||||||
sodipodi:linespacing="125%"
|
|
||||||
id="text38018"
|
|
||||||
y="1955.5205"
|
|
||||||
x="495.94223"
|
|
||||||
style="font-size:13.29953671px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
|
||||||
xml:space="preserve"><tspan
|
|
||||||
y="1955.5205"
|
|
||||||
x="495.94223"
|
|
||||||
id="tspan38020"
|
|
||||||
sodipodi:role="line">ON</tspan></text>
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 850 B |
376
data/theme/ws-switch-arrow-down.svg
Normal file
@ -0,0 +1,376 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
width="96"
|
||||||
|
height="96"
|
||||||
|
id="svg25070"
|
||||||
|
inkscape:version="0.48.0 r9654"
|
||||||
|
sodipodi:docname="ws-switch-arrow-down.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata3353">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="718"
|
||||||
|
inkscape:window-height="480"
|
||||||
|
id="namedview3351"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="2.6979167"
|
||||||
|
inkscape:cx="48"
|
||||||
|
inkscape:cy="48"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="26"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="svg25070" />
|
||||||
|
<defs
|
||||||
|
id="defs25072">
|
||||||
|
<linearGradient
|
||||||
|
x1="-86.552246"
|
||||||
|
y1="185.439"
|
||||||
|
x2="-83.37072"
|
||||||
|
y2="197.31261"
|
||||||
|
id="linearGradient24957"
|
||||||
|
xlink:href="#linearGradient4034-0-4"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(6,0)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4034-0-4">
|
||||||
|
<stop
|
||||||
|
id="stop4036-5-7"
|
||||||
|
style="stop-color:#eeeeec;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4038-9-6"
|
||||||
|
style="stop-color:#babdb6;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="filter24765">
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
values="1"
|
||||||
|
type="saturate"
|
||||||
|
id="feColorMatrix24767" />
|
||||||
|
<feColorMatrix
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
id="feColorMatrix24769" />
|
||||||
|
</filter>
|
||||||
|
<linearGradient
|
||||||
|
x1="-74.520325"
|
||||||
|
y1="169.06032"
|
||||||
|
x2="-74.520325"
|
||||||
|
y2="205.94189"
|
||||||
|
id="linearGradient24955"
|
||||||
|
xlink:href="#linearGradient4632-1-3-9-3-2"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-5,0)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4632-1-3-9-3-2">
|
||||||
|
<stop
|
||||||
|
id="stop4634-1-8-3-9-0"
|
||||||
|
style="stop-color:#eeeeec;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4636-1-9-9-8-8"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0.0274937" />
|
||||||
|
<stop
|
||||||
|
id="stop4638-8-3-9-6-6"
|
||||||
|
style="stop-color:#f2f2f2;stop-opacity:1"
|
||||||
|
offset="0.274937" />
|
||||||
|
<stop
|
||||||
|
id="stop4640-8-5-7-8-9"
|
||||||
|
style="stop-color:#eeeeec;stop-opacity:1"
|
||||||
|
offset="0.38707438" />
|
||||||
|
<stop
|
||||||
|
id="stop4642-5-41-9-6-9"
|
||||||
|
style="stop-color:#d9dad8;stop-opacity:1"
|
||||||
|
offset="0.66528589" />
|
||||||
|
<stop
|
||||||
|
id="stop4644-5-2-7-9-2"
|
||||||
|
style="stop-color:#dfe0dd;stop-opacity:1"
|
||||||
|
offset="0.76745707" />
|
||||||
|
<stop
|
||||||
|
id="stop4646-3-2-3-7-3"
|
||||||
|
style="stop-color:#f0f0f0;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="-33.412369"
|
||||||
|
cy="185.74171"
|
||||||
|
r="2.3554697"
|
||||||
|
fx="-33.412369"
|
||||||
|
fy="185.74171"
|
||||||
|
id="radialGradient24959"
|
||||||
|
xlink:href="#linearGradient4869-4-1"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.0075,0,0,1.0075,-5.4544,-1.25141)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4869-4-1">
|
||||||
|
<stop
|
||||||
|
id="stop4871-6-2"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4879-7-4"
|
||||||
|
style="stop-color:#eeeeec;stop-opacity:1"
|
||||||
|
offset="0.31807542" />
|
||||||
|
<stop
|
||||||
|
id="stop4877-6-1"
|
||||||
|
style="stop-color:#c8c9c6;stop-opacity:1"
|
||||||
|
offset="0.74691135" />
|
||||||
|
<stop
|
||||||
|
id="stop4873-1-0"
|
||||||
|
style="stop-color:#d3d7cf;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="filter25011">
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
values="1"
|
||||||
|
type="saturate"
|
||||||
|
id="feColorMatrix25013" />
|
||||||
|
<feColorMatrix
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
id="feColorMatrix25015" />
|
||||||
|
</filter>
|
||||||
|
<radialGradient
|
||||||
|
cx="-33.412369"
|
||||||
|
cy="185.74171"
|
||||||
|
r="2.3554697"
|
||||||
|
fx="-33.412369"
|
||||||
|
fy="185.74171"
|
||||||
|
id="radialGradient24961"
|
||||||
|
xlink:href="#linearGradient4869-4-0"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.0075,0,0,1.0075,-5.4544,-1.25141)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4869-4-0">
|
||||||
|
<stop
|
||||||
|
id="stop4871-6-8"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4879-7-5"
|
||||||
|
style="stop-color:#eeeeec;stop-opacity:1"
|
||||||
|
offset="0.31807542" />
|
||||||
|
<stop
|
||||||
|
id="stop4877-6-5"
|
||||||
|
style="stop-color:#c8c9c6;stop-opacity:1"
|
||||||
|
offset="0.74691135" />
|
||||||
|
<stop
|
||||||
|
id="stop4873-1-4"
|
||||||
|
style="stop-color:#d3d7cf;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="filter25023">
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
values="1"
|
||||||
|
type="saturate"
|
||||||
|
id="feColorMatrix25025" />
|
||||||
|
<feColorMatrix
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
id="feColorMatrix25027" />
|
||||||
|
</filter>
|
||||||
|
<linearGradient
|
||||||
|
x1="-39.858727"
|
||||||
|
y1="184.61784"
|
||||||
|
x2="-38.244785"
|
||||||
|
y2="188.84898"
|
||||||
|
id="linearGradient24963"
|
||||||
|
xlink:href="#linearGradient4941"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4941">
|
||||||
|
<stop
|
||||||
|
id="stop4943"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4945"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="filter25033">
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
values="1"
|
||||||
|
type="saturate"
|
||||||
|
id="feColorMatrix25035" />
|
||||||
|
<feColorMatrix
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
id="feColorMatrix25037" />
|
||||||
|
</filter>
|
||||||
|
<linearGradient
|
||||||
|
x1="-39.858727"
|
||||||
|
y1="184.61784"
|
||||||
|
x2="-38.244785"
|
||||||
|
y2="188.84898"
|
||||||
|
id="linearGradient24965"
|
||||||
|
xlink:href="#linearGradient4941-7"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4941-7">
|
||||||
|
<stop
|
||||||
|
id="stop4943-2"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4945-5"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="filter25043">
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
values="1"
|
||||||
|
type="saturate"
|
||||||
|
id="feColorMatrix25045" />
|
||||||
|
<feColorMatrix
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
id="feColorMatrix25047" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="filter25049">
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
values="1"
|
||||||
|
type="saturate"
|
||||||
|
id="feColorMatrix25051" />
|
||||||
|
<feColorMatrix
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
id="feColorMatrix25053" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="filter25055">
|
||||||
|
<feColorMatrix
|
||||||
|
result="fbSourceGraphic"
|
||||||
|
values="1"
|
||||||
|
type="saturate"
|
||||||
|
id="feColorMatrix25057" />
|
||||||
|
<feColorMatrix
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
id="feColorMatrix25059" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0,1,-1,0,48.0003,4.1307112e-7)"
|
||||||
|
id="layer1">
|
||||||
|
<g
|
||||||
|
transform="matrix(-2,0,0,2,-97.2497,-374.967)"
|
||||||
|
id="g4030-1-8"
|
||||||
|
style="stroke:#000000;stroke-opacity:1;display:inline">
|
||||||
|
<path
|
||||||
|
d="m -72.5,173.5 -14,14 14,14"
|
||||||
|
id="path3165-7-3"
|
||||||
|
style="color:#000000;fill:none;stroke:#000000;stroke-width:7;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m -36.5,186.40625 a 2.09375,2.09375 0 1 1 -4.1875,0 2.09375,2.09375 0 1 1 4.1875,0 z"
|
||||||
|
transform="matrix(-3.34328,0,0,3.34328,-89.2797,-623.176)"
|
||||||
|
id="path4050-2-7-9-4"
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52343899;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
d="m -36.5,186.40625 a 2.09375,2.09375 0 1 1 -4.1875,0 2.09375,2.09375 0 1 1 4.1875,0 z"
|
||||||
|
transform="matrix(-3.34328,0,0,3.34328,-111.2797,-623.176)"
|
||||||
|
id="path4050-2-7-9-4-8"
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52343899;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
d="m -36.5,186.40625 a 2.09375,2.09375 0 1 1 -4.1875,0 2.09375,2.09375 0 1 1 4.1875,0 z"
|
||||||
|
transform="matrix(-2.86565,0,0,2.86565,-70.8457,-534.143)"
|
||||||
|
id="path4050-2-7-9-4-0"
|
||||||
|
style="color:#000000;fill:none;stroke:#000000;stroke-width:0.69792098;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
d="m -36.5,186.40625 a 2.09375,2.09375 0 1 1 -4.1875,0 2.09375,2.09375 0 1 1 4.1875,0 z"
|
||||||
|
transform="matrix(-2.86565,0,0,2.86565,-92.8457,-534.143)"
|
||||||
|
id="path4050-2-7-9-4-0-9"
|
||||||
|
style="color:#000000;fill:none;stroke:#000000;stroke-width:0.69792098;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
d="m 47.87528,-34.0295 c 1.53896,0.0448 3.0511,0.70928 4.125,1.8125 l 32.25,32.25 -32.25,32.25 c -2.2253,2.2253 -6.2747,2.2253 -8.5,0 -2.2253,-2.22528 -2.2253,-6.2747 0,-8.5 l 23.75,-23.75 -23.75,-23.75 c -1.73168,-1.6731 -2.295,-4.44228 -1.3546,-6.65894 0.94042,-2.21668 3.32312,-3.73604 5.7296,-3.65356 z"
|
||||||
|
id="path3165-7-3-1"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0pt;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;text-anchor:start;opacity:0.35;color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
d="m 41.8316,28.09418 c -0.014,-1.58898 0.54158,-3.18406 1.66868,-4.31118 l 23.75,-23.75 m -25.1046,-30.40894 c 0.94042,-2.21668 3.32312,-3.73604 5.7296,-3.65356 1.53896,0.0448 3.0511,0.70928 4.125,1.8125 l 32.25,32.25"
|
||||||
|
id="path3165-7-3-1-9"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0pt;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;text-anchor:start;color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 841 B |
447
data/theme/ws-switch-arrow-up.svg
Normal file
@ -0,0 +1,447 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="96"
|
||||||
|
height="96"
|
||||||
|
id="svg25070"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.0 r9654"
|
||||||
|
sodipodi:docname="ws-switch-arrow-up.svg">
|
||||||
|
<defs
|
||||||
|
id="defs25072">
|
||||||
|
<inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 24 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="48 : 24 : 1"
|
||||||
|
inkscape:persp3d-origin="24 : 16 : 1"
|
||||||
|
id="perspective25078" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective24985"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4034-0-4"
|
||||||
|
id="linearGradient24957"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(6)"
|
||||||
|
x1="-86.552246"
|
||||||
|
y1="185.439"
|
||||||
|
x2="-83.37072"
|
||||||
|
y2="197.31261" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient4034-0-4">
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(238, 238, 236); stop-opacity: 1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4036-5-7" />
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(186, 189, 182); stop-opacity: 1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4038-9-6" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
id="filter24765"
|
||||||
|
inkscape:label="Invert"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
inkscape:menu="Color"
|
||||||
|
inkscape:menu-tooltip="Invert colors"
|
||||||
|
color-interpolation-filters="sRGB">
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix24767"
|
||||||
|
type="saturate"
|
||||||
|
values="1"
|
||||||
|
result="fbSourceGraphic" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix24769"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" />
|
||||||
|
</filter>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4632-1-3-9-3-2"
|
||||||
|
id="linearGradient24955"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-5)"
|
||||||
|
x1="-74.520325"
|
||||||
|
y1="169.06032"
|
||||||
|
x2="-74.520325"
|
||||||
|
y2="205.94189" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4632-1-3-9-3-2">
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(238, 238, 236); stop-opacity: 1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4634-1-8-3-9-0" />
|
||||||
|
<stop
|
||||||
|
id="stop4636-1-9-9-8-8"
|
||||||
|
offset="0.0274937"
|
||||||
|
style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
|
||||||
|
<stop
|
||||||
|
id="stop4638-8-3-9-6-6"
|
||||||
|
offset="0.274937"
|
||||||
|
style="stop-color: rgb(242, 242, 242); stop-opacity: 1;" />
|
||||||
|
<stop
|
||||||
|
id="stop4640-8-5-7-8-9"
|
||||||
|
offset="0.38707438"
|
||||||
|
style="stop-color: rgb(238, 238, 236); stop-opacity: 1;" />
|
||||||
|
<stop
|
||||||
|
id="stop4642-5-41-9-6-9"
|
||||||
|
offset="0.66528589"
|
||||||
|
style="stop-color: rgb(217, 218, 216); stop-opacity: 1;" />
|
||||||
|
<stop
|
||||||
|
id="stop4644-5-2-7-9-2"
|
||||||
|
offset="0.76745707"
|
||||||
|
style="stop-color: rgb(223, 224, 221); stop-opacity: 1;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(240, 240, 240); stop-opacity: 1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4646-3-2-3-7-3" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4869-4-1"
|
||||||
|
id="radialGradient24959"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.0075, 0, 0, 1.0075, -5.4544, -1.25141)"
|
||||||
|
cx="-33.412369"
|
||||||
|
cy="185.74171"
|
||||||
|
fx="-33.412369"
|
||||||
|
fy="185.74171"
|
||||||
|
r="2.3554697" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4869-4-1">
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4871-6-2" />
|
||||||
|
<stop
|
||||||
|
id="stop4879-7-4"
|
||||||
|
offset="0.31807542"
|
||||||
|
style="stop-color: rgb(238, 238, 236); stop-opacity: 1;" />
|
||||||
|
<stop
|
||||||
|
id="stop4877-6-1"
|
||||||
|
offset="0.74691135"
|
||||||
|
style="stop-color: rgb(200, 201, 198); stop-opacity: 1;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(211, 215, 207); stop-opacity: 1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4873-1-0" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
id="filter25011"
|
||||||
|
inkscape:label="Invert"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
inkscape:menu="Color"
|
||||||
|
inkscape:menu-tooltip="Invert colors"
|
||||||
|
color-interpolation-filters="sRGB">
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25013"
|
||||||
|
type="saturate"
|
||||||
|
values="1"
|
||||||
|
result="fbSourceGraphic" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25015"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" />
|
||||||
|
</filter>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4869-4-0"
|
||||||
|
id="radialGradient24961"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.0075, 0, 0, 1.0075, -5.4544, -1.25141)"
|
||||||
|
cx="-33.412369"
|
||||||
|
cy="185.74171"
|
||||||
|
fx="-33.412369"
|
||||||
|
fy="185.74171"
|
||||||
|
r="2.3554697" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4869-4-0">
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4871-6-8" />
|
||||||
|
<stop
|
||||||
|
id="stop4879-7-5"
|
||||||
|
offset="0.31807542"
|
||||||
|
style="stop-color: rgb(238, 238, 236); stop-opacity: 1;" />
|
||||||
|
<stop
|
||||||
|
id="stop4877-6-5"
|
||||||
|
offset="0.74691135"
|
||||||
|
style="stop-color: rgb(200, 201, 198); stop-opacity: 1;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(211, 215, 207); stop-opacity: 1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4873-1-4" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
id="filter25023"
|
||||||
|
inkscape:label="Invert"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
inkscape:menu="Color"
|
||||||
|
inkscape:menu-tooltip="Invert colors"
|
||||||
|
color-interpolation-filters="sRGB">
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25025"
|
||||||
|
type="saturate"
|
||||||
|
values="1"
|
||||||
|
result="fbSourceGraphic" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25027"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" />
|
||||||
|
</filter>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4941"
|
||||||
|
id="linearGradient24963"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="-39.858727"
|
||||||
|
y1="184.61784"
|
||||||
|
x2="-38.244785"
|
||||||
|
y2="188.84898" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient4941">
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4943" />
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(255, 255, 255); stop-opacity: 0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4945" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
id="filter25033"
|
||||||
|
inkscape:label="Invert"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
inkscape:menu="Color"
|
||||||
|
inkscape:menu-tooltip="Invert colors"
|
||||||
|
color-interpolation-filters="sRGB">
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25035"
|
||||||
|
type="saturate"
|
||||||
|
values="1"
|
||||||
|
result="fbSourceGraphic" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25037"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" />
|
||||||
|
</filter>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4941-7"
|
||||||
|
id="linearGradient24965"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="-39.858727"
|
||||||
|
y1="184.61784"
|
||||||
|
x2="-38.244785"
|
||||||
|
y2="188.84898" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient4941-7">
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop4943-2" />
|
||||||
|
<stop
|
||||||
|
style="stop-color: rgb(255, 255, 255); stop-opacity: 0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop4945-5" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter
|
||||||
|
id="filter25043"
|
||||||
|
inkscape:label="Invert"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
inkscape:menu="Color"
|
||||||
|
inkscape:menu-tooltip="Invert colors"
|
||||||
|
color-interpolation-filters="sRGB">
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25045"
|
||||||
|
type="saturate"
|
||||||
|
values="1"
|
||||||
|
result="fbSourceGraphic" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25047"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
id="filter25049"
|
||||||
|
inkscape:label="Invert"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
inkscape:menu="Color"
|
||||||
|
inkscape:menu-tooltip="Invert colors"
|
||||||
|
color-interpolation-filters="sRGB">
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25051"
|
||||||
|
type="saturate"
|
||||||
|
values="1"
|
||||||
|
result="fbSourceGraphic" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25053"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" />
|
||||||
|
</filter>
|
||||||
|
<filter
|
||||||
|
id="filter25055"
|
||||||
|
inkscape:label="Invert"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="1"
|
||||||
|
height="1"
|
||||||
|
inkscape:menu="Color"
|
||||||
|
inkscape:menu-tooltip="Invert colors"
|
||||||
|
color-interpolation-filters="sRGB">
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25057"
|
||||||
|
type="saturate"
|
||||||
|
values="1"
|
||||||
|
result="fbSourceGraphic" />
|
||||||
|
<feColorMatrix
|
||||||
|
id="feColorMatrix25059"
|
||||||
|
in="fbSourceGraphic"
|
||||||
|
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="2.8284271"
|
||||||
|
inkscape:cx="-12.356322"
|
||||||
|
inkscape:cy="57.536221"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:window-width="1200"
|
||||||
|
inkscape:window-height="840"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="26"
|
||||||
|
inkscape:window-maximized="0" />
|
||||||
|
<metadata
|
||||||
|
id="metadata25075">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
transform="translate(0, 48)">
|
||||||
|
<g
|
||||||
|
id="g3181"
|
||||||
|
transform="matrix(0,1,-1,0,48.0003,-48)">
|
||||||
|
<g
|
||||||
|
style="stroke:#000000;stroke-opacity:1;display:inline"
|
||||||
|
transform="matrix(2,0,0,2,193.25,-374.967)"
|
||||||
|
id="g4030-1-8">
|
||||||
|
<path
|
||||||
|
style="color:#000000;fill:none;stroke:#000000;stroke-width:7;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
d="m -72.5,173.5 -14,14 14,14"
|
||||||
|
id="path3165-7-3"
|
||||||
|
sodipodi:nodetypes="ccc"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
transform="matrix(3.34328,0,0,3.34328,185.28,-623.176)"
|
||||||
|
d="m -36.5,186.40625 c 0,1.15635 -0.937404,2.09375 -2.09375,2.09375 -1.156346,0 -2.09375,-0.9374 -2.09375,-2.09375 0,-1.15635 0.937404,-2.09375 2.09375,-2.09375 1.156346,0 2.09375,0.9374 2.09375,2.09375 z"
|
||||||
|
sodipodi:ry="2.09375"
|
||||||
|
sodipodi:rx="2.09375"
|
||||||
|
sodipodi:cy="186.40625"
|
||||||
|
sodipodi:cx="-38.59375"
|
||||||
|
id="path4050-2-7-9-4"
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52343899;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(3.34328,0,0,3.34328,207.28,-623.176)"
|
||||||
|
d="m -36.5,186.40625 c 0,1.15635 -0.937404,2.09375 -2.09375,2.09375 -1.156346,0 -2.09375,-0.9374 -2.09375,-2.09375 0,-1.15635 0.937404,-2.09375 2.09375,-2.09375 1.156346,0 2.09375,0.9374 2.09375,2.09375 z"
|
||||||
|
sodipodi:ry="2.09375"
|
||||||
|
sodipodi:rx="2.09375"
|
||||||
|
sodipodi:cy="186.40625"
|
||||||
|
sodipodi:cx="-38.59375"
|
||||||
|
id="path4050-2-7-9-4-8"
|
||||||
|
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52343899;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(2.86565,0,0,2.86565,166.846,-534.143)"
|
||||||
|
d="m -36.5,186.40625 c 0,1.15635 -0.937404,2.09375 -2.09375,2.09375 -1.156346,0 -2.09375,-0.9374 -2.09375,-2.09375 0,-1.15635 0.937404,-2.09375 2.09375,-2.09375 1.156346,0 2.09375,0.9374 2.09375,2.09375 z"
|
||||||
|
sodipodi:ry="2.09375"
|
||||||
|
sodipodi:rx="2.09375"
|
||||||
|
sodipodi:cy="186.40625"
|
||||||
|
sodipodi:cx="-38.59375"
|
||||||
|
id="path4050-2-7-9-4-0"
|
||||||
|
style="color:#000000;fill:none;stroke:#000000;stroke-width:0.69792098;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(2.86565,0,0,2.86565,188.846,-534.143)"
|
||||||
|
d="m -36.5,186.40625 c 0,1.15635 -0.937404,2.09375 -2.09375,2.09375 -1.156346,0 -2.09375,-0.9374 -2.09375,-2.09375 0,-1.15635 0.937404,-2.09375 2.09375,-2.09375 1.156346,0 2.09375,0.9374 2.09375,2.09375 z"
|
||||||
|
sodipodi:ry="2.09375"
|
||||||
|
sodipodi:rx="2.09375"
|
||||||
|
sodipodi:cy="186.40625"
|
||||||
|
sodipodi:cx="-38.59375"
|
||||||
|
id="path4050-2-7-9-4-0-9"
|
||||||
|
style="color:#000000;fill:none;stroke:#000000;stroke-width:0.69792098;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(2,0,0,2,-586,-765.967)"
|
||||||
|
sodipodi:nodetypes="ccccscccsc"
|
||||||
|
id="path3165-7-3-1"
|
||||||
|
d="m 317.06251,365.96875 c -0.76948,0.0224 -1.52555,0.35464 -2.0625,0.90625 l -16.125,16.125 16.125,16.125 c 1.11265,1.11265 3.13735,1.11265 4.25,0 1.11265,-1.11264 1.11265,-3.13735 0,-4.25 l -11.875,-11.875 11.875,-11.875 c 0.86584,-0.83655 1.1475,-2.22114 0.6773,-3.32947 -0.47021,-1.10834 -1.66156,-1.86802 -2.8648,-1.82678 z"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0pt;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;text-anchor:start;opacity:0.35;color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
transform="matrix(2,0,0,2,-586,-765.967)"
|
||||||
|
sodipodi:nodetypes="ccccccc"
|
||||||
|
id="path3165-7-3-1-9"
|
||||||
|
d="m 320.08435,397.03059 c 0.007,-0.79449 -0.27079,-1.59203 -0.83434,-2.15559 L 307.37501,383 m 12.5523,-15.20447 c -0.47021,-1.10834 -1.66156,-1.86802 -2.8648,-1.82678 -0.76948,0.0224 -1.52555,0.35464 -2.0625,0.90625 L 298.87501,383"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0pt;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;text-anchor:start;color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 16 KiB |
@ -66,41 +66,15 @@ IGNORE_HFILES= \
|
|||||||
gactionmuxer.h \
|
gactionmuxer.h \
|
||||||
gactionobservable.h \
|
gactionobservable.h \
|
||||||
gactionobserver.h \
|
gactionobserver.h \
|
||||||
shell-network-agent.h \
|
|
||||||
shell-recorder-src.h
|
shell-recorder-src.h
|
||||||
|
|
||||||
if !BUILD_RECORDER
|
|
||||||
IGNORE_HFILES += shell-recorder.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Images to copy into HTML directory.
|
# Images to copy into HTML directory.
|
||||||
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
|
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
|
||||||
HTML_IMAGES=
|
HTML_IMAGES=
|
||||||
|
|
||||||
doc-gen-org.gnome.Shell.SearchProvider.xml: $(top_srcdir)/data/org.gnome.ShellSearchProvider.xml
|
|
||||||
gdbus-codegen \
|
|
||||||
--interface-prefix org.gnome.ShellSearchProvider. \
|
|
||||||
--generate-docbook doc-gen \
|
|
||||||
$(top_srcdir)/data/org.gnome.ShellSearchProvider.xml
|
|
||||||
|
|
||||||
doc-gen-org.gnome.Shell.SearchProvider2.xml: $(top_srcdir)/data/org.gnome.ShellSearchProvider2.xml
|
|
||||||
gdbus-codegen \
|
|
||||||
--interface-prefix org.gnome.ShellSearchProvider2. \
|
|
||||||
--generate-docbook doc-gen \
|
|
||||||
$(top_srcdir)/data/org.gnome.ShellSearchProvider2.xml
|
|
||||||
|
|
||||||
doc-gen-org.gnome.Shell.Screenshot.xml: $(top_srcdir)/data/org.gnome.Shell.Screenshot.xml
|
|
||||||
gdbus-codegen \
|
|
||||||
--interface-prefix org.gnome.Shell.Screenshot. \
|
|
||||||
--generate-docbook doc-gen \
|
|
||||||
$(top_srcdir)/data/org.gnome.Shell.Screenshot.xml
|
|
||||||
|
|
||||||
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
|
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
|
||||||
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
|
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
|
||||||
content_files= \
|
content_files=
|
||||||
doc-gen-org.gnome.Shell.SearchProvider.xml \
|
|
||||||
doc-gen-org.gnome.Shell.SearchProvider2.xml \
|
|
||||||
doc-gen-org.gnome.Shell.Screenshot.xml
|
|
||||||
|
|
||||||
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
|
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
|
||||||
# These files must be listed here *and* in content_files
|
# These files must be listed here *and* in content_files
|
||||||
@ -113,7 +87,7 @@ expand_content_files=
|
|||||||
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
||||||
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
||||||
GTKDOC_CFLAGS=$(GNOME_SHELL_CFLAGS)
|
GTKDOC_CFLAGS=$(GNOME_SHELL_CFLAGS)
|
||||||
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(top_builddir)/src/libgnome-shell-menu.la $(top_builddir)/src/libgnome-shell.la -rpath $(MUTTER_TYPELIB_DIR)
|
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(BLUETOOTH_LIBS) $(top_builddir)/src/libgnome-shell.la
|
||||||
|
|
||||||
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
||||||
include $(top_srcdir)/gtk-doc.make
|
include $(top_srcdir)/gtk-doc.make
|
||||||
@ -125,7 +99,7 @@ EXTRA_DIST +=
|
|||||||
# Files not to distribute
|
# Files not to distribute
|
||||||
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
|
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
|
||||||
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
|
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
|
||||||
DISTCLEANFILES = $(DOC_MODULE).types
|
DISTCLEANFILES = $(DOC_MODULES).types
|
||||||
|
|
||||||
# Comment this out if you want 'make check' to test you doc status
|
# Comment this out if you want 'make check' to test you doc status
|
||||||
# and run some sanity checks
|
# and run some sanity checks
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
<chapter>
|
<chapter>
|
||||||
<title>Actors</title>
|
<title>Actors</title>
|
||||||
<xi:include href="xml/shell-generic-container.xml"/>
|
<xi:include href="xml/shell-generic-container.xml"/>
|
||||||
|
<xi:include href="xml/shell-slicer.xml"/>
|
||||||
<xi:include href="xml/shell-stack.xml"/>
|
<xi:include href="xml/shell-stack.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter>
|
<chapter>
|
||||||
@ -28,6 +29,8 @@
|
|||||||
<chapter>
|
<chapter>
|
||||||
<title>Search</title>
|
<title>Search</title>
|
||||||
<xi:include href="xml/shell-app-system.xml"/>
|
<xi:include href="xml/shell-app-system.xml"/>
|
||||||
|
<xi:include href="xml/shell-contact-system.xml"/>
|
||||||
|
<xi:include href="xml/shell-doc-system.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter>
|
<chapter>
|
||||||
<title>Tray Icons</title>
|
<title>Tray Icons</title>
|
||||||
@ -39,17 +42,19 @@
|
|||||||
<chapter>
|
<chapter>
|
||||||
<title>Recorder</title>
|
<title>Recorder</title>
|
||||||
<xi:include href="xml/shell-recorder.xml"/>
|
<xi:include href="xml/shell-recorder.xml"/>
|
||||||
|
<xi:include href="xml/shell-recorder-src.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter>
|
<chapter>
|
||||||
<title>Integration helpers and utilities</title>
|
<title>Integration helpers and utilities</title>
|
||||||
<xi:include href="doc-gen-org.gnome.Shell.SearchProvider.xml"/>
|
|
||||||
<xi:include href="doc-gen-org.gnome.Shell.SearchProvider2.xml"/>
|
|
||||||
<xi:include href="xml/shell-global.xml"/>
|
<xi:include href="xml/shell-global.xml"/>
|
||||||
<xi:include href="xml/shell-action-modes.xml"/>
|
|
||||||
<xi:include href="xml/shell-wm.xml"/>
|
<xi:include href="xml/shell-wm.xml"/>
|
||||||
|
<xi:include href="xml/shell-xfixes-cursor.xml"/>
|
||||||
<xi:include href="xml/shell-util.xml"/>
|
<xi:include href="xml/shell-util.xml"/>
|
||||||
<xi:include href="xml/shell-mount-operation.xml"/>
|
<xi:include href="xml/shell-mount-operation.xml"/>
|
||||||
|
<xi:include href="xml/shell-mobile-providers.xml"/>
|
||||||
|
<xi:include href="xml/shell-network-agent.xml"/>
|
||||||
<xi:include href="xml/shell-polkit-authentication-agent.xml"/>
|
<xi:include href="xml/shell-polkit-authentication-agent.xml"/>
|
||||||
|
<xi:include href="xml/shell-tp-client.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter id="object-tree">
|
<chapter id="object-tree">
|
||||||
<title>Object Hierarchy</title>
|
<title>Object Hierarchy</title>
|
||||||
|
@ -78,7 +78,7 @@ expand_content_files=
|
|||||||
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
||||||
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
||||||
GTKDOC_CFLAGS=
|
GTKDOC_CFLAGS=
|
||||||
GTKDOC_LIBS=$(top_builddir)/src/libst-1.0.la -rpath $(MUTTER_TYPELIB_DIR)
|
GTKDOC_LIBS=$(top_builddir)/src/libst-1.0.la
|
||||||
|
|
||||||
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
||||||
include $(top_srcdir)/gtk-doc.make
|
include $(top_srcdir)/gtk-doc.make
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
<xi:include href="xml/st-bin.xml"/>
|
<xi:include href="xml/st-bin.xml"/>
|
||||||
<xi:include href="xml/st-box-layout.xml"/>
|
<xi:include href="xml/st-box-layout.xml"/>
|
||||||
<xi:include href="xml/st-scroll-view.xml"/>
|
<xi:include href="xml/st-scroll-view.xml"/>
|
||||||
|
<xi:include href="xml/st-table.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="styling">
|
<chapter id="styling">
|
||||||
|
@ -17,19 +17,19 @@ packages. If you are interested in building GNOME Shell from source,
|
|||||||
we would recommend building from version control using the build
|
we would recommend building from version control using the build
|
||||||
script described at:
|
script described at:
|
||||||
|
|
||||||
https://wiki.gnome.org/Projects/GnomeShell
|
http://live.gnome.org/GnomeShell
|
||||||
|
|
||||||
Not only will that give you the very latest version of this rapidly
|
Not only will that give you the very latest version of this rapidly
|
||||||
changing project, it will be much easier than get GNOME Shell and
|
changing project, it will be much easier than get GNOME Shell and
|
||||||
its dependencies to build from tarballs.</description>
|
its dependencies to build from tarballs.</description>
|
||||||
<homepage rdf:resource="https://wiki.gnome.org/Projects/GnomeShell" />
|
<!--
|
||||||
|
<homepage rdf:resource="http://live.gnome.org/GnomeShell" />
|
||||||
|
-->
|
||||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-shell-list" />
|
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-shell-list" />
|
||||||
<download-page rdf:resource="http://download.gnome.org/sources/gnome-shell/" />
|
<download-page rdf:resource="http://download.gnome.org/sources/gnome-shell/" />
|
||||||
<bug-database rdf:resource="https://bugzilla.gnome.org/browse.cgi?product=gnome-shell" />
|
<bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=gnome-shell" />
|
||||||
|
|
||||||
<category rdf:resource="http://api.gnome.org/doap-extensions#core" />
|
<category rdf:resource="http://api.gnome.org/doap-extensions#desktop" />
|
||||||
<programming-language>JavaScript</programming-language>
|
|
||||||
<programming-language>C</programming-language>
|
|
||||||
|
|
||||||
<maintainer>
|
<maintainer>
|
||||||
<foaf:Person>
|
<foaf:Person>
|
||||||
@ -52,6 +52,13 @@ its dependencies to build from tarballs.</description>
|
|||||||
<gnome:userid>walters</gnome:userid>
|
<gnome:userid>walters</gnome:userid>
|
||||||
</foaf:Person>
|
</foaf:Person>
|
||||||
</maintainer>
|
</maintainer>
|
||||||
|
<maintainer>
|
||||||
|
<foaf:Person>
|
||||||
|
<foaf:name>Dan Winship</foaf:name>
|
||||||
|
<foaf:mbox rdf:resource="mailto:danw@gnome.org" />
|
||||||
|
<gnome:userid>danw</gnome:userid>
|
||||||
|
</foaf:Person>
|
||||||
|
</maintainer>
|
||||||
<maintainer>
|
<maintainer>
|
||||||
<foaf:Person>
|
<foaf:Person>
|
||||||
<foaf:name>Marina Zhurakhinskaya</foaf:name>
|
<foaf:name>Marina Zhurakhinskaya</foaf:name>
|
||||||
|
117
js/Makefile.am
@ -1,39 +1,104 @@
|
|||||||
NULL =
|
|
||||||
BUILT_SOURCES =
|
EXTRA_DIST = misc/config.js.in
|
||||||
|
CLEANFILES = misc/config.js
|
||||||
|
|
||||||
misc/config.js: misc/config.js.in Makefile
|
misc/config.js: misc/config.js.in Makefile
|
||||||
[ -d $(@D) ] || $(mkdir_p) $(@D) ; \
|
[ -d $(@D) ] || $(mkdir_p) $(@D) ; \
|
||||||
sed -e "s|[@]PACKAGE_NAME@|$(PACKAGE_NAME)|g" \
|
sed -e "s|[@]PACKAGE_NAME@|$(PACKAGE_NAME)|g" \
|
||||||
-e "s|[@]PACKAGE_VERSION@|$(PACKAGE_VERSION)|g" \
|
-e "s|[@]PACKAGE_VERSION@|$(PACKAGE_VERSION)|g" \
|
||||||
|
-e "s|[@]GJS_VERSION@|$(GJS_VERSION)|g" \
|
||||||
-e "s|[@]HAVE_BLUETOOTH@|$(HAVE_BLUETOOTH)|g" \
|
-e "s|[@]HAVE_BLUETOOTH@|$(HAVE_BLUETOOTH)|g" \
|
||||||
-e "s|[@]HAVE_NETWORKMANAGER@|$(HAVE_NETWORKMANAGER)|g" \
|
-e "s|[@]SHELL_SYSTEM_CA_FILE@|$(SHELL_SYSTEM_CA_FILE)|g" \
|
||||||
-e "s|[@]GETTEXT_PACKAGE@|$(GETTEXT_PACKAGE)|g" \
|
-e "s|[@]GETTEXT_PACKAGE@|$(GETTEXT_PACKAGE)|g" \
|
||||||
-e "s|[@]datadir@|$(datadir)|g" \
|
-e "s|[@]datadir@|$(datadir)|g" \
|
||||||
-e "s|[@]libexecdir@|$(libexecdir)|g" \
|
-e "s|[@]libexecdir@|$(libexecdir)|g" \
|
||||||
-e "s|[@]sysconfdir@|$(sysconfdir)|g" \
|
-e "s|[@]sysconfdir@|$(sysconfdir)|g" \
|
||||||
-e "s|[@]LIBMUTTER_API_VERSION@|$(LIBMUTTER_API_VERSION)|g" \
|
|
||||||
$< > $@
|
$< > $@
|
||||||
|
|
||||||
js_resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate-dependencies $(srcdir)/js-resources.gresource.xml)
|
jsdir = $(pkgdatadir)/js
|
||||||
js-resources.h: js-resources.gresource.xml $(js_resource_files) misc/config.js
|
|
||||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate --c-name shell_js_resources $<
|
|
||||||
js-resources.c: js-resources.gresource.xml $(js_resource_files) misc/config.js
|
|
||||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate --c-name shell_js_resources $<
|
|
||||||
|
|
||||||
js_built_sources = js-resources.c js-resources.h
|
nobase_dist_js_DATA = \
|
||||||
|
gdm/batch.js \
|
||||||
BUILT_SOURCES += $(js_built_sources)
|
gdm/consoleKit.js \
|
||||||
|
gdm/fingerprint.js \
|
||||||
all-local: $(js_built_sources)
|
gdm/loginDialog.js \
|
||||||
|
gdm/powerMenu.js \
|
||||||
js_resource_dist_files = $(filter-out misc/config.js, $(js_resource_files))
|
gdm/systemd.js \
|
||||||
|
extensionPrefs/main.js \
|
||||||
EXTRA_DIST = \
|
misc/config.js \
|
||||||
$(js_resource_dist_files) \
|
misc/extensionUtils.js \
|
||||||
js-resources.gresource.xml \
|
misc/fileUtils.js \
|
||||||
misc/config.js.in \
|
misc/format.js \
|
||||||
$(NULL)
|
misc/gnomeSession.js \
|
||||||
|
misc/history.js \
|
||||||
CLEANFILES = \
|
misc/jsParse.js \
|
||||||
$(js_built_sources) \
|
misc/modemManager.js \
|
||||||
$(NULL)
|
misc/params.js \
|
||||||
|
misc/screenSaver.js \
|
||||||
|
misc/util.js \
|
||||||
|
perf/core.js \
|
||||||
|
ui/altTab.js \
|
||||||
|
ui/appDisplay.js \
|
||||||
|
ui/appFavorites.js \
|
||||||
|
ui/automountManager.js \
|
||||||
|
ui/autorunManager.js \
|
||||||
|
ui/boxpointer.js \
|
||||||
|
ui/calendar.js \
|
||||||
|
ui/checkBox.js \
|
||||||
|
ui/contactDisplay.js \
|
||||||
|
ui/ctrlAltTab.js \
|
||||||
|
ui/dash.js \
|
||||||
|
ui/dateMenu.js \
|
||||||
|
ui/dnd.js \
|
||||||
|
ui/endSessionDialog.js \
|
||||||
|
ui/environment.js \
|
||||||
|
ui/extensionSystem.js \
|
||||||
|
ui/flashspot.js \
|
||||||
|
ui/iconGrid.js \
|
||||||
|
ui/keyboard.js \
|
||||||
|
ui/keyringPrompt.js \
|
||||||
|
ui/layout.js \
|
||||||
|
ui/lightbox.js \
|
||||||
|
ui/link.js \
|
||||||
|
ui/lookingGlass.js \
|
||||||
|
ui/magnifier.js \
|
||||||
|
ui/magnifierDBus.js \
|
||||||
|
ui/main.js \
|
||||||
|
ui/messageTray.js \
|
||||||
|
ui/modalDialog.js \
|
||||||
|
ui/networkAgent.js \
|
||||||
|
ui/shellEntry.js \
|
||||||
|
ui/shellMountOperation.js \
|
||||||
|
ui/notificationDaemon.js \
|
||||||
|
ui/overview.js \
|
||||||
|
ui/panel.js \
|
||||||
|
ui/panelMenu.js \
|
||||||
|
ui/placeDisplay.js \
|
||||||
|
ui/polkitAuthenticationAgent.js \
|
||||||
|
ui/popupMenu.js \
|
||||||
|
ui/remoteSearch.js \
|
||||||
|
ui/runDialog.js \
|
||||||
|
ui/scripting.js \
|
||||||
|
ui/search.js \
|
||||||
|
ui/searchDisplay.js \
|
||||||
|
ui/shellDBus.js \
|
||||||
|
ui/statusIconDispatcher.js \
|
||||||
|
ui/status/accessibility.js \
|
||||||
|
ui/status/candidatePanel.js \
|
||||||
|
ui/status/keyboard.js \
|
||||||
|
ui/status/network.js \
|
||||||
|
ui/status/power.js \
|
||||||
|
ui/status/volume.js \
|
||||||
|
ui/status/bluetooth.js \
|
||||||
|
ui/telepathyClient.js \
|
||||||
|
ui/tweener.js \
|
||||||
|
ui/userMenu.js \
|
||||||
|
ui/viewSelector.js \
|
||||||
|
ui/wanda.js \
|
||||||
|
ui/windowAttentionHandler.js \
|
||||||
|
ui/windowManager.js \
|
||||||
|
ui/workspace.js \
|
||||||
|
ui/workspaceThumbnail.js \
|
||||||
|
ui/workspacesView.js \
|
||||||
|
ui/workspaceSwitcherPopup.js \
|
||||||
|
ui/xdndHandler.js
|
||||||
|
@ -5,24 +5,22 @@ const GLib = imports.gi.GLib;
|
|||||||
const GObject = imports.gi.GObject;
|
const GObject = imports.gi.GObject;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
const Gdk = imports.gi.Gdk;
|
|
||||||
const Pango = imports.gi.Pango;
|
const Pango = imports.gi.Pango;
|
||||||
const Format = imports.format;
|
|
||||||
|
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
|
const Format = imports.misc.format;
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
|
||||||
const GnomeShellIface = '<node> \
|
|
||||||
<interface name="org.gnome.Shell.Extensions"> \
|
const GnomeShellIface = <interface name="org.gnome.Shell">
|
||||||
<signal name="ExtensionStatusChanged"> \
|
<signal name="ExtensionStatusChanged">
|
||||||
<arg type="s" name="uuid"/> \
|
<arg type="s" name="uuid"/>
|
||||||
<arg type="i" name="state"/> \
|
<arg type="i" name="state"/>
|
||||||
<arg type="s" name="error"/> \
|
<arg type="s" name="error"/>
|
||||||
</signal> \
|
</signal>
|
||||||
</interface> \
|
</interface>;
|
||||||
</node>';
|
|
||||||
|
|
||||||
const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface);
|
const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface);
|
||||||
|
|
||||||
@ -47,9 +45,12 @@ const Application = new Lang.Class({
|
|||||||
|
|
||||||
this._extensionPrefsModules = {};
|
this._extensionPrefsModules = {};
|
||||||
|
|
||||||
this._startupUuid = null;
|
this._extensionIters = {};
|
||||||
this._loaded = false;
|
},
|
||||||
this._skipMainWindow = false;
|
|
||||||
|
_buildModel: function() {
|
||||||
|
this._model = new Gtk.ListStore();
|
||||||
|
this._model.set_column_types([GObject.TYPE_STRING, GObject.TYPE_STRING]);
|
||||||
},
|
},
|
||||||
|
|
||||||
_extensionAvailable: function(uuid) {
|
_extensionAvailable: function(uuid) {
|
||||||
@ -58,12 +59,20 @@ const Application = new Lang.Class({
|
|||||||
if (!extension)
|
if (!extension)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (ExtensionUtils.isOutOfDate(extension))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!extension.dir.get_child('prefs.js').query_exists(null))
|
if (!extension.dir.get_child('prefs.js').query_exists(null))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_setExtensionInsensitive: function(layout, cell, model, iter, data) {
|
||||||
|
let uuid = model.get_value(iter, 0);
|
||||||
|
cell.set_sensitive(this._extensionAvailable(uuid));
|
||||||
|
},
|
||||||
|
|
||||||
_getExtensionPrefsModule: function(extension) {
|
_getExtensionPrefsModule: function(extension) {
|
||||||
let uuid = extension.metadata.uuid;
|
let uuid = extension.metadata.uuid;
|
||||||
|
|
||||||
@ -93,25 +102,21 @@ const Application = new Lang.Class({
|
|||||||
widget = this._buildErrorUI(extension, e);
|
widget = this._buildErrorUI(extension, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
let dialog = new Gtk.Window({ modal: !this._skipMainWindow,
|
// Destroy the current prefs widget, if it exists
|
||||||
type_hint: Gdk.WindowTypeHint.DIALOG });
|
if (this._extensionPrefsBin.get_child())
|
||||||
dialog.set_titlebar(new Gtk.HeaderBar({ show_close_button: true,
|
this._extensionPrefsBin.get_child().destroy();
|
||||||
title: extension.metadata.name,
|
|
||||||
visible: true }));
|
|
||||||
|
|
||||||
if (this._skipMainWindow) {
|
this._extensionPrefsBin.add(widget);
|
||||||
this.application.add_window(dialog);
|
this._extensionSelector.set_active_iter(this._extensionIters[uuid]);
|
||||||
if (this._window)
|
},
|
||||||
this._window.destroy();
|
|
||||||
this._window = dialog;
|
|
||||||
this._window.window_position = Gtk.WindowPosition.CENTER;
|
|
||||||
} else {
|
|
||||||
dialog.transient_for = this._window;
|
|
||||||
}
|
|
||||||
|
|
||||||
dialog.set_default_size(600, 400);
|
_extensionSelected: function() {
|
||||||
dialog.add(widget);
|
let [success, iter] = this._extensionSelector.get_active_iter();
|
||||||
dialog.show();
|
if (!success)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let uuid = this._model.get_value(iter, 0);
|
||||||
|
this._selectExtension(uuid);
|
||||||
},
|
},
|
||||||
|
|
||||||
_buildErrorUI: function(extension, exc) {
|
_buildErrorUI: function(extension, exc) {
|
||||||
@ -144,31 +149,48 @@ const Application = new Lang.Class({
|
|||||||
|
|
||||||
_buildUI: function(app) {
|
_buildUI: function(app) {
|
||||||
this._window = new Gtk.ApplicationWindow({ application: app,
|
this._window = new Gtk.ApplicationWindow({ application: app,
|
||||||
window_position: Gtk.WindowPosition.CENTER });
|
window_position: Gtk.WindowPosition.CENTER,
|
||||||
|
title: _("GNOME Shell Extension Preferences") });
|
||||||
|
|
||||||
this._window.set_default_size(800, 500);
|
this._window.set_size_request(600, 400);
|
||||||
|
|
||||||
this._titlebar = new Gtk.HeaderBar({ show_close_button: true,
|
let vbox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
|
||||||
title: _("Shell Extensions") });
|
this._window.add(vbox);
|
||||||
this._window.set_titlebar(this._titlebar);
|
|
||||||
|
|
||||||
let killSwitch = new Gtk.Switch({ valign: Gtk.Align.CENTER });
|
let toolbar = new Gtk.Toolbar();
|
||||||
this._titlebar.pack_end(killSwitch);
|
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR);
|
||||||
|
vbox.add(toolbar);
|
||||||
|
let toolitem;
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
|
let label = new Gtk.Label({ label: _("<b>Extension</b>"),
|
||||||
this._settings.bind('disable-user-extensions', killSwitch, 'active',
|
use_markup: true });
|
||||||
Gio.SettingsBindFlags.DEFAULT |
|
toolitem = new Gtk.ToolItem({ child: label });
|
||||||
Gio.SettingsBindFlags.INVERT_BOOLEAN);
|
toolbar.add(toolitem);
|
||||||
|
|
||||||
let scroll = new Gtk.ScrolledWindow({ hscrollbar_policy: Gtk.PolicyType.NEVER });
|
this._extensionSelector = new Gtk.ComboBox({ model: this._model,
|
||||||
this._window.add(scroll);
|
margin_left: 8,
|
||||||
|
hexpand: true });
|
||||||
|
this._extensionSelector.get_style_context().add_class(Gtk.STYLE_CLASS_RAISED);
|
||||||
|
|
||||||
this._extensionSelector = new Gtk.ListBox({ selection_mode: Gtk.SelectionMode.NONE });
|
let renderer = new Gtk.CellRendererText();
|
||||||
this._extensionSelector.set_sort_func(Lang.bind(this, this._sortList));
|
this._extensionSelector.pack_start(renderer, true);
|
||||||
this._extensionSelector.set_header_func(Lang.bind(this, this._updateHeader));
|
this._extensionSelector.add_attribute(renderer, 'text', 1);
|
||||||
|
this._extensionSelector.set_cell_data_func(renderer, Lang.bind(this, this._setExtensionInsensitive), null);
|
||||||
|
this._extensionSelector.connect('changed', Lang.bind(this, this._extensionSelected));
|
||||||
|
|
||||||
scroll.add(this._extensionSelector);
|
toolitem = new Gtk.ToolItem({ child: this._extensionSelector });
|
||||||
|
toolitem.set_expand(true);
|
||||||
|
toolbar.add(toolitem);
|
||||||
|
|
||||||
|
this._extensionPrefsBin = new Gtk.Frame();
|
||||||
|
vbox.add(this._extensionPrefsBin);
|
||||||
|
|
||||||
|
let label = new Gtk.Label({
|
||||||
|
label: _("Select an extension to configure using the combobox above."),
|
||||||
|
vexpand: true
|
||||||
|
});
|
||||||
|
|
||||||
|
this._extensionPrefsBin.add(label);
|
||||||
|
|
||||||
this._shellProxy = new GnomeShellProxy(Gio.DBus.session, 'org.gnome.Shell', '/org/gnome/Shell');
|
this._shellProxy = new GnomeShellProxy(Gio.DBus.session, 'org.gnome.Shell', '/org/gnome/Shell');
|
||||||
this._shellProxy.connectSignal('ExtensionStatusChanged', Lang.bind(this, function(proxy, senderName, [uuid, state, error]) {
|
this._shellProxy.connectSignal('ExtensionStatusChanged', Lang.bind(this, function(proxy, senderName, [uuid, state, error]) {
|
||||||
@ -179,46 +201,23 @@ const Application = new Lang.Class({
|
|||||||
this._window.show_all();
|
this._window.show_all();
|
||||||
},
|
},
|
||||||
|
|
||||||
_sortList: function(row1, row2) {
|
|
||||||
let name1 = ExtensionUtils.extensions[row1.uuid].metadata.name;
|
|
||||||
let name2 = ExtensionUtils.extensions[row2.uuid].metadata.name;
|
|
||||||
return name1.localeCompare(name2);
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateHeader: function(row, before) {
|
|
||||||
if (!before || row.get_header())
|
|
||||||
return;
|
|
||||||
|
|
||||||
let sep = new Gtk.Separator({ orientation: Gtk.Orientation.HORIZONTAL });
|
|
||||||
row.set_header(sep);
|
|
||||||
},
|
|
||||||
|
|
||||||
_scanExtensions: function() {
|
_scanExtensions: function() {
|
||||||
let finder = new ExtensionUtils.ExtensionFinder();
|
ExtensionUtils.scanExtensions(Lang.bind(this, function(uuid, dir, type) {
|
||||||
finder.connect('extension-found', Lang.bind(this, this._extensionFound));
|
if (ExtensionUtils.extensions[uuid] !== undefined)
|
||||||
finder.scanExtensions();
|
return;
|
||||||
this._extensionsLoaded();
|
|
||||||
},
|
|
||||||
|
|
||||||
_extensionFound: function(finder, extension) {
|
let extension;
|
||||||
let row = new ExtensionRow(extension.uuid);
|
try {
|
||||||
|
extension = ExtensionUtils.createExtensionObject(uuid, dir, type);
|
||||||
|
} catch(e) {
|
||||||
|
global.logError('' + e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
row.prefsButton.visible = this._extensionAvailable(row.uuid);
|
let iter = this._model.append();
|
||||||
row.prefsButton.connect('clicked', Lang.bind(this,
|
this._model.set(iter, [0, 1], [uuid, extension.metadata.name]);
|
||||||
function() {
|
this._extensionIters[uuid] = iter;
|
||||||
this._selectExtension(row.uuid);
|
}));
|
||||||
}));
|
|
||||||
|
|
||||||
row.show_all();
|
|
||||||
this._extensionSelector.add(row);
|
|
||||||
},
|
|
||||||
|
|
||||||
_extensionsLoaded: function() {
|
|
||||||
if (this._startupUuid && this._extensionAvailable(this._startupUuid))
|
|
||||||
this._selectExtension(this._startupUuid);
|
|
||||||
this._startupUuid = null;
|
|
||||||
this._skipMainWindow = false;
|
|
||||||
this._loaded = true;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onActivate: function() {
|
_onActivate: function() {
|
||||||
@ -226,6 +225,7 @@ const Application = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onStartup: function(app) {
|
_onStartup: function(app) {
|
||||||
|
this._buildModel();
|
||||||
this._buildUI(app);
|
this._buildUI(app);
|
||||||
this._scanExtensions();
|
this._scanExtensions();
|
||||||
},
|
},
|
||||||
@ -233,147 +233,21 @@ const Application = new Lang.Class({
|
|||||||
_onCommandLine: function(app, commandLine) {
|
_onCommandLine: function(app, commandLine) {
|
||||||
app.activate();
|
app.activate();
|
||||||
let args = commandLine.get_arguments();
|
let args = commandLine.get_arguments();
|
||||||
|
|
||||||
if (args.length) {
|
if (args.length) {
|
||||||
let uuid = args[0];
|
let uuid = args[0];
|
||||||
|
|
||||||
this._skipMainWindow = true;
|
|
||||||
|
|
||||||
// Strip off "extension:///" prefix which fakes a URI, if it exists
|
// Strip off "extension:///" prefix which fakes a URI, if it exists
|
||||||
uuid = stripPrefix(uuid, "extension:///");
|
uuid = stripPrefix(uuid, "extension:///");
|
||||||
|
|
||||||
if (this._extensionAvailable(uuid))
|
if (!this._extensionAvailable(uuid))
|
||||||
this._selectExtension(uuid);
|
return 1;
|
||||||
else if (!this._loaded)
|
|
||||||
this._startupUuid = uuid;
|
this._selectExtension(uuid);
|
||||||
else
|
|
||||||
this._skipMainWindow = false;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const DescriptionLabel = new Lang.Class({
|
|
||||||
Name: 'DescriptionLabel',
|
|
||||||
Extends: Gtk.Label,
|
|
||||||
|
|
||||||
vfunc_get_preferred_height_for_width: function(width) {
|
|
||||||
// Hack: Request the maximum height allowed by the line limit
|
|
||||||
if (this.lines > 0)
|
|
||||||
return this.parent(0);
|
|
||||||
return this.parent(width);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const ExtensionRow = new Lang.Class({
|
|
||||||
Name: 'ExtensionRow',
|
|
||||||
Extends: Gtk.ListBoxRow,
|
|
||||||
|
|
||||||
_init: function(uuid) {
|
|
||||||
this.parent();
|
|
||||||
|
|
||||||
this.uuid = uuid;
|
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
|
|
||||||
this._settings.connect('changed::enabled-extensions', Lang.bind(this,
|
|
||||||
function() {
|
|
||||||
this._switch.state = this._isEnabled();
|
|
||||||
}));
|
|
||||||
this._settings.connect('changed::disable-extension-version-validation',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this._switch.sensitive = this._canEnable();
|
|
||||||
}));
|
|
||||||
this._settings.connect('changed::disable-user-extensions',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this._switch.sensitive = this._canEnable();
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._buildUI();
|
|
||||||
},
|
|
||||||
|
|
||||||
_buildUI: function() {
|
|
||||||
let extension = ExtensionUtils.extensions[this.uuid];
|
|
||||||
|
|
||||||
let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL,
|
|
||||||
hexpand: true, margin_end: 24, spacing: 24,
|
|
||||||
margin: 12 });
|
|
||||||
this.add(hbox);
|
|
||||||
|
|
||||||
let vbox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL,
|
|
||||||
spacing: 6, hexpand: true });
|
|
||||||
hbox.add(vbox);
|
|
||||||
|
|
||||||
let name = GLib.markup_escape_text(extension.metadata.name, -1);
|
|
||||||
let label = new Gtk.Label({ label: '<b>' + name + '</b>',
|
|
||||||
use_markup: true,
|
|
||||||
halign: Gtk.Align.START });
|
|
||||||
vbox.add(label);
|
|
||||||
|
|
||||||
let desc = extension.metadata.description.split('\n')[0];
|
|
||||||
label = new DescriptionLabel({ label: desc, wrap: true, lines: 2,
|
|
||||||
ellipsize: Pango.EllipsizeMode.END,
|
|
||||||
xalign: 0, yalign: 0 });
|
|
||||||
vbox.add(label);
|
|
||||||
|
|
||||||
let button = new Gtk.Button({ valign: Gtk.Align.CENTER,
|
|
||||||
no_show_all: true });
|
|
||||||
button.add(new Gtk.Image({ icon_name: 'emblem-system-symbolic',
|
|
||||||
icon_size: Gtk.IconSize.BUTTON,
|
|
||||||
visible: true }));
|
|
||||||
button.get_style_context().add_class('circular');
|
|
||||||
hbox.add(button);
|
|
||||||
|
|
||||||
this.prefsButton = button;
|
|
||||||
|
|
||||||
this._switch = new Gtk.Switch({ valign: Gtk.Align.CENTER,
|
|
||||||
sensitive: this._canEnable(),
|
|
||||||
state: this._isEnabled() });
|
|
||||||
this._switch.connect('notify::active', Lang.bind(this,
|
|
||||||
function() {
|
|
||||||
if (this._switch.active)
|
|
||||||
this._enable();
|
|
||||||
else
|
|
||||||
this._disable();
|
|
||||||
}));
|
|
||||||
this._switch.connect('state-set', function() { return true; });
|
|
||||||
hbox.add(this._switch);
|
|
||||||
},
|
|
||||||
|
|
||||||
_canEnable: function() {
|
|
||||||
let extension = ExtensionUtils.extensions[this.uuid];
|
|
||||||
let checkVersion = !this._settings.get_boolean('disable-extension-version-validation');
|
|
||||||
|
|
||||||
return !this._settings.get_boolean('disable-user-extensions') &&
|
|
||||||
!(checkVersion && ExtensionUtils.isOutOfDate(extension));
|
|
||||||
},
|
|
||||||
|
|
||||||
_isEnabled: function() {
|
|
||||||
let extensions = this._settings.get_strv('enabled-extensions');
|
|
||||||
return extensions.indexOf(this.uuid) != -1;
|
|
||||||
},
|
|
||||||
|
|
||||||
_enable: function() {
|
|
||||||
let extensions = this._settings.get_strv('enabled-extensions');
|
|
||||||
if (extensions.indexOf(this.uuid) != -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
extensions.push(this.uuid);
|
|
||||||
this._settings.set_strv('enabled-extensions', extensions);
|
|
||||||
},
|
|
||||||
|
|
||||||
_disable: function() {
|
|
||||||
let extensions = this._settings.get_strv('enabled-extensions');
|
|
||||||
let pos = extensions.indexOf(this.uuid);
|
|
||||||
if (pos == -1)
|
|
||||||
return;
|
|
||||||
do {
|
|
||||||
extensions.splice(pos, 1);
|
|
||||||
pos = extensions.indexOf(this.uuid);
|
|
||||||
} while (pos != -1);
|
|
||||||
this._settings.set_strv('enabled-extensions', extensions);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function initEnvironment() {
|
function initEnvironment() {
|
||||||
// Monkey-patch in a "global" object that fakes some Shell utilities
|
// Monkey-patch in a "global" object that fakes some Shell utilities
|
||||||
// that ExtensionUtils depends on.
|
// that ExtensionUtils depends on.
|
||||||
@ -383,7 +257,7 @@ function initEnvironment() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
logError: function(s) {
|
logError: function(s) {
|
||||||
log('ERROR: ' + s);
|
global.log('ERROR: ' + s);
|
||||||
},
|
},
|
||||||
|
|
||||||
userdatadir: GLib.build_filenamev([GLib.get_user_data_dir(), 'gnome-shell'])
|
userdatadir: GLib.build_filenamev([GLib.get_user_data_dir(), 'gnome-shell'])
|
||||||
@ -394,6 +268,7 @@ function initEnvironment() {
|
|||||||
|
|
||||||
function main(argv) {
|
function main(argv) {
|
||||||
initEnvironment();
|
initEnvironment();
|
||||||
|
ExtensionUtils.init();
|
||||||
|
|
||||||
Gettext.bindtextdomain(Config.GETTEXT_PACKAGE, Config.LOCALEDIR);
|
Gettext.bindtextdomain(Config.GETTEXT_PACKAGE, Config.LOCALEDIR);
|
||||||
Gettext.textdomain(Config.GETTEXT_PACKAGE);
|
Gettext.textdomain(Config.GETTEXT_PACKAGE);
|
||||||
|
@ -1,528 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Pango = imports.gi.Pango;
|
|
||||||
const Signals = imports.signals;
|
|
||||||
const St = imports.gi.St;
|
|
||||||
|
|
||||||
const Animation = imports.ui.animation;
|
|
||||||
const Batch = imports.gdm.batch;
|
|
||||||
const GdmUtil = imports.gdm.util;
|
|
||||||
const Params = imports.misc.params;
|
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
|
||||||
const Tweener = imports.ui.tweener;
|
|
||||||
const UserWidget = imports.ui.userWidget;
|
|
||||||
|
|
||||||
const DEFAULT_BUTTON_WELL_ICON_SIZE = 16;
|
|
||||||
const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
|
|
||||||
const DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3;
|
|
||||||
|
|
||||||
const MESSAGE_FADE_OUT_ANIMATION_TIME = 0.5;
|
|
||||||
|
|
||||||
const AuthPromptMode = {
|
|
||||||
UNLOCK_ONLY: 0,
|
|
||||||
UNLOCK_OR_LOG_IN: 1
|
|
||||||
};
|
|
||||||
|
|
||||||
const AuthPromptStatus = {
|
|
||||||
NOT_VERIFYING: 0,
|
|
||||||
VERIFYING: 1,
|
|
||||||
VERIFICATION_FAILED: 2,
|
|
||||||
VERIFICATION_SUCCEEDED: 3
|
|
||||||
};
|
|
||||||
|
|
||||||
const BeginRequestType = {
|
|
||||||
PROVIDE_USERNAME: 0,
|
|
||||||
DONT_PROVIDE_USERNAME: 1
|
|
||||||
};
|
|
||||||
|
|
||||||
const AuthPrompt = new Lang.Class({
|
|
||||||
Name: 'AuthPrompt',
|
|
||||||
|
|
||||||
_init: function(gdmClient, mode) {
|
|
||||||
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
|
|
||||||
|
|
||||||
this._gdmClient = gdmClient;
|
|
||||||
this._mode = mode;
|
|
||||||
|
|
||||||
let reauthenticationOnly;
|
|
||||||
if (this._mode == AuthPromptMode.UNLOCK_ONLY)
|
|
||||||
reauthenticationOnly = true;
|
|
||||||
else if (this._mode == AuthPromptMode.UNLOCK_OR_LOG_IN)
|
|
||||||
reauthenticationOnly = false;
|
|
||||||
|
|
||||||
this._userVerifier = new GdmUtil.ShellUserVerifier(this._gdmClient, { reauthenticationOnly: reauthenticationOnly });
|
|
||||||
|
|
||||||
this._userVerifier.connect('ask-question', Lang.bind(this, this._onAskQuestion));
|
|
||||||
this._userVerifier.connect('show-message', Lang.bind(this, this._onShowMessage));
|
|
||||||
this._userVerifier.connect('verification-failed', Lang.bind(this, this._onVerificationFailed));
|
|
||||||
this._userVerifier.connect('verification-complete', Lang.bind(this, this._onVerificationComplete));
|
|
||||||
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
|
|
||||||
this._userVerifier.connect('smartcard-status-changed', Lang.bind(this, this._onSmartcardStatusChanged));
|
|
||||||
this._userVerifier.connect('ovirt-user-authenticated', Lang.bind(this, this._onOVirtUserAuthenticated));
|
|
||||||
this.smartcardDetected = this._userVerifier.smartcardDetected;
|
|
||||||
|
|
||||||
this.connect('next', Lang.bind(this, function() {
|
|
||||||
this.updateSensitivity(false);
|
|
||||||
this.startSpinning();
|
|
||||||
if (this._queryingService) {
|
|
||||||
this._userVerifier.answerQuery(this._queryingService, this._entry.text);
|
|
||||||
} else {
|
|
||||||
this._preemptiveAnswer = this._entry.text;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.actor = new St.BoxLayout({ style_class: 'login-dialog-prompt-layout',
|
|
||||||
vertical: true });
|
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
|
||||||
this.actor.connect('key-press-event',
|
|
||||||
Lang.bind(this, function(actor, event) {
|
|
||||||
if (event.get_key_symbol() == Clutter.KEY_Escape) {
|
|
||||||
this.cancel();
|
|
||||||
}
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._userWell = new St.Bin({ x_fill: true,
|
|
||||||
x_align: St.Align.START });
|
|
||||||
this.actor.add(this._userWell,
|
|
||||||
{ x_align: St.Align.START,
|
|
||||||
x_fill: true,
|
|
||||||
y_fill: true,
|
|
||||||
expand: true });
|
|
||||||
this._label = new St.Label({ style_class: 'login-dialog-prompt-label' });
|
|
||||||
|
|
||||||
this.actor.add(this._label,
|
|
||||||
{ expand: true,
|
|
||||||
x_fill: false,
|
|
||||||
y_fill: true,
|
|
||||||
x_align: St.Align.START });
|
|
||||||
this._entry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
|
||||||
can_focus: true });
|
|
||||||
ShellEntry.addContextMenu(this._entry, { isPassword: true });
|
|
||||||
|
|
||||||
this.actor.add(this._entry,
|
|
||||||
{ expand: true,
|
|
||||||
x_fill: true,
|
|
||||||
y_fill: false,
|
|
||||||
x_align: St.Align.START });
|
|
||||||
|
|
||||||
this._entry.grab_key_focus();
|
|
||||||
|
|
||||||
this._message = new St.Label({ opacity: 0,
|
|
||||||
styleClass: 'login-dialog-message' });
|
|
||||||
this._message.clutter_text.line_wrap = true;
|
|
||||||
this._message.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
|
||||||
this.actor.add(this._message, { x_fill: false, x_align: St.Align.START, y_align: St.Align.START });
|
|
||||||
|
|
||||||
this._buttonBox = new St.BoxLayout({ style_class: 'login-dialog-button-box',
|
|
||||||
vertical: false });
|
|
||||||
this.actor.add(this._buttonBox,
|
|
||||||
{ expand: true,
|
|
||||||
x_align: St.Align.MIDDLE,
|
|
||||||
y_align: St.Align.END });
|
|
||||||
|
|
||||||
this._defaultButtonWell = new St.Widget({ layout_manager: new Clutter.BinLayout() });
|
|
||||||
this._defaultButtonWellActor = null;
|
|
||||||
|
|
||||||
this._initButtons();
|
|
||||||
|
|
||||||
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
|
|
||||||
this._spinner = new Animation.AnimatedIcon(spinnerIcon, DEFAULT_BUTTON_WELL_ICON_SIZE);
|
|
||||||
this._spinner.actor.opacity = 0;
|
|
||||||
this._spinner.actor.show();
|
|
||||||
this._defaultButtonWell.add_child(this._spinner.actor);
|
|
||||||
},
|
|
||||||
|
|
||||||
_onDestroy: function() {
|
|
||||||
this._userVerifier.destroy();
|
|
||||||
this._userVerifier = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
_initButtons: function() {
|
|
||||||
this.cancelButton = new St.Button({ style_class: 'modal-dialog-button button',
|
|
||||||
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
|
|
||||||
reactive: true,
|
|
||||||
can_focus: true,
|
|
||||||
label: _("Cancel") });
|
|
||||||
this.cancelButton.connect('clicked',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this.cancel();
|
|
||||||
}));
|
|
||||||
this._buttonBox.add(this.cancelButton,
|
|
||||||
{ expand: false,
|
|
||||||
x_fill: false,
|
|
||||||
y_fill: false,
|
|
||||||
x_align: St.Align.START,
|
|
||||||
y_align: St.Align.END });
|
|
||||||
|
|
||||||
this._buttonBox.add(this._defaultButtonWell,
|
|
||||||
{ expand: true,
|
|
||||||
x_fill: false,
|
|
||||||
y_fill: false,
|
|
||||||
x_align: St.Align.END,
|
|
||||||
y_align: St.Align.MIDDLE });
|
|
||||||
this.nextButton = new St.Button({ style_class: 'modal-dialog-button button',
|
|
||||||
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
|
|
||||||
reactive: true,
|
|
||||||
can_focus: true,
|
|
||||||
label: _("Next") });
|
|
||||||
this.nextButton.connect('clicked',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this.emit('next');
|
|
||||||
}));
|
|
||||||
this.nextButton.add_style_pseudo_class('default');
|
|
||||||
this._buttonBox.add(this.nextButton,
|
|
||||||
{ expand: false,
|
|
||||||
x_fill: false,
|
|
||||||
y_fill: false,
|
|
||||||
x_align: St.Align.END,
|
|
||||||
y_align: St.Align.END });
|
|
||||||
|
|
||||||
this._updateNextButtonSensitivity(this._entry.text.length > 0);
|
|
||||||
|
|
||||||
this._entry.clutter_text.connect('text-changed',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
if (!this._userVerifier.hasPendingMessages)
|
|
||||||
this._fadeOutMessage();
|
|
||||||
|
|
||||||
this._updateNextButtonSensitivity(this._entry.text.length > 0);
|
|
||||||
}));
|
|
||||||
this._entry.clutter_text.connect('activate', Lang.bind(this, function() {
|
|
||||||
if (this.nextButton.reactive)
|
|
||||||
this.emit('next');
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_onAskQuestion: function(verifier, serviceName, question, passwordChar) {
|
|
||||||
if (this._queryingService)
|
|
||||||
this.clear();
|
|
||||||
|
|
||||||
this._queryingService = serviceName;
|
|
||||||
if (this._preemptiveAnswer) {
|
|
||||||
this._userVerifier.answerQuery(this._queryingService, this._preemptiveAnswer);
|
|
||||||
this._preemptiveAnswer = null;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.setPasswordChar(passwordChar);
|
|
||||||
this.setQuestion(question);
|
|
||||||
|
|
||||||
if (passwordChar) {
|
|
||||||
if (this._userVerifier.reauthenticating)
|
|
||||||
this.nextButton.label = _("Unlock");
|
|
||||||
else
|
|
||||||
this.nextButton.label = C_("button", "Sign In");
|
|
||||||
} else {
|
|
||||||
this.nextButton.label = _("Next");
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateSensitivity(true);
|
|
||||||
this.emit('prompted');
|
|
||||||
},
|
|
||||||
|
|
||||||
_onOVirtUserAuthenticated: function() {
|
|
||||||
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
|
|
||||||
this.reset();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onSmartcardStatusChanged: function() {
|
|
||||||
this.smartcardDetected = this._userVerifier.smartcardDetected;
|
|
||||||
|
|
||||||
// Most of the time we want to reset if the user inserts or removes
|
|
||||||
// a smartcard. Smartcard insertion "preempts" what the user was
|
|
||||||
// doing, and smartcard removal aborts the preemption.
|
|
||||||
// The exceptions are: 1) Don't reset on smartcard insertion if we're already verifying
|
|
||||||
// with a smartcard
|
|
||||||
// 2) Don't reset if we've already succeeded at verification and
|
|
||||||
// the user is getting logged in.
|
|
||||||
if (this._userVerifier.serviceIsDefault(GdmUtil.SMARTCARD_SERVICE_NAME) &&
|
|
||||||
this.verificationStatus == AuthPromptStatus.VERIFYING &&
|
|
||||||
this.smartcardDetected)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
|
|
||||||
this.reset();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onShowMessage: function(userVerifier, message, type) {
|
|
||||||
this.setMessage(message, type);
|
|
||||||
this.emit('prompted');
|
|
||||||
},
|
|
||||||
|
|
||||||
_onVerificationFailed: function() {
|
|
||||||
this._queryingService = null;
|
|
||||||
this.clear();
|
|
||||||
|
|
||||||
this.updateSensitivity(true);
|
|
||||||
this.setActorInDefaultButtonWell(null);
|
|
||||||
this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
|
|
||||||
},
|
|
||||||
|
|
||||||
_onVerificationComplete: function() {
|
|
||||||
this.setActorInDefaultButtonWell(null);
|
|
||||||
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
|
|
||||||
this.cancelButton.reactive = false;
|
|
||||||
},
|
|
||||||
|
|
||||||
_onReset: function() {
|
|
||||||
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
|
|
||||||
this.reset();
|
|
||||||
},
|
|
||||||
|
|
||||||
addActorToDefaultButtonWell: function(actor) {
|
|
||||||
this._defaultButtonWell.add_child(actor);
|
|
||||||
},
|
|
||||||
|
|
||||||
setActorInDefaultButtonWell: function(actor, animate) {
|
|
||||||
if (!this._defaultButtonWellActor &&
|
|
||||||
!actor)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let oldActor = this._defaultButtonWellActor;
|
|
||||||
|
|
||||||
if (oldActor)
|
|
||||||
Tweener.removeTweens(oldActor);
|
|
||||||
|
|
||||||
let wasSpinner;
|
|
||||||
if (oldActor == this._spinner.actor)
|
|
||||||
wasSpinner = true;
|
|
||||||
else
|
|
||||||
wasSpinner = false;
|
|
||||||
|
|
||||||
let isSpinner;
|
|
||||||
if (actor == this._spinner.actor)
|
|
||||||
isSpinner = true;
|
|
||||||
else
|
|
||||||
isSpinner = false;
|
|
||||||
|
|
||||||
if (this._defaultButtonWellActor != actor && oldActor) {
|
|
||||||
if (!animate) {
|
|
||||||
oldActor.opacity = 0;
|
|
||||||
|
|
||||||
if (wasSpinner) {
|
|
||||||
if (this._spinner)
|
|
||||||
this._spinner.stop();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Tweener.addTween(oldActor,
|
|
||||||
{ opacity: 0,
|
|
||||||
time: DEFAULT_BUTTON_WELL_ANIMATION_TIME,
|
|
||||||
delay: DEFAULT_BUTTON_WELL_ANIMATION_DELAY,
|
|
||||||
transition: 'linear',
|
|
||||||
onCompleteScope: this,
|
|
||||||
onComplete: function() {
|
|
||||||
if (wasSpinner) {
|
|
||||||
if (this._spinner)
|
|
||||||
this._spinner.stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (actor) {
|
|
||||||
if (isSpinner)
|
|
||||||
this._spinner.play();
|
|
||||||
|
|
||||||
if (!animate)
|
|
||||||
actor.opacity = 255;
|
|
||||||
else
|
|
||||||
Tweener.addTween(actor,
|
|
||||||
{ opacity: 255,
|
|
||||||
time: DEFAULT_BUTTON_WELL_ANIMATION_TIME,
|
|
||||||
delay: DEFAULT_BUTTON_WELL_ANIMATION_DELAY,
|
|
||||||
transition: 'linear' });
|
|
||||||
}
|
|
||||||
|
|
||||||
this._defaultButtonWellActor = actor;
|
|
||||||
},
|
|
||||||
|
|
||||||
startSpinning: function() {
|
|
||||||
this.setActorInDefaultButtonWell(this._spinner.actor, true);
|
|
||||||
},
|
|
||||||
|
|
||||||
stopSpinning: function() {
|
|
||||||
this.setActorInDefaultButtonWell(null, false);
|
|
||||||
},
|
|
||||||
|
|
||||||
clear: function() {
|
|
||||||
this._entry.text = '';
|
|
||||||
this.stopSpinning();
|
|
||||||
},
|
|
||||||
|
|
||||||
setPasswordChar: function(passwordChar) {
|
|
||||||
this._entry.clutter_text.set_password_char(passwordChar);
|
|
||||||
this._entry.menu.isPassword = passwordChar != '';
|
|
||||||
},
|
|
||||||
|
|
||||||
setQuestion: function(question) {
|
|
||||||
this._label.set_text(question);
|
|
||||||
|
|
||||||
this._label.show();
|
|
||||||
this._entry.show();
|
|
||||||
|
|
||||||
this._entry.grab_key_focus();
|
|
||||||
},
|
|
||||||
|
|
||||||
getAnswer: function() {
|
|
||||||
let text;
|
|
||||||
|
|
||||||
if (this._preemptiveAnswer) {
|
|
||||||
text = this._preemptiveAnswer;
|
|
||||||
this._preemptiveAnswer = null;
|
|
||||||
} else {
|
|
||||||
text = this._entry.get_text();
|
|
||||||
}
|
|
||||||
|
|
||||||
return text;
|
|
||||||
},
|
|
||||||
|
|
||||||
_fadeOutMessage: function() {
|
|
||||||
if (this._message.opacity == 0)
|
|
||||||
return;
|
|
||||||
Tweener.removeTweens(this._message);
|
|
||||||
Tweener.addTween(this._message,
|
|
||||||
{ opacity: 0,
|
|
||||||
time: MESSAGE_FADE_OUT_ANIMATION_TIME,
|
|
||||||
transition: 'easeOutQuad'
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
setMessage: function(message, type) {
|
|
||||||
if (type == GdmUtil.MessageType.ERROR)
|
|
||||||
this._message.add_style_class_name('login-dialog-message-warning');
|
|
||||||
else
|
|
||||||
this._message.remove_style_class_name('login-dialog-message-warning');
|
|
||||||
|
|
||||||
if (type == GdmUtil.MessageType.HINT)
|
|
||||||
this._message.add_style_class_name('login-dialog-message-hint');
|
|
||||||
else
|
|
||||||
this._message.remove_style_class_name('login-dialog-message-hint');
|
|
||||||
|
|
||||||
if (message) {
|
|
||||||
Tweener.removeTweens(this._message);
|
|
||||||
this._message.text = message;
|
|
||||||
this._message.opacity = 255;
|
|
||||||
} else {
|
|
||||||
this._message.opacity = 0;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateNextButtonSensitivity: function(sensitive) {
|
|
||||||
this.nextButton.reactive = sensitive;
|
|
||||||
this.nextButton.can_focus = sensitive;
|
|
||||||
},
|
|
||||||
|
|
||||||
updateSensitivity: function(sensitive) {
|
|
||||||
this._updateNextButtonSensitivity(sensitive && this._entry.text.length > 0);
|
|
||||||
this._entry.reactive = sensitive;
|
|
||||||
this._entry.clutter_text.editable = sensitive;
|
|
||||||
},
|
|
||||||
|
|
||||||
hide: function() {
|
|
||||||
this.setActorInDefaultButtonWell(null, true);
|
|
||||||
this.actor.hide();
|
|
||||||
this._message.opacity = 0;
|
|
||||||
|
|
||||||
this.setUser(null);
|
|
||||||
|
|
||||||
this.updateSensitivity(true);
|
|
||||||
this._entry.set_text('');
|
|
||||||
},
|
|
||||||
|
|
||||||
setUser: function(user) {
|
|
||||||
let oldChild = this._userWell.get_child();
|
|
||||||
if (oldChild)
|
|
||||||
oldChild.destroy();
|
|
||||||
|
|
||||||
if (user) {
|
|
||||||
let userWidget = new UserWidget.UserWidget(user);
|
|
||||||
this._userWell.set_child(userWidget.actor);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
reset: function() {
|
|
||||||
let oldStatus = this.verificationStatus;
|
|
||||||
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
|
|
||||||
this.cancelButton.reactive = true;
|
|
||||||
this.nextButton.label = _("Next");
|
|
||||||
|
|
||||||
if (this._userVerifier)
|
|
||||||
this._userVerifier.cancel();
|
|
||||||
|
|
||||||
this._queryingService = null;
|
|
||||||
this.clear();
|
|
||||||
this._message.opacity = 0;
|
|
||||||
this.setUser(null);
|
|
||||||
this.stopSpinning();
|
|
||||||
|
|
||||||
if (oldStatus == AuthPromptStatus.VERIFICATION_FAILED)
|
|
||||||
this.emit('failed');
|
|
||||||
|
|
||||||
let beginRequestType;
|
|
||||||
|
|
||||||
if (this._mode == AuthPromptMode.UNLOCK_ONLY) {
|
|
||||||
// The user is constant at the unlock screen, so it will immediately
|
|
||||||
// respond to the request with the username
|
|
||||||
beginRequestType = BeginRequestType.PROVIDE_USERNAME;
|
|
||||||
} else if (this._userVerifier.serviceIsForeground(GdmUtil.OVIRT_SERVICE_NAME) ||
|
|
||||||
this._userVerifier.serviceIsForeground(GdmUtil.SMARTCARD_SERVICE_NAME)) {
|
|
||||||
// We don't need to know the username if the user preempted the login screen
|
|
||||||
// with a smartcard or with preauthenticated oVirt credentials
|
|
||||||
beginRequestType = BeginRequestType.DONT_PROVIDE_USERNAME;
|
|
||||||
} else {
|
|
||||||
// In all other cases, we should get the username up front.
|
|
||||||
beginRequestType = BeginRequestType.PROVIDE_USERNAME;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.emit('reset', beginRequestType);
|
|
||||||
},
|
|
||||||
|
|
||||||
addCharacter: function(unichar) {
|
|
||||||
if (!this._entry.visible)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._entry.grab_key_focus();
|
|
||||||
this._entry.clutter_text.insert_unichar(unichar);
|
|
||||||
},
|
|
||||||
|
|
||||||
begin: function(params) {
|
|
||||||
params = Params.parse(params, { userName: null,
|
|
||||||
hold: null });
|
|
||||||
|
|
||||||
this.updateSensitivity(false);
|
|
||||||
|
|
||||||
let hold = params.hold;
|
|
||||||
if (!hold)
|
|
||||||
hold = new Batch.Hold();
|
|
||||||
|
|
||||||
this._userVerifier.begin(params.userName, hold);
|
|
||||||
this.verificationStatus = AuthPromptStatus.VERIFYING;
|
|
||||||
},
|
|
||||||
|
|
||||||
finish: function(onComplete) {
|
|
||||||
if (!this._userVerifier.hasPendingMessages) {
|
|
||||||
this._userVerifier.clear();
|
|
||||||
onComplete();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let signalId = this._userVerifier.connect('no-more-messages',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this._userVerifier.disconnect(signalId);
|
|
||||||
this._userVerifier.clear();
|
|
||||||
onComplete();
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
cancel: function() {
|
|
||||||
if (this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.reset();
|
|
||||||
this.emit('cancelled');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(AuthPrompt.prototype);
|
|
@ -13,35 +13,9 @@
|
|||||||
* 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
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
* along with this program; if not, write to the Free Software
|
||||||
*/
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
/*
|
|
||||||
* In order for transformation animations to look good, they need to be
|
|
||||||
* incremental and have some order to them (e.g., fade out hidden items,
|
|
||||||
* then shrink to close the void left over). Chaining animations in this way can
|
|
||||||
* be error-prone and wordy using just Tweener callbacks.
|
|
||||||
*
|
|
||||||
* The classes in this file help with this:
|
|
||||||
*
|
|
||||||
* - Task. encapsulates schedulable work to be run in a specific scope.
|
|
||||||
*
|
|
||||||
* - ConsecutiveBatch. runs a series of tasks in order and completes
|
|
||||||
* when the last in the series finishes.
|
|
||||||
*
|
|
||||||
* - ConcurrentBatch. runs a set of tasks at the same time and completes
|
|
||||||
* when the last to finish completes.
|
|
||||||
*
|
|
||||||
* - Hold. prevents a batch from completing the pending task until
|
|
||||||
* the hold is released.
|
|
||||||
*
|
|
||||||
* The tasks associated with a batch are specified in a list at batch
|
|
||||||
* construction time as either task objects or plain functions.
|
|
||||||
* Batches are task objects, themselves, so they can be nested.
|
|
||||||
*
|
|
||||||
* These classes aren't specific to GDM, but were found to be unintuitive and so
|
|
||||||
* are not used elsewhere. These APIs may ultimately get dropped entirely and
|
|
||||||
* replaced by something else.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
|
22
js/gdm/consoleKit.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
|
||||||
|
const ConsoleKitManagerIface = <interface name='org.freedesktop.ConsoleKit.Manager'>
|
||||||
|
<method name='CanRestart'>
|
||||||
|
<arg type='b' direction='out'/>
|
||||||
|
</method>
|
||||||
|
<method name='CanStop'>
|
||||||
|
<arg type='b' direction='out'/>
|
||||||
|
</method>
|
||||||
|
<method name='Restart' />
|
||||||
|
<method name='Stop' />
|
||||||
|
</interface>;
|
||||||
|
|
||||||
|
const ConsoleKitProxy = Gio.DBusProxy.makeProxyWrapper(ConsoleKitManagerIface);
|
||||||
|
|
||||||
|
function ConsoleKitManager() {
|
||||||
|
return new ConsoleKitProxy(Gio.DBus.system,
|
||||||
|
'org.freedesktop.ConsoleKit',
|
||||||
|
'/org/freedesktop/ConsoleKit/Manager');
|
||||||
|
};
|
@ -5,13 +5,11 @@ const Lang = imports.lang;
|
|||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const FprintManagerIface = '<node> \
|
const FprintManagerIface = <interface name='net.reactivated.Fprint.Manager'>
|
||||||
<interface name="net.reactivated.Fprint.Manager"> \
|
<method name='GetDefaultDevice'>
|
||||||
<method name="GetDefaultDevice"> \
|
<arg type='o' direction='out' />
|
||||||
<arg type="o" direction="out" /> \
|
</method>
|
||||||
</method> \
|
</interface>;
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
const FprintManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(FprintManagerIface);
|
const FprintManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(FprintManagerIface);
|
||||||
|
|
||||||
@ -21,14 +19,9 @@ function FprintManager() {
|
|||||||
g_interface_info: FprintManagerInfo,
|
g_interface_info: FprintManagerInfo,
|
||||||
g_name: 'net.reactivated.Fprint',
|
g_name: 'net.reactivated.Fprint',
|
||||||
g_object_path: '/net/reactivated/Fprint/Manager',
|
g_object_path: '/net/reactivated/Fprint/Manager',
|
||||||
g_flags: (Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES) });
|
g_flags: (Gio.DBusProxyFlags.DO_NOT_AUTO_START |
|
||||||
|
Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES) });
|
||||||
try {
|
|
||||||
self.init(null);
|
|
||||||
} catch(e) {
|
|
||||||
log('Failed to connect to Fprint service: ' + e.message);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
self.init(null);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Signals = imports.signals;
|
|
||||||
|
|
||||||
const OVirtCredentialsIface = '<node> \
|
|
||||||
<interface name="org.ovirt.vdsm.Credentials"> \
|
|
||||||
<signal name="UserAuthenticated"> \
|
|
||||||
<arg type="s" name="token"/> \
|
|
||||||
</signal> \
|
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
const OVirtCredentialsInfo = Gio.DBusInterfaceInfo.new_for_xml(OVirtCredentialsIface);
|
|
||||||
|
|
||||||
let _oVirtCredentialsManager = null;
|
|
||||||
|
|
||||||
function OVirtCredentials() {
|
|
||||||
var self = new Gio.DBusProxy({ g_connection: Gio.DBus.system,
|
|
||||||
g_interface_name: OVirtCredentialsInfo.name,
|
|
||||||
g_interface_info: OVirtCredentialsInfo,
|
|
||||||
g_name: 'org.ovirt.vdsm.Credentials',
|
|
||||||
g_object_path: '/org/ovirt/vdsm/Credentials',
|
|
||||||
g_flags: (Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES) });
|
|
||||||
self.init(null);
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
const OVirtCredentialsManager = new Lang.Class({
|
|
||||||
Name: 'OVirtCredentialsManager',
|
|
||||||
_init: function() {
|
|
||||||
this._token = null;
|
|
||||||
|
|
||||||
this._credentials = new OVirtCredentials();
|
|
||||||
this._credentials.connectSignal('UserAuthenticated',
|
|
||||||
Lang.bind(this, this._onUserAuthenticated));
|
|
||||||
},
|
|
||||||
|
|
||||||
_onUserAuthenticated: function(proxy, sender, [token]) {
|
|
||||||
this._token = token;
|
|
||||||
this.emit('user-authenticated', token);
|
|
||||||
},
|
|
||||||
|
|
||||||
hasToken: function() {
|
|
||||||
return this._token != null;
|
|
||||||
},
|
|
||||||
|
|
||||||
getToken: function() {
|
|
||||||
return this._token;
|
|
||||||
},
|
|
||||||
|
|
||||||
resetToken: function() {
|
|
||||||
this._token = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(OVirtCredentialsManager.prototype);
|
|
||||||
|
|
||||||
function getOVirtCredentialsManager() {
|
|
||||||
if (!_oVirtCredentialsManager)
|
|
||||||
_oVirtCredentialsManager = new OVirtCredentialsManager();
|
|
||||||
|
|
||||||
return _oVirtCredentialsManager;
|
|
||||||
}
|
|
170
js/gdm/powerMenu.js
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
/*
|
||||||
|
* Copyright 2011 Red Hat, Inc
|
||||||
|
*
|
||||||
|
* 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, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const UPowerGlib = imports.gi.UPowerGlib;
|
||||||
|
|
||||||
|
const ConsoleKit = imports.gdm.consoleKit;
|
||||||
|
const Systemd = imports.gdm.systemd;
|
||||||
|
|
||||||
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
|
||||||
|
const PowerMenuButton = new Lang.Class({
|
||||||
|
Name: 'PowerMenuButton',
|
||||||
|
Extends: PanelMenu.SystemStatusButton,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent('system-shutdown', null);
|
||||||
|
this._upClient = new UPowerGlib.Client();
|
||||||
|
|
||||||
|
if (Systemd.haveSystemd())
|
||||||
|
this._systemdLoginManager = new Systemd.SystemdLoginManager();
|
||||||
|
else
|
||||||
|
this._consoleKitManager = new ConsoleKit.ConsoleKitManager();
|
||||||
|
|
||||||
|
this._createSubMenu();
|
||||||
|
|
||||||
|
this._upClient.connect('notify::can-suspend',
|
||||||
|
Lang.bind(this, this._updateHaveSuspend));
|
||||||
|
this._updateHaveSuspend();
|
||||||
|
|
||||||
|
// ConsoleKit doesn't send notifications when shutdown/reboot
|
||||||
|
// are disabled, so we update the menu item each time the menu opens
|
||||||
|
this.menu.connect('open-state-changed', Lang.bind(this,
|
||||||
|
function(menu, open) {
|
||||||
|
if (open) {
|
||||||
|
this._updateHaveShutdown();
|
||||||
|
this._updateHaveRestart();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
this._updateHaveShutdown();
|
||||||
|
this._updateHaveRestart();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateVisibility: function() {
|
||||||
|
let shouldBeVisible = (this._haveSuspend || this._haveShutdown || this._haveRestart);
|
||||||
|
this.actor.visible = shouldBeVisible;
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateHaveShutdown: function() {
|
||||||
|
|
||||||
|
if (Systemd.haveSystemd()) {
|
||||||
|
this._systemdLoginManager.CanPowerOffRemote(Lang.bind(this,
|
||||||
|
function(result, error) {
|
||||||
|
if (!error)
|
||||||
|
this._haveShutdown = result != 'no';
|
||||||
|
else
|
||||||
|
this._haveShutdown = false;
|
||||||
|
|
||||||
|
this._powerOffItem.actor.visible = this._haveShutdown;
|
||||||
|
this._updateVisibility();
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
this._consoleKitManager.CanStopRemote(Lang.bind(this,
|
||||||
|
function(result, error) {
|
||||||
|
if (!error)
|
||||||
|
this._haveShutdown = result;
|
||||||
|
else
|
||||||
|
this._haveShutdown = false;
|
||||||
|
|
||||||
|
this._powerOffItem.actor.visible = this._haveShutdown;
|
||||||
|
this._updateVisibility();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateHaveRestart: function() {
|
||||||
|
|
||||||
|
if (Systemd.haveSystemd()) {
|
||||||
|
this._systemdLoginManager.CanRebootRemote(Lang.bind(this,
|
||||||
|
function(result, error) {
|
||||||
|
if (!error)
|
||||||
|
this._haveRestart = result != 'no';
|
||||||
|
else
|
||||||
|
this._haveRestart = false;
|
||||||
|
|
||||||
|
this._restartItem.actor.visible = this._haveRestart;
|
||||||
|
this._updateVisibility();
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
this._consoleKitManager.CanRestartRemote(Lang.bind(this,
|
||||||
|
function(result, error) {
|
||||||
|
if (!error)
|
||||||
|
this._haveRestart = result;
|
||||||
|
else
|
||||||
|
this._haveRestart = false;
|
||||||
|
|
||||||
|
this._restartItem.actor.visible = this._haveRestart;
|
||||||
|
this._updateVisibility();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateHaveSuspend: function() {
|
||||||
|
this._haveSuspend = this._upClient.get_can_suspend();
|
||||||
|
this._suspendItem.actor.visible = this._haveSuspend;
|
||||||
|
this._updateVisibility();
|
||||||
|
},
|
||||||
|
|
||||||
|
_createSubMenu: function() {
|
||||||
|
let item;
|
||||||
|
|
||||||
|
item = new PopupMenu.PopupMenuItem(_("Suspend"));
|
||||||
|
item.connect('activate', Lang.bind(this, this._onActivateSuspend));
|
||||||
|
this.menu.addMenuItem(item);
|
||||||
|
this._suspendItem = item;
|
||||||
|
|
||||||
|
item = new PopupMenu.PopupMenuItem(_("Restart"));
|
||||||
|
item.connect('activate', Lang.bind(this, this._onActivateRestart));
|
||||||
|
this.menu.addMenuItem(item);
|
||||||
|
this._restartItem = item;
|
||||||
|
|
||||||
|
item = new PopupMenu.PopupMenuItem(_("Power Off"));
|
||||||
|
item.connect('activate', Lang.bind(this, this._onActivatePowerOff));
|
||||||
|
this.menu.addMenuItem(item);
|
||||||
|
this._powerOffItem = item;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onActivateSuspend: function() {
|
||||||
|
if (this._haveSuspend)
|
||||||
|
this._upClient.suspend_sync(null);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onActivateRestart: function() {
|
||||||
|
if (!this._haveRestart)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Systemd.haveSystemd())
|
||||||
|
this._systemdLoginManager.RebootRemote(true);
|
||||||
|
else
|
||||||
|
this._consoleKitManager.RestartRemote();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onActivatePowerOff: function() {
|
||||||
|
if (!this._haveShutdown)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Systemd.haveSystemd())
|
||||||
|
this._systemdLoginManager.PowerOffRemote(true);
|
||||||
|
else
|
||||||
|
this._consoleKitManager.StopRemote();
|
||||||
|
}
|
||||||
|
});
|
157
js/gdm/realmd.js
@ -1,157 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Shell = imports.gi.Shell;
|
|
||||||
const Signals = imports.signals;
|
|
||||||
|
|
||||||
const ProviderIface = '<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>';
|
|
||||||
const Provider = Gio.DBusProxy.makeProxyWrapper(ProviderIface);
|
|
||||||
|
|
||||||
const ServiceIface = '<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>';
|
|
||||||
const Service = Gio.DBusProxy.makeProxyWrapper(ServiceIface);
|
|
||||||
|
|
||||||
const RealmIface = '<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>';
|
|
||||||
const Realm = Gio.DBusProxy.makeProxyWrapper(RealmIface);
|
|
||||||
|
|
||||||
const Manager = new Lang.Class({
|
|
||||||
Name: 'Manager',
|
|
||||||
|
|
||||||
_init: function(parentActor) {
|
|
||||||
this._aggregateProvider = Provider(Gio.DBus.system,
|
|
||||||
'org.freedesktop.realmd',
|
|
||||||
'/org/freedesktop/realmd',
|
|
||||||
Lang.bind(this, this._reloadRealms))
|
|
||||||
this._realms = {};
|
|
||||||
|
|
||||||
this._signalId = this._aggregateProvider.connect('g-properties-changed',
|
|
||||||
Lang.bind(this, function(proxy, properties) {
|
|
||||||
if ('Realms' in properties.deep_unpack())
|
|
||||||
this._reloadRealms();
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_reloadRealms: function() {
|
|
||||||
let realmPaths = this._aggregateProvider.Realms;
|
|
||||||
|
|
||||||
if (!realmPaths)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (let i = 0; i < realmPaths.length; i++) {
|
|
||||||
let realm = Realm(Gio.DBus.system,
|
|
||||||
'org.freedesktop.realmd',
|
|
||||||
realmPaths[i],
|
|
||||||
Lang.bind(this, this._onRealmLoaded));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_reloadRealm: function(realm) {
|
|
||||||
if (!realm.Configured) {
|
|
||||||
if (this._realms[realm.get_object_path()])
|
|
||||||
delete this._realms[realm.get_object_path()];
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._realms[realm.get_object_path()] = realm;
|
|
||||||
|
|
||||||
this._updateLoginFormat();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onRealmLoaded: function(realm, error) {
|
|
||||||
if (error)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._reloadRealm(realm);
|
|
||||||
|
|
||||||
realm.connect('g-properties-changed',
|
|
||||||
Lang.bind(this, function(proxy, properties) {
|
|
||||||
if ('Configured' in properties.deep_unpack())
|
|
||||||
this._reloadRealm(realm);
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateLoginFormat: function() {
|
|
||||||
let newLoginFormat;
|
|
||||||
|
|
||||||
for (let realmPath in this._realms) {
|
|
||||||
let realm = this._realms[realmPath];
|
|
||||||
if (realm.LoginFormats && realm.LoginFormats.length > 0) {
|
|
||||||
newLoginFormat = realm.LoginFormats[0];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._loginFormat != newLoginFormat) {
|
|
||||||
this._loginFormat = newLoginFormat;
|
|
||||||
this.emit('login-format-changed', newLoginFormat);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
get loginFormat() {
|
|
||||||
if (this._loginFormat !== undefined)
|
|
||||||
return this._loginFormat;
|
|
||||||
|
|
||||||
this._updateLoginFormat();
|
|
||||||
|
|
||||||
return this._loginFormat;
|
|
||||||
},
|
|
||||||
|
|
||||||
release: function() {
|
|
||||||
Service(Gio.DBus.system,
|
|
||||||
'org.freedesktop.realmd',
|
|
||||||
'/org/freedesktop/realmd',
|
|
||||||
function(service) {
|
|
||||||
service.ReleaseRemote();
|
|
||||||
});
|
|
||||||
this._aggregateProvider.disconnect(this._signalId);
|
|
||||||
this._realms = { };
|
|
||||||
this._updateLoginFormat();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(Manager.prototype)
|
|
31
js/gdm/systemd.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
|
||||||
|
const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager'>
|
||||||
|
<method name='PowerOff'>
|
||||||
|
<arg type='b' direction='in'/>
|
||||||
|
</method>
|
||||||
|
<method name='Reboot'>
|
||||||
|
<arg type='b' direction='in'/>
|
||||||
|
</method>
|
||||||
|
<method name='CanPowerOff'>
|
||||||
|
<arg type='s' direction='out'/>
|
||||||
|
</method>
|
||||||
|
<method name='CanReboot'>
|
||||||
|
<arg type='s' direction='out'/>
|
||||||
|
</method>
|
||||||
|
</interface>;
|
||||||
|
|
||||||
|
const SystemdLoginManagerProxy = Gio.DBusProxy.makeProxyWrapper(SystemdLoginManagerIface);
|
||||||
|
|
||||||
|
function SystemdLoginManager() {
|
||||||
|
return new SystemdLoginManagerProxy(Gio.DBus.system,
|
||||||
|
'org.freedesktop.login1',
|
||||||
|
'/org/freedesktop/login1');
|
||||||
|
};
|
||||||
|
|
||||||
|
function haveSystemd() {
|
||||||
|
return GLib.access("/sys/fs/cgroup/systemd", 0) >= 0;
|
||||||
|
}
|
580
js/gdm/util.js
@ -1,580 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Mainloop = imports.mainloop;
|
|
||||||
const Signals = imports.signals;
|
|
||||||
const St = imports.gi.St;
|
|
||||||
|
|
||||||
const Batch = imports.gdm.batch;
|
|
||||||
const Fprint = imports.gdm.fingerprint;
|
|
||||||
const OVirt = imports.gdm.oVirt;
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
const Params = imports.misc.params;
|
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
|
||||||
const SmartcardManager = imports.misc.smartcardManager;
|
|
||||||
const Tweener = imports.ui.tweener;
|
|
||||||
|
|
||||||
const PASSWORD_SERVICE_NAME = 'gdm-password';
|
|
||||||
const FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
|
|
||||||
const SMARTCARD_SERVICE_NAME = 'gdm-smartcard';
|
|
||||||
const OVIRT_SERVICE_NAME = 'gdm-ovirtcred';
|
|
||||||
const FADE_ANIMATION_TIME = 0.16;
|
|
||||||
const CLONE_FADE_ANIMATION_TIME = 0.25;
|
|
||||||
|
|
||||||
const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
|
|
||||||
const PASSWORD_AUTHENTICATION_KEY = 'enable-password-authentication';
|
|
||||||
const FINGERPRINT_AUTHENTICATION_KEY = 'enable-fingerprint-authentication';
|
|
||||||
const SMARTCARD_AUTHENTICATION_KEY = 'enable-smartcard-authentication';
|
|
||||||
const BANNER_MESSAGE_KEY = 'banner-message-enable';
|
|
||||||
const BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
|
|
||||||
const ALLOWED_FAILURES_KEY = 'allowed-failures';
|
|
||||||
|
|
||||||
const LOGO_KEY = 'logo';
|
|
||||||
const DISABLE_USER_LIST_KEY = 'disable-user-list';
|
|
||||||
|
|
||||||
// Give user 48ms to read each character of a PAM message
|
|
||||||
const USER_READ_TIME = 48
|
|
||||||
|
|
||||||
const MessageType = {
|
|
||||||
NONE: 0,
|
|
||||||
ERROR: 1,
|
|
||||||
INFO: 2,
|
|
||||||
HINT: 3
|
|
||||||
};
|
|
||||||
|
|
||||||
function fadeInActor(actor) {
|
|
||||||
if (actor.opacity == 255 && actor.visible)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
let hold = new Batch.Hold();
|
|
||||||
actor.show();
|
|
||||||
let [minHeight, naturalHeight] = actor.get_preferred_height(-1);
|
|
||||||
|
|
||||||
actor.opacity = 0;
|
|
||||||
actor.set_height(0);
|
|
||||||
Tweener.addTween(actor,
|
|
||||||
{ opacity: 255,
|
|
||||||
height: naturalHeight,
|
|
||||||
time: FADE_ANIMATION_TIME,
|
|
||||||
transition: 'easeOutQuad',
|
|
||||||
onComplete: function() {
|
|
||||||
this.set_height(-1);
|
|
||||||
hold.release();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return hold;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fadeOutActor(actor) {
|
|
||||||
if (!actor.visible || actor.opacity == 0) {
|
|
||||||
actor.opacity = 0;
|
|
||||||
actor.hide();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
let hold = new Batch.Hold();
|
|
||||||
Tweener.addTween(actor,
|
|
||||||
{ opacity: 0,
|
|
||||||
height: 0,
|
|
||||||
time: FADE_ANIMATION_TIME,
|
|
||||||
transition: 'easeOutQuad',
|
|
||||||
onComplete: function() {
|
|
||||||
this.hide();
|
|
||||||
this.set_height(-1);
|
|
||||||
hold.release();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
return hold;
|
|
||||||
}
|
|
||||||
|
|
||||||
function cloneAndFadeOutActor(actor) {
|
|
||||||
// Immediately hide actor so its sibling can have its space
|
|
||||||
// and position, but leave a non-reactive clone on-screen,
|
|
||||||
// so from the user's point of view it smoothly fades away
|
|
||||||
// and reveals its sibling.
|
|
||||||
actor.hide();
|
|
||||||
|
|
||||||
let clone = new Clutter.Clone({ source: actor,
|
|
||||||
reactive: false });
|
|
||||||
|
|
||||||
Main.uiGroup.add_child(clone);
|
|
||||||
|
|
||||||
let [x, y] = actor.get_transformed_position();
|
|
||||||
clone.set_position(x, y);
|
|
||||||
|
|
||||||
let hold = new Batch.Hold();
|
|
||||||
Tweener.addTween(clone,
|
|
||||||
{ opacity: 0,
|
|
||||||
time: CLONE_FADE_ANIMATION_TIME,
|
|
||||||
transition: 'easeOutQuad',
|
|
||||||
onComplete: function() {
|
|
||||||
clone.destroy();
|
|
||||||
hold.release();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return hold;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ShellUserVerifier = new Lang.Class({
|
|
||||||
Name: 'ShellUserVerifier',
|
|
||||||
|
|
||||||
_init: function(client, params) {
|
|
||||||
params = Params.parse(params, { reauthenticationOnly: false });
|
|
||||||
this._reauthOnly = params.reauthenticationOnly;
|
|
||||||
|
|
||||||
this._client = client;
|
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
|
|
||||||
this._settings.connect('changed',
|
|
||||||
Lang.bind(this, this._updateDefaultService));
|
|
||||||
this._updateDefaultService();
|
|
||||||
|
|
||||||
this._fprintManager = Fprint.FprintManager();
|
|
||||||
this._smartcardManager = SmartcardManager.getSmartcardManager();
|
|
||||||
|
|
||||||
// We check for smartcards right away, since an inserted smartcard
|
|
||||||
// at startup should result in immediately initiating authentication.
|
|
||||||
// This is different than fingerprint readers, where we only check them
|
|
||||||
// after a user has been picked.
|
|
||||||
this._checkForSmartcard();
|
|
||||||
|
|
||||||
this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted',
|
|
||||||
Lang.bind(this, this._checkForSmartcard));
|
|
||||||
this._smartcardRemovedId = this._smartcardManager.connect('smartcard-removed',
|
|
||||||
Lang.bind(this, this._checkForSmartcard));
|
|
||||||
|
|
||||||
this._messageQueue = [];
|
|
||||||
this._messageQueueTimeoutId = 0;
|
|
||||||
this.hasPendingMessages = false;
|
|
||||||
this.reauthenticating = false;
|
|
||||||
|
|
||||||
this._failCounter = 0;
|
|
||||||
|
|
||||||
this._oVirtCredentialsManager = OVirt.getOVirtCredentialsManager();
|
|
||||||
|
|
||||||
if (this._oVirtCredentialsManager.hasToken())
|
|
||||||
this._oVirtUserAuthenticated(this._oVirtCredentialsManager.getToken());
|
|
||||||
|
|
||||||
this._oVirtUserAuthenticatedId = this._oVirtCredentialsManager.connect('user-authenticated',
|
|
||||||
Lang.bind(this, this._oVirtUserAuthenticated));
|
|
||||||
},
|
|
||||||
|
|
||||||
begin: function(userName, hold) {
|
|
||||||
this._cancellable = new Gio.Cancellable();
|
|
||||||
this._hold = hold;
|
|
||||||
this._userName = userName;
|
|
||||||
this.reauthenticating = false;
|
|
||||||
|
|
||||||
this._checkForFingerprintReader();
|
|
||||||
|
|
||||||
if (userName) {
|
|
||||||
// If possible, reauthenticate an already running session,
|
|
||||||
// so any session specific credentials get updated appropriately
|
|
||||||
this._client.open_reauthentication_channel(userName, this._cancellable,
|
|
||||||
Lang.bind(this, this._reauthenticationChannelOpened));
|
|
||||||
} else {
|
|
||||||
this._client.get_user_verifier(this._cancellable, Lang.bind(this, this._userVerifierGot));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
cancel: function() {
|
|
||||||
if (this._cancellable)
|
|
||||||
this._cancellable.cancel();
|
|
||||||
|
|
||||||
if (this._userVerifier) {
|
|
||||||
this._userVerifier.call_cancel_sync(null);
|
|
||||||
this.clear();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_clearUserVerifier: function() {
|
|
||||||
if (this._userVerifier) {
|
|
||||||
this._userVerifier.run_dispose();
|
|
||||||
this._userVerifier = null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
clear: function() {
|
|
||||||
if (this._cancellable) {
|
|
||||||
this._cancellable.cancel();
|
|
||||||
this._cancellable = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._clearUserVerifier();
|
|
||||||
this._clearMessageQueue();
|
|
||||||
},
|
|
||||||
|
|
||||||
destroy: function() {
|
|
||||||
this.clear();
|
|
||||||
|
|
||||||
this._settings.run_dispose();
|
|
||||||
this._settings = null;
|
|
||||||
|
|
||||||
this._smartcardManager.disconnect(this._smartcardInsertedId);
|
|
||||||
this._smartcardManager.disconnect(this._smartcardRemovedId);
|
|
||||||
this._smartcardManager = null;
|
|
||||||
|
|
||||||
this._oVirtCredentialsManager.disconnect(this._oVirtUserAuthenticatedId);
|
|
||||||
this._oVirtCredentialsManager = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
answerQuery: function(serviceName, answer) {
|
|
||||||
if (!this.hasPendingMessages) {
|
|
||||||
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
|
|
||||||
} else {
|
|
||||||
let signalId = this.connect('no-more-messages',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this.disconnect(signalId);
|
|
||||||
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_getIntervalForMessage: function(message) {
|
|
||||||
// We probably could be smarter here
|
|
||||||
return message.length * USER_READ_TIME;
|
|
||||||
},
|
|
||||||
|
|
||||||
finishMessageQueue: function() {
|
|
||||||
if (!this.hasPendingMessages)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._messageQueue = [];
|
|
||||||
|
|
||||||
this.hasPendingMessages = false;
|
|
||||||
this.emit('no-more-messages');
|
|
||||||
},
|
|
||||||
|
|
||||||
_queueMessageTimeout: function() {
|
|
||||||
if (this._messageQueue.length == 0) {
|
|
||||||
this.finishMessageQueue();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._messageQueueTimeoutId != 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let message = this._messageQueue.shift();
|
|
||||||
|
|
||||||
this.emit('show-message', message.text, message.type);
|
|
||||||
|
|
||||||
this._messageQueueTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
|
|
||||||
message.interval,
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this._messageQueueTimeoutId = 0;
|
|
||||||
this._queueMessageTimeout();
|
|
||||||
return GLib.SOURCE_REMOVE;
|
|
||||||
}));
|
|
||||||
GLib.Source.set_name_by_id(this._messageQueueTimeoutId, '[gnome-shell] this._queueMessageTimeout');
|
|
||||||
},
|
|
||||||
|
|
||||||
_queueMessage: function(message, messageType) {
|
|
||||||
let interval = this._getIntervalForMessage(message);
|
|
||||||
|
|
||||||
this.hasPendingMessages = true;
|
|
||||||
this._messageQueue.push({ text: message, type: messageType, interval: interval });
|
|
||||||
this._queueMessageTimeout();
|
|
||||||
},
|
|
||||||
|
|
||||||
_clearMessageQueue: function() {
|
|
||||||
this.finishMessageQueue();
|
|
||||||
|
|
||||||
if (this._messageQueueTimeoutId != 0) {
|
|
||||||
GLib.source_remove(this._messageQueueTimeoutId);
|
|
||||||
this._messageQueueTimeoutId = 0;
|
|
||||||
}
|
|
||||||
this.emit('show-message', null, MessageType.NONE);
|
|
||||||
},
|
|
||||||
|
|
||||||
_checkForFingerprintReader: function() {
|
|
||||||
this._haveFingerprintReader = false;
|
|
||||||
|
|
||||||
if (!this._settings.get_boolean(FINGERPRINT_AUTHENTICATION_KEY) ||
|
|
||||||
this._fprintManager == null) {
|
|
||||||
this._updateDefaultService();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._fprintManager.GetDefaultDeviceRemote(Gio.DBusCallFlags.NONE, this._cancellable, Lang.bind(this,
|
|
||||||
function(device, error) {
|
|
||||||
if (!error && device) {
|
|
||||||
this._haveFingerprintReader = true;
|
|
||||||
this._updateDefaultService();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_oVirtUserAuthenticated: function(token) {
|
|
||||||
this._preemptingService = OVIRT_SERVICE_NAME;
|
|
||||||
this.emit('ovirt-user-authenticated');
|
|
||||||
},
|
|
||||||
|
|
||||||
_checkForSmartcard: function() {
|
|
||||||
let smartcardDetected;
|
|
||||||
|
|
||||||
if (!this._settings.get_boolean(SMARTCARD_AUTHENTICATION_KEY))
|
|
||||||
smartcardDetected = false;
|
|
||||||
else if (this._reauthOnly)
|
|
||||||
smartcardDetected = this._smartcardManager.hasInsertedLoginToken();
|
|
||||||
else
|
|
||||||
smartcardDetected = this._smartcardManager.hasInsertedTokens();
|
|
||||||
|
|
||||||
if (smartcardDetected != this.smartcardDetected) {
|
|
||||||
this.smartcardDetected = smartcardDetected;
|
|
||||||
|
|
||||||
if (this.smartcardDetected)
|
|
||||||
this._preemptingService = SMARTCARD_SERVICE_NAME;
|
|
||||||
else if (this._preemptingService == SMARTCARD_SERVICE_NAME)
|
|
||||||
this._preemptingService = null;
|
|
||||||
|
|
||||||
this.emit('smartcard-status-changed');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_reportInitError: function(where, error) {
|
|
||||||
logError(error, where);
|
|
||||||
this._hold.release();
|
|
||||||
|
|
||||||
this._queueMessage(_("Authentication error"), MessageType.ERROR);
|
|
||||||
this._verificationFailed(false);
|
|
||||||
},
|
|
||||||
|
|
||||||
_reauthenticationChannelOpened: function(client, result) {
|
|
||||||
try {
|
|
||||||
this._clearUserVerifier();
|
|
||||||
this._userVerifier = client.open_reauthentication_channel_finish(result);
|
|
||||||
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
|
|
||||||
return;
|
|
||||||
} catch(e if e.matches(Gio.DBusError, Gio.DBusError.ACCESS_DENIED) &&
|
|
||||||
!this._reauthOnly) {
|
|
||||||
// Gdm emits org.freedesktop.DBus.Error.AccessDenied when there is
|
|
||||||
// no session to reauthenticate. Fall back to performing verification
|
|
||||||
// from this login session
|
|
||||||
client.get_user_verifier(this._cancellable, Lang.bind(this, this._userVerifierGot));
|
|
||||||
return;
|
|
||||||
} catch(e) {
|
|
||||||
this._reportInitError('Failed to open reauthentication channel', e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.reauthenticating = true;
|
|
||||||
this._connectSignals();
|
|
||||||
this._beginVerification();
|
|
||||||
this._hold.release();
|
|
||||||
},
|
|
||||||
|
|
||||||
_userVerifierGot: function(client, result) {
|
|
||||||
try {
|
|
||||||
this._clearUserVerifier();
|
|
||||||
this._userVerifier = client.get_user_verifier_finish(result);
|
|
||||||
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
|
|
||||||
return;
|
|
||||||
} catch(e) {
|
|
||||||
this._reportInitError('Failed to obtain user verifier', e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._connectSignals();
|
|
||||||
this._beginVerification();
|
|
||||||
this._hold.release();
|
|
||||||
},
|
|
||||||
|
|
||||||
_connectSignals: function() {
|
|
||||||
this._userVerifier.connect('info', Lang.bind(this, this._onInfo));
|
|
||||||
this._userVerifier.connect('problem', Lang.bind(this, this._onProblem));
|
|
||||||
this._userVerifier.connect('info-query', Lang.bind(this, this._onInfoQuery));
|
|
||||||
this._userVerifier.connect('secret-info-query', Lang.bind(this, this._onSecretInfoQuery));
|
|
||||||
this._userVerifier.connect('conversation-stopped', Lang.bind(this, this._onConversationStopped));
|
|
||||||
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
|
|
||||||
this._userVerifier.connect('verification-complete', Lang.bind(this, this._onVerificationComplete));
|
|
||||||
},
|
|
||||||
|
|
||||||
_getForegroundService: function() {
|
|
||||||
if (this._preemptingService)
|
|
||||||
return this._preemptingService;
|
|
||||||
|
|
||||||
return this._defaultService;
|
|
||||||
},
|
|
||||||
|
|
||||||
serviceIsForeground: function(serviceName) {
|
|
||||||
return serviceName == this._getForegroundService();
|
|
||||||
},
|
|
||||||
|
|
||||||
serviceIsDefault: function(serviceName) {
|
|
||||||
return serviceName == this._defaultService;
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateDefaultService: function() {
|
|
||||||
if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY))
|
|
||||||
this._defaultService = PASSWORD_SERVICE_NAME;
|
|
||||||
else if (this._settings.get_boolean(SMARTCARD_AUTHENTICATION_KEY))
|
|
||||||
this._defaultService = SMARTCARD_SERVICE_NAME;
|
|
||||||
else if (this._haveFingerprintReader)
|
|
||||||
this._defaultService = FINGERPRINT_SERVICE_NAME;
|
|
||||||
},
|
|
||||||
|
|
||||||
_startService: function(serviceName) {
|
|
||||||
this._hold.acquire();
|
|
||||||
if (this._userName) {
|
|
||||||
this._userVerifier.call_begin_verification_for_user(serviceName,
|
|
||||||
this._userName,
|
|
||||||
this._cancellable,
|
|
||||||
Lang.bind(this, function(obj, result) {
|
|
||||||
try {
|
|
||||||
obj.call_begin_verification_for_user_finish(result);
|
|
||||||
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
|
|
||||||
return;
|
|
||||||
} catch(e) {
|
|
||||||
this._reportInitError('Failed to start verification for user', e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._hold.release();
|
|
||||||
}));
|
|
||||||
} else {
|
|
||||||
this._userVerifier.call_begin_verification(serviceName,
|
|
||||||
this._cancellable,
|
|
||||||
Lang.bind(this, function(obj, result) {
|
|
||||||
try {
|
|
||||||
obj.call_begin_verification_finish(result);
|
|
||||||
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
|
|
||||||
return;
|
|
||||||
} catch(e) {
|
|
||||||
this._reportInitError('Failed to start verification', e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._hold.release();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_beginVerification: function() {
|
|
||||||
this._startService(this._getForegroundService());
|
|
||||||
|
|
||||||
if (this._userName && this._haveFingerprintReader && !this.serviceIsForeground(FINGERPRINT_SERVICE_NAME))
|
|
||||||
this._startService(FINGERPRINT_SERVICE_NAME);
|
|
||||||
},
|
|
||||||
|
|
||||||
_onInfo: function(client, serviceName, info) {
|
|
||||||
if (this.serviceIsForeground(serviceName)) {
|
|
||||||
this._queueMessage(info, MessageType.INFO);
|
|
||||||
} else if (serviceName == FINGERPRINT_SERVICE_NAME &&
|
|
||||||
this._haveFingerprintReader) {
|
|
||||||
// We don't show fingerprint messages directly since it's
|
|
||||||
// not the main auth service. Instead we use the messages
|
|
||||||
// as a cue to display our own message.
|
|
||||||
|
|
||||||
// Translators: this message is shown below the password entry field
|
|
||||||
// to indicate the user can swipe their finger instead
|
|
||||||
this._queueMessage(_("(or swipe finger)"), MessageType.HINT);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_onProblem: function(client, serviceName, problem) {
|
|
||||||
if (!this.serviceIsForeground(serviceName))
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._queueMessage(problem, MessageType.ERROR);
|
|
||||||
},
|
|
||||||
|
|
||||||
_onInfoQuery: function(client, serviceName, question) {
|
|
||||||
if (!this.serviceIsForeground(serviceName))
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.emit('ask-question', serviceName, question, '');
|
|
||||||
},
|
|
||||||
|
|
||||||
_onSecretInfoQuery: function(client, serviceName, secretQuestion) {
|
|
||||||
if (!this.serviceIsForeground(serviceName))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (serviceName == OVIRT_SERVICE_NAME) {
|
|
||||||
// The only question asked by this service is "Token?"
|
|
||||||
this.answerQuery(serviceName, this._oVirtCredentialsManager.getToken());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.emit('ask-question', serviceName, secretQuestion, '\u25cf');
|
|
||||||
},
|
|
||||||
|
|
||||||
_onReset: function() {
|
|
||||||
// Clear previous attempts to authenticate
|
|
||||||
this._failCounter = 0;
|
|
||||||
this._updateDefaultService();
|
|
||||||
|
|
||||||
this.emit('reset');
|
|
||||||
},
|
|
||||||
|
|
||||||
_onVerificationComplete: function() {
|
|
||||||
this.emit('verification-complete');
|
|
||||||
},
|
|
||||||
|
|
||||||
_cancelAndReset: function() {
|
|
||||||
this.cancel();
|
|
||||||
this._onReset();
|
|
||||||
},
|
|
||||||
|
|
||||||
_retry: function() {
|
|
||||||
this.begin(this._userName, new Batch.Hold());
|
|
||||||
},
|
|
||||||
|
|
||||||
_verificationFailed: function(retry) {
|
|
||||||
// For Not Listed / enterprise logins, immediately reset
|
|
||||||
// the dialog
|
|
||||||
// Otherwise, we allow ALLOWED_FAILURES attempts. After that, we
|
|
||||||
// go back to the welcome screen.
|
|
||||||
|
|
||||||
this._failCounter++;
|
|
||||||
let canRetry = retry && this._userName &&
|
|
||||||
this._failCounter < this._settings.get_int(ALLOWED_FAILURES_KEY);
|
|
||||||
|
|
||||||
if (canRetry) {
|
|
||||||
if (!this.hasPendingMessages) {
|
|
||||||
this._retry();
|
|
||||||
} else {
|
|
||||||
let signalId = this.connect('no-more-messages',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this.disconnect(signalId);
|
|
||||||
this._retry();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!this.hasPendingMessages) {
|
|
||||||
this._cancelAndReset();
|
|
||||||
} else {
|
|
||||||
let signalId = this.connect('no-more-messages',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this.disconnect(signalId);
|
|
||||||
this._cancelAndReset();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.emit('verification-failed');
|
|
||||||
},
|
|
||||||
|
|
||||||
_onConversationStopped: function(client, serviceName) {
|
|
||||||
// If the login failed with the preauthenticated oVirt credentials
|
|
||||||
// then discard the credentials and revert to default authentication
|
|
||||||
// mechanism.
|
|
||||||
if (this.serviceIsForeground(OVIRT_SERVICE_NAME)) {
|
|
||||||
this._oVirtCredentialsManager.resetToken();
|
|
||||||
this._preemptingService = null;
|
|
||||||
this._verificationFailed(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the password service fails, then cancel everything.
|
|
||||||
// But if, e.g., fingerprint fails, still give
|
|
||||||
// password authentication a chance to succeed
|
|
||||||
if (this.serviceIsForeground(serviceName)) {
|
|
||||||
this._verificationFailed(true);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(ShellUserVerifier.prototype);
|
|
@ -1,131 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<gresources>
|
|
||||||
<gresource prefix="/org/gnome/shell">
|
|
||||||
<file>gdm/authPrompt.js</file>
|
|
||||||
<file>gdm/batch.js</file>
|
|
||||||
<file>gdm/fingerprint.js</file>
|
|
||||||
<file>gdm/loginDialog.js</file>
|
|
||||||
<file>gdm/oVirt.js</file>
|
|
||||||
<file>gdm/realmd.js</file>
|
|
||||||
<file>gdm/util.js</file>
|
|
||||||
|
|
||||||
<file>extensionPrefs/main.js</file>
|
|
||||||
|
|
||||||
<file>misc/config.js</file>
|
|
||||||
<file>misc/extensionUtils.js</file>
|
|
||||||
<file>misc/fileUtils.js</file>
|
|
||||||
<file>misc/gnomeSession.js</file>
|
|
||||||
<file>misc/history.js</file>
|
|
||||||
<file>misc/ibusManager.js</file>
|
|
||||||
<file>misc/jsParse.js</file>
|
|
||||||
<file>misc/keyboardManager.js</file>
|
|
||||||
<file>misc/loginManager.js</file>
|
|
||||||
<file>misc/modemManager.js</file>
|
|
||||||
<file>misc/objectManager.js</file>
|
|
||||||
<file>misc/params.js</file>
|
|
||||||
<file>misc/permissionStore.js</file>
|
|
||||||
<file>misc/smartcardManager.js</file>
|
|
||||||
<file>misc/util.js</file>
|
|
||||||
<file>misc/weather.js</file>
|
|
||||||
|
|
||||||
<file>perf/core.js</file>
|
|
||||||
<file>perf/hwtest.js</file>
|
|
||||||
|
|
||||||
<file>portalHelper/main.js</file>
|
|
||||||
|
|
||||||
<file>ui/accessDialog.js</file>
|
|
||||||
<file>ui/altTab.js</file>
|
|
||||||
<file>ui/animation.js</file>
|
|
||||||
<file>ui/appDisplay.js</file>
|
|
||||||
<file>ui/appFavorites.js</file>
|
|
||||||
<file>ui/audioDeviceSelection.js</file>
|
|
||||||
<file>ui/backgroundMenu.js</file>
|
|
||||||
<file>ui/background.js</file>
|
|
||||||
<file>ui/boxpointer.js</file>
|
|
||||||
<file>ui/calendar.js</file>
|
|
||||||
<file>ui/checkBox.js</file>
|
|
||||||
<file>ui/ctrlAltTab.js</file>
|
|
||||||
<file>ui/dash.js</file>
|
|
||||||
<file>ui/dateMenu.js</file>
|
|
||||||
<file>ui/dnd.js</file>
|
|
||||||
<file>ui/edgeDragAction.js</file>
|
|
||||||
<file>ui/endSessionDialog.js</file>
|
|
||||||
<file>ui/environment.js</file>
|
|
||||||
<file>ui/extensionDownloader.js</file>
|
|
||||||
<file>ui/extensionSystem.js</file>
|
|
||||||
<file>ui/focusCaretTracker.js</file>
|
|
||||||
<file>ui/grabHelper.js</file>
|
|
||||||
<file>ui/ibusCandidatePopup.js</file>
|
|
||||||
<file>ui/iconGrid.js</file>
|
|
||||||
<file>ui/keyboard.js</file>
|
|
||||||
<file>ui/layout.js</file>
|
|
||||||
<file>ui/lightbox.js</file>
|
|
||||||
<file>ui/lookingGlass.js</file>
|
|
||||||
<file>ui/legacyTray.js</file>
|
|
||||||
<file>ui/magnifier.js</file>
|
|
||||||
<file>ui/magnifierDBus.js</file>
|
|
||||||
<file>ui/main.js</file>
|
|
||||||
<file>ui/messageTray.js</file>
|
|
||||||
<file>ui/messageList.js</file>
|
|
||||||
<file>ui/modalDialog.js</file>
|
|
||||||
<file>ui/mpris.js</file>
|
|
||||||
<file>ui/notificationDaemon.js</file>
|
|
||||||
<file>ui/osdWindow.js</file>
|
|
||||||
<file>ui/osdMonitorLabeler.js</file>
|
|
||||||
<file>ui/overview.js</file>
|
|
||||||
<file>ui/overviewControls.js</file>
|
|
||||||
<file>ui/padOsd.js</file>
|
|
||||||
<file>ui/panel.js</file>
|
|
||||||
<file>ui/panelMenu.js</file>
|
|
||||||
<file>ui/pointerWatcher.js</file>
|
|
||||||
<file>ui/popupMenu.js</file>
|
|
||||||
<file>ui/remoteMenu.js</file>
|
|
||||||
<file>ui/remoteSearch.js</file>
|
|
||||||
<file>ui/runDialog.js</file>
|
|
||||||
<file>ui/screenShield.js</file>
|
|
||||||
<file>ui/screencast.js</file>
|
|
||||||
<file>ui/screenshot.js</file>
|
|
||||||
<file>ui/scripting.js</file>
|
|
||||||
<file>ui/search.js</file>
|
|
||||||
<file>ui/separator.js</file>
|
|
||||||
<file>ui/sessionMode.js</file>
|
|
||||||
<file>ui/shellDBus.js</file>
|
|
||||||
<file>ui/shellEntry.js</file>
|
|
||||||
<file>ui/shellMountOperation.js</file>
|
|
||||||
<file>ui/slider.js</file>
|
|
||||||
<file>ui/switcherPopup.js</file>
|
|
||||||
<file>ui/tweener.js</file>
|
|
||||||
<file>ui/unlockDialog.js</file>
|
|
||||||
<file>ui/userWidget.js</file>
|
|
||||||
<file>ui/viewSelector.js</file>
|
|
||||||
<file>ui/windowAttentionHandler.js</file>
|
|
||||||
<file>ui/windowMenu.js</file>
|
|
||||||
<file>ui/windowManager.js</file>
|
|
||||||
<file>ui/workspace.js</file>
|
|
||||||
<file>ui/workspaceSwitcherPopup.js</file>
|
|
||||||
<file>ui/workspaceThumbnail.js</file>
|
|
||||||
<file>ui/workspacesView.js</file>
|
|
||||||
<file>ui/xdndHandler.js</file>
|
|
||||||
|
|
||||||
<file>ui/components/__init__.js</file>
|
|
||||||
<file>ui/components/autorunManager.js</file>
|
|
||||||
<file>ui/components/automountManager.js</file>
|
|
||||||
<file>ui/components/networkAgent.js</file>
|
|
||||||
<file>ui/components/polkitAgent.js</file>
|
|
||||||
<file>ui/components/telepathyClient.js</file>
|
|
||||||
<file>ui/components/keyring.js</file>
|
|
||||||
|
|
||||||
<file>ui/status/accessibility.js</file>
|
|
||||||
<file>ui/status/brightness.js</file>
|
|
||||||
<file>ui/status/location.js</file>
|
|
||||||
<file>ui/status/keyboard.js</file>
|
|
||||||
<file>ui/status/nightLight.js</file>
|
|
||||||
<file>ui/status/network.js</file>
|
|
||||||
<file>ui/status/power.js</file>
|
|
||||||
<file>ui/status/rfkill.js</file>
|
|
||||||
<file>ui/status/volume.js</file>
|
|
||||||
<file>ui/status/bluetooth.js</file>
|
|
||||||
<file>ui/status/screencast.js</file>
|
|
||||||
<file>ui/status/system.js</file>
|
|
||||||
</gresource>
|
|
||||||
</gresources>
|
|
@ -4,10 +4,12 @@
|
|||||||
const PACKAGE_NAME = '@PACKAGE_NAME@';
|
const PACKAGE_NAME = '@PACKAGE_NAME@';
|
||||||
/* The version of this package */
|
/* The version of this package */
|
||||||
const PACKAGE_VERSION = '@PACKAGE_VERSION@';
|
const PACKAGE_VERSION = '@PACKAGE_VERSION@';
|
||||||
|
/* The version of GJS we're linking to */
|
||||||
|
const GJS_VERSION = '@GJS_VERSION@';
|
||||||
/* 1 if gnome-bluetooth is available, 0 otherwise */
|
/* 1 if gnome-bluetooth is available, 0 otherwise */
|
||||||
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
||||||
/* 1 if networkmanager is available, 0 otherwise */
|
/* The system TLS CA list */
|
||||||
const HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@;
|
const SHELL_SYSTEM_CA_FILE = '@SHELL_SYSTEM_CA_FILE@';
|
||||||
/* gettext package */
|
/* gettext package */
|
||||||
const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
|
const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
|
||||||
/* locale dir */
|
/* locale dir */
|
||||||
@ -15,5 +17,3 @@ const LOCALEDIR = '@datadir@/locale';
|
|||||||
/* other standard directories */
|
/* other standard directories */
|
||||||
const LIBEXECDIR = '@libexecdir@';
|
const LIBEXECDIR = '@libexecdir@';
|
||||||
const SYSCONFDIR = '@sysconfdir@';
|
const SYSCONFDIR = '@sysconfdir@';
|
||||||
/* g-i package versions */
|
|
||||||
const LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@'
|
|
||||||
|
@ -3,41 +3,31 @@
|
|||||||
// Common utils for the extension system and the extension
|
// Common utils for the extension system and the extension
|
||||||
// preferences tool
|
// preferences tool
|
||||||
|
|
||||||
const Lang = imports.lang;
|
const GLib = imports.gi.GLib;
|
||||||
const Signals = imports.signals;
|
|
||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
|
const ShellJS = imports.gi.ShellJS;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
const FileUtils = imports.misc.fileUtils;
|
|
||||||
|
|
||||||
const ExtensionType = {
|
const ExtensionType = {
|
||||||
SYSTEM: 1,
|
SYSTEM: 1,
|
||||||
PER_USER: 2
|
PER_USER: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// GFile for user extensions
|
||||||
|
var userExtensionsDir = null;
|
||||||
|
|
||||||
// Maps uuid -> metadata object
|
// Maps uuid -> metadata object
|
||||||
const extensions = {};
|
const extensions = {};
|
||||||
|
|
||||||
/**
|
|
||||||
* getCurrentExtension:
|
|
||||||
*
|
|
||||||
* Returns the current extension, or null if not called from an extension.
|
|
||||||
*/
|
|
||||||
function getCurrentExtension() {
|
function getCurrentExtension() {
|
||||||
let stack = (new Error()).stack.split('\n');
|
let stack = (new Error()).stack;
|
||||||
let extensionStackLine;
|
|
||||||
|
|
||||||
// Search for an occurrence of an extension stack frame
|
// Assuming we're importing this directly from an extension (and we shouldn't
|
||||||
// Start at 1 because 0 is the stack frame of this function
|
// ever not be), its UUID should be directly in the path here.
|
||||||
for (let i = 1; i < stack.length; i++) {
|
let extensionStackLine = stack.split('\n')[1];
|
||||||
if (stack[i].indexOf('/gnome-shell/extensions/') > -1) {
|
|
||||||
extensionStackLine = stack[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!extensionStackLine)
|
if (!extensionStackLine)
|
||||||
return null;
|
throw new Error('Could not find current extension');
|
||||||
|
|
||||||
// The stack line is like:
|
// The stack line is like:
|
||||||
// init([object Object])@/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
|
// init([object Object])@/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
|
||||||
@ -47,21 +37,16 @@ function getCurrentExtension() {
|
|||||||
// @/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
|
// @/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
|
||||||
let match = new RegExp('@(.+):\\d+').exec(extensionStackLine);
|
let match = new RegExp('@(.+):\\d+').exec(extensionStackLine);
|
||||||
if (!match)
|
if (!match)
|
||||||
return null;
|
throw new Error('Could not find current extension');
|
||||||
|
|
||||||
let path = match[1];
|
let path = match[1];
|
||||||
let file = Gio.File.new_for_path(path);
|
let uuid = GLib.path_get_basename(GLib.path_get_dirname(path));
|
||||||
|
|
||||||
// Walk up the directory tree, looking for an extension with
|
let extension = extensions[uuid];
|
||||||
// the same UUID as a directory name.
|
if (extension === undefined)
|
||||||
while (file != null) {
|
throw new Error('Could not find current extension');
|
||||||
let extension = extensions[file.get_basename()];
|
|
||||||
if (extension !== undefined)
|
|
||||||
return extension;
|
|
||||||
file = file.get_parent();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return extension;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,6 +83,9 @@ function isOutOfDate(extension) {
|
|||||||
if (!versionCheck(extension.metadata['shell-version'], Config.PACKAGE_VERSION))
|
if (!versionCheck(extension.metadata['shell-version'], Config.PACKAGE_VERSION))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (extension.metadata['js-version'] && !versionCheck(extension.metadata['js-version'], Config.GJS_VERSION))
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,6 +118,11 @@ function createExtensionObject(uuid, dir, type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Encourage people to add this
|
||||||
|
if (!meta.url) {
|
||||||
|
global.log('Warning: Missing "url" property in metadata.json');
|
||||||
|
}
|
||||||
|
|
||||||
if (uuid != meta.uuid) {
|
if (uuid != meta.uuid) {
|
||||||
throw new Error('uuid "' + meta.uuid + '" from metadata.json does not match directory name "' + uuid + '"');
|
throw new Error('uuid "' + meta.uuid + '" from metadata.json does not match directory name "' + uuid + '"');
|
||||||
}
|
}
|
||||||
@ -149,44 +142,53 @@ function createExtensionObject(uuid, dir, type) {
|
|||||||
return extension;
|
return extension;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _extension = null;
|
||||||
|
|
||||||
function installImporter(extension) {
|
function installImporter(extension) {
|
||||||
let oldSearchPath = imports.searchPath.slice(); // make a copy
|
_extension = extension;
|
||||||
imports.searchPath = [extension.dir.get_parent().get_path()];
|
ShellJS.add_extension_importer('imports.misc.extensionUtils._extension', 'imports', extension.path);
|
||||||
// importing a "subdir" creates a new importer object that doesn't affect
|
_extension = null;
|
||||||
// the global one
|
|
||||||
extension.imports = imports[extension.uuid];
|
|
||||||
imports.searchPath = oldSearchPath;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const ExtensionFinder = new Lang.Class({
|
function init() {
|
||||||
Name: 'ExtensionFinder',
|
let userExtensionsPath = GLib.build_filenamev([global.userdatadir, 'extensions']);
|
||||||
|
userExtensionsDir = Gio.file_new_for_path(userExtensionsPath);
|
||||||
|
try {
|
||||||
|
if (!userExtensionsDir.query_exists(null))
|
||||||
|
userExtensionsDir.make_directory_with_parents(null);
|
||||||
|
} catch (e) {
|
||||||
|
global.logError('' + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_loadExtension: function(extensionDir, info, perUserDir) {
|
function scanExtensionsInDirectory(callback, dir, type) {
|
||||||
|
let fileEnum;
|
||||||
|
let file, info;
|
||||||
|
try {
|
||||||
|
fileEnum = dir.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null);
|
||||||
|
} catch(e) {
|
||||||
|
global.logError('' + e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((info = fileEnum.next_file(null)) != null) {
|
||||||
let fileType = info.get_file_type();
|
let fileType = info.get_file_type();
|
||||||
if (fileType != Gio.FileType.DIRECTORY)
|
if (fileType != Gio.FileType.DIRECTORY)
|
||||||
return;
|
continue;
|
||||||
let uuid = info.get_name();
|
let uuid = info.get_name();
|
||||||
let existing = extensions[uuid];
|
let extensionDir = dir.get_child(uuid);
|
||||||
if (existing) {
|
callback(uuid, extensionDir, type);
|
||||||
log('Extension %s already installed in %s. %s will not be loaded'.format(uuid, existing.path, extensionDir.get_path()));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let extension;
|
|
||||||
let type = extensionDir.has_prefix(perUserDir) ? ExtensionType.PER_USER
|
|
||||||
: ExtensionType.SYSTEM;
|
|
||||||
try {
|
|
||||||
extension = createExtensionObject(uuid, extensionDir, type);
|
|
||||||
} catch(e) {
|
|
||||||
logError(e, 'Could not load extension %s'.format(uuid));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.emit('extension-found', extension);
|
|
||||||
},
|
|
||||||
|
|
||||||
scanExtensions: function() {
|
|
||||||
let perUserDir = Gio.File.new_for_path(global.userdatadir);
|
|
||||||
FileUtils.collectFromDatadirs('extensions', true, Lang.bind(this, this._loadExtension, perUserDir));
|
|
||||||
}
|
}
|
||||||
});
|
fileEnum.close(null);
|
||||||
Signals.addSignalMethods(ExtensionFinder.prototype);
|
}
|
||||||
|
|
||||||
|
function scanExtensions(callback) {
|
||||||
|
let systemDataDirs = GLib.get_system_data_dirs();
|
||||||
|
scanExtensionsInDirectory(callback, userExtensionsDir, ExtensionType.PER_USER);
|
||||||
|
for (let i = 0; i < systemDataDirs.length; i++) {
|
||||||
|
let dirPath = GLib.build_filenamev([systemDataDirs[i], 'gnome-shell', 'extensions']);
|
||||||
|
let dir = Gio.file_new_for_path(dirPath);
|
||||||
|
if (dir.query_exists(null))
|
||||||
|
scanExtensionsInDirectory(callback, dir, ExtensionType.SYSTEM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -2,31 +2,25 @@
|
|||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Lang = imports.lang;
|
|
||||||
const Params = imports.misc.params;
|
|
||||||
|
|
||||||
function collectFromDatadirs(subdir, includeUserDir, processFile) {
|
function listDirAsync(file, callback) {
|
||||||
let dataDirs = GLib.get_system_data_dirs();
|
let allFiles = [];
|
||||||
if (includeUserDir)
|
file.enumerate_children_async(Gio.FILE_ATTRIBUTE_STANDARD_NAME,
|
||||||
dataDirs.unshift(GLib.get_user_data_dir());
|
Gio.FileQueryInfoFlags.NONE,
|
||||||
|
GLib.PRIORITY_LOW, null, function (obj, res) {
|
||||||
for (let i = 0; i < dataDirs.length; i++) {
|
let enumerator = obj.enumerate_children_finish(res);
|
||||||
let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', subdir]);
|
function onNextFileComplete(obj, res) {
|
||||||
let dir = Gio.File.new_for_path(path);
|
let files = obj.next_files_finish(res);
|
||||||
|
if (files.length) {
|
||||||
let fileEnum;
|
allFiles = allFiles.concat(files);
|
||||||
try {
|
enumerator.next_files_async(100, GLib.PRIORITY_LOW, null, onNextFileComplete);
|
||||||
fileEnum = dir.enumerate_children('standard::name,standard::type',
|
} else {
|
||||||
Gio.FileQueryInfoFlags.NONE, null);
|
enumerator.close(null);
|
||||||
} catch (e) {
|
callback(allFiles);
|
||||||
fileEnum = null;
|
}
|
||||||
}
|
}
|
||||||
if (fileEnum != null) {
|
enumerator.next_files_async(100, GLib.PRIORITY_LOW, null, onNextFileComplete);
|
||||||
let info;
|
});
|
||||||
while ((info = fileEnum.next_file(null)))
|
|
||||||
processFile(fileEnum.get_child(info), info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteGFile(file) {
|
function deleteGFile(file) {
|
||||||
@ -34,7 +28,7 @@ function deleteGFile(file) {
|
|||||||
return file['delete'](null);
|
return file['delete'](null);
|
||||||
}
|
}
|
||||||
|
|
||||||
function recursivelyDeleteDir(dir, deleteParent) {
|
function recursivelyDeleteDir(dir) {
|
||||||
let children = dir.enumerate_children('standard::name,standard::type',
|
let children = dir.enumerate_children('standard::name,standard::type',
|
||||||
Gio.FileQueryInfoFlags.NONE, null);
|
Gio.FileQueryInfoFlags.NONE, null);
|
||||||
|
|
||||||
@ -45,28 +39,8 @@ function recursivelyDeleteDir(dir, deleteParent) {
|
|||||||
if (type == Gio.FileType.REGULAR)
|
if (type == Gio.FileType.REGULAR)
|
||||||
deleteGFile(child);
|
deleteGFile(child);
|
||||||
else if (type == Gio.FileType.DIRECTORY)
|
else if (type == Gio.FileType.DIRECTORY)
|
||||||
recursivelyDeleteDir(child, true);
|
recursivelyDeleteDir(child);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deleteParent)
|
deleteGFile(dir);
|
||||||
deleteGFile(dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
function recursivelyMoveDir(srcDir, destDir) {
|
|
||||||
let children = srcDir.enumerate_children('standard::name,standard::type',
|
|
||||||
Gio.FileQueryInfoFlags.NONE, null);
|
|
||||||
|
|
||||||
if (!destDir.query_exists(null))
|
|
||||||
destDir.make_directory_with_parents(null);
|
|
||||||
|
|
||||||
let info, child;
|
|
||||||
while ((info = children.next_file(null)) != null) {
|
|
||||||
let type = info.get_file_type();
|
|
||||||
let srcChild = srcDir.get_child(info.get_name());
|
|
||||||
let destChild = destDir.get_child(info.get_name());
|
|
||||||
if (type == Gio.FileType.REGULAR)
|
|
||||||
srcChild.move(destChild, Gio.FileCopyFlags.NONE, null, null);
|
|
||||||
else if (type == Gio.FileType.DIRECTORY)
|
|
||||||
recursivelyMoveDir(srcChild, destChild);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
71
js/misc/format.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const ShellJS = imports.gi.ShellJS;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function is intended to extend the String object and provide
|
||||||
|
* an String.format API for string formatting.
|
||||||
|
* It has to be set up using String.prototype.format = Format.format;
|
||||||
|
* Usage:
|
||||||
|
* "somestring %s %d".format('hello', 5);
|
||||||
|
* It supports %s, %d, %x and %f, for %f it also support precisions like
|
||||||
|
* "%.2f".format(1.526). All specifiers can be prefixed with a minimum
|
||||||
|
* field width, e.g. "%5s".format("foo"). Unless the width is prefixed
|
||||||
|
* with '0', the formatted string will be padded with spaces.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function format() {
|
||||||
|
let str = this;
|
||||||
|
let i = 0;
|
||||||
|
let args = arguments;
|
||||||
|
|
||||||
|
return str.replace(/%(I+)?([0-9]+)?(?:\.([0-9]+))?(.)/g, function (str, flagsGroup, widthGroup, precisionGroup, genericGroup) {
|
||||||
|
|
||||||
|
if (precisionGroup != '' && genericGroup != 'f')
|
||||||
|
throw new Error("Precision can only be specified for 'f'");
|
||||||
|
|
||||||
|
let hasAlternativeIntFlag = (flagsGroup.indexOf('I') != -1);
|
||||||
|
|
||||||
|
if (hasAlternativeIntFlag && genericGroup != 'd')
|
||||||
|
throw new Error("Alternative output digits can only be specfied for 'd'");
|
||||||
|
|
||||||
|
let fillChar = (widthGroup[0] == '0') ? '0' : ' ';
|
||||||
|
let width = parseInt(widthGroup, 10) || 0;
|
||||||
|
|
||||||
|
function fillWidth(s, c, w) {
|
||||||
|
let fill = '';
|
||||||
|
for (let i = 0; i < w; i++)
|
||||||
|
fill += c;
|
||||||
|
return fill.substr(s.length) + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
let s = '';
|
||||||
|
switch (genericGroup) {
|
||||||
|
case '%':
|
||||||
|
return '%';
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
s = args[i++].toString();
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
let intV = parseInt(args[i++]);
|
||||||
|
if (hasAlternativeIntFlag)
|
||||||
|
s = ShellJS.format_int_alternative_output(intV);
|
||||||
|
else
|
||||||
|
s = intV.toString();
|
||||||
|
break;
|
||||||
|
case 'x':
|
||||||
|
s = parseInt(args[i++]).toString(16);
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
if (precisionGroup == '')
|
||||||
|
s = parseFloat(args[i++]).toString();
|
||||||
|
else
|
||||||
|
s = parseFloat(args[i++]).toFixed(parseInt(precisionGroup));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error('Unsupported conversion character %' + genericGroup);
|
||||||
|
}
|
||||||
|
return fillWidth(s, fillChar, width);
|
||||||
|
});
|
||||||
|
}
|
@ -4,17 +4,15 @@ const Gio = imports.gi.Gio;
|
|||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const PresenceIface = '<node> \
|
const PresenceIface = <interface name="org.gnome.SessionManager.Presence">
|
||||||
<interface name="org.gnome.SessionManager.Presence"> \
|
<method name="SetStatus">
|
||||||
<method name="SetStatus"> \
|
<arg type="u" direction="in"/>
|
||||||
<arg type="u" direction="in"/> \
|
</method>
|
||||||
</method> \
|
<property name="status" type="u" access="readwrite"/>
|
||||||
<property name="status" type="u" access="readwrite"/> \
|
<signal name="StatusChanged">
|
||||||
<signal name="StatusChanged"> \
|
<arg type="u" direction="out"/>
|
||||||
<arg type="u" direction="out"/> \
|
</signal>
|
||||||
</signal> \
|
</interface>;
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
const PresenceStatus = {
|
const PresenceStatus = {
|
||||||
AVAILABLE: 0,
|
AVAILABLE: 0,
|
||||||
@ -32,16 +30,14 @@ function Presence(initCallback, cancellable) {
|
|||||||
// Note inhibitors are immutable objects, so they don't
|
// Note inhibitors are immutable objects, so they don't
|
||||||
// change at runtime (changes always come in the form
|
// change at runtime (changes always come in the form
|
||||||
// of new inhibitors)
|
// of new inhibitors)
|
||||||
const InhibitorIface = '<node> \
|
const InhibitorIface = <interface name="org.gnome.SessionManager.Inhibitor">
|
||||||
<interface name="org.gnome.SessionManager.Inhibitor"> \
|
<method name="GetAppId">
|
||||||
<method name="GetAppId"> \
|
<arg type="s" direction="out" />
|
||||||
<arg type="s" direction="out" /> \
|
</method>
|
||||||
</method> \
|
<method name="GetReason">
|
||||||
<method name="GetReason"> \
|
<arg type="s" direction="out" />
|
||||||
<arg type="s" direction="out" /> \
|
</method>
|
||||||
</method> \
|
</interface>;
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
var InhibitorProxy = Gio.DBusProxy.makeProxyWrapper(InhibitorIface);
|
var InhibitorProxy = Gio.DBusProxy.makeProxyWrapper(InhibitorIface);
|
||||||
function Inhibitor(objectPath, initCallback, cancellable) {
|
function Inhibitor(objectPath, initCallback, cancellable) {
|
||||||
@ -49,29 +45,15 @@ function Inhibitor(objectPath, initCallback, cancellable) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Not the full interface, only the methods we use
|
// Not the full interface, only the methods we use
|
||||||
const SessionManagerIface = '<node> \
|
const SessionManagerIface = <interface name="org.gnome.SessionManager">
|
||||||
<interface name="org.gnome.SessionManager"> \
|
<method name="Logout">
|
||||||
<method name="Logout"> \
|
<arg type="u" direction="in" />
|
||||||
<arg type="u" direction="in" /> \
|
</method>
|
||||||
</method> \
|
<method name="Shutdown" />
|
||||||
<method name="Shutdown" /> \
|
<method name="CanShutdown">
|
||||||
<method name="Reboot" /> \
|
<arg type="b" direction="out" />
|
||||||
<method name="CanShutdown"> \
|
</method>
|
||||||
<arg type="b" direction="out" /> \
|
</interface>;
|
||||||
</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>';
|
|
||||||
|
|
||||||
var SessionManagerProxy = Gio.DBusProxy.makeProxyWrapper(SessionManagerIface);
|
var SessionManagerProxy = Gio.DBusProxy.makeProxyWrapper(SessionManagerIface);
|
||||||
function SessionManager(initCallback, cancellable) {
|
function SessionManager(initCallback, cancellable) {
|
||||||
|
@ -41,26 +41,24 @@ const HistoryManager = new Lang.Class({
|
|||||||
this._historyIndex = this._history.length;
|
this._historyIndex = this._history.length;
|
||||||
},
|
},
|
||||||
|
|
||||||
_setPrevItem: function(text) {
|
prevItem: function(text) {
|
||||||
if (this._historyIndex <= 0)
|
if (this._historyIndex <= 0)
|
||||||
return false;
|
return text;
|
||||||
|
|
||||||
if (text)
|
if (text)
|
||||||
this._history[this._historyIndex] = text;
|
this._history[this._historyIndex] = text;
|
||||||
this._historyIndex--;
|
this._historyIndex--;
|
||||||
this._indexChanged();
|
return this._indexChanged();
|
||||||
return true;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_setNextItem: function(text) {
|
nextItem: function(text) {
|
||||||
if (this._historyIndex >= this._history.length)
|
if (this._historyIndex >= this._history.length)
|
||||||
return false;
|
return text;
|
||||||
|
|
||||||
if (text)
|
if (text)
|
||||||
this._history[this._historyIndex] = text;
|
this._history[this._historyIndex] = text;
|
||||||
this._historyIndex++;
|
this._historyIndex++;
|
||||||
this._indexChanged();
|
return this._indexChanged();
|
||||||
return true;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
lastItem: function() {
|
lastItem: function() {
|
||||||
@ -85,11 +83,13 @@ const HistoryManager = new Lang.Class({
|
|||||||
_onEntryKeyPress: function(entry, event) {
|
_onEntryKeyPress: function(entry, event) {
|
||||||
let symbol = event.get_key_symbol();
|
let symbol = event.get_key_symbol();
|
||||||
if (symbol == Clutter.KEY_Up) {
|
if (symbol == Clutter.KEY_Up) {
|
||||||
return this._setPrevItem(entry.get_text());
|
this.prevItem(entry.get_text());
|
||||||
|
return true;
|
||||||
} else if (symbol == Clutter.KEY_Down) {
|
} else if (symbol == Clutter.KEY_Down) {
|
||||||
return this._setNextItem(entry.get_text());
|
this.nextItem(entry.get_text());
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_indexChanged: function() {
|
_indexChanged: function() {
|
||||||
@ -98,6 +98,8 @@ const HistoryManager = new Lang.Class({
|
|||||||
|
|
||||||
if (this._entry)
|
if (this._entry)
|
||||||
this._entry.set_text(current);
|
this._entry.set_text(current);
|
||||||
|
|
||||||
|
return current;
|
||||||
},
|
},
|
||||||
|
|
||||||
_save: function() {
|
_save: function() {
|
||||||
|
@ -1,235 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Mainloop = imports.mainloop;
|
|
||||||
const Signals = imports.signals;
|
|
||||||
|
|
||||||
let IBusCandidatePopup;
|
|
||||||
try {
|
|
||||||
var IBus = imports.gi.IBus;
|
|
||||||
_checkIBusVersion(1, 5, 2);
|
|
||||||
IBusCandidatePopup = imports.ui.ibusCandidatePopup;
|
|
||||||
} catch (e) {
|
|
||||||
var IBus = null;
|
|
||||||
log(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
let _ibusManager = null;
|
|
||||||
|
|
||||||
function _checkIBusVersion(requiredMajor, requiredMinor, requiredMicro) {
|
|
||||||
if ((IBus.MAJOR_VERSION > requiredMajor) ||
|
|
||||||
(IBus.MAJOR_VERSION == requiredMajor && IBus.MINOR_VERSION > requiredMinor) ||
|
|
||||||
(IBus.MAJOR_VERSION == requiredMajor && IBus.MINOR_VERSION == requiredMinor &&
|
|
||||||
IBus.MICRO_VERSION >= requiredMicro))
|
|
||||||
return;
|
|
||||||
|
|
||||||
throw "Found IBus version %d.%d.%d but required is %d.%d.%d".
|
|
||||||
format(IBus.MAJOR_VERSION, IBus.MINOR_VERSION, IBus.MINOR_VERSION,
|
|
||||||
requiredMajor, requiredMinor, requiredMicro);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getIBusManager() {
|
|
||||||
if (_ibusManager == null)
|
|
||||||
_ibusManager = new IBusManager();
|
|
||||||
return _ibusManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
const IBusManager = new Lang.Class({
|
|
||||||
Name: 'IBusManager',
|
|
||||||
|
|
||||||
// This is the longest we'll keep the keyboard frozen until an input
|
|
||||||
// source is active.
|
|
||||||
_MAX_INPUT_SOURCE_ACTIVATION_TIME: 4000, // ms
|
|
||||||
_PRELOAD_ENGINES_DELAY_TIME: 30, // sec
|
|
||||||
|
|
||||||
_init: function() {
|
|
||||||
if (!IBus)
|
|
||||||
return;
|
|
||||||
|
|
||||||
IBus.init();
|
|
||||||
|
|
||||||
this._candidatePopup = new IBusCandidatePopup.CandidatePopup();
|
|
||||||
|
|
||||||
this._panelService = null;
|
|
||||||
this._engines = {};
|
|
||||||
this._ready = false;
|
|
||||||
this._registerPropertiesId = 0;
|
|
||||||
this._currentEngineName = null;
|
|
||||||
this._preloadEnginesId = 0;
|
|
||||||
|
|
||||||
this._ibus = IBus.Bus.new_async();
|
|
||||||
this._ibus.connect('connected', Lang.bind(this, this._onConnected));
|
|
||||||
this._ibus.connect('disconnected', Lang.bind(this, this._clear));
|
|
||||||
// Need to set this to get 'global-engine-changed' emitions
|
|
||||||
this._ibus.set_watch_ibus_signal(true);
|
|
||||||
this._ibus.connect('global-engine-changed', Lang.bind(this, this._engineChanged));
|
|
||||||
|
|
||||||
this._spawn();
|
|
||||||
},
|
|
||||||
|
|
||||||
_spawn: function() {
|
|
||||||
try {
|
|
||||||
Gio.Subprocess.new(['ibus-daemon', '--xim', '--panel', 'disable'],
|
|
||||||
Gio.SubprocessFlags.NONE);
|
|
||||||
} catch(e) {
|
|
||||||
log('Failed to launch ibus-daemon: ' + e.message);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_clear: function() {
|
|
||||||
if (this._panelService)
|
|
||||||
this._panelService.destroy();
|
|
||||||
|
|
||||||
this._panelService = null;
|
|
||||||
this._candidatePopup.setPanelService(null);
|
|
||||||
this._engines = {};
|
|
||||||
this._ready = false;
|
|
||||||
this._registerPropertiesId = 0;
|
|
||||||
this._currentEngineName = null;
|
|
||||||
|
|
||||||
this.emit('ready', false);
|
|
||||||
|
|
||||||
this._spawn();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onConnected: function() {
|
|
||||||
this._ibus.list_engines_async(-1, null, Lang.bind(this, this._initEngines));
|
|
||||||
this._ibus.request_name_async(IBus.SERVICE_PANEL,
|
|
||||||
IBus.BusNameFlag.REPLACE_EXISTING,
|
|
||||||
-1, null,
|
|
||||||
Lang.bind(this, this._initPanelService));
|
|
||||||
},
|
|
||||||
|
|
||||||
_initEngines: function(ibus, result) {
|
|
||||||
let enginesList = this._ibus.list_engines_async_finish(result);
|
|
||||||
if (enginesList) {
|
|
||||||
for (let i = 0; i < enginesList.length; ++i) {
|
|
||||||
let name = enginesList[i].get_name();
|
|
||||||
this._engines[name] = enginesList[i];
|
|
||||||
}
|
|
||||||
this._updateReadiness();
|
|
||||||
} else {
|
|
||||||
this._clear();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_initPanelService: function(ibus, result) {
|
|
||||||
let success = this._ibus.request_name_async_finish(result);
|
|
||||||
if (success) {
|
|
||||||
this._panelService = new IBus.PanelService({ connection: this._ibus.get_connection(),
|
|
||||||
object_path: IBus.PATH_PANEL });
|
|
||||||
this._candidatePopup.setPanelService(this._panelService);
|
|
||||||
this._panelService.connect('update-property', Lang.bind(this, this._updateProperty));
|
|
||||||
try {
|
|
||||||
// IBus versions older than 1.5.10 have a bug which
|
|
||||||
// causes spurious set-content-type emissions when
|
|
||||||
// switching input focus that temporarily lose purpose
|
|
||||||
// and hints defeating its intended semantics and
|
|
||||||
// confusing users. We thus don't use it in that case.
|
|
||||||
_checkIBusVersion(1, 5, 10);
|
|
||||||
this._panelService.connect('set-content-type', Lang.bind(this, this._setContentType));
|
|
||||||
} catch (e) {
|
|
||||||
}
|
|
||||||
// If an engine is already active we need to get its properties
|
|
||||||
this._ibus.get_global_engine_async(-1, null, Lang.bind(this, function(i, result) {
|
|
||||||
let engine;
|
|
||||||
try {
|
|
||||||
engine = this._ibus.get_global_engine_async_finish(result);
|
|
||||||
if (!engine)
|
|
||||||
return;
|
|
||||||
} catch(e) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._engineChanged(this._ibus, engine.get_name());
|
|
||||||
}));
|
|
||||||
this._updateReadiness();
|
|
||||||
} else {
|
|
||||||
this._clear();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateReadiness: function() {
|
|
||||||
this._ready = (Object.keys(this._engines).length > 0 &&
|
|
||||||
this._panelService != null);
|
|
||||||
this.emit('ready', this._ready);
|
|
||||||
},
|
|
||||||
|
|
||||||
_engineChanged: function(bus, engineName) {
|
|
||||||
if (!this._ready)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._currentEngineName = engineName;
|
|
||||||
|
|
||||||
if (this._registerPropertiesId != 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._registerPropertiesId =
|
|
||||||
this._panelService.connect('register-properties', Lang.bind(this, function(p, props) {
|
|
||||||
if (!props.get(0))
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._panelService.disconnect(this._registerPropertiesId);
|
|
||||||
this._registerPropertiesId = 0;
|
|
||||||
|
|
||||||
this.emit('properties-registered', this._currentEngineName, props);
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateProperty: function(panel, prop) {
|
|
||||||
this.emit('property-updated', this._currentEngineName, prop);
|
|
||||||
},
|
|
||||||
|
|
||||||
_setContentType: function(panel, purpose, hints) {
|
|
||||||
this.emit('set-content-type', purpose, hints);
|
|
||||||
},
|
|
||||||
|
|
||||||
activateProperty: function(key, state) {
|
|
||||||
this._panelService.property_activate(key, state);
|
|
||||||
},
|
|
||||||
|
|
||||||
getEngineDesc: function(id) {
|
|
||||||
if (!IBus || !this._ready)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
return this._engines[id];
|
|
||||||
},
|
|
||||||
|
|
||||||
setEngine: function(id, callback) {
|
|
||||||
// Send id even if id == this._currentEngineName
|
|
||||||
// because 'properties-registered' signal can be emitted
|
|
||||||
// while this._ibusSources == null on a lock screen.
|
|
||||||
if (!IBus || !this._ready) {
|
|
||||||
if (callback)
|
|
||||||
callback();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
|
|
||||||
null, callback);
|
|
||||||
},
|
|
||||||
|
|
||||||
preloadEngines: function(ids) {
|
|
||||||
if (!IBus || !this._ibus || ids.length == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (this._preloadEnginesId != 0) {
|
|
||||||
Mainloop.source_remove(this._preloadEnginesId);
|
|
||||||
this._preloadEnginesId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._preloadEnginesId =
|
|
||||||
Mainloop.timeout_add_seconds(this._PRELOAD_ENGINES_DELAY_TIME,
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this._ibus.preload_engines_async(
|
|
||||||
ids,
|
|
||||||
-1,
|
|
||||||
null,
|
|
||||||
null);
|
|
||||||
this._preloadEnginesId = 0;
|
|
||||||
return GLib.SOURCE_REMOVE;
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(IBusManager.prototype);
|
|
@ -1,154 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const GnomeDesktop = imports.gi.GnomeDesktop;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Meta = imports.gi.Meta;
|
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
|
|
||||||
const DEFAULT_LOCALE = 'en_US';
|
|
||||||
const DEFAULT_LAYOUT = 'us';
|
|
||||||
const DEFAULT_VARIANT = '';
|
|
||||||
|
|
||||||
let _xkbInfo = null;
|
|
||||||
|
|
||||||
function getXkbInfo() {
|
|
||||||
if (_xkbInfo == null)
|
|
||||||
_xkbInfo = new GnomeDesktop.XkbInfo();
|
|
||||||
return _xkbInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
let _keyboardManager = null;
|
|
||||||
|
|
||||||
function getKeyboardManager() {
|
|
||||||
if (_keyboardManager == null)
|
|
||||||
_keyboardManager = new KeyboardManager();
|
|
||||||
return _keyboardManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
function releaseKeyboard() {
|
|
||||||
if (Main.modalCount > 0)
|
|
||||||
global.display.unfreeze_keyboard(global.get_current_time());
|
|
||||||
else
|
|
||||||
global.display.ungrab_keyboard(global.get_current_time());
|
|
||||||
}
|
|
||||||
|
|
||||||
function holdKeyboard() {
|
|
||||||
global.display.freeze_keyboard(global.get_current_time());
|
|
||||||
}
|
|
||||||
|
|
||||||
const KeyboardManager = new Lang.Class({
|
|
||||||
Name: 'KeyboardManager',
|
|
||||||
|
|
||||||
// The XKB protocol doesn't allow for more that 4 layouts in a
|
|
||||||
// keymap. Wayland doesn't impose this limit and libxkbcommon can
|
|
||||||
// handle up to 32 layouts but since we need to support X clients
|
|
||||||
// even as a Wayland compositor, we can't bump this.
|
|
||||||
MAX_LAYOUTS_PER_GROUP: 4,
|
|
||||||
|
|
||||||
_init: function() {
|
|
||||||
this._xkbInfo = getXkbInfo();
|
|
||||||
this._current = null;
|
|
||||||
this._localeLayoutInfo = this._getLocaleLayout();
|
|
||||||
this._layoutInfos = {};
|
|
||||||
},
|
|
||||||
|
|
||||||
_applyLayoutGroup: function(group) {
|
|
||||||
let options = this._buildOptionsString();
|
|
||||||
let [layouts, variants] = this._buildGroupStrings(group);
|
|
||||||
Meta.get_backend().set_keymap(layouts, variants, options);
|
|
||||||
},
|
|
||||||
|
|
||||||
_applyLayoutGroupIndex: function(idx) {
|
|
||||||
Meta.get_backend().lock_layout_group(idx);
|
|
||||||
},
|
|
||||||
|
|
||||||
apply: function(id) {
|
|
||||||
let info = this._layoutInfos[id];
|
|
||||||
if (!info)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (this._current && this._current.group == info.group) {
|
|
||||||
if (this._current.groupIndex != info.groupIndex)
|
|
||||||
this._applyLayoutGroupIndex(info.groupIndex);
|
|
||||||
} else {
|
|
||||||
this._applyLayoutGroup(info.group);
|
|
||||||
this._applyLayoutGroupIndex(info.groupIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._current = info;
|
|
||||||
},
|
|
||||||
|
|
||||||
reapply: function() {
|
|
||||||
if (!this._current)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._applyLayoutGroup(this._current.group);
|
|
||||||
this._applyLayoutGroupIndex(this._current.groupIndex);
|
|
||||||
},
|
|
||||||
|
|
||||||
setUserLayouts: function(ids) {
|
|
||||||
this._current = null;
|
|
||||||
this._layoutInfos = {};
|
|
||||||
|
|
||||||
for (let i = 0; i < ids.length; ++i) {
|
|
||||||
let [found, , , _layout, _variant] = this._xkbInfo.get_layout_info(ids[i]);
|
|
||||||
if (found)
|
|
||||||
this._layoutInfos[ids[i]] = { id: ids[i], layout: _layout, variant: _variant };
|
|
||||||
}
|
|
||||||
|
|
||||||
let i = 0;
|
|
||||||
let group = [];
|
|
||||||
for (let id in this._layoutInfos) {
|
|
||||||
// We need to leave one slot on each group free so that we
|
|
||||||
// can add a layout containing the symbols for the
|
|
||||||
// language used in UI strings to ensure that toolkits can
|
|
||||||
// handle mnemonics like Alt+Ф even if the user is
|
|
||||||
// actually typing in a different layout.
|
|
||||||
let groupIndex = i % (this.MAX_LAYOUTS_PER_GROUP - 1);
|
|
||||||
if (groupIndex == 0)
|
|
||||||
group = [];
|
|
||||||
|
|
||||||
let info = this._layoutInfos[id];
|
|
||||||
group[groupIndex] = info;
|
|
||||||
info.group = group;
|
|
||||||
info.groupIndex = groupIndex;
|
|
||||||
|
|
||||||
i += 1;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_getLocaleLayout: function() {
|
|
||||||
let locale = GLib.get_language_names()[0];
|
|
||||||
if (locale.indexOf('_') == -1)
|
|
||||||
locale = DEFAULT_LOCALE;
|
|
||||||
|
|
||||||
let [found, , id] = GnomeDesktop.get_input_source_from_locale(locale);
|
|
||||||
if (!found)
|
|
||||||
[, , id] = GnomeDesktop.get_input_source_from_locale(DEFAULT_LOCALE);
|
|
||||||
|
|
||||||
let _layout, _variant;
|
|
||||||
[found, , , _layout, _variant] = this._xkbInfo.get_layout_info(id);
|
|
||||||
if (found)
|
|
||||||
return { layout: _layout, variant: _variant };
|
|
||||||
else
|
|
||||||
return { layout: DEFAULT_LAYOUT, variant: DEFAULT_VARIANT };
|
|
||||||
},
|
|
||||||
|
|
||||||
_buildGroupStrings: function(_group) {
|
|
||||||
let group = _group.concat(this._localeLayoutInfo);
|
|
||||||
let layouts = group.map(function(g) { return g.layout; }).join(',');
|
|
||||||
let variants = group.map(function(g) { return g.variant; }).join(',');
|
|
||||||
return [layouts, variants];
|
|
||||||
},
|
|
||||||
|
|
||||||
setKeyboardOptions: function(options) {
|
|
||||||
this._xkbOptions = options;
|
|
||||||
},
|
|
||||||
|
|
||||||
_buildOptionsString: function() {
|
|
||||||
let options = this._xkbOptions.join(',');
|
|
||||||
return options;
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,212 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Mainloop = imports.mainloop;
|
|
||||||
const Shell = imports.gi.Shell;
|
|
||||||
const Signals = imports.signals;
|
|
||||||
|
|
||||||
const SystemdLoginManagerIface = '<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> \
|
|
||||||
<signal name="PrepareForSleep"> \
|
|
||||||
<arg type="b" direction="out"/> \
|
|
||||||
</signal> \
|
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
const SystemdLoginSessionIface = '<node> \
|
|
||||||
<interface name="org.freedesktop.login1.Session"> \
|
|
||||||
<signal name="Lock" /> \
|
|
||||||
<signal name="Unlock" /> \
|
|
||||||
<property name="Active" type="b" access="read" /> \
|
|
||||||
<method name="SetLockedHint"> \
|
|
||||||
<arg type="b" direction="in"/> \
|
|
||||||
</method> \
|
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
const SystemdLoginManager = Gio.DBusProxy.makeProxyWrapper(SystemdLoginManagerIface);
|
|
||||||
const SystemdLoginSession = Gio.DBusProxy.makeProxyWrapper(SystemdLoginSessionIface);
|
|
||||||
|
|
||||||
function haveSystemd() {
|
|
||||||
return GLib.access("/run/systemd/seats", 0) >= 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function versionCompare(required, reference) {
|
|
||||||
required = required.split('.');
|
|
||||||
reference = reference.split('.');
|
|
||||||
|
|
||||||
for (let i = 0; i < required.length; i++) {
|
|
||||||
let requiredInt = parseInt(required[i]);
|
|
||||||
let referenceInt = parseInt(reference[i]);
|
|
||||||
if (requiredInt != referenceInt)
|
|
||||||
return requiredInt < referenceInt;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function canLock() {
|
|
||||||
try {
|
|
||||||
let params = GLib.Variant.new('(ss)', ['org.gnome.DisplayManager.Manager', 'Version']);
|
|
||||||
let result = Gio.DBus.system.call_sync('org.gnome.DisplayManager',
|
|
||||||
'/org/gnome/DisplayManager/Manager',
|
|
||||||
'org.freedesktop.DBus.Properties',
|
|
||||||
'Get', params, null,
|
|
||||||
Gio.DBusCallFlags.NONE,
|
|
||||||
-1, null);
|
|
||||||
|
|
||||||
let version = result.deep_unpack()[0].deep_unpack();
|
|
||||||
return haveSystemd() && versionCompare('3.5.91', version);
|
|
||||||
} catch(e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let _loginManager = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* LoginManager:
|
|
||||||
* An abstraction over systemd/logind and ConsoleKit.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function getLoginManager() {
|
|
||||||
if (_loginManager == null) {
|
|
||||||
if (haveSystemd())
|
|
||||||
_loginManager = new LoginManagerSystemd();
|
|
||||||
else
|
|
||||||
_loginManager = new LoginManagerDummy();
|
|
||||||
}
|
|
||||||
|
|
||||||
return _loginManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
const LoginManagerSystemd = new Lang.Class({
|
|
||||||
Name: 'LoginManagerSystemd',
|
|
||||||
|
|
||||||
_init: function() {
|
|
||||||
this._proxy = new SystemdLoginManager(Gio.DBus.system,
|
|
||||||
'org.freedesktop.login1',
|
|
||||||
'/org/freedesktop/login1');
|
|
||||||
this._proxy.connectSignal('PrepareForSleep',
|
|
||||||
Lang.bind(this, this._prepareForSleep));
|
|
||||||
},
|
|
||||||
|
|
||||||
getCurrentSessionProxy: function(callback) {
|
|
||||||
if (this._currentSession) {
|
|
||||||
callback (this._currentSession);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._proxy.GetSessionRemote(GLib.getenv('XDG_SESSION_ID'), Lang.bind(this,
|
|
||||||
function(result, error) {
|
|
||||||
if (error) {
|
|
||||||
logError(error, 'Could not get a proxy for the current session');
|
|
||||||
} else {
|
|
||||||
this._currentSession = new SystemdLoginSession(Gio.DBus.system,
|
|
||||||
'org.freedesktop.login1',
|
|
||||||
result[0]);
|
|
||||||
callback(this._currentSession);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
canSuspend: function(asyncCallback) {
|
|
||||||
this._proxy.CanSuspendRemote(function(result, error) {
|
|
||||||
if (error) {
|
|
||||||
asyncCallback(false, false);
|
|
||||||
} else {
|
|
||||||
let needsAuth = result[0] == 'challenge';
|
|
||||||
let canSuspend = needsAuth || result[0] == 'yes';
|
|
||||||
asyncCallback(canSuspend, needsAuth);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
listSessions: function(asyncCallback) {
|
|
||||||
this._proxy.ListSessionsRemote(function(result, error) {
|
|
||||||
if (error)
|
|
||||||
asyncCallback([]);
|
|
||||||
else
|
|
||||||
asyncCallback(result[0]);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
suspend: function() {
|
|
||||||
this._proxy.SuspendRemote(true);
|
|
||||||
},
|
|
||||||
|
|
||||||
inhibit: function(reason, callback) {
|
|
||||||
let inVariant = GLib.Variant.new('(ssss)',
|
|
||||||
['sleep',
|
|
||||||
'GNOME Shell',
|
|
||||||
reason,
|
|
||||||
'delay']);
|
|
||||||
this._proxy.call_with_unix_fd_list('Inhibit', inVariant, 0, -1, null, null,
|
|
||||||
Lang.bind(this, function(proxy, result) {
|
|
||||||
let fd = -1;
|
|
||||||
try {
|
|
||||||
let [outVariant, fdList] = proxy.call_with_unix_fd_list_finish(result);
|
|
||||||
fd = fdList.steal_fds()[0];
|
|
||||||
callback(new Gio.UnixInputStream({ fd: fd }));
|
|
||||||
} catch(e) {
|
|
||||||
logError(e, "Error getting systemd inhibitor");
|
|
||||||
callback(null);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_prepareForSleep: function(proxy, sender, [aboutToSuspend]) {
|
|
||||||
this.emit('prepare-for-sleep', aboutToSuspend);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(LoginManagerSystemd.prototype);
|
|
||||||
|
|
||||||
const LoginManagerDummy = new Lang.Class({
|
|
||||||
Name: 'LoginManagerDummy',
|
|
||||||
|
|
||||||
getCurrentSessionProxy: function(callback) {
|
|
||||||
// we could return a DummySession object that fakes whatever callers
|
|
||||||
// expect (at the time of writing: connect() and connectSignal()
|
|
||||||
// methods), but just never calling the callback should be safer
|
|
||||||
},
|
|
||||||
|
|
||||||
canSuspend: function(asyncCallback) {
|
|
||||||
asyncCallback(false, false);
|
|
||||||
},
|
|
||||||
|
|
||||||
listSessions: function(asyncCallback) {
|
|
||||||
asyncCallback([]);
|
|
||||||
},
|
|
||||||
|
|
||||||
suspend: function() {
|
|
||||||
this.emit('prepare-for-sleep', true);
|
|
||||||
this.emit('prepare-for-sleep', false);
|
|
||||||
},
|
|
||||||
|
|
||||||
inhibit: function(reason, callback) {
|
|
||||||
callback(null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(LoginManagerDummy.prototype);
|
|
@ -2,134 +2,54 @@
|
|||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const NMGtk = imports.gi.NMGtk;
|
const Shell = imports.gi.Shell;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
// _getMobileProvidersDatabase:
|
|
||||||
//
|
|
||||||
// Gets the database of mobile providers, with references between MCCMNC/SID and
|
|
||||||
// operator name
|
|
||||||
//
|
|
||||||
let _mpd;
|
|
||||||
function _getMobileProvidersDatabase() {
|
|
||||||
if (_mpd == null) {
|
|
||||||
try {
|
|
||||||
_mpd = new NMGtk.MobileProvidersDatabase();
|
|
||||||
_mpd.init(null);
|
|
||||||
} catch (e) {
|
|
||||||
log(e.message);
|
|
||||||
_mpd = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return _mpd;
|
|
||||||
}
|
|
||||||
|
|
||||||
// _findProviderForMccMnc:
|
|
||||||
// @operator_name: operator name
|
|
||||||
// @operator_code: operator code
|
|
||||||
//
|
|
||||||
// Given an operator name string (which may not be a real operator name) and an
|
|
||||||
// operator code string, tries to find a proper operator name to display.
|
|
||||||
//
|
|
||||||
function _findProviderForMccMnc(operator_name, operator_code) {
|
|
||||||
if (operator_name) {
|
|
||||||
if (operator_name.length != 0 &&
|
|
||||||
(operator_name.length > 6 || operator_name.length < 5)) {
|
|
||||||
// this looks like a valid name, i.e. not an MCCMNC (that some
|
|
||||||
// devices return when not yet connected
|
|
||||||
return operator_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isNaN(parseInt(operator_name))) {
|
|
||||||
// name is definitely not a MCCMNC, so it may be a name
|
|
||||||
// after all; return that
|
|
||||||
return operator_name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let needle;
|
|
||||||
if ((!operator_name || operator_name.length == 0) && operator_code)
|
|
||||||
needle = operator_code;
|
|
||||||
else if (operator_name && (operator_name.length == 6 || operator_name.length == 5))
|
|
||||||
needle = operator_name;
|
|
||||||
else // nothing to search
|
|
||||||
return null;
|
|
||||||
|
|
||||||
let mpd = _getMobileProvidersDatabase();
|
|
||||||
if (mpd) {
|
|
||||||
let provider = mpd.lookup_3gpp_mcc_mnc(needle);
|
|
||||||
if (provider)
|
|
||||||
return provider.get_name();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// _findProviderForSid:
|
|
||||||
// @sid: System Identifier of the serving CDMA network
|
|
||||||
//
|
|
||||||
// Tries to find the operator name corresponding to the given SID
|
|
||||||
//
|
|
||||||
function _findProviderForSid(sid) {
|
|
||||||
if (sid == 0)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
let mpd = _getMobileProvidersDatabase();
|
|
||||||
if (mpd) {
|
|
||||||
let provider = mpd.lookup_cdma_sid(sid);
|
|
||||||
if (provider)
|
|
||||||
return provider.get_name();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Support for the old ModemManager interface (MM < 0.7)
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// The following are not the complete interfaces, just the methods we need
|
// The following are not the complete interfaces, just the methods we need
|
||||||
// (or may need in the future)
|
// (or may need in the future)
|
||||||
|
|
||||||
const ModemGsmNetworkInterface = '<node> \
|
const ModemGsmNetworkInterface = <interface name="org.freedesktop.ModemManager.Modem.Gsm.Network">
|
||||||
<interface name="org.freedesktop.ModemManager.Modem.Gsm.Network"> \
|
<method name="GetRegistrationInfo">
|
||||||
<method name="GetRegistrationInfo"> \
|
<arg type="(uss)" direction="out" />
|
||||||
<arg type="(uss)" direction="out" /> \
|
</method>
|
||||||
</method> \
|
<method name="GetSignalQuality">
|
||||||
<method name="GetSignalQuality"> \
|
<arg type="u" direction="out" />
|
||||||
<arg type="u" direction="out" /> \
|
</method>
|
||||||
</method> \
|
<property name="AccessTechnology" type="u" access="read" />
|
||||||
<property name="AccessTechnology" type="u" access="read" /> \
|
<signal name="SignalQuality">
|
||||||
<signal name="SignalQuality"> \
|
<arg type="u" direction="out" />
|
||||||
<arg type="u" direction="out" /> \
|
</signal>
|
||||||
</signal> \
|
<signal name="RegistrationInfo">
|
||||||
<signal name="RegistrationInfo"> \
|
<arg type="u" direction="out" />
|
||||||
<arg type="u" direction="out" /> \
|
<arg type="s" direction="out" />
|
||||||
<arg type="s" direction="out" /> \
|
<arg type="s" direction="out" />
|
||||||
<arg type="s" direction="out" /> \
|
</signal>
|
||||||
</signal> \
|
</interface>;
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
const ModemGsmNetworkProxy = Gio.DBusProxy.makeProxyWrapper(ModemGsmNetworkInterface);
|
const ModemGsmNetworkProxy = Gio.DBusProxy.makeProxyWrapper(ModemGsmNetworkInterface);
|
||||||
|
|
||||||
const ModemCdmaInterface = '<node> \
|
const ModemCdmaInterface = <interface name="org.freedesktop.ModemManager.Modem.Cdma">
|
||||||
<interface name="org.freedesktop.ModemManager.Modem.Cdma"> \
|
<method name="GetSignalQuality">
|
||||||
<method name="GetSignalQuality"> \
|
<arg type="u" direction="out" />
|
||||||
<arg type="u" direction="out" /> \
|
</method>
|
||||||
</method> \
|
<method name="GetServingSystem">
|
||||||
<method name="GetServingSystem"> \
|
<arg type="(usu)" direction="out" />
|
||||||
<arg type="(usu)" direction="out" /> \
|
</method>
|
||||||
</method> \
|
<signal name="SignalQuality">
|
||||||
<signal name="SignalQuality"> \
|
<arg type="u" direction="out" />
|
||||||
<arg type="u" direction="out" /> \
|
</signal>
|
||||||
</signal> \
|
</interface>;
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
const ModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(ModemCdmaInterface);
|
const ModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(ModemCdmaInterface);
|
||||||
|
|
||||||
|
let _providersTable;
|
||||||
|
function _getProvidersTable() {
|
||||||
|
if (_providersTable)
|
||||||
|
return _providersTable;
|
||||||
|
let [providers, countryCodes] = Shell.mobile_providers_parse();
|
||||||
|
return _providersTable = providers;
|
||||||
|
}
|
||||||
|
|
||||||
const ModemGsm = new Lang.Class({
|
const ModemGsm = new Lang.Class({
|
||||||
Name: 'ModemGsm',
|
Name: 'ModemGsm',
|
||||||
|
|
||||||
@ -145,7 +65,7 @@ const ModemGsm = new Lang.Class({
|
|||||||
this.emit('notify::signal-quality');
|
this.emit('notify::signal-quality');
|
||||||
}));
|
}));
|
||||||
this._proxy.connectSignal('RegistrationInfo', Lang.bind(this, function(proxy, sender, [status, code, name]) {
|
this._proxy.connectSignal('RegistrationInfo', Lang.bind(this, function(proxy, sender, [status, code, name]) {
|
||||||
this.operator_name = _findProviderForMccMnc(name, code);
|
this.operator_name = this._findOperatorName(name, code);
|
||||||
this.emit('notify::operator-name');
|
this.emit('notify::operator-name');
|
||||||
}));
|
}));
|
||||||
this._proxy.GetRegistrationInfoRemote(Lang.bind(this, function([result], err) {
|
this._proxy.GetRegistrationInfoRemote(Lang.bind(this, function([result], err) {
|
||||||
@ -155,7 +75,7 @@ const ModemGsm = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
let [status, code, name] = result;
|
let [status, code, name] = result;
|
||||||
this.operator_name = _findProviderForMccMnc(name, code);
|
this.operator_name = this._findOperatorName(name, code);
|
||||||
this.emit('notify::operator-name');
|
this.emit('notify::operator-name');
|
||||||
}));
|
}));
|
||||||
this._proxy.GetSignalQualityRemote(Lang.bind(this, function(result, err) {
|
this._proxy.GetSignalQualityRemote(Lang.bind(this, function(result, err) {
|
||||||
@ -168,6 +88,67 @@ const ModemGsm = new Lang.Class({
|
|||||||
}
|
}
|
||||||
this.emit('notify::signal-quality');
|
this.emit('notify::signal-quality');
|
||||||
}));
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
_findOperatorName: function(name, opCode) {
|
||||||
|
if (name.length != 0 && (name.length > 6 || name.length < 5)) {
|
||||||
|
// this looks like a valid name, i.e. not an MCCMNC (that some
|
||||||
|
// devices return when not yet connected
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
if (isNaN(parseInt(name))) {
|
||||||
|
// name is definitely not a MCCMNC, so it may be a name
|
||||||
|
// after all; return that
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
let needle;
|
||||||
|
if (name.length == 0 && opCode)
|
||||||
|
needle = opCode;
|
||||||
|
else if (name.length == 6 || name.length == 5)
|
||||||
|
needle = name;
|
||||||
|
else // nothing to search
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return this._findProviderForMCCMNC(needle);
|
||||||
|
},
|
||||||
|
|
||||||
|
_findProviderForMCCMNC: function(needle) {
|
||||||
|
let table = _getProvidersTable();
|
||||||
|
let needlemcc = needle.substring(0, 3);
|
||||||
|
let needlemnc = needle.substring(3, needle.length);
|
||||||
|
|
||||||
|
let name2, name3;
|
||||||
|
for (let iter in table) {
|
||||||
|
let providers = table[iter];
|
||||||
|
|
||||||
|
// Search through each country's providers
|
||||||
|
for (let i = 0; i < providers.length; i++) {
|
||||||
|
let provider = providers[i];
|
||||||
|
|
||||||
|
// Search through MCC/MNC list
|
||||||
|
let list = provider.get_gsm_mcc_mnc();
|
||||||
|
for (let j = 0; j < list.length; j++) {
|
||||||
|
let mccmnc = list[j];
|
||||||
|
|
||||||
|
// Match both 2-digit and 3-digit MNC; prefer a
|
||||||
|
// 3-digit match if found, otherwise a 2-digit one.
|
||||||
|
if (mccmnc.mcc != needlemcc)
|
||||||
|
continue; // MCC was wrong
|
||||||
|
|
||||||
|
if (!name3 && needle.length == 6 && needlemnc == mccmnc.mnc)
|
||||||
|
name3 = provider.name;
|
||||||
|
|
||||||
|
if (!name2 && needlemnc.substring(0, 2) == mccmnc.mnc.substring(0, 2))
|
||||||
|
name2 = provider.name;
|
||||||
|
|
||||||
|
if (name2 && name3)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return name3 || name2 || null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(ModemGsm.prototype);
|
Signals.addSignalMethods(ModemGsm.prototype);
|
||||||
@ -207,105 +188,40 @@ const ModemCdma = new Lang.Class({
|
|||||||
// it will return an error if the device is not connected
|
// it will return an error if the device is not connected
|
||||||
this.operator_name = null;
|
this.operator_name = null;
|
||||||
} else {
|
} else {
|
||||||
let [bandClass, band, sid] = result;
|
let [bandClass, band, id] = result;
|
||||||
|
if (name.length > 0)
|
||||||
this.operator_name = _findProviderForSid(sid)
|
this.operator_name = this._findProviderForSid(id);
|
||||||
|
else
|
||||||
|
this.operator_name = null;
|
||||||
}
|
}
|
||||||
this.emit('notify::operator-name');
|
this.emit('notify::operator-name');
|
||||||
}));
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
_findProviderForSid: function(sid) {
|
||||||
|
if (sid == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
let table = _getProvidersTable();
|
||||||
|
|
||||||
|
// Search through each country
|
||||||
|
for (let iter in table) {
|
||||||
|
let providers = table[iter];
|
||||||
|
|
||||||
|
// Search through each country's providers
|
||||||
|
for (let i = 0; i < providers.length; i++) {
|
||||||
|
let provider = providers[i];
|
||||||
|
let cdma_sid = provider.get_cdma_sid();
|
||||||
|
|
||||||
|
// Search through CDMA SID list
|
||||||
|
for (let j = 0; j < cdma_sid.length; j++) {
|
||||||
|
if (cdma_sid[j] == sid)
|
||||||
|
return provider.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(ModemCdma.prototype);
|
Signals.addSignalMethods(ModemCdma.prototype);
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Support for the new ModemManager1 interface (MM >= 0.7)
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
const BroadbandModemInterface = '<node> \
|
|
||||||
<interface name="org.freedesktop.ModemManager1.Modem"> \
|
|
||||||
<property name="SignalQuality" type="(ub)" access="read" /> \
|
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
const BroadbandModemProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModemInterface);
|
|
||||||
|
|
||||||
const BroadbandModem3gppInterface = '<node> \
|
|
||||||
<interface name="org.freedesktop.ModemManager1.Modem.Modem3gpp"> \
|
|
||||||
<property name="OperatorCode" type="s" access="read" /> \
|
|
||||||
<property name="OperatorName" type="s" access="read" /> \
|
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
const BroadbandModem3gppProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModem3gppInterface);
|
|
||||||
|
|
||||||
const BroadbandModemCdmaInterface = '<node> \
|
|
||||||
<interface name="org.freedesktop.ModemManager1.Modem.ModemCdma"> \
|
|
||||||
<property name="Sid" type="u" access="read" /> \
|
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
const BroadbandModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModemCdmaInterface);
|
|
||||||
|
|
||||||
const BroadbandModem = new Lang.Class({
|
|
||||||
Name: 'BroadbandModem',
|
|
||||||
|
|
||||||
_init: function(path, capabilities) {
|
|
||||||
this._proxy = new BroadbandModemProxy(Gio.DBus.system, 'org.freedesktop.ModemManager1', path);
|
|
||||||
this._proxy_3gpp = new BroadbandModem3gppProxy(Gio.DBus.system, 'org.freedesktop.ModemManager1', path);
|
|
||||||
this._proxy_cdma = new BroadbandModemCdmaProxy(Gio.DBus.system, 'org.freedesktop.ModemManager1', path);
|
|
||||||
this._capabilities = capabilities;
|
|
||||||
|
|
||||||
this._proxy.connect('g-properties-changed', Lang.bind(this, function(proxy, properties) {
|
|
||||||
if ('SignalQuality' in properties.deep_unpack())
|
|
||||||
this._reloadSignalQuality();
|
|
||||||
}));
|
|
||||||
this._reloadSignalQuality();
|
|
||||||
|
|
||||||
this._proxy_3gpp.connect('g-properties-changed', Lang.bind(this, function(proxy, properties) {
|
|
||||||
let unpacked = properties.deep_unpack();
|
|
||||||
if ('OperatorName' in unpacked || 'OperatorCode' in unpacked)
|
|
||||||
this._reload3gppOperatorName();
|
|
||||||
}));
|
|
||||||
this._reload3gppOperatorName();
|
|
||||||
|
|
||||||
this._proxy_cdma.connect('g-properties-changed', Lang.bind(this, function(proxy, properties) {
|
|
||||||
let unpacked = properties.deep_unpack();
|
|
||||||
if ('Nid' in unpacked || 'Sid' in unpacked)
|
|
||||||
this._reloadCdmaOperatorName();
|
|
||||||
}));
|
|
||||||
this._reloadCdmaOperatorName();
|
|
||||||
},
|
|
||||||
|
|
||||||
_reloadSignalQuality: function() {
|
|
||||||
let [quality, recent] = this._proxy.SignalQuality;
|
|
||||||
this.signal_quality = quality;
|
|
||||||
this.emit('notify::signal-quality');
|
|
||||||
},
|
|
||||||
|
|
||||||
_reloadOperatorName: function() {
|
|
||||||
let new_name = "";
|
|
||||||
if (this.operator_name_3gpp && this.operator_name_3gpp.length > 0)
|
|
||||||
new_name += this.operator_name_3gpp;
|
|
||||||
|
|
||||||
if (this.operator_name_cdma && this.operator_name_cdma.length > 0) {
|
|
||||||
if (new_name != "")
|
|
||||||
new_name += ", ";
|
|
||||||
new_name += this.operator_name_cdma;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.operator_name = new_name;
|
|
||||||
this.emit('notify::operator-name');
|
|
||||||
},
|
|
||||||
|
|
||||||
_reload3gppOperatorName: function() {
|
|
||||||
let name = this._proxy_3gpp.OperatorName;
|
|
||||||
let code = this._proxy_3gpp.OperatorCode;
|
|
||||||
this.operator_name_3gpp = _findProviderForMccMnc(name, code);
|
|
||||||
this._reloadOperatorName();
|
|
||||||
},
|
|
||||||
|
|
||||||
_reloadCdmaOperatorName: function() {
|
|
||||||
let sid = this._proxy_cdma.Sid;
|
|
||||||
this.operator_name_cdma = _findProviderForSid(sid);
|
|
||||||
this._reloadOperatorName();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(BroadbandModem.prototype);
|
|
||||||
|
@ -1,294 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Params = imports.misc.params;
|
|
||||||
const Signals = imports.signals;
|
|
||||||
|
|
||||||
// Specified in the D-Bus specification here:
|
|
||||||
// http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager
|
|
||||||
const ObjectManagerIface = '<node> \
|
|
||||||
<interface name="org.freedesktop.DBus.ObjectManager"> \
|
|
||||||
<method name="GetManagedObjects"> \
|
|
||||||
<arg name="objects" type="a{oa{sa{sv}}}" direction="out"/> \
|
|
||||||
</method> \
|
|
||||||
<signal name="InterfacesAdded"> \
|
|
||||||
<arg name="objectPath" type="o"/> \
|
|
||||||
<arg name="interfaces" type="a{sa{sv}}" /> \
|
|
||||||
</signal> \
|
|
||||||
<signal name="InterfacesRemoved"> \
|
|
||||||
<arg name="objectPath" type="o"/> \
|
|
||||||
<arg name="interfaces" type="as" /> \
|
|
||||||
</signal> \
|
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface);
|
|
||||||
|
|
||||||
const ObjectManager = new Lang.Class({
|
|
||||||
Name: 'ObjectManager',
|
|
||||||
_init: function(params) {
|
|
||||||
params = Params.parse(params, { connection: null,
|
|
||||||
name: null,
|
|
||||||
objectPath: null,
|
|
||||||
knownInterfaces: null,
|
|
||||||
cancellable: null,
|
|
||||||
onLoaded: null });
|
|
||||||
|
|
||||||
this._connection = params.connection;
|
|
||||||
this._serviceName = params.name;
|
|
||||||
this._managerPath = params.objectPath;
|
|
||||||
this._cancellable = params.cancellable;
|
|
||||||
|
|
||||||
this._managerProxy = new Gio.DBusProxy({ g_connection: this._connection,
|
|
||||||
g_interface_name: ObjectManagerInfo.name,
|
|
||||||
g_interface_info: ObjectManagerInfo,
|
|
||||||
g_name: this._serviceName,
|
|
||||||
g_object_path: this._managerPath,
|
|
||||||
g_flags: Gio.DBusProxyFlags.DO_NOT_AUTO_START });
|
|
||||||
|
|
||||||
this._interfaceInfos = {};
|
|
||||||
this._objects = {};
|
|
||||||
this._interfaces = {};
|
|
||||||
this._onLoaded = params.onLoaded;
|
|
||||||
|
|
||||||
if (params.knownInterfaces)
|
|
||||||
this._registerInterfaces(params.knownInterfaces);
|
|
||||||
|
|
||||||
// Start out inhibiting load until at least the proxy
|
|
||||||
// manager is loaded and the remote objects are fetched
|
|
||||||
this._numLoadInhibitors = 1;
|
|
||||||
this._managerProxy.init_async(GLib.PRIORITY_DEFAULT,
|
|
||||||
this._cancellable,
|
|
||||||
Lang.bind(this, this._onManagerProxyLoaded));
|
|
||||||
},
|
|
||||||
|
|
||||||
_tryToCompleteLoad: function() {
|
|
||||||
if (this._numLoadInhibitors == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._numLoadInhibitors--;
|
|
||||||
if (this._numLoadInhibitors == 0) {
|
|
||||||
if (this._onLoaded)
|
|
||||||
this._onLoaded();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_addInterface: function(objectPath, interfaceName, onFinished) {
|
|
||||||
let info = this._interfaceInfos[interfaceName];
|
|
||||||
|
|
||||||
if (!info) {
|
|
||||||
if (onFinished)
|
|
||||||
onFinished();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let proxy = new Gio.DBusProxy({ g_connection: this._connection,
|
|
||||||
g_name: this._serviceName,
|
|
||||||
g_object_path: objectPath,
|
|
||||||
g_interface_name: interfaceName,
|
|
||||||
g_interface_info: info,
|
|
||||||
g_flags: Gio.DBusProxyFlags.DO_NOT_AUTO_START });
|
|
||||||
|
|
||||||
proxy.init_async(GLib.PRIORITY_DEFAULT,
|
|
||||||
this._cancellable,
|
|
||||||
Lang.bind(this, function(initable, result) {
|
|
||||||
let error = null;
|
|
||||||
try {
|
|
||||||
initable.init_finish(result);
|
|
||||||
} catch(e) {
|
|
||||||
logError(e, 'could not initialize proxy for interface ' + interfaceName);
|
|
||||||
|
|
||||||
if (onFinished)
|
|
||||||
onFinished();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let isNewObject;
|
|
||||||
if (!this._objects[objectPath]) {
|
|
||||||
this._objects[objectPath] = {};
|
|
||||||
isNewObject = true;
|
|
||||||
} else {
|
|
||||||
isNewObject = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._objects[objectPath][interfaceName] = proxy;
|
|
||||||
|
|
||||||
if (!this._interfaces[interfaceName])
|
|
||||||
this._interfaces[interfaceName] = [];
|
|
||||||
|
|
||||||
this._interfaces[interfaceName].push(proxy);
|
|
||||||
|
|
||||||
if (isNewObject)
|
|
||||||
this.emit('object-added', objectPath);
|
|
||||||
|
|
||||||
this.emit('interface-added', interfaceName, proxy);
|
|
||||||
|
|
||||||
if (onFinished)
|
|
||||||
onFinished();
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_removeInterface: function(objectPath, interfaceName) {
|
|
||||||
if (!this._objects[objectPath])
|
|
||||||
return;
|
|
||||||
|
|
||||||
let proxy = this._objects[objectPath][interfaceName];
|
|
||||||
|
|
||||||
if (this._interfaces[interfaceName]) {
|
|
||||||
let index = this._interfaces[interfaceName].indexOf(proxy);
|
|
||||||
|
|
||||||
if (index >= 0)
|
|
||||||
this._interfaces[interfaceName].splice(index, 1);
|
|
||||||
|
|
||||||
if (this._interfaces[interfaceName].length == 0)
|
|
||||||
delete this._interfaces[interfaceName];
|
|
||||||
}
|
|
||||||
|
|
||||||
this.emit('interface-removed', interfaceName, proxy);
|
|
||||||
|
|
||||||
this._objects[objectPath][interfaceName] = null;
|
|
||||||
|
|
||||||
if (Object.keys(this._objects[objectPath]).length == 0) {
|
|
||||||
delete this._objects[objectPath];
|
|
||||||
this.emit('object-removed', objectPath);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_onManagerProxyLoaded: function(initable, result) {
|
|
||||||
let error = null;
|
|
||||||
try {
|
|
||||||
initable.init_finish(result);
|
|
||||||
} catch(e) {
|
|
||||||
logError(e, 'could not initialize object manager for object ' + params.name);
|
|
||||||
|
|
||||||
this._tryToCompleteLoad();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._managerProxy.connectSignal('InterfacesAdded',
|
|
||||||
Lang.bind(this, function(objectManager, sender, [objectPath, interfaces]) {
|
|
||||||
let interfaceNames = Object.keys(interfaces);
|
|
||||||
for (let i = 0; i < interfaceNames.length; i++)
|
|
||||||
this._addInterface(objectPath, interfaceNames[i]);
|
|
||||||
}));
|
|
||||||
this._managerProxy.connectSignal('InterfacesRemoved',
|
|
||||||
Lang.bind(this, function(objectManager, sender, [objectPath, interfaceNames]) {
|
|
||||||
for (let i = 0; i < interfaceNames.length; i++)
|
|
||||||
this._removeInterface(objectPath, interfaceNames[i]);
|
|
||||||
}));
|
|
||||||
|
|
||||||
if (Object.keys(this._interfaceInfos).length == 0) {
|
|
||||||
this._tryToCompleteLoad();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._managerProxy.connect('notify::g-name-owner', Lang.bind(this, function() {
|
|
||||||
if (this._managerProxy.g_name_owner)
|
|
||||||
this._onNameAppeared();
|
|
||||||
else
|
|
||||||
this._onNameVanished();
|
|
||||||
}));
|
|
||||||
|
|
||||||
if (this._managerProxy.g_name_owner)
|
|
||||||
this._onNameAppeared();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onNameAppeared: function() {
|
|
||||||
this._managerProxy.GetManagedObjectsRemote(Lang.bind(this, function(result, error) {
|
|
||||||
if (!result) {
|
|
||||||
if (error) {
|
|
||||||
logError(error, 'could not get remote objects for service ' + this._serviceName + ' path ' + this._managerPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._tryToCompleteLoad();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let [objects] = result;
|
|
||||||
|
|
||||||
if (!objects) {
|
|
||||||
this._tryToCompleteLoad();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let objectPaths = Object.keys(objects);
|
|
||||||
for (let i = 0; i < objectPaths.length; i++) {
|
|
||||||
let objectPath = objectPaths[i];
|
|
||||||
let object = objects[objectPath];
|
|
||||||
|
|
||||||
let interfaceNames = Object.getOwnPropertyNames(object);
|
|
||||||
for (let j = 0; j < interfaceNames.length; j++) {
|
|
||||||
let interfaceName = interfaceNames[j];
|
|
||||||
|
|
||||||
// Prevent load from completing until the interface is loaded
|
|
||||||
this._numLoadInhibitors++;
|
|
||||||
this._addInterface(objectPath,
|
|
||||||
interfaceName,
|
|
||||||
Lang.bind(this, this._tryToCompleteLoad));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._tryToCompleteLoad();
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_onNameVanished: function() {
|
|
||||||
let objectPaths = Object.keys(this._objects);
|
|
||||||
for (let i = 0; i < objectPaths.length; i++) {
|
|
||||||
let object = this._objects[objectPaths];
|
|
||||||
|
|
||||||
let interfaceNames = Object.keys(object);
|
|
||||||
for (let j = 0; i < interfaceNames.length; i++) {
|
|
||||||
let interfaceName = interfaceNames[i];
|
|
||||||
|
|
||||||
if (object[interfaceName])
|
|
||||||
this._removeInterface(objectPath, interfaceName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_registerInterfaces: function(interfaces) {
|
|
||||||
for (let i = 0; i < interfaces.length; i++) {
|
|
||||||
let info = Gio.DBusInterfaceInfo.new_for_xml(interfaces[i]);
|
|
||||||
this._interfaceInfos[info.name] = info;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
getProxy: function(objectPath, interfaceName) {
|
|
||||||
let object = this._objects[objectPath];
|
|
||||||
|
|
||||||
if (!object)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
return object[interfaceName];
|
|
||||||
},
|
|
||||||
|
|
||||||
getProxiesForInterface: function(interfaceName) {
|
|
||||||
let proxyList = this._interfaces[interfaceName];
|
|
||||||
|
|
||||||
if (!proxyList)
|
|
||||||
return [];
|
|
||||||
|
|
||||||
return proxyList;
|
|
||||||
},
|
|
||||||
|
|
||||||
getAllProxies: function() {
|
|
||||||
let proxies = [];
|
|
||||||
|
|
||||||
let objectPaths = Object.keys(this._objects);
|
|
||||||
for (let i = 0; i < objectPaths.length; i++) {
|
|
||||||
let object = this._objects[objectPaths];
|
|
||||||
|
|
||||||
let interfaceNames = Object.keys(object);
|
|
||||||
for (let j = 0; i < interfaceNames.length; i++) {
|
|
||||||
let interfaceName = interfaceNames[i];
|
|
||||||
if (object[interfaceName])
|
|
||||||
proxies.push(object(interfaceName));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return proxies;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(ObjectManager.prototype);
|
|