Compare commits

...

78 Commits

Author SHA1 Message Date
80d754916d panelMenu: Don't fade appMenuButton icon and put it on the side
Design request, don't fade the icon of the appMenuButton and put it on
the side instead of overlaping with the text.
2014-11-11 16:30:11 +01:00
26fd0b7e7c theme: kill osd_bg_color
- not enough to keep it distinct from bg_color
2014-11-11 11:22:42 +01:00
d476da8a69 theme: menu separators, message tray icons
- menu separators not vertcally centered unfortunately
- MT items not horizontally centered unfortunately
2014-11-11 11:22:42 +01:00
b2970f576c theme: Remove looking glass border-image
Now that we no longer use images for the selected highligth
2014-11-11 11:22:42 +01:00
77e3e61840 theme: some code style fixes 2014-11-11 11:14:43 +01:00
aceb9fe825 theme: Use box shadow for active panel menu border 2014-11-11 11:14:42 +01:00
1842466069 theme: Match list row hover transition type of gtk
Currently we animate in both sides, hover on and hover off, and with
200ms. The downside of that it that it feels sluggish when passing with
the mouse hovering few items because the on transition is slow.

Match what gtk did for fix this for list rows hover state at
commit 52e91f1f74ecb943d, animating only on off hover. However,
gnome-shell doesn't support different kind of transitions for its css,
that will be lovely to have a easeOutQuad as well here.
2014-11-11 11:14:41 +01:00
a92cf654d1 Why do we need this to have focus on folders? 2014-11-11 11:14:40 +01:00
ff700d3a28 theme: use regular borders for top bar buttons
- no need to abuse image assets.
- big thanks to carlos for making it possible.
2014-11-11 11:14:39 +01:00
3b86d23e09 panelMenu: Use a normal St.Bin to allow styling
Currently we don't add some style to ButtonBox like padding etc, we add
it programatically taking into account minimum padding and natural
padding. The thing is that with natural padding it works as expected
even for low resolutions.

As a design request, we need to style from css, and since the current
ButtonBox class doesn't add any worth functionality, change that and use
a simple St.Bin that allow normal styling.
2014-11-11 11:14:39 +01:00
74a8fbfdaf theme: make notification counters round. 2014-11-11 11:14:38 +01:00
8891261dea appDisplay: Show a dot when application is running
Show a dot in running applications.
Design request.
2014-11-11 11:14:37 +01:00
c5daf63976 theme: notifications & message tray 2014-11-11 11:14:36 +01:00
e4f1db8f09 theme: looking glass 2014-11-11 11:14:35 +01:00
1242beae1e theme: window captions in the overview
+ a few typos
2014-11-11 11:14:34 +01:00
ca5a8bf57e theme: better running, hover and active states for icons
- the active state behaves oddly though, not respecting
  the fill color, just changing alpha it seems...
2014-11-11 11:14:33 +01:00
25ccc6ebd4 theme: overview-icon fixes 2014-11-11 11:14:33 +01:00
f68421dca1 theme: entry selections, parsed css 2014-11-11 11:14:32 +01:00
4222e62b5a theme: workspace pager in overview 2014-11-11 11:14:31 +01:00
075f53b5fa theme: overview styling
- still some quirks
- boy is this unstructured mess a pain to clean up :(
2014-11-11 11:14:30 +01:00
161b86dc63 theme: remove unused assets 2014-11-11 11:14:29 +01:00
3566933c04 theme: top bar active is underlined.
- glow feels foreign, will be phased out
2014-11-11 11:14:28 +01:00
a1793d727f theme: forgot old overrides of the panel styling 2014-11-11 11:14:28 +01:00
ec0fc8bb8a theme: switches 2014-11-11 11:14:27 +01:00
35a3aff8a4 theme: volume/mic slider 2014-11-11 11:14:26 +01:00
5f0b0094fb theme: top bar appmenu etc. 2014-11-11 11:14:25 +01:00
32dd326d19 theme: checkboxes 2014-11-11 11:14:24 +01:00
f3a5571f46 theme: overview search bar styling 2014-11-11 11:14:23 +01:00
a0fe9909b3 theme: top bar styling. 2014-11-11 11:14:22 +01:00
b9cf164e0b theme: modal dialogs and tweaked entries 2014-11-11 11:14:21 +01:00
5803ce5151 theme: fine tune scrollbars 2014-11-11 11:14:20 +01:00
4d8239a9a1 theme: update some svg assets to adwaita 3.14 counterparts
- switches
- checkboxes
2014-11-11 11:14:18 +01:00
082d403829 theme: use Adwaita dark style for popup menus
- cannot sue box-shadow sadly.
2014-11-11 11:14:17 +01:00
2dbc7b5c51 theme: rewrite to be structured
- using SASS
- trying to reuse as much of the gtk adwaita as possible
2014-11-11 11:14:15 +01:00
8ab1bbb2ad theme: Fix sintax error in the theme 2014-11-11 11:08:09 +01:00
1291bcd0c8 dateMenu: Fix commit 52503c4c
dateMenu uses now N_() but the function is not defined.

To solve it, define N_().
2014-11-10 16:45:10 +01:00
73362beb0b screenShield: Don't lock after crash if locking is disabled
When the user has disabled locking we shouldn't lock the screen.

https://bugzilla.gnome.org/show_bug.cgi?id=704884
2014-11-09 18:32:05 +01:00
52503c4c38 js: Fix util_translate_time_string() usage
util_translate_time_string() was called to use LC_TIME to translate
strings, but those strings were not marked as to be translated.

https://bugzilla.gnome.org/show_bug.cgi?id=739822
2014-11-08 21:55:16 +01:00
219b0bf987 Update Aragonese translation 2014-11-08 19:15:27 +01:00
cbfd6a8128 keyboard: Delay caribou daemon invocation until really needed
Calling g_dbus_proxy_new without any flag means that the caribou
daemon will be launched through D-Bus activation, when creating
a proxy.  It smoked out some corner cases in caribou and at-spi2-core,
but generally it would be good to avoid creating unused process.

This patch delays the invocation until the "Run" method is called.

https://bugzilla.gnome.org/show_bug.cgi?id=739712
2014-11-08 06:49:17 +09:00
21d11b3638 calendar: Allow translators to change non-work days
https://bugzilla.gnome.org/show_bug.cgi?id=664645
2014-11-07 18:21:10 +01:00
455595f2b2 Revert "Calendar: Remove leading zeros for 24h time format"
Leading zeros are common in the 24h format, and indeed used in the
wallclock in the top bar. Convention and consistency within the
same clock format trumps inconsistency between different time formats,
so reverting commit 316f825b2a.

https://bugzilla.gnome.org/show_bug.cgi?id=658675
2014-11-07 15:16:07 +00:00
316f825b2a Calendar: Remove leading zeros for 24h time format
https://bugzilla.gnome.org/show_bug.cgi?id=658675
2014-11-07 14:58:22 +01:00
35fcd16992 dateMenu: Allow extensions to add custom calendar sources
Splits instantiation of the event source into a separate method,
allowing extensions to subclass the DateMenuButton and provide its
own calendar source.

https://bugzilla.gnome.org/show_bug.cgi?id=672500
2014-11-07 14:49:38 +01:00
084f7a36b1 rfkill: hide Airplane Mode indicator when g-s-d says so
https://bugzilla.gnome.org/show_bug.cgi?id=736292
2014-11-07 10:29:13 +01:00
1fe3ab8f68 rfkill: remove unused code
https://bugzilla.gnome.org/show_bug.cgi?id=736292
2014-11-07 10:29:13 +01:00
be3c3c64c1 Port gnome-shell to Python 3
https://bugzilla.gnome.org/show_bug.cgi?id=732478
2014-11-07 10:18:58 +01:00
568454abb8 screenShield: Recognise all Enter keys as Return
Bug #704339.
2014-11-07 10:14:17 +01:00
5014434b9a st-button: Recognise all Enter keys as Return
Bug #704339.
2014-11-07 10:14:11 +01:00
b05ab0eaeb build: Workaround quoting issues in configure script
Default value of BROWSER_PLUGIN_DIR variable contains special symbols.
Thus quoting and inlining it in parameter expansion is not portable.
In particular it does not work in dash. Replace ${a:-b} parameter
expansion with conditional statement.

https://bugzilla.gnome.org/show_bug.cgi?id=739241
2014-11-07 10:10:41 +01:00
e402ed1fe4 portalHelper: Change user facing name to "Network Login"
"Captive Portal" is a bit confusing for people who are not familiar
with the technical term.

https://bugzilla.gnome.org/show_bug.cgi?id=737198
2014-11-07 10:09:12 +01:00
4801d1dd7f css: Add an inset shadow to overview windows
A small dark gap was caused by the rounded window edges not meeting the
sharp corner of the CSS border on hover. By adding a small inset
box-shadow, this gap is filled in.

https://bugzilla.gnome.org/show_bug.cgi?id=699044
2014-11-07 10:08:29 +01:00
24c0a1a1d4 Move style updates in AppIcon._onStateChanged out
There is currently no simple way to inject into AppIcon's state change,
so an extension that wants to do this has to destroy/remove/update all
icons in the Shell (i.e. in the Dash, AllView, FrequentView) on enable()
and disable() after updating AppIcon.prototype._onStateChange, or the
extension must require a restart of the Shell.

To solve this issue, we rename _onStateChanged to _updateRunningStyle,
and connect the notify::state signal with an anonymous function that
calls _updateRunningStyle.
This extra function call should allow extensions to just extend the
updateRunningStyle function in the prototype.

https://bugzilla.gnome.org/show_bug.cgi?id=739497
2014-11-06 21:22:33 +01:00
4a1f939e2b Update Aragonese translation 2014-11-06 21:06:03 +01:00
111a9e13f2 dateMenu: Fix typo in _isToday()
getDay() is the day of week, what we want there is getDate().

https://bugzilla.gnome.org/show_bug.cgi?id=738725
2014-11-03 15:03:54 +01:00
926f76635e build: Bump GTK+ requirement
GTK_POLICY_EXTERNAL requires at least 3.15.0
2014-10-30 14:28:30 +00:00
72a43a6001 Bump version to 3.15.1
Update NEWS.
2014-10-30 11:13:39 +00:00
5180ab262c appDisplay: Use EXTERNAL scroll policy
Now that we support the new policy type, we can just use it instead
of hiding the scrollbar.

https://bugzilla.gnome.org/show_bug.cgi?id=739379
2014-10-30 00:37:55 +01:00
5fca85cd28 scroll-view: Support GTK_POLICY_EXTERNAL
GTK+ added a new PolicyType which currently triggers compiler warnings
about unhandled values in switch statements. We also have a use case for
it already, so add support for the new policy type.

https://bugzilla.gnome.org/show_bug.cgi?id=739379
2014-10-30 00:37:55 +01:00
fb5b368ca7 Calendar: Inline _ellipsizeEventTime into caller
This patch inlines the function _ellipsizeEventTime into its only caller
_addEvent. This also removes the need for the global const
EventEllipses and is thus removed by this commit as well.

https://bugzilla.gnome.org/show_bug.cgi?id=727302
2014-10-27 19:31:05 -05:00
62b6419332 Calendar: sort multi-day events by ending day/time
With commit dc6a60dde, the calendar displays the ending day and time of
a continuing multi-day event on its ending day. This results in the list
not appearing to be sorted. This patch sorts the list according to the
displayed day/time.

With the two appointments
Thursday 0800-1000 Foo, and Wednesday 0900-Friday 1200 Bar and today
being Monday, the rest of the week list currently displays:
F ...1200 Bar
T    0800 Foo
With this patch, the displaying order is switched because Friday comes
after Thursday.

https://bugzilla.gnome.org/show_bug.cgi?id=727302
2014-10-27 15:31:32 -05:00
65c136f4ed Calendar: Show multi-day event continuation
Currently, multi-day events are shown as individual appointments on each
day.  This patch ellipsizes multi-day events to indicate continuation on
the prior or following day (or other time-period.)

The time label spot is now replaced by a box layout that contains the
prefix ellipsis label, the time label and the postfix ellipsis label.
In order to keep the alignment, ellipses are merely invisible (zero
opacity) when hidden.

The ellipses are styled using the events-day-time-ellipses class which,
by default, take the color of the event text.

When RTL is used, the box contents are adjusted accordingly (clutter
does that for us).

An event spanning three days now displays "...All Day..." in the
calendar on the second day.

https://bugzilla.gnome.org/show_bug.cgi?id=727302
2014-10-27 15:31:32 -05:00
34606c0a8c messageTray: Summarize notifications when messages queue up
It is really annoying for the user to acknowledge multiple notifications
when they queue up. So, to prevent a notification flood that has to be
handled by the user one-by-one, a summarized-notification feature is
added which leaves a single summarized-notification for the user,
replacing multiple notifications if the number exceeds 1, which they may
or may not acknowledge. When this summarized-notification is acknowledged,
the message-tray is opened where they can view the notifications that were
summarized. This helps the user concentrate on his primary task
simultaneously informing them about the new notifications.

https://bugzilla.gnome.org/show_bug.cgi?id=702460
2014-10-27 18:20:51 +01:00
260657c0b8 BackgroundCache: plug an Animation object leak
We need to return early in case the animation file is the same,
otherwise we'll create a new Animation object and leak the previous
one.

https://bugzilla.gnome.org/show_bug.cgi?id=739252
2014-10-27 17:50:41 +01:00
f5cc579272 Update Uzbek@cyrillic translation 2014-10-19 13:41:47 -04:00
b4ce0e7208 Update Uzbek@cyrillic translation 2014-10-18 19:45:55 -04:00
eb3fc7815e Use LC_TIME locale for strftime format string translations
We commonly mark strftime format strings for translation to account
for date/time representations without an existing strftime shortcut
("Yesterday %H%p"). As those translations are looked up according to
the locale defined by LC_MESSAGES, while the conversion characters
themselves are resolved according to LC_TIME, the result can be
rather odd when mixing locales ("Den 27. January"). The correct
solution would be to install translations for format strings in
the LC_TIME catalogue and look them up with dcgettext(), but we
don't have the infrastructure to do that easily. Work around this
by adding a helper method that looks up a string in LC_MESSAGES
using the locale defined by LC_TIME and use that to translate
format strings, which has the same result.

https://bugzilla.gnome.org/show_bug.cgi?id=738640
2014-10-16 23:41:51 +02:00
2f5a226bc2 Fix handling of SystemBackground
Since the background rework, SystemBackground is no longer a transparent
actor that you have to stack on top of a solid background, it is an
opaque actor. Fix the color of the background actor, and remove places
where we were setting the background color underneath the system background
and expecting blending - in particular, we can always set no_clear_hint
on the stage.

https://bugzilla.gnome.org/show_bug.cgi?id=738652
2014-10-16 17:16:06 -04:00
01eb79a3cc layout: Reset the OSK to the primary monitor when monitors change
When monitors change, the previous index might not mean the same
physical monitor anymore, in fact, it might become invalid. In the
latter case, we'll actually get a JS error when accessing
this.keyboardMonitor in _updateKeyboardBox() . To avoid this, let's
just always reset the OSK to the primary monitor.

https://bugzilla.gnome.org/show_bug.cgi?id=738536
2014-10-16 16:42:36 +02:00
7ea364ae8b Add Uzbek@cyrillic translation 2014-10-16 09:49:20 -04:00
48a6e6f309 main: Allow loading file-based stylesheets again
The gnome-classic mode ships a stylesheet on disk, so make sure to load
that if if we can't find any file in the resource itself.
2014-10-14 22:25:30 -07:00
0f63ad0fc1 gdm: Don't throw an error if there's no logo file 2014-10-14 20:00:25 -07:00
49c4ba5656 theme: make a GResource
Now that we have all the infrastructure ready, port the theme to a
GResource.

https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:54:18 -07:00
642bf2b778 theme: convert stylesheet loading to GFile
In preparation to making it a GResource.

https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:54:00 -07:00
328bb1c21b st: always use GFile internally
We're moving the theme infrastructure towards GResource, so as a first
step move all the loading to use GFiles instead of URIs or paths.

https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:53:39 -07:00
38add2e78b background: port to new GFile MetaBackground API
https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:51:29 -07:00
2dc41c944e texture-cache: remove unused base64 code path
This was introduced in b0c6cf3f to support image data for web search
providers, which do not exist anymore. Just remove it.

https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:50:48 -07:00
ea552ea157 keyboardManager: Adopt to changes in meta_display_freeze_keyboard 2014-10-14 14:47:23 -07:00
74 changed files with 8862 additions and 4821 deletions

1
.gitignore vendored
View File

@ -23,6 +23,7 @@ data/gnome-shell-wayland.desktop
data/gnome-shell-wayland.desktop.in
data/gnome-shell-extension-prefs.desktop
data/gnome-shell-extension-prefs.desktop.in
data/gnome-shell-theme.gresource
data/gschemas.compiled
data/perf-background.xml
data/org.gnome.shell.gschema.xml

17
NEWS
View File

@ -1,3 +1,20 @@
3.15.1
======
* Use GResources for theme loading [Cosimo; #736936]
* Reset the OSK to primary on monitor changes [Rui; #738536]
* Use LC_TIME locale for format string translations [Florian; #738640]
* Summarize queued up notifications [Devyani; #702460]
* Improve handling of multi-day events [Andreas; #727302]
* Support EXTERNAL scroll policy type [Florian; #739379]
* Misc. bugfixes [Owen, Rui; #738652, #739252]
Contributors:
Andreas Brauchli, Cosimo Cecchi, Devyani Kota, Rui Matos, Florian Müllner,
Jasper St. Pierre, Owen W. Taylor
Translations:
Bahodir Mansurov [uz@cyrillic]
3.14.1
======
* Fix pulse animation for scrolled app folders [Florian; #736885]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.14.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.15.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -37,7 +37,7 @@ AC_PATH_PROG([XSLTPROC], [xsltproc])
GLIB_GSETTINGS
# Get a value to substitute into gnome-shell.in
AM_PATH_PYTHON([2.5])
AM_PATH_PYTHON([3])
AC_SUBST(PYTHON)
# We need at least this, since gst_plugin_register_static() was added
@ -76,8 +76,8 @@ AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.15.90
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.14.1
GTK_MIN_VERSION=3.13.2
MUTTER_MIN_VERSION=3.15.1
GTK_MIN_VERSION=3.15.0
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.5.3
@ -232,7 +232,9 @@ esac
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
AC_SUBST(AM_CFLAGS)
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
if test -z "${BROWSER_PLUGIN_DIR}"; then
BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins"
fi
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
AC_CONFIG_FILES([

View File

@ -35,44 +35,11 @@ introspection_DATA = \
org.gnome.ShellSearchProvider.xml \
org.gnome.ShellSearchProvider2.xml
themedir = $(pkgdatadir)/theme
dist_theme_DATA = \
theme/calendar-arrow-left.svg \
theme/calendar-arrow-right.svg \
theme/calendar-today.svg \
theme/checkbox-focused.svg \
theme/checkbox-off-focused.svg \
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/gnome-shell.css \
theme/logged-in-indicator.svg \
theme/message-tray-background.png \
theme/more-results.svg \
theme/noise-texture.png \
theme/page-indicator-active.svg \
theme/page-indicator-inactive.svg \
theme/page-indicator-checked.svg \
theme/page-indicator-hover.svg \
theme/panel-button-border.svg \
theme/panel-button-highlight-narrow.svg \
theme/panel-button-highlight-wide.svg \
theme/process-working.svg \
theme/running-indicator.svg \
theme/source-button-border.svg \
theme/summary-counter.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.png \
theme/ws-switch-arrow-down.png
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
@ -116,7 +83,9 @@ EXTRA_DIST = \
perf-background.xml.in \
org.gnome.Shell.PortalHelper.desktop.in \
org.gnome.Shell.PortalHelper.service.in \
org.gnome.shell.gschema.xml.in.in
org.gnome.shell.gschema.xml.in.in \
gnome-shell-theme.gresource.xml \
$(resource_files)
CLEANFILES += \
gnome-shell.desktop.in \
@ -128,4 +97,5 @@ CLEANFILES += \
perf-background.xml \
gschemas.compiled \
org.gnome.shell.gschema.valid \
org.gnome.shell.gschema.xml.in
org.gnome.shell.gschema.xml.in \
gnome-shell-theme.gresource

View File

@ -0,0 +1,37 @@
<?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>logged-in-indicator.svg</file>
<file>more-results.svg</file>
<file>noise-texture.png</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-on-us.svg</file>
<file>toggle-on-intl.svg</file>
<file>ws-switch-arrow-up.png</file>
<file>ws-switch-arrow-down.png</file>
</gresource>
</gresources>

View File

@ -1,9 +1,9 @@
[Desktop Entry]
_Name=Captive Portal
_Name=Network Login
Type=Application
Exec=gapplication launch org.gnome.Shell.PortalHelper
DBusActivatable=true
NoDisplay=true
Icon=network-workgroup
StartupNotify=true
OnlyShowIn=GNOME;
OnlyShowIn=GNOME;

44
data/theme/_colors.scss Normal file
View File

@ -0,0 +1,44 @@
// When color definition differs for dark and light variant,
// it gets @if ed depending on $variant
$base_color: if($variant =='light', #ffffff, #292929);
$bg_color: if($variant =='light', #ededed, #393f3f);
$fg_color: if($variant =='light', #2e3436, #eeeeec);
$selected_fg_color: #ffffff;
$selected_bg_color: if($variant == 'light', #4a90d9, darken(#4a90d9,20%));
$selected_borders_color: if($variant=='light', darken($selected_bg_color, 30%),
darken($selected_bg_color, 20%));
$borders_color: if($variant =='light', darken($bg_color,30%), darken($bg_color,12%));
$borders_edge: if($variant =='light', white, transparentize($fg_color, 0.9));
$link_color: if($variant == 'light', darken($selected_bg_color,10%),
lighten($selected_bg_color,20%));
$link_visited_color: if($variant == 'light', darken($selected_bg_color,20%),
lighten($selected_bg_color,10%));
$top_hilight: $borders_edge;
$warning_color: #f57900;
$error_color: #cc0000;
$success_color: if($variant =='light', #73d216, darken(#73d216,10%));
$destructive_color: if($variant =='light', #ef2929, darken(#ef2929,10%));
$osd_fg_color: #eeeeec;
$osd_bg_color: #2e3436;
$osd_borders_color: transparentize(black, 0.3);
$osd_outer_borders_color: transparentize(white, 0.9);
$tooltip_borders_color: $osd_outer_borders_color;
//insensitive state derived colors
$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
$insensitive_bg_color: mix($bg_color, $base_color, 60%);
$insensitive_borders_color: $borders_color;
//colors for the backdrop state, derived from the main colors.
$backdrop_base_color: if($variant =='light', darken($base_color,1%), lighten($base_color,1%));
$backdrop_bg_color: $bg_color;
$backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 80%);
$backdrop_insensitive_color: if($variant =='light', darken($backdrop_bg_color,15%), lighten($backdrop_bg_color,15%));
$backdrop_borders_color: mix($borders_color, $bg_color, 90%);
$backdrop_dark_fill: mix($backdrop_borders_color,$backdrop_bg_color, 35%);

963
data/theme/_common.scss Normal file
View File

@ -0,0 +1,963 @@
//This is the RIGHT PLACE to edit the stylesheet
//let's start by telling people not to edit the generated CSS:
$cakeisalie: "This stylesheet is generated, DO NOT EDIT";
/* #{$cakeisalie} */
/* Copyright 2009, Red Hat, Inc.
*
* Portions adapted from Mx's data/style/default.css
* Copyright 2009 Intel Corporation
*
* 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.
*/
/* GLOBALS */
$font-size: 11;
$font-family: Cantarell, Sans-Serif;
stage {
font-family: $font-family;
@include fontsize($font-size);
color: $fg_color;
}
/* WIDGETS */
/* Buttons */
// one would think we may want a generic button class:
// bug #737785
.candidate-page-button,
.notification-button,
.notification-icon-button,
.hotplug-notification-item,
.hotplug-resident-eject-button,
.modal-dialog-button,
.app-view-control {
border-radius: 3px;
border-width: 1px;
padding: 4px 32px;
@include button(normal);
&:hover { @include button(hover); }
&:focus { @include button(focus); }
&:insensitive { @include button(insensitive); }
&:active { @include button(active); }
}
/* Entries */
StEntry {
border-radius: 3px;
padding: 4px;
border-width: 1px;
color: $fg_color;
@include entry(normal);
//&:hover { @include entry(hover);}
&:focus { @include entry(focus,$fc:transparentize($fg_color,0.5));}
&:insensitive { @include entry(insensitive);}
selection-background-color: $selected_bg_color;
selected-color: $selected_fg_color;
}
/* Scrollbars */
StScrollBar {
padding: 0;
&.vfade { -st-vfade-offset: 68px; }
&.hfade { -st-hfade-offset: 68px; }
StScrollView & {
min-width: 14px;
min-height: 14px;
}
StBin#trough {
border-radius: 0;
background-color: darken($bg_color,10%);
}
StButton#vhandle, StButton#hhandle {
border-radius: 8px;
background-color: $bg_color;
border: 3px solid darken($bg_color,10%); //would be nice to margin or at least to transparent
&:hover { background-color: lighten($bg_color,10%); }
&:active { background-color: $selected_bg_color; }
}
}
/* Slider */
.slider {
height: 1em;
-slider-height: 0.3em;
-slider-background-color: $insensitive_bg_color; //background of the trough
-slider-border-color: $borders_color; //trough border color
-slider-active-background-color: $selected_bg_color; //active trough fill
-slider-active-border-color: darken($selected_bg_color,10%); //active trough border
-slider-border-width: 1px;
-slider-handle-radius: 6px;
}
/* Check Boxes */
.check-box {
StBoxLayout { spacing: .8em; }
StBin {
width: 24px;
height: 22px;
background-image: url("checkbox-off.svg");
}
&:focus Stbin { background-image: url("checkbox-off-focused.svg"); }
&:checked Stbin { background-image: url("checkbox.svg"); }
&:focus:checked Stbin { background-image: url("checkbox-focused.svg"); }
}
/* Switches */
.toggle-switch {
width: 65px;
height: 22px;
background-size: contain;
}
@each $v in us, intl {
.toggle-switch-#{$v} {
background-image: url("toggle-off-#{$v}.svg");
&:checked { background-image: url("toggle-on-#{$v}.svg"); }
}
}
/* links */
.shell-link {
color: $link_color;
&:hover { color: lighten($link_color,10%); }
}
/* Modal Dialogs */
.lightbox { background-color: black; } //FIXME where is this?
.flashspot { background-color: white; } //FIXME where is this?
.modal-dialog {
border-radius: 5px;
background-color: transparentize(darken($bg_color,10%),0.05);
border: 1px solid $borders_color;
padding: 24px;
.run-dialog-entry { width: 20em; }
.run-dialog-error-box {
padding-top: 16px;
spacing: 6px;
}
.run-dialog-button-box { padding-top: 1em; }
.run-dialog-label {
font-size: fontsize($font-size + 1.1);
font-weight: bold;
color: darken($fg_color,10%);
padding-bottom: .4em;
}
}
.button-dialog-button-box {
spacing: 18px;
padding-top: 48px;
}
.show-processes-dialog-subject,
.mount-question-dialog-subject,
.end-session-dialog-subject { //this should be a generic header class
font-size: fontsize($font-size * 1.3);
}
/* Popvers/Menus */
.popup-menu {
min-width: 200px;
.popup-menu-arrow { } //defined globally in the TOP BAR
.popup-sub-menu {
background-color: darken($bg_color,2%);
border-top: 1px solid lighten($borders_color,5%);
border-bottom: 1px solid lighten($borders_color,5%);
}
.popup-menu-content { padding: 1em 0em; }
.popup-menu-item {
spacing: 12px;
&:ltr { padding: .4em 1.75em .4em 0em; }
&:rtl { padding: .4em 0em .4em 1.75em; }
&:active { background-color: lighten($bg_color,10%); }
&:insensitive { background-color: transparentize($bg_color,.5); }
}
.popup-inactive-menu-item { //all icons and other graphical elements
color: $fg_color;
&:insensitive { color: transparentize($fg_color,0.5); }
}
//.popup-status-menu-item { font-weight: normal; color: pink; } //dunno what that is
}
.popup-menu-ornament {
text-align: right;
width: 1em;
}
.popup-menu-boxpointer,
.candidate-popup-boxpointer {
-arrow-border-radius: 3px;
-arrow-background-color: $bg_color;
-arrow-border-width: 1px;
-arrow-border-color: $borders_color;
-arrow-base: 24px;
-arrow-rise: 11px;
-arrow-box-shadow: 0 1px 3px red; //dreaming. bug #689995
}
.popup-separator-menu-item {
-margin-horizontal: 24px;
height: 1px; //not really the whole box
padding: 0; //not really centered
background-color: transparent;
border-color: lighten($borders_color,10%);
border-bottom-width: 1px;
border-bottom-style: solid;
}
/* fallback menu
- odd thing for styling App menu when apparently not running under shell. Light Adwaita styled
app menu inside the main app window itself rather than the top bar
*/
/* TOP BAR */
#panel {
background-color: black;
font-weight: bold;
height: 1.86em;
&.unlock-screen,
&.login-screen,
&.lock-screen {
background-color: transparent;
}
#panelLeft, #panelCenter { // spacing between activities<>app menu and such
spacing: 4px;
}
.panel-corner {
-panel-corner-radius: 6px;
-panel-corner-background-color: black;
-panel-corner-border-width: 2px;
-panel-corner-border-color: transparent;
&:active, &:overview, &:focus {
-panel-corner-border-color: lighten($selected_bg_color,5%);
}
&.lock-screen, &.login-screen, &unlock-screen {
-panel-corner-radius: 0;
-panel-corner-background-color: transparent;
-panel-corner-border-color: transparent;
}
}
.panel-button {
padding: 0px 12px;
font-weight: bold;
color: #ccc;
transition-duration: 100ms;
#appMenuIcon {
app-icon-bottom-clip: 1px;
.panel-button:active &,
.panel-button:overview &,
.panel-button:focus &,
.panel-button:checked & {
app-icon-bottom-clip: 2px;
}
}
&:hover {
color: lighten($fg_color, 10%);
text-shadow: black 0 2px 2px;
}
&:active, &:overview, &:focus, &:checked {
// Trick due to St limitations. It needs a background to draw
// a box-shadow
background-color: rgba(0, 0, 0, 0.01);
box-shadow: inset 0 -2px 0px lighten($selected_bg_color,5%);
color: lighten($fg_color,10%);
text-shadow: black 0px 2px 2px;
& > .system-status-icon { icon-shadow: black 0 2px 2px; }
}
.system-status-icon { icon-size: 1.09em; padding: 0 5px; }
.unlock-screen &,
.login-screen &,
.lock-screen & {
color: lighten($fg_color, 10%);
&:focus, &:hover, &:active { color: lighten($fg_color, 10%); }
}
}
.panel-status-button {
&:active, &:overview, &:focus, &:checked {
border-color: lighten($selected_bg_color,5%);
border-bottom-width: 2px;
}
}
.panel-menu { -boxpointer-gap: 4px; } //FIXME
.panel-status-indicators-box, //FIXME
.panel-status-menu-box {
spacing: 2px;
}
.screencast-indicator { color: $warning_color; }
}
// a little unstructured mess:
.system-switch-user-submenu-icon {
icon-size: 24px;
border: 1px solid transparentize($fg_color,0.6);
}
#appMenu {
spinner-image: url("process-working.svg");
spacing: 4px;
.label-shadow { color: transparentize(#000,0.5); }
}
.aggregate-menu {
width: 360px;
.popup-menu-icon { padding: 0 4px; }
}
.system-menu-action {
color: $fg_color;
border-radius: 32px; /* wish we could do 50% */
padding: 13px;
border: 1px solid lighten($borders_color,5%);
&:hover, &:focus {
color: lighten($fg_color, 10%);
background-color: lighten($bg_color,10%);
border: none;
padding: 14px;
}
&:active { background-color: lighten($borders_color,5%); }
& > StIcon { icon-size: 16px; }
}
// not really top bar only
.popup-menu-arrow { width: 16px; height: 16px; }
.popup-menu-icon { icon-size: 1.09em; }
//close buttons
.window-close, .notification-close {
background-image: url("close-window.svg");
background-size: 32px;
height: 32px;
width: 32px;
}
.window-close {
-shell-close-overlap: 16px;
&:rtl { -st-background-image-shadow: 2px 2px 6px rgba(0,0,0,0.5); }
}
.notification-close {
-shell-close-overlap-x: 14px;
-shell-close-overlap-y: -12px;
&:rtl { -shell-close-overlap-x: -14px; }
}
/* OVERVIEW */
#overview {
spacing: 24px; //
}
.window-picker { //container around window thumbnails
-horizontal-spacing: 32px;
-vertical-spacing: 32px;
padding-left: 32px;
padding-right: 32px;
padding-bottom: 48px;
&.external-monitor { padding: 32px; }
}
.window-clone-border {
border: 4px solid $selected_bg_color;
border-radius: 4px;
}
.window-caption {
spacing: 25px;
background-color: transparentize($bg_color,0.3);
border-radius: 8px;
padding: 4px 12px;
-shell-caption-spacing: 12px;
&:hover { background-color: $selected_bg_color; }
}
.messages-indicator { color: transparentize($fg_color,.2); height: 32px; }
.messages-indicator-contents { spacing: 12px; padding-bottom: 12px; }
//search entry
.search-entry {
width: 320px;
padding: 7px 9px;
border-radius: 24px;
&:focus {
padding: 6px 8px;
border-width: 2px;
}
.search-entry-icon { icon-size: 1em; padding: 0 4px; color: transparentize($fg_color,.3); }
&:hover, &:focus {
.search-entry-icon { color: $fg_color; }
}
}
//search results
#searchResultsBin {
max-width: 1000px;
}
#searchResultsContent {
padding-left: 20px;
padding-right: 20px;
spacing: 16px;
}
.search-section { spacing: 16px; } // This should be equal to #searchResultsContent spacing
.search-section-content { spacing: 32px; } // This is the space between the provider icon and the results container
.search-statustext { // "no results"
@extend %status_text;
}
.list-search-results { spacing: 3px; }
.search-section-separator {
-gradient-height: 1px;
-gradient-start: rgba(255,255,255,0);
-gradient-end: rgba(255,255,255,0.1);
-margin-horizontal: 1.5em;
height: 1px;
}
.list-search-result-content { spacing: 12px; padding: 12px; }
.list-search-result-title { font-size: 1.5em; color: darken($fg_color,5%); }
.list-search-result-description { color: darken($fg_color,15%); }
.search-provider-icon { padding: 15px; }
.search-provider-icon-more {
width: 16px;
height: 16px;
background-image: url("more-results.svg");
}
/* DASHBOARD */
#dash {
@extend %overview-panel;
padding: 4px;
border-left: 0px;
border-radius: 0px 9px 9px 0px;
&:rtl {
border-left-width: 1px;
border-right-width: 0;
border-radius: 9px 0 0 9px;
}
.placeholder {
background-image: url("dash-placeholder.svg");
background-size: contain;
height: 24px;
}
.empty-dash-drop-target {
width: 24px;
height: 24px;
}
}
.dash-item-container > StWidget {
padding: 4px 8px;
}
.dash-label { //osd tooltip
border-radius: 7px;
padding: 4px 12px;
background-color: transparentize($bg_color,0.3);
text-align: center;
-x-offset: 8px;
}
/* App Vault/Grid */
.icon-grid {
spacing: 30px;
-shell-grid-horizontal-item-size: 136px;
-shell-grid-vertical-item-size: 136px;
.overview-icon { icon-size: 96px; } //FIXME no effect
}
//.app-display { spacing: 20px; }
.app-view-controls { //favorties | all toggle container
padding-bottom: 32px;
}
.app-view-control { //favorties | all toggle button
padding: 4px 32px;
&:checked { @include button(active); }
&:first-child {
border-right-width: 0;
border-radius: 3px 0 0 3px;
}
&:last-child {
border-radius: 0 3px 3px 0;
}
}
//Icon tile
.search-provider-icon,
.list-search-result {
@extend %icon_tile;
&:active, &:checked { background-color: transparentize(darken($bg_color,10%),.1); }
&:focus, &:selected, &:hover {
background-color: transparentize($fg_color,.9);
transition-duration: 200ms;
}
}
.app-well-app,
.app-well-app.app-folder,
.show-apps,
.grid-search-result {
& > .overview-icon {
@extend %icon_tile;
}
&.running > .overview-icon {
text-shadow: black 0px 2px 2px;
}
&:active > .overview-icon,
&:checked > .overview-icon {
background-color: transparentize(darken($bg_color,10%),.1); //FIXME not working?
box-shadow: inset 0 1px 2px $borders_color;
}
&:hover > .overview-icon,
&.running:hover > .overview-icon,
&:focus > .overview-icon,
&:selected > .overview-icon {
background-color: transparentize($fg_color,.9);
transition-duration: 0ms;
border-image: none;
background-image: none;
}
}
.app-well-app-running-dot { //running apps indicator
width: 10px; height: 3px;
background-color: $selected_bg_color;
margin-bottom: 2px; //FIXME will happen :)
}
%icon_tile {
border-radius: 4px;
padding: 6px;
border: 1px solid transparent;
transition-duration: 100ms;
text-align: center;
}
.app-well-app.app-folder > .overview-icon {
background-color: transparentize($bg_color,.6);
}
.show-apps:checked .show-apps-icon,
.show-apps:focus .show-apps-icon {
color: white;
transition-duration: 100ms;
}
// Collections
.app-folder-popup { //expanded collection
-arrow-border-radius: 8px;
-arrow-background-color: transparentize($bg_color,0.7);
-arrow-base: 24px;
-arrow-rise: 11px;
}
.app-folder-popup-bin { padding: 5px; }
.app-folder-icon {
padding: 5px;
spacing-rows: 5px;
spacing-columns: 5px;
}
.page-indicator {
padding: 15px 20px;
.page-indicator-icon {
width: 18px;
height: 18px;
background-image: url(page-indicator-inactive.svg);
}
&:hover .page-indicator-icon { background-image: url(page-indicator-hover.svg); }
&:active .page-indicator-icon { background-image: url(page-indicator-active.svg); }
&:checked .page-indicator-icon,
&:checked:active { background-image: url(page-indicator-checked.svg); }
}
.no-frequent-applications-label { @extend %status_text; }
.app-well-app > .overview-icon.overview-icon-with-label,
.grid-search-result .overview-icon.overview-icon-with-label {
padding: 10px 8px 5px 8px;
spacing: 4px;
}
// Workspace pager
.workspace-thumbnails { //container ala dash
@extend %overview-panel;
visible-width: 32px; //amount visible before hover
spacing: 11px;
padding: 8px;
border-radius: 9px 0 0 9px;
//border-width: 1px 0 1px 1px; //fixme: can't have non unoform borders :(
&:rtl { border-radius: 0 9px 9px 0;}
}
.workspace-thumbnail-indicator {
border: 4px solid $selected_bg_color;
padding: 1px;
}
//Some hacks I don't even
// FIXME
.search-display > StBoxLayout,
.all-apps,
.frequent-apps > StBoxLayout {
// horizontal padding to make sure scrollbars or dash don't overlap content
padding: 0px 88px 10px 88px;
}
%overview-panel {
color: $fg_color;
background-color: $bg_color;
border: 1px solid transparentize($fg_color,0.8);
}
%status_text {
font-size: 2em;
font-weight: bold;
color: $fg_color;
}
/* NOTIFICATIONS & MESSAGE TRAY */
#message-tray {
background: darken($bg_color,10%) url("noise-texture.png");
background-repeat: repeat;
height: 72px;
box-shadow: inset 0 2px 4px rgba(0,0,0,0.5);
padding: 4px;
.message-tray-summary { height: 72px; }
.message-tray-menu-button {
StIcon {
padding: 0 20px;
color: $fg_color;
icon-size: 24px;
opacity: 1;
}
&:hover StIcon { color: lighten($fg_color, 15%); }
&:active StIcon { color: lighten($selected_bg_color, 10%); }
}
.no-messages-label { color: darken($fg_color,10%); }
}
.url-highlighter { link-color: $selected_bg_color; }
// Banners
.notification {
font-size: 11pt;
width: 34em;
border-radius: 6px 6px 0 0;
background-color: transparentize(darken($bg_color,8%),.05);
border: 1px solid $borders_color;
border-bottom-width: 0;
//box-shadow: 0 1px 4px black;
spacing-rows: 4px;
padding: 8px 8px 4px 8px;
spacing-columns: 10px;
&.multi-line-notification { padding-bottom: 8px; }
}
.notification-unexpanded {
// We want to force the actor at a specific size, irrespective
// of its minimum and preferred size, so we override both
min-height: 36px;
height: 36px;
}
// We use row-span = 2 for the image cell, which prevents its height preferences to be
// taken into account during allocation, so its height ends up being limited by the height
// of the content in the other rows. To avoid showing a stretched image, we set the minimum
// height of the table to be ICON_SIZE + IMAGE_SIZE + spacing-rows = 24 + 125 + 10 = 159
.notification-with-image {
min-height: 159px;
}
.notification-body { spacing: 5px; }
.notification-actions {
paddinf-top: 18px;
spacing: 6px;
}
//Message tray items
.summary-source {
border-radius: 0;
-st-natural-width: 60px; //FIXME left aligned rather than centered
padding: 9px;
transition-duration: 100ms;
}
.summary-source-button {
&:hover .summary-source,
&:selected .summary-source,
&:focus .summary-source { background-color: lighten($bg_color,2%); }
}
.summary-source-counter {
font-size: 10pt;
font-weight: bold;
height: 1.6em; width: 1.6em;
-shell-counter-overlap-x: 3px;
-shell-counter-overlap-y: 3px;
background-color: $selected_bg_color;
border: 2px solid $fg_color;
box-shadow: 0 2px 2px rgba(0,0,0,0.5);
border-radius: 0.9em; // should be 0.8 but whatever; wish I could do 50%;
}
//Message tray popovers
.summary-boxpointer {
-arrow-border-radius: 15px;
-arrow-background-color: transparentize(darken($bg_color,8%),.05);
-arrow-base: 36px;
-arrow-rise: 18px;
color: $fg_color;
-boxpointer-gap: 4px;
.notification {
border-radius: 9px;
border-width: 0; //temporary workaround for border brokenness
background-color: transparentize(darken($bg_color,8%),.05) !important;
padding-bottom: 12px;
}
#summary-right-click-menu {
padding-top: 12px;
padding-bottom: 12px;
}
}
.summary-notification-stack-scrollview {
max-height: 24em;
padding-top: 8px;
padding-bottom: 8px;
&:ltr { padding-right: 8px; }
&:rtl { padding-left: 8px; }
}
.notification-scrollview {
max-height: 18em;
-st-vfade-offset: 24px;
&:ltr > StScrollBar { padding-left: 6px; }
&:rtl > StScrollBar { padding-right: 6px; }
}
.notification-button { -st-natural-width: 140px; }
.notification-icon-button {
border-radius: 5px;
padding: 5px;
&:focus { }//FIXME
& > StIcon { icons-size: 16px; padding: 8px; }
}
.secondary-icon { icon-size: 1.09em; } //FIXME
//chat bubbles
.chat-log-message { color: darken($fg_color,10%); }
.chat-empty-line { font-size: 4px; }
.chat-received {
padding-left: 4px;
&:rtl { padding-left: 0px; padding-right: 4px; }
}
.chat-sent {
padding-left: 18pt;
color: darken($fg_color, 15%);
&:rtl { padding-left: 0; padding-right: 18pt; }
}
.chat-meta-message {
padding-left: 4px;
font-size: 9pt;
font-weight: bold;
color: darken($fg_color,20%);
&:rtl { padding-left: 0; padding-right: 4px; }
}
.chat-notification-scrollview { max-height: 22em; }
.subscription-message { font-style: italic; }
//hotplug
.hotplug-transient-box {
spacing: 6px;
padding: 2px 72px 2px 12px;//FIXME wat?
}
.hotplug-notification-item {
padding: 2px 10px;
&:focus { padding: 1px 71px 1px 11px; } //FIXME wat?
}
.hotplug-notification-item-icon {
icon-size: 24px;
padding: 2px 5px;
}
.hotplug-resident-box { spacing: 8px; }
.hotplug-resident-mount {
spacing: 8px;
border-radius: 4px;
color: green;
&:hover {
color: red;
background-color: blue;
}
}
.hotplug-resident-mount-label {
color: inherit;
padding-left: 6px;
}
.hotplug-resident-mount-icon {
icon-size: 24px;
padding-left: 6px;
}
.hotplug-resident-eject-icon {
icon-size: 16px;
}
.hotplug-resident-eject-button {
padding: 7px;
border-radius: 5px;
color: pink;
}
/* Eeeky things */
//Mess that is Looking Glass
#LookingGlassDialog {
background-color: rgba(0,0,0,0.80);
spacing: 4px;
padding: 4px;
border: 2px solid grey;
border-radius: 4px;
& > #Toolbar {
border: 1px solid grey;
border-radius: 4px;
}
.labels { spacing: 4px; }
.notebook-tab {
-natural-hpadding: 12px;
-minimum-hpadding: 6px;
font-weight: bold;
color: #ccc;
transition-duration: 100ms;
padding-left: .3em;
padding-right: .3em;
&:hover {
color: white;
text-shadow: black 0px 2px 2px;
}
&:selected {
border-bottom-width: 2px;
border-color: lighten($selected_bg_color,5%);
color: white;
text-shadow: black 0px 2px 2px;
}
}
StBoxLayout#EvalBox { padding: 4px; spacing: 4px; }
StBoxLayout#ResultsArea { spacing: 4px; }
}
.lg-dialog {
StEntry {
selection-background-color: #bbbbbb;
selected-color: #333333;
}
.shell-link {
color: #999999;
&:hover { color: #dddddd; }
}
}
.lg-completions-text {
font-size: .9em;
font-style: italic;
}
.lg-obj-inspector-title {
spacing: 4px;
}
.lg-obj-inspector-button {
border: 1px solid gray;
padding: 4px;
border-radius: 4px;
&:hover { border: 1px solid #ffffff; }
}
#lookingGlassExtensions { padding: 4px; }
.lg-extensions-list {
padding: 4px;
spacing: 6px;
}
.lg-extension {
border: 1px solid #6f6f6f;
border-radius: 4px;
padding: 4px;
}
.lg-extension-name {
font-weight: bold;
}
.lg-extension-meta {
spacing: 6px;
}
#LookingGlassPropertyInspector {
background: rgba(0, 0, 0, 0.8);
border: 2px solid grey;
border-radius: 4px;
padding: 6px;
}

219
data/theme/_drawing.scss Normal file
View File

@ -0,0 +1,219 @@
// Drawing mixins
// generic drawing of more complex things
@function _widget_edge($c:$borders_edge) {
// outer highlight "used" on most widgets
@return 0 1px $c;
}
// provide font size in rem, with px fallback
@mixin fontsize($size: 24, $base: 16) {
font-size: round($size) + pt;
//font-size: ($size / $base) * 1rem;
}
@mixin _shadows($shadow1, $shadow2:none, $shadow3:none, $shadow4:none) {
//
// Helper function to stack up to 4 box-shadows;
//
@if $shadow4!=none { box-shadow: $shadow1, $shadow2, $shadow3, $shadow4; }
@else if $shadow3!=none { box-shadow: $shadow1, $shadow2, $shadow3; }
@else if $shadow2!=none { box-shadow: $shadow1, $shadow2; }
@else { box-shadow: $shadow1; }
}
// entries
@mixin entry($t, $fc:$selected_bg_color, $edge: $borders_edge) {
//
// Entries drawing function
//
// $t: entry type
// $fc: focus color
// $edge: set to none to not draw the bottom edge or specify a color to not
// use the default one
//
// possible $t values:
// normal, focus, insensitive
//
$_inner_shadows: inset 0 2px 4px transparentize(black, 0.6);
@if $t==normal {
background-color: $base_color;
border-color: $borders_color;
@include _shadows($_inner_shadows);
}
@if $t==focus {
@include _shadows($_inner_shadows);
border-color: if($fc==$selected_bg_color,
$selected_borders_color,
darken($fc,35%));
}
@if $t==hover { }
@if $t==insensitive {
color: $insensitive_fg_color;
border-color: $insensitive_bg_color;
box-shadow: none;
}
}
// buttons
@function _border_color ($c) { @return darken($c,25%); } // colored buttons want
// the border form the
// base color
@function _text_shadow_color ($tc:$fg_color, $bg:$bg_color) {
//
// calculate the color of text shadows
//
// $tc is the text color
// $bg is the background color
//
$_lbg: lightness($bg)/100%;
@if lightness($tc)<50% { @return transparentize(white,1-$_lbg/($_lbg*1.3)); }
@else { @return transparentize(black,$_lbg*0.8); }
}
@function _button_hilight_color($c) {
//
// calculate the right top hilight color for buttons
//
// $c: base color;
//
@if lightness($c)>90% { @return white; }
@else if lightness($c)>80% { @return transparentize(white, 0.3); }
@else if lightness($c)>50% { @return transparentize(white, 0.5); }
@else if lightness($c)>40% { @return transparentize(white, 0.7); }
@else { @return transparentize(white, 0.9); }
}
@mixin _button_text_shadow ($tc:$fg_color, $bg:$bg_color) {
//
// helper function for the text emboss effect
//
// $tc is the optional text color, not the shadow color
//
// TODO: this functions needs a way to deal with special cases
//
$_shadow: _text_shadow_color($tc, $bg);
@if lightness($tc)<50% {
text-shadow: 0 1px $_shadow;
icon-shadow: 0 1px $_shadow;
}
@else {
text-shadow: 0 -1px $_shadow;
icon-shadow: 0 -1px $_shadow;
}
}
@mixin button($t, $c:$osd_bg_color, $tc:$fg_color, $edge: $borders_edge) {
//
// Button drawing function
//
// $t: button type,
// $c: base button color for colored* types
// $tc: optional text color for colored* types
// $edge: set to none to not draw the bottom edge or specify a color to not
// use the default one
//
// possible $t values:
// normal, hover, active, insensitive, insensitive-active,
// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
//
$_hilight_color: _button_hilight_color($c);
$_button_edge: if($edge == none, none, _widget_edge($edge));
$_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1)));
@if $t==normal {
//
// normal button
//
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
$osd_bg_color);
color: $osd_fg_color;
background-color: $_bg;
border-color: $osd_borders_color;
box-shadow: inset 0 1px lighten($osd_bg_color,10%);
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
}
@if $t==focus {
//
// focused button
//
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
$osd_bg_color);
color: $osd_fg_color;
border-color: $selected_bg_color;
box-shadow: inset 0 1px lighten($osd_bg_color,10%);
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
}
@else if $t==hover {
//
// active osd button
//
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
lighten($osd_bg_color,10%));
color: white;
border-color: $osd_borders_color;
background-color: $_bg;
box-shadow: inset 0 1px lighten($osd_bg_color,20%);
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
}
@else if $t==active {
//
// active osd button
//
$_bg: if($c!=$bg_color, $c, $osd_borders_color);
color: white;
border-color: $osd_borders_color;
background-color: darken($_bg,5%);
box-shadow: none;
text-shadow: none;
icon-shadow: none;
}
@else if $t==insensitive {
//
// insensitive osd button
//
$_bg: transparentize(mix($insensitive_fg_color,$osd_bg_color,20%),0.3);
color: $insensitive_fg_color;
border-color: $osd_borders_color;
background-color: $_bg;
box-shadow: none;
text-shadow: none;
icon-shadow: none;
}
@else if $t==undecorated {
//
// reset
//
border-color: transparent;
background-color: transparent;
background-image: none;
@include _shadows(inset 0 1px transparentize(white,1),
$_blank_edge);
text-shadow: none;
icon-shadow: none;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,7 @@
height="22"
id="svg3199"
version="1.1"
inkscape:version="0.48.1 r9760"
inkscape:version="0.48.5 r10040"
sodipodi:docname="checkbox.svg">
<defs
id="defs3201">
@ -132,51 +132,54 @@
xlink:href="#linearGradient10597-5"
inkscape:collect="always" />
<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)"
inkscape:collect="always"
xlink:href="#linearGradient5581-5-2-4-6-8-7-35-8"
id="linearGradient11811"
gradientUnits="userSpaceOnUse"
id="linearGradient14219-6"
xlink:href="#linearGradient15404-9"
inkscape:collect="always" />
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="linearGradient15404-9"
inkscape:collect="always">
id="linearGradient5581-5-2-4-6-8-7-35-8">
<stop
id="stop15406-6"
id="stop5583-0-92-8-0-7-6-5-1"
offset="0"
style="stop-color:#515151;stop-opacity:1" />
style="stop-color:#454c4c;stop-opacity:1;" />
<stop
id="stop15408-7"
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:#292929;stop-opacity:1" />
style="stop-color:#2d3232;stop-opacity:1;" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#000000"
pagecolor="#a2a2a2"
bordercolor="#2d2d2d"
borderopacity="1"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="71.516955"
inkscape:cy="5.8710559"
inkscape:zoom="22.627417"
inkscape:cx="9.6447897"
inkscape:cy="12.591409"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1412"
inkscape:window-height="1067"
inkscape:window-x="2635"
inkscape:window-y="226"
inkscape:window-x="184"
inkscape:window-y="233"
inkscape:window-maximized="0"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
showborder="false">
showborder="true">
<inkscape:grid
type="xygrid"
id="grid14843"
@ -203,87 +206,56 @@
id="layer1"
transform="translate(-342.5,-521.36218)">
<g
transform="matrix(0.80230061,0,0,0.80230061,-87.624044,-453.10297)"
id="g14586-0"
style="stroke-width:2.3714385;stroke-miterlimit:4;stroke-dasharray:none">
<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-6"
style="stroke-width:1.18754292;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new">
<g
transform="translate(877.50354,-102.83507)"
id="g16853-4-9"
style="stroke-width:1.18754292;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new">
<rect
transform="scale(1,-1)"
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"
id="rect6506-6"
width="11.281681"
height="11.26221"
x="-409.59354"
y="-284.40115"
rx="1.0052766"
ry="1.0052764" />
</g>
</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-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>
style="display:inline"
id="use5671"
transform="matrix(1.3594109,0,0,1.3564242,319.2059,481.99447)">
<rect
transform="matrix(0.47304779,0,0,0.4807373,-6.3607039,-29.396216)"
rx="4.4136767"
y="125.3458"
x="50.440369"
height="29.154205"
width="29.559635"
id="rect11803"
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"
ry="4.4233952" />
<path
inkscape:connector-curvature="0"
id="path11809"
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="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"
sodipodi:nodetypes="csssscssc" />
<path
sodipodi:nodetypes="csssscssc"
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"
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"
id="path11867"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path11869"
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"
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"
sodipodi:nodetypes="csssscssc" />
</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>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -14,22 +14,10 @@
height="22"
id="svg3199"
version="1.1"
inkscape:version="0.48.1 r9760"
inkscape:version="0.48.5 r10040"
sodipodi:docname="checkbox-off.svg">
<defs
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
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
@ -56,16 +44,6 @@
effect="spiro"
id="path-effect5884-4-7"
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
inkscape:collect="always"
id="linearGradient10013-4-63-6">
@ -110,30 +88,55 @@
id="linearGradient15376"
xlink:href="#linearGradient10597-5"
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>
<sodipodi:namedview
id="base"
pagecolor="#000000"
pagecolor="#a2a2a2"
bordercolor="#2d2d2d"
borderopacity="1"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="6.1225392"
inkscape:cy="3.6003241"
inkscape:zoom="5.6568542"
inkscape:cx="19.79113"
inkscape:cy="11.232334"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1412"
inkscape:window-height="1067"
inkscape:window-x="2116"
inkscape:window-y="261"
inkscape:window-x="184"
inkscape:window-y="233"
inkscape:window-maximized="0"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
showborder="false">
showborder="true">
<inkscape:grid
type="xygrid"
id="grid14843"
@ -160,39 +163,44 @@
id="layer1"
transform="translate(-342.5,-521.36218)">
<g
transform="matrix(0.80230061,0,0,0.80230061,-87.624044,-453.10297)"
id="g14586"
style="stroke-width:2.3714385;stroke-miterlimit:4;stroke-dasharray:none">
<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="stroke-width:1.18754292;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new">
<g
transform="translate(877.50354,-102.83507)"
id="g16853-4"
style="stroke-width:1.18754292;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new">
<rect
transform="scale(1,-1)"
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"
id="rect6506-6"
width="11.281681"
height="11.26221"
x="-409.59354"
y="-284.40115"
rx="1.0052766"
ry="1.0052764" />
</g>
</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="stroke-width:2.3714385;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new" />
style="display:inline"
id="use5671"
transform="matrix(1.3594109,0,0,1.3564242,319.2059,481.99447)">
<rect
transform="matrix(0.47304779,0,0,0.4807373,-6.3607039,-29.396216)"
rx="4.4136767"
y="125.3458"
x="50.440369"
height="29.154205"
width="29.559635"
id="rect11803"
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"
ry="4.4233952" />
<path
inkscape:connector-curvature="0"
id="path11809"
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="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"
sodipodi:nodetypes="csssscssc" />
<path
sodipodi:nodetypes="csssscssc"
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"
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"
id="path11867"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path11869"
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"
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"
sodipodi:nodetypes="csssscssc" />
</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>
</svg>

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -14,22 +14,10 @@
height="22"
id="svg3199"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="checkbox.svg">
inkscape:version="0.48.5 r10040"
sodipodi:docname="checkbox-focused.svg">
<defs
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
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
@ -44,27 +32,6 @@
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
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
effect="spiro"
id="path-effect5837-4-6"
@ -77,16 +44,6 @@
effect="spiro"
id="path-effect5884-4-7"
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
inkscape:collect="always"
id="linearGradient10013-4-63-6">
@ -131,30 +88,55 @@
id="linearGradient15376"
xlink:href="#linearGradient10597-5"
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>
<sodipodi:namedview
id="base"
pagecolor="#000000"
pagecolor="#a2a2a2"
bordercolor="#2d2d2d"
borderopacity="1"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="4"
inkscape:cx="71.247925"
inkscape:cy="33.339093"
inkscape:zoom="1"
inkscape:cx="9.6447897"
inkscape:cy="12.591409"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1412"
inkscape:window-height="1067"
inkscape:window-x="2116"
inkscape:window-y="261"
inkscape:window-x="184"
inkscape:window-y="233"
inkscape:window-maximized="0"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
showborder="false">
showborder="true">
<inkscape:grid
type="xygrid"
id="grid14843"
@ -181,38 +163,44 @@
id="layer1"
transform="translate(-342.5,-521.36218)">
<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">
<rect
transform="scale(1,-1)"
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"
id="rect6506-6"
width="11.281681"
height="11.26221"
x="-409.59354"
y="-284.40115"
rx="0.95632279"
ry="0.95632273" />
</g>
</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" />
style="display:inline"
id="use5671"
transform="matrix(1.3594109,0,0,1.3564242,319.2059,481.99447)">
<rect
transform="matrix(0.47304779,0,0,0.4807373,-6.3607039,-29.396216)"
rx="4.4136767"
y="125.3458"
x="50.440369"
height="29.154205"
width="29.559635"
id="rect11803"
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"
ry="4.4233952" />
<path
inkscape:connector-curvature="0"
id="path11809"
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="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"
sodipodi:nodetypes="csssscssc" />
<path
sodipodi:nodetypes="csssscssc"
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"
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"
id="path11867"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path11869"
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"
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"
sodipodi:nodetypes="csssscssc" />
</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>
</svg>

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -14,8 +14,8 @@
height="22"
id="svg3199"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="checkbox-focused.svg">
inkscape:version="0.48.5 r10040"
sodipodi:docname="checkbox.svg">
<defs
id="defs3201">
<linearGradient
@ -131,30 +131,55 @@
id="linearGradient15376"
xlink:href="#linearGradient10597-5"
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>
<sodipodi:namedview
id="base"
pagecolor="#000000"
pagecolor="#a2a2a2"
bordercolor="#2d2d2d"
borderopacity="1"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="64.516955"
inkscape:cy="13.871056"
inkscape:cx="-0.17876005"
inkscape:cy="11.944326"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1412"
inkscape:window-height="1067"
inkscape:window-x="2635"
inkscape:window-y="226"
inkscape:window-maximized="0"
inkscape:window-width="2560"
inkscape:window-height="1375"
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="false">
showborder="true">
<inkscape:grid
type="xygrid"
id="grid14843"
@ -171,7 +196,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@ -181,63 +206,56 @@
id="layer1"
transform="translate(-342.5,-521.36218)">
<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">
<rect
transform="scale(1,-1)"
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"
id="rect6506-6"
width="11.281681"
height="11.26221"
x="-409.59354"
y="-284.40115"
rx="0.95632279"
ry="0.95632273" />
</g>
</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>
style="display:inline"
id="use5671"
transform="matrix(1.3594109,0,0,1.3564242,319.2059,481.99447)">
<rect
transform="matrix(0.47304779,0,0,0.4807373,-6.3607039,-29.396216)"
rx="4.4136767"
y="125.3458"
x="50.440369"
height="29.154205"
width="29.559635"
id="rect11803"
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"
ry="4.4233952" />
<path
inkscape:connector-curvature="0"
id="path11809"
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="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"
sodipodi:nodetypes="csssscssc" />
<path
sodipodi:nodetypes="csssscssc"
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"
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"
id="path11867"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path11869"
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"
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"
sodipodi:nodetypes="csssscssc" />
</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>
</svg>

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
$variant: 'dark';
@import "_gnome-shell-old.scss"; //temporary. sadlu shell crashes when trying to build a theme from scratch
@import "_colors"; //use gtk colors
@import "_drawing";
@import "_common";

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

View File

@ -1,74 +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="17"
height="10"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="panel-button-border.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="44.8"
inkscape:cx="8.6594891"
inkscape:cy="5.7029946"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1440"
inkscape:window-height="843"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1"
guidetolerance="10000"
objecttolerance="10000">
<inkscape:grid
type="xygrid"
id="grid3792"
empspacing="10"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<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="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke-width:0.43599999;stroke-miterlimit:4;stroke-dasharray:none"
id="rect3796"
width="7"
height="2"
x="5"
y="8" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1,111 +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="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>

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -1,111 +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="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>

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -12,7 +12,7 @@
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg5369"
version="1.1"
inkscape:version="0.48+devel r10053 custom"
inkscape:version="0.48.5 r10040"
width="96"
height="48"
sodipodi:docname="process-working.svg"
@ -25,12 +25,597 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs5373" />
id="defs5373">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient35326"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<linearGradient
id="linearGradient8231-1-4-4-1">
<stop
id="stop8233-28-5-27-1"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0.15428571"
offset="0.31861392"
id="stop8235-7-3-94-3" />
<stop
id="stop8237-7-8-20-2"
offset="0.54270232"
style="stop-color:#ffffff;stop-opacity:0.33714285" />
<stop
id="stop8239-2-9-1-9"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient35230"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<linearGradient
id="linearGradient5767-6">
<stop
id="stop5769-0"
offset="0"
style="stop-color:#bebebe;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0.31861392"
id="stop5771-1" />
<stop
id="stop5773-7"
offset="0.75051737"
style="stop-color:#ffffff;stop-opacity:0.42857143" />
<stop
id="stop5775-8"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10255"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<linearGradient
id="linearGradient10257">
<stop
id="stop10259"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0.15428571"
offset="0.31861392"
id="stop10261" />
<stop
id="stop10263"
offset="0.54270232"
style="stop-color:#ffffff;stop-opacity:0.33714285" />
<stop
id="stop10265"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10267"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<linearGradient
id="linearGradient10269">
<stop
id="stop10271"
offset="0"
style="stop-color:#bebebe;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0.31861392"
id="stop10273" />
<stop
id="stop10275"
offset="0.75051737"
style="stop-color:#ffffff;stop-opacity:0.42857143" />
<stop
id="stop10277"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10279"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<linearGradient
id="linearGradient10281">
<stop
id="stop10283"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0.15428571"
offset="0.31861392"
id="stop10285" />
<stop
id="stop10287"
offset="0.54270232"
style="stop-color:#ffffff;stop-opacity:0.33714285" />
<stop
id="stop10289"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10291"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<linearGradient
id="linearGradient10293">
<stop
id="stop10295"
offset="0"
style="stop-color:#bebebe;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0.31861392"
id="stop10297" />
<stop
id="stop10299"
offset="0.75051737"
style="stop-color:#ffffff;stop-opacity:0.42857143" />
<stop
id="stop10301"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10303"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<linearGradient
id="linearGradient10305">
<stop
id="stop10307"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0.15428571"
offset="0.31861392"
id="stop10309" />
<stop
id="stop10311"
offset="0.54270232"
style="stop-color:#ffffff;stop-opacity:0.33714285" />
<stop
id="stop10313"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10315"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<linearGradient
id="linearGradient10317">
<stop
id="stop10319"
offset="0"
style="stop-color:#bebebe;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0.31861392"
id="stop10321" />
<stop
id="stop10323"
offset="0.75051737"
style="stop-color:#ffffff;stop-opacity:0.42857143" />
<stop
id="stop10325"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10327"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<linearGradient
id="linearGradient10329">
<stop
id="stop10331"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0.15428571"
offset="0.31861392"
id="stop10333" />
<stop
id="stop10335"
offset="0.54270232"
style="stop-color:#ffffff;stop-opacity:0.33714285" />
<stop
id="stop10337"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10339"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<linearGradient
id="linearGradient10341">
<stop
id="stop10343"
offset="0"
style="stop-color:#bebebe;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0.31861392"
id="stop10345" />
<stop
id="stop10347"
offset="0.75051737"
style="stop-color:#ffffff;stop-opacity:0.42857143" />
<stop
id="stop10349"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10351"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<linearGradient
id="linearGradient10353">
<stop
id="stop10355"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0.15428571"
offset="0.31861392"
id="stop10357" />
<stop
id="stop10359"
offset="0.54270232"
style="stop-color:#ffffff;stop-opacity:0.33714285" />
<stop
id="stop10361"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10363"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<linearGradient
id="linearGradient10365">
<stop
id="stop10367"
offset="0"
style="stop-color:#bebebe;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0.31861392"
id="stop10369" />
<stop
id="stop10371"
offset="0.75051737"
style="stop-color:#ffffff;stop-opacity:0.42857143" />
<stop
id="stop10373"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10375"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<linearGradient
id="linearGradient10377">
<stop
id="stop10379"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0.15428571"
offset="0.31861392"
id="stop10381" />
<stop
id="stop10383"
offset="0.54270232"
style="stop-color:#ffffff;stop-opacity:0.33714285" />
<stop
id="stop10385"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10387"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<linearGradient
id="linearGradient10389">
<stop
id="stop10391"
offset="0"
style="stop-color:#bebebe;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0.31861392"
id="stop10393" />
<stop
id="stop10395"
offset="0.75051737"
style="stop-color:#ffffff;stop-opacity:0.42857143" />
<stop
id="stop10397"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10399"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<linearGradient
id="linearGradient10401">
<stop
id="stop10403"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0.15428571"
offset="0.31861392"
id="stop10405" />
<stop
id="stop10407"
offset="0.54270232"
style="stop-color:#ffffff;stop-opacity:0.33714285" />
<stop
id="stop10409"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10411"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<linearGradient
id="linearGradient10413">
<stop
id="stop10415"
offset="0"
style="stop-color:#bebebe;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0.31861392"
id="stop10417" />
<stop
id="stop10419"
offset="0.75051737"
style="stop-color:#ffffff;stop-opacity:0.42857143" />
<stop
id="stop10421"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10423"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<linearGradient
id="linearGradient10425">
<stop
id="stop10427"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0.15428571"
offset="0.31861392"
id="stop10429" />
<stop
id="stop10431"
offset="0.54270232"
style="stop-color:#ffffff;stop-opacity:0.33714285" />
<stop
id="stop10433"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10435"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<linearGradient
id="linearGradient10437">
<stop
id="stop10439"
offset="0"
style="stop-color:#bebebe;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0.31861392"
id="stop10441" />
<stop
id="stop10443"
offset="0.75051737"
style="stop-color:#ffffff;stop-opacity:0.42857143" />
<stop
id="stop10445"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10709"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10711"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8231-1-4-4-1"
id="radialGradient10713"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.229454,-1.2865389,1.2087442,2.0939897,-228.90301,-208.08725)"
cx="-0.067823187"
cy="188.51917"
fx="-0.067823187"
fy="188.51917"
r="27.330345" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5767-6"
id="radialGradient10715"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1252013,-0.60470548,0.56813832,1.0568583,-107.67128,-11.948108)"
cx="0.053942412"
cy="189.15244"
fx="0.053942412"
fy="189.15244"
r="27.330345" />
</defs>
<sodipodi:namedview
pagecolor="#808080"
bordercolor="#666666"
@ -46,13 +631,15 @@
showgrid="true"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:zoom="16"
inkscape:cx="53.997662"
inkscape:cy="22.367695"
inkscape:window-x="1600"
inkscape:zoom="5.6568542"
inkscape:cx="40.82607"
inkscape:cy="30.594699"
inkscape:window-x="2560"
inkscape:window-y="33"
inkscape:window-maximized="0"
inkscape:current-layer="layer2">
inkscape:current-layer="layer2"
inkscape:snap-bbox="true"
inkscape:snap-nodes="false">
<inkscape:grid
type="xygrid"
id="grid11933"
@ -128,134 +715,97 @@
id="layer2"
inkscape:label="spinner">
<g
transform="matrix(0.28240106,0,0,0.28240106,146.92015,-382.52444)"
id="g10450-5"
transform="matrix(0.43142675,0,0,0.43298814,218.13188,-592.92581)"
id="g10450-5-3"
style="display:inline">
<path
inkscape:connector-curvature="0"
style="opacity:0.6;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m -477.76072,1373.3569 0,9.4717"
id="path18768"
sodipodi:nodetypes="cc"
inkscape:transform-center-y="-4.6808838" />
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/hbons/Moblin/git/carrick-ng/data/icons/network-connecting.png"
sodipodi:open="true"
sodipodi:end="4.712389"
sodipodi:start="0.23191105"
sodipodi:type="arc"
style="fill:none;stroke:url(#radialGradient10713);stroke-width:12.18051815;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
id="path10452-5"
sodipodi:cx="-25.809397"
sodipodi:cy="179.43886"
sodipodi:rx="22.98097"
sodipodi:ry="22.98097"
d="m -3.4436513,184.72075 c -2.9171108,12.35226 -15.2953817,20.00096 -27.6476417,17.08385 -12.35226,-2.91711 -20.00096,-15.29538 -17.083849,-27.64764 2.449452,-10.372 11.708437,-17.69907 22.365746,-17.69907"
transform="matrix(-0.16397381,0.61157081,-0.61162275,-0.16377992,-372.32298,1442.5061)" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="-3.3099227"
sodipodi:nodetypes="cc"
id="path18770"
d="m -461.0171,1380.2922 -7.23427,7.3824"
style="opacity:0.7;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:transform-center-x="-3.3098966" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-x="-4.6808962"
style="opacity:0.8;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m -454.08163,1397.0359 -9.47165,0"
id="path18772"
sodipodi:nodetypes="cc"
inkscape:transform-center-y="-2.6596956e-05" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path18774"
d="m -461.01709,1413.7796 -6.93831,-7.0864"
style="opacity:0.9;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:transform-center-x="-3.3098966"
inkscape:transform-center-y="3.3098652" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="4.6808757"
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m -477.76074,1420.715 9e-5,-9.4716"
id="path18776"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path18778"
d="m -494.50442,1413.7796 6.79048,-6.9384"
style="opacity:0.3;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:transform-center-y="3.3098769"
inkscape:transform-center-x="3.3098883" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-x="4.6808941"
style="opacity:0.4;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m -501.43987,1397.0359 9.47174,0"
id="path18780"
sodipodi:nodetypes="cc"
inkscape:transform-center-y="-2.6596956e-05" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path18782"
d="m -494.5044,1380.2922 6.64243,6.9384"
style="opacity:0.5;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:transform-center-x="3.3098902"
inkscape:transform-center-y="-3.3099302" />
transform="matrix(-0.63300818,0.01438356,-0.01458424,-0.63300359,-491.4014,1510.996)"
d="m -3.4436513,184.72075 c -2.9171108,12.35226 -15.2953817,20.00096 -27.6476417,17.08385 -12.35226,-2.91711 -20.00096,-15.29538 -17.083849,-27.64764 2.449452,-10.372 11.708437,-17.69907 22.365746,-17.69907"
sodipodi:ry="22.98097"
sodipodi:rx="22.98097"
sodipodi:cy="179.43886"
sodipodi:cx="-25.809397"
id="path10454-7"
style="fill:none;stroke:url(#radialGradient10715);stroke-width:12.18051815;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc"
sodipodi:start="0.23191105"
sodipodi:end="4.712389"
sodipodi:open="true"
inkscape:export-filename="/home/hbons/Moblin/git/carrick-ng/data/icons/network-connecting.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
</g>
<use
style="display:inline"
x="0"
y="0"
xlink:href="#g10450-5"
id="use4981"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,36,-4.9705636)"
width="400"
height="400" />
xlink:href="#g10450-5-3"
id="use13294"
transform="matrix(0.70710678,0.70710679,-0.70710679,0.70710678,35.986458,-4.9737924)"
width="96"
height="48" />
<use
style="display:inline"
x="0"
y="0"
xlink:href="#use4981"
id="use4983"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,43.032478,-21.909695)"
width="400"
height="400" />
xlink:href="#use13294"
id="use13314"
transform="matrix(0.70710678,0.70710679,-0.70710679,0.70710678,43.036943,-21.933639)"
width="96"
height="48" />
<use
style="display:inline"
x="0"
y="0"
xlink:href="#use4983"
id="use4985"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,50.081986,-38.904617)"
width="400"
height="400" />
xlink:href="#use13314"
id="use13334"
transform="matrix(0.70710678,0.70710679,-0.70710679,0.70710678,50.085328,-38.904987)"
width="96"
height="48" />
<use
style="display:inline"
x="0"
y="0"
xlink:href="#use4985"
id="use4987"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,-38.919996,-31.872139)"
width="400"
height="400" />
xlink:href="#use13334"
id="use13354"
transform="matrix(0.70710678,0.70710679,-0.70710679,0.70710678,-38.894841,-31.888724)"
width="96"
height="48" />
<use
style="display:inline"
x="0"
y="0"
xlink:href="#use4987"
id="use4989"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,52.986628,2.0890543)"
width="400"
height="400" />
xlink:href="#use13354"
id="use13374"
transform="matrix(0.70710678,0.70710679,-0.70710679,0.70710678,52.971072,2.0670843)"
width="96"
height="48" />
<use
style="display:inline"
x="0"
y="0"
xlink:href="#use4989"
id="use4991"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,60.013026,-14.912936)"
width="400"
height="400" />
xlink:href="#use13374"
id="use13394"
transform="matrix(0.70710678,0.70710679,-0.70710679,0.70710678,60.017834,-14.929741)"
width="96"
height="48" />
<use
style="display:inline"
x="0"
y="0"
xlink:href="#use4991"
id="use4993"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,67.022396,-31.859127)"
width="400"
height="400" />
xlink:href="#use13394"
id="use13414"
transform="matrix(0.86602541,0.50000001,-0.50000001,0.86602541,50.044124,-25.16226)"
width="96"
height="48" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -7,51 +7,127 @@
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="65"
height="22"
id="svg3273"
id="svg2857"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="New document 14">
inkscape:version="0.48.5 r10040"
sodipodi:docname="toggle-off-us.svg">
<defs
id="defs3275">
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="perspective3281" />
id="perspective2865" />
<inkscape:perspective
id="perspective3261"
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" />
<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>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="32.000004"
inkscape:cy="10.999997"
inkscape:zoom="1"
inkscape:cx="-5.0602834"
inkscape:cy="16.473273"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:current-layer="g37994"
showgrid="false"
inkscape:window-width="609"
inkscape:window-height="501"
inkscape:window-width="2560"
inkscape:window-height="1375"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="0" />
inkscape:window-y="27"
inkscape:window-maximized="1"
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
id="metadata3278">
id="metadata2862">
<rdf:RDF>
<cc:Work
rdf:about="">
@ -66,61 +142,68 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-343,-521.36218)">
transform="translate(-444.64286,-781.36218)">
<g
id="g17454"
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" />
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
id="g37994">
<g
transform="matrix(-1,0,0,1,1619.1239,-33.986291)"
id="g17460"
style="display:inline">
<path
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 803.6322,115.48629 0,4.29495"
id="path17462"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
d="m 806.62805,115.48629 0,4.29495"
id="path17464"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
d="m 809.6239,115.48629 0,4.29495"
id="path17466"
inkscape:connector-curvature="0" />
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(#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>
<path
sodipodi:type="arc"
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="path18722"
sodipodi:cx="47.6875"
sodipodi:cy="11.5625"
sodipodi:rx="3.9375"
sodipodi:ry="3.9375"
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.0158729,0,0,1.0158729,795.55556,72.25399)" />
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"
id="path13479"
sodipodi:cx="16.4375"
sodipodi:cy="10.8125"
sodipodi:rx="4.3125"
sodipodi:ry="4.3125"
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"
transform="matrix(1.4212691,0,0,1.1514287,577.38488,1761.1138)" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@ -7,51 +7,171 @@
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="65"
height="22"
id="svg3012"
id="svg2857"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="New document 6">
inkscape:version="0.48.5 r10040"
sodipodi:docname="toggle-on-intl.svg">
<defs
id="defs3014">
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="perspective3020" />
id="perspective2865" />
<inkscape:perspective
id="perspective2997"
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" />
<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>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="32.000004"
inkscape:cy="10.999997"
inkscape:zoom="1"
inkscape:cx="16.760995"
inkscape:cy="21.955673"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:current-layer="g37994"
showgrid="false"
inkscape:window-width="609"
inkscape:window-height="501"
inkscape:window-width="2560"
inkscape:window-height="1375"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="0" />
inkscape:window-y="27"
inkscape:window-maximized="1"
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
id="metadata3017">
id="metadata2862">
<rdf:RDF>
<cc:Work
rdf:about="">
@ -66,73 +186,70 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-343,-521.36218)">
transform="translate(-444.64286,-781.36218)">
<g
id="g17454"
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" />
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
id="g37994">
<g
transform="matrix(-1,0,0,1,1619.1239,-33.986291)"
id="g17460"
style="display:inline">
<path
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 803.6322,115.48629 0,4.29495"
id="path17462"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
d="m 806.62805,115.48629 0,4.29495"
id="path17464"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#5f5f5f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
d="m 809.6239,115.48629 0,4.29495"
id="path17466"
inkscape:connector-curvature="0" />
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(#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
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="text17468"
transform="translate(0.34375,0)">
<path
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"
style="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
id="path18599"
inkscape:connector-curvature="0" />
<path
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"
style="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
id="path18601"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccc" />
<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"
style="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
id="path18603"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccc" />
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>
<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>
</svg>

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@ -7,51 +7,113 @@
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="65"
height="22"
id="svg3199"
id="svg2857"
version="1.1"
inkscape:version="0.48.1 r9760"
inkscape:version="0.48.5 r10040"
sodipodi:docname="toggle-on-intl.svg">
<defs
id="defs3201">
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="perspective3207" />
id="perspective2865" />
<inkscape:perspective
id="perspective3187"
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" />
<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:#204a87;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>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="49.147112"
inkscape:cy="17.532036"
inkscape:zoom="32"
inkscape:cx="17.255148"
inkscape:cy="8.9252639"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1412"
inkscape:window-height="1067"
inkscape:current-layer="g37994"
showgrid="true"
inkscape:window-width="2560"
inkscape:window-height="1375"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="0" />
inkscape:window-y="27"
inkscape:window-maximized="1"
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
id="metadata3204">
id="metadata2862">
<rdf:RDF>
<cc:Work
rdf:about="">
@ -66,57 +128,65 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-342.5,-521.36218)">
transform="translate(-444.64286,-781.36218)">
<g
style="display:inline"
transform="translate(-453.5,448.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)" />
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
id="g37994">
<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" />
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>
<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
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
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"
id="rect13678"
width="3.0646207"
height="12.414008"
x="554.77728"
y="1767.3566" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -7,13 +7,14 @@
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="65"
height="22"
id="svg2857"
version="1.1"
inkscape:version="0.48.1 r9760"
inkscape:version="0.48.5 r10040"
sodipodi:docname="toggle-on-us.svg">
<defs
id="defs2859">
@ -31,27 +32,86 @@
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
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:#204a87;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>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="19.689855"
inkscape:cy="2.0517979"
inkscape:cx="33.380898"
inkscape:cy="6.9658271"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:current-layer="g37994"
showgrid="false"
inkscape:window-width="941"
inkscape:window-height="751"
inkscape:window-x="2577"
inkscape:window-y="206"
inkscape:window-maximized="0"
inkscape:window-width="2560"
inkscape:window-height="1375"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
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
id="metadata2862">
<rdf:RDF>
@ -70,61 +130,68 @@
id="layer1"
transform="translate(-444.64286,-781.36218)">
<g
style="display:inline"
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)" />
transform="matrix(0.6526046,0,0,0.80554422,99.592644,-636.32172)"
id="g37994">
<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" />
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
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="text42229-3-0">
<path
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="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
id="path18606" />
<path
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"
style="line-height:125%;fill:#ffffff;fill-opacity:1;marker:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
id="path18608" />
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>
<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>
</svg>

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -1,6 +1,7 @@
// -*- 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 Signals = imports.signals;
const St = imports.gi.St;
@ -126,7 +127,7 @@ const AuthPrompt = new Lang.Class({
this._initButtons();
let spinnerIcon = global.datadir + '/theme/process-working.svg';
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();

View File

@ -537,24 +537,24 @@ const LoginDialog = new Lang.Class({
}
},
_updateLogoTexture: function(cache, uri) {
if (this._logoFileUri != uri)
_updateLogoTexture: function(cache, file) {
if (this._logoFile && !this._logoFile.equal(file))
return;
this._logoBin.destroy_all_children();
if (this._logoFileUri) {
if (this._logoFile) {
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._logoBin.add_child(this._textureCache.load_uri_async(this._logoFileUri,
-1, _LOGO_ICON_HEIGHT,
scaleFactor));
this._logoBin.add_child(this._textureCache.load_file_async(this._logoFile,
-1, _LOGO_ICON_HEIGHT,
scaleFactor));
}
},
_updateLogo: function() {
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
this._logoFileUri = path ? Gio.file_new_for_path(path).get_uri() : null;
this._updateLogoTexture(this._textureCache, this._logoFileUri);
this._logoFile = path ? Gio.file_new_for_path(path) : null;
this._updateLogoTexture(this._textureCache, this._logoFile);
},
_onPrompted: function() {

View File

@ -35,7 +35,7 @@ function releaseKeyboard() {
}
function holdKeyboard() {
global.freeze_keyboard(global.get_current_time());
global.display.freeze_keyboard(global.get_current_time());
}
const KeyboardManager = new Lang.Class({

View File

@ -12,7 +12,7 @@ const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const Animation = new Lang.Class({
Name: 'Animation',
_init: function(filename, width, height, speed) {
_init: function(file, width, height, speed) {
this.actor = new St.Bin();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._speed = speed;
@ -23,7 +23,7 @@ const Animation = new Lang.Class({
this._frame = 0;
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._animations = St.TextureCache.get_default().load_sliced_image (filename, width, height, scaleFactor,
this._animations = St.TextureCache.get_default().load_sliced_image (file, width, height, scaleFactor,
Lang.bind(this, this._animationsLoaded));
this.actor.set_child(this._animations);
},
@ -82,7 +82,7 @@ const AnimatedIcon = new Lang.Class({
Name: 'AnimatedIcon',
Extends: Animation,
_init: function(filename, size) {
this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
_init: function(file, size) {
this.parent(file, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
}
});

View File

@ -379,9 +379,7 @@ const AllView = new Lang.Class({
this.actor.add_actor(this._scrollView);
this._scrollView.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC);
// we are only using ScrollView for the fade effect, hide scrollbars
this._scrollView.vscroll.hide();
Gtk.PolicyType.EXTERNAL);
this._adjustment = this._scrollView.vscroll.adjustment;
this._pageIndicators = new PageIndicators();
@ -1519,13 +1517,33 @@ const AppIcon = new Lang.Class({
this.id = app.get_id();
this.name = app.get_name();
this.actor = new St.Button({ style_class: 'app-well-app',
// We need to make it track_hover so dash item can connect to
// the hover signal of the actor in _hookupLabel to call
// shouldShowTooltip when hovered.
this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout(),
reactive: true,
button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO,
can_focus: true,
x_fill: true,
y_fill: true });
track_hover: true });
this._dot = new St.Widget({ style_class: 'app-well-app-running-dot',
layout_manager: new Clutter.BinLayout(),
x_expand: true, y_expand: true,
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.END });
this._dot.hide();
this._button = new St.Button({ style_class: 'app-well-app',
reactive: true,
button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO,
can_focus: true,
x_fill: true,
y_fill: true });
this.actor.add_actor(this._button);
this.actor.add_actor(this._dot);
this.actor._delegate = this;
this._button._delegate = this;
if (!iconParams)
iconParams = {};
@ -1533,20 +1551,20 @@ const AppIcon = new Lang.Class({
iconParams['createIcon'] = Lang.bind(this, this._createIcon);
iconParams['setSizeManually'] = true;
this.icon = new IconGrid.BaseIcon(app.get_name(), iconParams);
this.actor.set_child(this.icon.actor);
this._button.set_child(this.icon.actor);
this.actor.label_actor = this.icon.label;
this.actor.connect('leave-event', Lang.bind(this, this._onLeaveEvent));
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
this.actor.connect('touch-event', Lang.bind(this, this._onTouchEvent));
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this.actor.connect('popup-menu', Lang.bind(this, this._onKeyboardPopupMenu));
this._button.connect('leave-event', Lang.bind(this, this._onLeaveEvent));
this._button.connect('button-press-event', Lang.bind(this, this._onButtonPress));
this._button.connect('touch-event', Lang.bind(this, this._onTouchEvent));
this._button.connect('clicked', Lang.bind(this, this._onClicked));
this._button.connect('popup-menu', Lang.bind(this, this._onKeyboardPopupMenu));
this._menu = null;
this._menuManager = new PopupMenu.PopupMenuManager(this);
this._draggable = DND.makeDraggable(this.actor);
this._draggable = DND.makeDraggable(this._button);
this._draggable.connect('drag-begin', Lang.bind(this,
function () {
this._removeMenuTimeout();
@ -1564,10 +1582,23 @@ const AppIcon = new Lang.Class({
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._menuTimeoutId = 0;
this._stateChangedId = this.app.connect('notify::state',
Lang.bind(this,
this._onStateChanged));
this._onStateChanged();
this._stateChangedId = this.app.connect('notify::state', Lang.bind(this,
function () {
this._updateRunningStyle();
}));
this._updateRunningStyle();
},
// Needed for containers that want to track focus of the widget
// for i.e. scroll the container when navigating through items
getFocusReceiver: function () {
return this._button;
},
// Needed for containers that want to change style of the widget
// for i.e. set as selected when searching in shell
getStyleReceiver: function () {
return this._button;
},
_onDestroy: function() {
@ -1588,11 +1619,14 @@ const AppIcon = new Lang.Class({
}
},
_onStateChanged: function() {
if (this.app.state != Shell.AppState.STOPPED)
this.actor.add_style_class_name('running');
else
this.actor.remove_style_class_name('running');
_updateRunningStyle: function() {
if (this.app.state != Shell.AppState.STOPPED) {
this._button.add_style_class_name('running');
this._dot.show();
} else {
this._button.remove_style_class_name('running');
this._dot.hide();
}
},
_setPopupTimeout: function() {
@ -1607,7 +1641,7 @@ const AppIcon = new Lang.Class({
},
_onLeaveEvent: function(actor, event) {
this.actor.fake_release();
this._button.fake_release();
this._removeMenuTimeout();
},
@ -1645,7 +1679,7 @@ const AppIcon = new Lang.Class({
popupMenu: function() {
this._removeMenuTimeout();
this.actor.fake_release();
this._button.fake_release();
this._draggable.fakeRelease();
if (!this._menu) {
@ -1664,7 +1698,7 @@ const AppIcon = new Lang.Class({
this.emit('menu-state-changed', true);
this.actor.set_hover(true);
this._button.set_hover(true);
this._menu.popup();
this._menuManager.ignoreRelease();
this.emit('sync-tooltip');
@ -1681,7 +1715,7 @@ const AppIcon = new Lang.Class({
},
_onMenuPoppedDown: function() {
this.actor.sync_hover();
this._button.sync_hover();
this.emit('menu-state-changed', false);
},

View File

@ -106,6 +106,8 @@ const Main = imports.ui.main;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
const PRIMARY_COLOR_KEY = 'primary-color';
const SECONDARY_COLOR_KEY = 'secondary-color';
@ -125,6 +127,16 @@ const ANIMATION_MIN_WAKEUP_INTERVAL = 1.0;
let _backgroundCache = null;
function _fileEqual0(file1, file2) {
if (file1 == file2)
return true;
if (!file1 || !file2)
return false;
return file1.equal(file2);
}
const BackgroundCache = new Lang.Class({
Name: 'BackgroundCache',
@ -134,25 +146,25 @@ const BackgroundCache = new Lang.Class({
this._backgroundSources = {};
},
monitorFile: function(filename) {
if (this._fileMonitors[filename])
monitorFile: function(file) {
let key = file.hash();
if (this._fileMonitors[key])
return;
let file = Gio.File.new_for_path(filename);
let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null);
monitor.connect('changed',
Lang.bind(this, function() {
this.emit('file-changed', filename);
this.emit('file-changed', file);
}));
this._fileMonitors[filename] = monitor;
this._fileMonitors[key] = monitor;
},
getAnimation: function(params) {
params = Params.parse(params, { filename: null,
params = Params.parse(params, { file: null,
onLoaded: null });
if (this._animationFilename == params.filename) {
if (_fileEqual0(this._animationFile, params.file)) {
if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
params.onLoaded(this._animation);
@ -160,12 +172,13 @@ const BackgroundCache = new Lang.Class({
}));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
}
return;
}
let animation = new Animation({ filename: params.filename });
let animation = new Animation({ file: params.file });
animation.load(Lang.bind(this, function() {
this._animationFilename = params.filename;
this._animationFile = params.file;
this._animation = animation;
if (params.onLoaded) {
@ -218,14 +231,14 @@ const Background = new Lang.Class({
params = Params.parse(params, { monitorIndex: 0,
layoutManager: Main.layoutManager,
settings: null,
filename: null,
file: null,
style: null });
this.background = new Meta.Background({ meta_screen: global.screen });
this.background._delegate = this;
this._settings = params.settings;
this._filename = params.filename;
this._file = params.file;
this._style = params.style;
this._monitorIndex = params.monitorIndex;
this._layoutManager = params.layoutManager;
@ -292,20 +305,21 @@ const Background = new Lang.Class({
this.background.set_gradient(shadingType, color, secondColor);
},
_watchFile: function(filename) {
if (this._fileWatches[filename])
_watchFile: function(file) {
let key = file.hash();
if (this._fileWatches[key])
return;
this._cache.monitorFile(filename);
this._cache.monitorFile(file);
let signalId = this._cache.connect('file-changed',
Lang.bind(this, function(cache, changedFile) {
if (changedFile == filename) {
if (changedFile.equal(file)) {
let imageCache = Meta.BackgroundImageCache.get_default();
imageCache.purge(changedFile);
this.emit('changed');
}
}));
this._fileWatches[filename] = signalId;
this._fileWatches[key] = signalId;
},
_removeAnimationTimeout: function() {
@ -328,9 +342,9 @@ const Background = new Lang.Class({
this._animation.transitionProgress,
this._style);
} else if (files.length > 0) {
this.background.set_filename(files[0], this._style);
this.background.set_file(files[0], this._style);
} else {
this.background.set_filename(null, this._style);
this.background.set_file(null, this._style);
}
this._queueUpdateAnimation();
});
@ -387,28 +401,28 @@ const Background = new Lang.Class({
GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation');
},
_loadAnimation: function(filename) {
this._cache.getAnimation({ filename: filename,
onLoaded: Lang.bind(this, function(animation) {
this._animation = animation;
_loadAnimation: function(file) {
this._cache.getAnimation({ file: file,
onLoaded: Lang.bind(this, function(animation) {
this._animation = animation;
if (!this._animation || this._cancellable.is_cancelled()) {
this._setLoaded();
return;
}
if (!this._animation || this._cancellable.is_cancelled()) {
this._setLoaded();
return;
}
this._updateAnimation();
this._watchFile(filename);
})
});
this._updateAnimation();
this._watchFile(file);
})
});
},
_loadImage: function(filename) {
this.background.set_filename(filename, this._style);
this._watchFile(filename);
_loadImage: function(file) {
this.background.set_file(file, this._style);
this._watchFile(file);
let cache = Meta.BackgroundImageCache.get_default();
let image = cache.load(filename);
let image = cache.load(file);
if (image.is_loaded())
this._setLoaded();
else {
@ -420,11 +434,11 @@ const Background = new Lang.Class({
}
},
_loadFile: function(filename) {
if (filename.endsWith('.xml'))
this._loadAnimation(filename);
_loadFile: function(file) {
if (file.get_basename().endsWith('.xml'))
this._loadAnimation(file);
else
this._loadImage(filename);
this._loadImage(file);
},
_load: function () {
@ -432,12 +446,12 @@ const Background = new Lang.Class({
this._loadPattern();
if (!this._filename) {
if (!this._file) {
this._setLoaded();
return;
}
this._loadFile(this._filename);
this._loadFile(this._file);
},
});
Signals.addSignalMethods(Background.prototype);
@ -448,11 +462,12 @@ const SystemBackground = new Lang.Class({
Name: 'SystemBackground',
_init: function() {
let filename = global.datadir + '/theme/noise-texture.png';
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png');
if (_systemBackground == null) {
_systemBackground = new Meta.Background({ meta_screen: global.screen });
_systemBackground.set_filename(filename, GDesktopEnums.BackgroundStyle.WALLPAPER);
_systemBackground.set_color(DEFAULT_BACKGROUND_COLOR);
_systemBackground.set_file(file, GDesktopEnums.BackgroundStyle.WALLPAPER);
}
this.actor = new Meta.BackgroundActor({ meta_screen: global.screen,
@ -460,7 +475,7 @@ const SystemBackground = new Lang.Class({
background: _systemBackground });
let cache = Meta.BackgroundImageCache.get_default();
let image = cache.load(filename);
let image = cache.load(file);
if (image.is_loaded()) {
image = null;
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
@ -509,20 +524,17 @@ const BackgroundSource = new Lang.Class({
},
getBackground: function(monitorIndex) {
let filename = null;
let file = null;
let style;
if (this._overrideImage != null) {
filename = this._overrideImage;
file = Gio.File.new_for_path(this._overrideImage);
style = GDesktopEnums.BackgroundStyle.ZOOM; // Hardcode
} else {
style = this._settings.get_enum(BACKGROUND_STYLE_KEY);
if (style != GDesktopEnums.BackgroundStyle.NONE) {
let uri = this._settings.get_string(PICTURE_URI_KEY);
if (GLib.uri_parse_scheme(uri) != null)
filename = Gio.File.new_for_uri(uri).get_path();
else
filename = uri;
file = Gio.File.new_for_commandline_arg(uri);
}
}
@ -530,7 +542,7 @@ const BackgroundSource = new Lang.Class({
// they can have variants that depend on the aspect ratio and
// size of the monitor; for other backgrounds we can use the
// same background object for all monitors.
if (filename == null || !filename.endsWith('.xml'))
if (file == null || !file.get_basename().endsWith('.xml'))
monitorIndex = 0;
if (!(monitorIndex in this._backgrounds)) {
@ -538,7 +550,7 @@ const BackgroundSource = new Lang.Class({
monitorIndex: monitorIndex,
layoutManager: this._layoutManager,
settings: this._settings,
filename: filename,
file: file,
style: style
});
@ -571,9 +583,9 @@ const Animation = new Lang.Class({
Name: 'Animation',
_init: function(params) {
params = Params.parse(params, { filename: null });
params = Params.parse(params, { file: null });
this.filename = params.filename;
this.file = params.file;
this.keyFrameFiles = [];
this.transitionProgress = 0.0;
this.transitionDuration = 0.0;
@ -581,9 +593,7 @@ const Animation = new Lang.Class({
},
load: function(callback) {
let file = Gio.File.new_for_path(this.filename);
this._show = new GnomeDesktop.BGSlideShow({ filename: this.filename });
this._show = new GnomeDesktop.BGSlideShow({ filename: this.file.get_path() });
this._show.load_async(null,
Lang.bind(this,
@ -603,16 +613,16 @@ const Animation = new Lang.Class({
if (this._show.get_num_slides() < 1)
return;
let [progress, duration, isFixed, file1, file2] = this._show.get_current_slide(monitor.width, monitor.height);
let [progress, duration, isFixed, filename1, filename2] = this._show.get_current_slide(monitor.width, monitor.height);
this.transitionDuration = duration;
this.transitionProgress = progress;
if (file1)
this.keyFrameFiles.push(file1);
if (filename1)
this.keyFrameFiles.push(Gio.File.new_for_path(filename1));
if (file2)
this.keyFrameFiles.push(file2);
if (filename2)
this.keyFrameFiles.push(Gio.File.new_for_path(filename2));
},
});
Signals.addSignalMethods(Animation.prototype);

View File

@ -13,9 +13,11 @@ const Shell = imports.gi.Shell;
const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
const SHOW_WEEKDATE_KEY = 'show-weekdate';
const ELLIPSIS_CHAR = '\u2026';
// alias to prevent xgettext from picking up strings translated in GTK+
const gtk30_ = Gettext_gtk30.gettext;
const NC_ = function(context, str) { return str; };
// in org.gnome.desktop.interface
const CLOCK_FORMAT_KEY = 'clock-format';
@ -32,12 +34,10 @@ function _sameDay(dateA, dateB) {
return _sameMonth(dateA, dateB) && (dateA.getDate() == dateB.getDate());
}
/* TODO: maybe needs config - right now we assume that Saturday and
* Sunday are non-work days (not true in e.g. Israel, it's Sunday and
* Monday there)
*/
function _isWorkDay(date) {
return date.getDay() != 0 && date.getDay() != 6;
/* Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
let days = C_('calendar-no-work', "06");
return days.indexOf(date.getDay().toString()) == -1;
}
function _getBeginningOfDay(date) {
@ -58,19 +58,21 @@ function _getEndOfDay(date) {
return ret;
}
function _formatEventTime(event, clockFormat) {
function _formatEventTime(event, clockFormat, periodBegin, periodEnd) {
let ret;
if (event.allDay) {
let allDay = (event.allDay || (event.date <= periodBegin && event.end >= periodEnd));
if (allDay) {
/* Translators: Shown in calendar event list for all day events
* Keep it short, best if you can use less then 10 characters
*/
ret = C_("event list time", "All Day");
} else {
let date = event.date >= periodBegin ? event.date : event.end;
switch (clockFormat) {
case '24h':
/* Translators: Shown in calendar event list, if 24h format,
\u2236 is a ratio character, similar to : */
ret = event.date.toLocaleFormat(C_("event list time", "%H\u2236%M"));
ret = date.toLocaleFormat(C_("event list time", "%H\u2236%M"));
break;
default:
@ -79,7 +81,7 @@ function _formatEventTime(event, clockFormat) {
/* Translators: Shown in calendar event list, if 12h format,
\u2236 is a ratio character, similar to : and \u2009 is
a thin space */
ret = event.date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p"));
ret = date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p"));
break;
}
}
@ -361,6 +363,12 @@ const DBusEventSource = new Lang.Class({
result.push(event);
}
}
result.sort(function(event1, event2) {
// sort events by end time on ending day
let d1 = event1.date < begin && event1.end <= end ? event1.end : event1.date;
let d2 = event2.date < begin && event2.end <= end ? event2.end : event2.date;
return d1.getTime() - d2.getTime();
});
return result;
},
@ -721,12 +729,16 @@ const EventsList = new Lang.Class({
this._eventSource.connect('changed', Lang.bind(this, this._update));
},
_addEvent: function(event, index, includeDayName) {
_addEvent: function(event, index, includeDayName, periodBegin, periodEnd) {
let dayString;
if (includeDayName)
dayString = _getEventDayAbbreviation(event.date.getDay());
else
if (includeDayName) {
if (event.date >= periodBegin)
dayString = _getEventDayAbbreviation(event.date.getDay());
else /* show event end day if it began earlier */
dayString = _getEventDayAbbreviation(event.end.getDay());
} else {
dayString = '';
}
let dayLabel = new St.Label({ style_class: 'events-day-dayname',
text: dayString,
@ -739,16 +751,30 @@ const EventsList = new Lang.Class({
let layout = this.actor.layout_manager;
layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1);
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
let timeString = _formatEventTime(event, clockFormat);
let timeString = _formatEventTime(event, clockFormat, periodBegin, periodEnd);
let timeLabel = new St.Label({ style_class: 'events-day-time',
text: timeString,
y_align: Clutter.ActorAlign.START });
timeLabel.clutter_text.line_wrap = false;
timeLabel.clutter_text.ellipsize = false;
layout.attach(timeLabel, 1, index, 1, 1);
let preEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses',
text: ELLIPSIS_CHAR,
y_align: Clutter.ActorAlign.START });
let postEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses',
text: ELLIPSIS_CHAR,
y_align: Clutter.ActorAlign.START });
if (event.allDay || event.date >= periodBegin)
preEllipsisLabel.opacity = 0;
if (event.allDay || event.end <= periodEnd)
postEllipsisLabel.opacity = 0;
let timeLabelBoxLayout = new St.BoxLayout();
timeLabelBoxLayout.add(preEllipsisLabel);
timeLabelBoxLayout.add(timeLabel);
timeLabelBoxLayout.add(postEllipsisLabel);
layout.attach(timeLabelBoxLayout, 1, index, 1, 1);
let titleLabel = new St.Label({ style_class: 'events-day-task',
text: event.summary,
@ -759,8 +785,8 @@ const EventsList = new Lang.Class({
layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1);
},
_addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) {
let events = this._eventSource.getEvents(begin, end);
_addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) {
let events = this._eventSource.getEvents(periodBegin, periodEnd);
if (events.length == 0 && !showNothingScheduled)
return index;
@ -771,15 +797,14 @@ const EventsList = new Lang.Class({
index++;
for (let n = 0; n < events.length; n++) {
this._addEvent(events[n], index, includeDayName);
this._addEvent(events[n], index, includeDayName, periodBegin, periodEnd);
index++;
}
if (events.length == 0 && showNothingScheduled) {
let now = new Date();
/* Translators: Text to show if there are no events */
let nothingEvent = new CalendarEvent(now, now, _("Nothing Scheduled"), true);
this._addEvent(nothingEvent, index, false);
let nothingEvent = new CalendarEvent(periodBegin, periodBegin, _("Nothing Scheduled"), true);
this._addEvent(nothingEvent, index, false, periodBegin, periodEnd);
index++;
}
@ -792,14 +817,17 @@ const EventsList = new Lang.Class({
let dayBegin = _getBeginningOfDay(day);
let dayEnd = _getEndOfDay(day);
let dayString;
let dayFormat;
let now = new Date();
if (_sameYear(day, now))
/* Translators: Shown on calendar heading when selected day occurs on current year */
dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d"));
dayFormat = Shell.util_translate_time_string(NC_("calendar heading",
"%A, %B %d"));
else
/* Translators: Shown on calendar heading when selected day occurs on different year */
dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d, %Y"));
dayFormat = Shell.util_translate_time_string(NC_("calendar heading",
"%A, %B %d, %Y"));
let dayString = day.toLocaleFormat(dayFormat);
this._addPeriod(dayString, 0, dayBegin, dayEnd, false, true);
},

View File

@ -36,6 +36,8 @@ const NotificationDirection = {
RECEIVED: 'chat-received'
};
const N_ = function(s) { return s; };
function makeMessageFromTpMessage(tpMessage, direction) {
let [text, flags] = tpMessage.to_text();
@ -950,70 +952,70 @@ const ChatNotification = new Lang.Class({
// Show only the time if date is on today
if(daysAgo < 1){
/* Translators: Time in 24h format */
format = _("%H\u2236%M");
format = N_("%H\u2236%M");
}
// Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a
time string in 24h format. i.e. "Yesterday, 14:30" */
// xgettext:no-c-format
format = _("Yesterday, %H\u2236%M");
format = N_("Yesterday, %H\u2236%M");
}
// Show a week day and time if date is in the last week
else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time
string in 24h format. i.e. "Monday, 14:30" */
// xgettext:no-c-format
format = _("%A, %H\u2236%M");
format = N_("%A, %H\u2236%M");
} else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number
followed by a time string in 24h format.
i.e. "May 25, 14:30" */
// xgettext:no-c-format
format = _("%B %d, %H\u2236%M");
format = N_("%B %d, %H\u2236%M");
} else {
/* Translators: this is the month name, day number, year
number followed by a time string in 24h format.
i.e. "May 25 2012, 14:30" */
// xgettext:no-c-format
format = _("%B %d %Y, %H\u2236%M");
format = N_("%B %d %Y, %H\u2236%M");
}
} else {
// Show only the time if date is on today
if(daysAgo < 1){
/* Translators: Time in 24h format */
format = _("%l\u2236%M %p");
format = N_("%l\u2236%M %p");
}
// Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a
time string in 12h format. i.e. "Yesterday, 2:30 pm" */
// xgettext:no-c-format
format = _("Yesterday, %l\u2236%M %p");
format = N_("Yesterday, %l\u2236%M %p");
}
// Show a week day and time if date is in the last week
else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time
string in 12h format. i.e. "Monday, 2:30 pm" */
// xgettext:no-c-format
format = _("%A, %l\u2236%M %p");
format = N_("%A, %l\u2236%M %p");
} else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number
followed by a time string in 12h format.
i.e. "May 25, 2:30 pm" */
// xgettext:no-c-format
format = _("%B %d, %l\u2236%M %p");
format = N_("%B %d, %l\u2236%M %p");
} else {
/* Translators: this is the month name, day number, year
number followed by a time string in 12h format.
i.e. "May 25 2012, 2:30 pm"*/
// xgettext:no-c-format
format = _("%B %d %Y, %l\u2236%M %p");
format = N_("%B %d %Y, %l\u2236%M %p");
}
}
return date.toLocaleFormat(format);
return date.toLocaleFormat(Shell.util_translate_time_string(format));
},
appendTimestamp: function() {
@ -1264,9 +1266,8 @@ const SubscriptionRequestNotification = new Lang.Class({
let file = contact.get_avatar_file();
if (file) {
let uri = file.get_uri();
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
iconBox.child = textureCache.load_uri_async(uri, iconBox._size, iconBox._size, scaleFactor);
iconBox.child = textureCache.load_file_async(file, iconBox._size, iconBox._size, scaleFactor);
}
else {
iconBox.child = new St.Icon({ icon_name: 'avatar-default',

View File

@ -19,6 +19,8 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Calendar = imports.ui.calendar;
const N_ = function(s) { return s; };
function _onVertSepRepaint(area) {
let cr = area.get_context();
let themeNode = area.get_theme_node();
@ -129,7 +131,7 @@ const DateMenuButton = new Lang.Class({
/* Translators: This is the date format to use when the calendar popup is
* shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
*/
let dateFormat = _("%A %B %e, %Y");
let dateFormat = Shell.util_translate_time_string (N_("%A %B %e, %Y"));
this._date.set_label(now.toLocaleFormat(dateFormat));
}
}));
@ -147,7 +149,7 @@ const DateMenuButton = new Lang.Class({
let now = new Date();
return now.getYear() == date.getYear() &&
now.getMonth() == date.getMonth() &&
now.getDay() == date.getDay();
now.getDate() == date.getDate();
},
_appInstalledChanged: function() {
@ -173,6 +175,10 @@ const DateMenuButton = new Lang.Class({
}
},
_getEventSource: function() {
return new Calendar.DBusEventSource();
},
_setEventSource: function(eventSource) {
if (this._eventSource)
this._eventSource.destroy();
@ -190,7 +196,7 @@ const DateMenuButton = new Lang.Class({
let eventSource;
let showEvents = Main.sessionMode.showCalendarEvents;
if (showEvents) {
eventSource = new Calendar.DBusEventSource();
eventSource = this._getEventSource();
} else {
eventSource = new Calendar.EmptyEventSource();
}

View File

@ -74,7 +74,7 @@ function disableExtension(uuid) {
if (extension.stylesheet) {
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
theme.unload_stylesheet(extension.stylesheet.get_path());
theme.unload_stylesheet(extension.stylesheet);
}
try {
@ -118,7 +118,7 @@ function enableExtension(uuid) {
let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
if (stylesheetFile.query_exists(null)) {
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
theme.load_stylesheet(stylesheetFile.get_path());
theme.load_stylesheet(stylesheetFile);
extension.stylesheet = stylesheetFile;
break;
}

View File

@ -278,20 +278,6 @@ const IconGrid = new Lang.Class({
this._grid.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
this._grid.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
this._grid.connect('allocate', Lang.bind(this, this._allocate));
this._grid.connect('actor-added', Lang.bind(this, this._childAdded));
this._grid.connect('actor-removed', Lang.bind(this, this._childRemoved));
},
_keyFocusIn: function(actor) {
this.emit('key-focus-in', actor);
},
_childAdded: function(grid, child) {
child._iconGridKeyFocusInId = child.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
},
_childRemoved: function(grid, child) {
child.disconnect(child._iconGridKeyFocusInId);
},
_getPreferredWidth: function (grid, forHeight, alloc) {
@ -682,6 +668,10 @@ const IconGrid = new Lang.Class({
this._grid.destroy_all_children();
},
_keyFocusIn: function(actor) {
this.emit('key-focus-in', actor._associatedItem);
},
addItem: function(item, index) {
if (!item.icon instanceof BaseIcon)
throw new Error('Only items with a BaseIcon icon property can be added to IconGrid');
@ -691,9 +681,26 @@ const IconGrid = new Lang.Class({
this._grid.insert_child_at_index(item.actor, index);
else
this._grid.add_actor(item.actor);
// Maybe the item actor acts as a container, so ask the item if
// it has a specific actor to track focus
let focusReceiver = item.actor;
if (item.getFocusReceiver)
focusReceiver = item.getFocusReceiver();
focusReceiver._associatedItem = item.actor;
focusReceiver._iconGridKeyFocusInId = focusReceiver.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
},
removeItem: function(item) {
let focusReceiver = item.actor;
if (item.getFocusReceiver)
focusReceiver = item.getFocusReceiver();
focusReceiver._associatedItem = null;
focusReceiver.disconnect(focusReceiver._iconGridKeyFocusInId);
this._grid.remove_child(item.actor);
},

View File

@ -187,14 +187,7 @@ const Keyboard = new Lang.Class({
this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0,
Lang.bind(this, this._sync),
Lang.bind(this, this._sync));
this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME,
CARIBOU_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
}));
this._daemonProxy = null;
this._cursorProxy = new CursorManagerProxy(Gio.DBus.session, CURSOR_BUS_NAME,
CURSOR_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
@ -256,15 +249,28 @@ const Keyboard = new Lang.Class({
this.actor = null;
this._destroySource();
this._daemonProxy.QuitRemote(function (result, error) {
if (error) {
log(error.message);
return;
}
});
if (this._daemonProxy) {
this._daemonProxy.QuitRemote(function (result, error) {
if (error) {
log(error.message);
return;
}
});
this._daemonProxy = null;
}
},
_setupKeyboard: function() {
if (!this._daemonProxy) {
this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME,
CARIBOU_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
}));
}
this._daemonProxy.RunRemote(function (result, error) {
if (error) {
log(error.message);

View File

@ -20,7 +20,6 @@ const Tweener = imports.ui.tweener;
const STARTUP_ANIMATION_TIME = 0.5;
const KEYBOARD_ANIMATION_TIME = 0.15;
const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
// The message tray takes this much pressure
// in the pressure barrier at once to release it.
@ -160,10 +159,10 @@ const LayoutManager = new Lang.Class({
this._isPopupWindowVisible = false;
this._startingUp = true;
// Normally, the stage is always covered so Clutter doesn't need to clear
// it; however it becomes visible during the startup animation
// See the comment below for a longer explanation
global.stage.background_color = DEFAULT_BACKGROUND_COLOR;
// We don't want to paint the stage background color because either
// the SystemBackground we create or the MetaBackgroundActor inside
// global.window_group covers the entirety of the screen.
global.stage.no_clear_hint = true;
// Set up stage hierarchy to group all UI actors under one container.
this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
@ -423,10 +422,7 @@ const LayoutManager = new Lang.Class({
this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
this.panelBox.set_size(this.primaryMonitor.width, -1);
if (this.keyboardIndex < 0)
this.keyboardIndex = this.primaryIndex;
else
this._updateKeyboardBox();
this.keyboardIndex = this.primaryIndex;
this.trayBox.set_position(this.bottomMonitor.x,
this.bottomMonitor.y + this.bottomMonitor.height);
@ -591,10 +587,6 @@ const LayoutManager = new Lang.Class({
//
// When starting a normal user session, we want to grow it out of the middle
// of the screen.
//
// Usually, we don't want to paint the stage background color because the
// MetaBackgroundActor inside global.window_group covers the entirety of the
// screen. So, we set no_clear_hint at the end of the animation.
_prepareStartupAnimation: function() {
// During the initial transition, add a simple actor to block all events,
@ -675,10 +667,6 @@ const LayoutManager = new Lang.Class({
},
_startupAnimationComplete: function() {
// At this point, the UI group is covering everything, so
// we no longer need to clear the stage
global.stage.no_clear_hint = true;
this._coverPane.destroy();
this._coverPane = null;

View File

@ -1198,12 +1198,7 @@ const ZoomRegion = new Lang.Class({
// Add a background for when the magnified uiGroup is scrolled
// out of view (don't want to see desktop showing through).
this._background = new Clutter.Actor({ background_color: Main.DEFAULT_BACKGROUND_COLOR,
layout_manager: new Clutter.BinLayout(),
width: global.screen_width,
height: global.screen_height });
let noiseTexture = (new Background.SystemBackground()).actor;
this._background.add_actor(noiseTexture);
this._background = (new Background.SystemBackground()).actor;
mainGroup.add_actor(this._background);
// Clone the group that contains all of UI on the screen. This is the

View File

@ -40,8 +40,6 @@ const Magnifier = imports.ui.magnifier;
const XdndHandler = imports.ui.xdndHandler;
const Util = imports.misc.util;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
const STICKY_KEYS_ENABLE = 'stickykeys-enable';
const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a';
@ -131,6 +129,9 @@ function _initializeUI() {
Shell.WindowTracker.get_default();
Shell.AppUsage.get_default();
let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
resource._register();
_loadDefaultStylesheet();
// Setup the stage hierarchy early
@ -224,12 +225,26 @@ function _initializeUI() {
});
}
function _getDefaultStylesheet() {
let stylesheet;
stylesheet = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/' + sessionMode.stylesheetName);
if (stylesheet.query_exists(null))
return stylesheet;
stylesheet = Gio.File.new_for_path(global.datadir + '/theme/' + sessionMode.stylesheetName);
if (stylesheet.query_exists(null))
return stylesheet;
return null;
}
function _loadDefaultStylesheet() {
if (!sessionMode.isPrimary)
return;
let stylesheet = global.datadir + '/theme/' + sessionMode.stylesheetName;
if (_defaultCssStylesheet == stylesheet)
let stylesheet = _getDefaultStylesheet();
if (_defaultCssStylesheet && _defaultCssStylesheet.equal(stylesheet))
return;
_defaultCssStylesheet = stylesheet;
@ -256,7 +271,7 @@ function getThemeStylesheet() {
* Set the theme CSS file that the shell will load
*/
function setThemeStylesheet(cssStylesheet) {
_cssStylesheet = cssStylesheet;
_cssStylesheet = Gio.File.new_for_path(cssStylesheet);
}
/**

View File

@ -2432,8 +2432,22 @@ const MessageTray = new Lang.Class({
if (shouldShowNotification && nextNotification) {
let limited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen;
let showNextNotification = (!limited || nextNotification.forFeedback || nextNotification.urgency == Urgency.CRITICAL);
if (showNextNotification)
this._showNotification();
if (showNextNotification) {
let len = this._notificationQueue.length;
if (len > 1) {
this._notificationQueue.length = 0;
let source = new SystemNotificationSource();
this.add(source);
let notification = new Notification(source, ngettext("%d new message", "%d new messages", len).format(len));
notification.setTransient(true);
notification.connect('clicked', Lang.bind(this, function() {
this.openTray();
}));
source.notify(notification);
} else {
this._showNotification();
}
}
}
} else if (this._notificationState == State.SHOWN) {
let expired = (this._userActiveWhileNotificationShown &&

View File

@ -194,7 +194,7 @@ const ModalDialog = new Lang.Class({
},
placeSpinner: function(layoutInfo) {
let spinnerIcon = global.datadir + '/theme/process-working.svg';
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show();

View File

@ -189,11 +189,8 @@ const AppMenuButton = new Lang.Class({
this.actor.bind_property("reactive", this.actor, "can-focus", 0);
this.actor.reactive = false;
this._container = new Shell.GenericContainer();
this._container = St.BoxLayout({ style_class: 'panel-status-menu-box' });
bin.set_child(this._container);
this._container.connect('get-preferred-width', Lang.bind(this, this._getContentPreferredWidth));
this._container.connect('get-preferred-height', Lang.bind(this, this._getContentPreferredHeight));
this._container.connect('allocate', Lang.bind(this, this._contentAllocate));
let textureCache = St.TextureCache.get_default();
textureCache.connect('icon-theme-changed',
@ -206,14 +203,11 @@ const AppMenuButton = new Lang.Class({
Lang.bind(this, this._updateIconBoxClip));
this._container.add_actor(this._iconBox);
this._hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
this._container.add_actor(this._hbox);
this._label = new TextShadower();
this._label.actor.y_align = Clutter.ActorAlign.CENTER;
this._hbox.add_actor(this._label.actor);
this._container.add_actor(this._label.actor);
this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM);
this._hbox.add_actor(this._arrow);
this._container.add_actor(this._arrow);
this._iconBottomClip = 0;
@ -273,11 +267,11 @@ const AppMenuButton = new Lang.Class({
_onStyleChanged: function(actor) {
let node = actor.get_theme_node();
let [success, icon] = node.lookup_url('spinner-image', false);
if (!success || this._spinnerIcon == icon)
if (!success || (this._spinnerIcon && this._spinnerIcon.equal(icon)))
return;
this._spinnerIcon = icon;
this._spinner = new Animation.AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE);
this._hbox.add_actor(this._spinner.actor);
this._container.add_actor(this._spinner.actor);
this._spinner.actor.hide();
},
@ -291,7 +285,7 @@ const AppMenuButton = new Lang.Class({
if (!this._targetApp)
return;
let icon = this._targetApp.get_faded_icon(2 * PANEL_ICON_SIZE, this._iconBox.text_direction);
let icon = this._targetApp.create_icon_texture(2 * PANEL_ICON_SIZE);
this._iconBox.set_child(icon);
},
@ -344,64 +338,6 @@ const AppMenuButton = new Lang.Class({
this._spinner.actor.show();
},
_getContentPreferredWidth: function(actor, forHeight, alloc) {
let [minSize, naturalSize] = this._iconBox.get_preferred_width(forHeight);
alloc.min_size = minSize;
alloc.natural_size = naturalSize;
[minSize, naturalSize] = this._hbox.get_preferred_width(forHeight);
alloc.min_size = alloc.min_size + Math.max(0, minSize - Math.floor(alloc.min_size / 2));
alloc.natural_size = alloc.natural_size + Math.max(0, naturalSize - Math.floor(alloc.natural_size / 2));
},
_getContentPreferredHeight: function(actor, forWidth, alloc) {
let [minSize, naturalSize] = this._iconBox.get_preferred_height(forWidth);
alloc.min_size = minSize;
alloc.natural_size = naturalSize;
[minSize, naturalSize] = this._hbox.get_preferred_height(forWidth);
if (minSize > alloc.min_size)
alloc.min_size = minSize;
if (naturalSize > alloc.natural_size)
alloc.natural_size = naturalSize;
},
_contentAllocate: function(actor, box, flags) {
let allocWidth = box.x2 - box.x1;
let allocHeight = box.y2 - box.y1;
let childBox = new Clutter.ActorBox();
let [minWidth, minHeight, naturalWidth, naturalHeight] = this._iconBox.get_preferred_size();
let direction = this.actor.get_text_direction();
let yPadding = Math.floor(Math.max(0, allocHeight - naturalHeight) / 2);
childBox.y1 = yPadding;
childBox.y2 = childBox.y1 + Math.min(naturalHeight, allocHeight);
if (direction == Clutter.TextDirection.LTR) {
childBox.x1 = 0;
childBox.x2 = childBox.x1 + Math.min(naturalWidth, allocWidth);
} else {
childBox.x1 = Math.max(0, allocWidth - naturalWidth);
childBox.x2 = allocWidth;
}
this._iconBox.allocate(childBox, flags);
let iconWidth = childBox.x2 - childBox.x1;
[minWidth, naturalWidth] = this._hbox.get_preferred_width(-1);
childBox.y1 = 0;
childBox.y2 = allocHeight;
if (direction == Clutter.TextDirection.LTR) {
childBox.x1 = Math.floor(iconWidth / 2);
childBox.x2 = Math.min(childBox.x1 + naturalWidth, allocWidth);
} else {
childBox.x2 = allocWidth - Math.floor(iconWidth / 2);
childBox.x1 = Math.max(0, childBox.x2 - naturalWidth);
}
this._hbox.allocate(childBox, flags);
},
_onAppStateChanged: function(appSys, app) {
let state = app.state;
if (state != Shell.AppState.STARTING) {
@ -814,7 +750,7 @@ const AggregateMenu = new Lang.Class({
this.menu.actor.add_style_class_name('aggregate-menu');
this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
this.actor.add_child(this._indicators);
this.actor.add_actor(this._indicators);
if (Config.HAVE_NETWORKMANAGER) {
this._network = new imports.ui.status.network.NMApplet();
@ -1100,7 +1036,7 @@ const Panel = new Lang.Class({
continue;
if (indicator.menu)
indicator.menu.close();
indicator.container.hide();
indicator.actor.hide();
}
},
@ -1132,21 +1068,14 @@ const Panel = new Lang.Class({
},
_addToPanelBox: function(role, indicator, position, box) {
let container = indicator.container;
container.show();
let parent = container.get_parent();
if (parent)
parent.remove_actor(container);
box.insert_child_at_index(container, position);
indicator.actor.show();
box.insert_child_at_index(indicator.actor, position);
if (indicator.menu)
this.menuManager.addMenu(indicator.menu);
this.statusArea[role] = indicator;
let destroyId = indicator.connect('destroy', Lang.bind(this, function(emitter) {
delete this.statusArea[role];
emitter.disconnect(destroyId);
container.destroy();
}));
},

View File

@ -13,92 +13,16 @@ const Main = imports.ui.main;
const Params = imports.misc.params;
const PopupMenu = imports.ui.popupMenu;
const ButtonBox = new Lang.Class({
Name: 'ButtonBox',
_init: function(params) {
params = Params.parse(params, { style_class: 'panel-button' }, true);
this.actor = new Shell.GenericContainer(params);
this.actor._delegate = this;
this.container = new St.Bin({ y_fill: true,
x_fill: true,
child: this.actor });
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
this.actor.connect('allocate', Lang.bind(this, this._allocate));
this.actor.connect('style-changed', Lang.bind(this, this._onStyleChanged));
this._minHPadding = this._natHPadding = 0.0;
},
_onStyleChanged: function(actor) {
let themeNode = actor.get_theme_node();
this._minHPadding = themeNode.get_length('-minimum-hpadding');
this._natHPadding = themeNode.get_length('-natural-hpadding');
},
_getPreferredWidth: function(actor, forHeight, alloc) {
let child = actor.get_first_child();
if (child) {
[alloc.min_size, alloc.natural_size] = child.get_preferred_width(-1);
} else {
alloc.min_size = alloc.natural_size = 0;
}
alloc.min_size += 2 * this._minHPadding;
alloc.natural_size += 2 * this._natHPadding;
},
_getPreferredHeight: function(actor, forWidth, alloc) {
let child = actor.get_first_child();
if (child) {
[alloc.min_size, alloc.natural_size] = child.get_preferred_height(-1);
} else {
alloc.min_size = alloc.natural_size = 0;
}
},
_allocate: function(actor, box, flags) {
let child = actor.get_first_child();
if (!child)
return;
let [minWidth, natWidth] = child.get_preferred_width(-1);
let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1;
let childBox = new Clutter.ActorBox();
if (natWidth + 2 * this._natHPadding <= availWidth) {
childBox.x1 = this._natHPadding;
childBox.x2 = availWidth - this._natHPadding;
} else {
childBox.x1 = this._minHPadding;
childBox.x2 = availWidth - this._minHPadding;
}
childBox.y1 = 0;
childBox.y2 = availHeight;
child.allocate(childBox, flags);
},
});
const Button = new Lang.Class({
Name: 'PanelMenuButton',
Extends: ButtonBox,
_init: function(menuAlignment, nameText, dontCreateMenu) {
this.parent({ reactive: true,
can_focus: true,
track_hover: true,
accessible_name: nameText ? nameText : "",
accessible_role: Atk.Role.MENU });
this.actor = new St.Bin({ style_class: 'panel-button',
reactive: true,
can_focus: true,
track_hover: true,
accessible_name: nameText ? nameText : "",
accessible_role: Atk.Role.MENU });
this.actor.connect('event', Lang.bind(this, this._onEvent));
this.actor.connect('notify::visible', Lang.bind(this, this._onVisibilityChanged));
@ -177,8 +101,6 @@ const Button = new Lang.Class({
},
destroy: function() {
this.actor._delegate = null;
if (this.menu)
this.menu.destroy();
this.actor.destroy();

View File

@ -85,7 +85,8 @@ const Clock = new Lang.Class({
let date = new Date();
/* Translators: This is a time format for a date in
long format */
this._date.text = date.toLocaleFormat(_("%A, %B %d"));
let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d"));
this._date.text = date.toLocaleFormat(dateFormat);
},
destroy: function() {
@ -669,7 +670,9 @@ const ScreenShield = new Lang.Class({
if (this._lockScreenState != MessageTray.State.SHOWN)
return Clutter.EVENT_PROPAGATE;
let isEnter = (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_KP_Enter);
let isEnter = (symbol == Clutter.KEY_Return ||
symbol == Clutter.KEY_KP_Enter ||
symbol == Clutter.KEY_ISO_Enter);
if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape))
return Clutter.EVENT_PROPAGATE;
@ -1332,6 +1335,8 @@ const ScreenShield = new Lang.Class({
// If the previous shell crashed, and gnome-session restarted us, then re-lock
lockIfWasLocked: function() {
if (!this._settings.get_boolean(LOCK_ENABLED_KEY))
return;
let wasLocked = global.get_runtime_state('b', LOCKED_STATE_STR);
if (wasLocked === null)
return;

View File

@ -659,11 +659,15 @@ const SearchResults = new Lang.Class({
if (!result)
return;
let styleReceiver = result.actor;
if (result.getStyleReceiver)
styleReceiver = result.getStyleReceiver();
if (selected) {
result.actor.add_style_pseudo_class('selected');
styleReceiver.add_style_pseudo_class('selected');
Util.ensureActorVisibleInScrollView(this._scrollView, result.actor);
} else {
result.actor.remove_style_pseudo_class('selected');
styleReceiver.remove_style_pseudo_class('selected');
}
}
});

View File

@ -876,7 +876,8 @@ const NMWirelessDialog = new Lang.Class({
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER });
this._noNetworksSpinner = new Animation.AnimatedIcon(global.datadir + '/theme/process-working.svg', 24, 24);
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._noNetworksSpinner = new Animation.AnimatedIcon(file, 24, 24);
this._noNetworksBox.add_actor(this._noNetworksSpinner.actor);
this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label',
text: _("No Networks") }));

View File

@ -15,6 +15,7 @@ const RfkillManagerInterface = '<node> \
<interface name="org.gnome.SettingsDaemon.Rfkill"> \
<property name="AirplaneMode" type="b" access="readwrite" /> \
<property name="HardwareAirplaneMode" type="b" access="read" /> \
<property name="ShouldShowAirplaneMode" type="b" access="read" /> \
</interface> \
</node>';
@ -48,6 +49,10 @@ const RfkillManager = new Lang.Class({
return this._proxy.HardwareAirplaneMode;
},
get shouldShowAirplaneMode() {
return this._proxy.ShouldShowAirplaneMode;
},
_changed: function() {
this.emit('airplane-mode-changed');
}
@ -101,11 +106,10 @@ const Indicator = new Lang.Class({
_sync: function() {
let airplaneMode = this._manager.airplaneMode;
let hwAirplaneMode = this._manager.hwAirplaneMode;
let changed = (airplaneMode != this._indicator.visible) ||
(hwAirplaneMode != this._offItem.actor.visible);
let showAirplaneMode = this._manager.shouldShowAirplaneMode;
this._indicator.visible = airplaneMode;
this._item.actor.visible = airplaneMode;
this._indicator.visible = (airplaneMode && showAirplaneMode);
this._item.actor.visible = (airplaneMode && showAirplaneMode);
this._offItem.setSensitive(!hwAirplaneMode);
if (hwAirplaneMode)

View File

@ -68,6 +68,7 @@ th
tr
ug
uk
uz@cyrillic
vi
zh_CN
zh_HK

998
po/an.po

File diff suppressed because it is too large Load Diff

1877
po/uz@cyrillic.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,7 @@ except ImportError:
try:
import simplejson as json
except ImportError:
print 'The Python simplejson module is required'
print('The Python simplejson module is required')
sys.exit(1)
from gi.repository import Gio
@ -88,36 +88,36 @@ function disable() {
}
def create_extension():
print
print '''Name should be a very short (ideally descriptive) string.
print()
print('''Name should be a very short (ideally descriptive) string.
Examples are: "Click To Focus", "Adblock", "Shell Window Shrinker".
'''
name = raw_input('Name: ').strip()
print
print '''Description is a single-sentence explanation of what your extension does.
''')
name = input('Name: ').strip()
print()
print('''Description is a single-sentence explanation of what your extension does.
Examples are: "Make windows visible on click", "Block advertisement popups"
"Animate windows shrinking on minimize"
'''
description = raw_input('Description: ').strip()
''')
description = input('Description: ').strip()
underifier = re.compile('[^A-Za-z]')
sample_uuid = underifier.sub('_', name)
# TODO use evolution data server
hostname = socket.gethostname()
sample_uuid = sample_uuid + '@' + hostname
print
print '''Uuid is a globally-unique identifier for your extension.
print()
print('''Uuid is a globally-unique identifier for your extension.
This should be in the format of an email address (foo.bar@extensions.example.com), but
need not be an actual email address, though it's a good idea to base the uuid on your
email address. For example, if your email address is janedoe@example.com, you might
use an extension title clicktofocus@janedoe.example.com.'''
uuid = raw_input('Uuid [%s]: ' % (sample_uuid, )).strip()
use an extension title clicktofocus@janedoe.example.com.''')
uuid = input('Uuid [%s]: ' % (sample_uuid, )).strip()
if uuid == '':
uuid = sample_uuid
extension_path = os.path.join(os.path.expanduser('~/.local'), 'share', 'gnome-shell', 'extensions', uuid)
if os.path.exists(extension_path):
print "Extension path %r already exists" % (extension_path, )
print("Extension path %r already exists" % (extension_path, ))
sys.exit(0)
os.makedirs(extension_path)
meta = { 'name': name,
@ -132,13 +132,13 @@ use an extension title clicktofocus@janedoe.example.com.'''
f.write(json.write(meta) + '\n')
f.close()
for filename, contents in SAMPLE_EXTENSION_FILES.iteritems():
for filename, contents in SAMPLE_EXTENSION_FILES.items():
path = os.path.join(extension_path, filename)
f = open(path, 'w')
f.write(contents)
f.close()
print "Created extension in %r" % (extension_path, )
print("Created extension in %r" % (extension_path, ))
extensionjs_path = os.path.join(extension_path, 'extension.js')
subprocess.Popen(['xdg-open', extensionjs_path])
@ -149,19 +149,19 @@ def enable_extension(uuid):
extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
if uuid in extensions:
print >> sys.stderr, "%r is already enabled." % (uuid,)
print("%r is already enabled." % (uuid,), file=sys.stderr)
sys.exit(1)
extensions.append(uuid)
settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
print >> sys.stderr, "%r is now enabled." % (uuid,)
print("%r is now enabled." % (uuid,), file=sys.stderr)
def disable_extension(uuid):
settings = Gio.Settings(schema='org.gnome.shell')
extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
if uuid not in extensions:
print >> sys.stderr, "%r is not enabled or installed." % (uuid,)
print("%r is not enabled or installed." % (uuid,), file=sys.stderr)
sys.exit(1)
# Use a while loop here to remove *all* mentions instances
@ -170,7 +170,7 @@ def disable_extension(uuid):
extensions.remove(uuid)
settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
print >> sys.stderr, "%r is now disabled." % (uuid,)
print("%r is now disabled." % (uuid,), file=sys.stderr)
def main():
parser = optparse.OptionParser()

View File

@ -14,15 +14,14 @@ import subprocess
import sys
import tempfile
import base64
from ConfigParser import RawConfigParser
from configparser import RawConfigParser
import hashlib
import hmac
import httplib
import urlparse
import urllib
from http import client
from urllib import parse
def show_version(option, opt_str, value, parser):
print "GNOME Shell Performance Test @VERSION@"
print("GNOME Shell Performance Test @VERSION@")
sys.exit()
def wait_for_dbus_name(wait_name):
@ -41,7 +40,7 @@ def wait_for_dbus_name(wait_name):
None)
def on_timeout():
print "\nFailed to start %s: timed out" % (wait_name,)
print("\nFailed to start %s: timed out" % (wait_name,))
sys.exit(1)
GLib.timeout_add_seconds(7, on_timeout)
@ -131,15 +130,15 @@ def upload_performance_report(report_text):
base_url = config.get('upload', 'url')
system_name = config.get('upload', 'name')
secret_key = config.get('upload', 'key')
except Exception, e:
print "Can't read upload configuration from %s: %s" % (config_file, str(e))
except Exception as e:
print("Can't read upload configuration from %s: %s" % (config_file, str(e)))
sys.exit(1)
# Determine host, port and upload URL from provided data, we're
# a bit extra-careful about normalization since the URL is part
# of the signature.
split = urlparse.urlsplit(base_url)
split = parse.urlsplit(base_url)
scheme = split[0].lower()
netloc = split[1]
base_path = split[2]
@ -151,7 +150,7 @@ def upload_performance_report(report_text):
host, port = m.group(1), None
if scheme != "http":
print "'%s' is not a HTTP URL" % base_url
print("'%s' is not a HTTP URL" % base_url)
sys.exit(1)
if port is None:
@ -166,7 +165,7 @@ def upload_performance_report(report_text):
normalized_base = "%s://%s:%d%s" % (scheme, host, port, base_path)
upload_url = normalized_base + '/system/%s/upload' % system_name
upload_path = urlparse.urlsplit(upload_url)[2] # path portion
upload_path = parse.urlsplit(upload_url)[2] # path portion
# Create signature based on upload URL and the report data
@ -174,7 +173,7 @@ def upload_performance_report(report_text):
h = hmac.new(secret_key, digestmod=hashlib.sha1)
h.update(signature_data)
h.update(report_text)
signature = urllib.quote(base64.b64encode(h.digest()), "~")
signature = parse.quote(base64.b64encode(h.digest()), "~")
headers = {
'User-Agent': 'gnome-shell-performance-tool/@VERSION@',
@ -182,15 +181,15 @@ def upload_performance_report(report_text):
'X-Shell-Signature': 'HMAC-SHA1 ' + signature
};
connection = httplib.HTTPConnection(host, port)
connection = client.HTTPConnection(host, port)
connection.request('POST', upload_path, report_text, headers)
response = connection.getresponse()
if response.status == 200:
print "Performance report upload succeeded"
print("Performance report upload succeeded")
else:
print "Performance report upload failed with status %d" % response.status
print response.read()
print("Performance report upload failed with status %d" % response.status)
print(response.read())
def gnome_hwtest_log(*args):
command = ['gnome-hwtest-log', '-t', 'gnome-shell-perf-tool']
@ -207,7 +206,7 @@ def run_performance_test():
start_perf_helper()
for i in xrange(0, iters):
for i in range(0, iters):
# We create an empty temporary file that the shell will overwrite
# with the contents.
handle, output_file = tempfile.mkstemp(".json", "gnome-shell-perf.")
@ -306,12 +305,12 @@ def run_performance_test():
gnome_hwtest_log('--finished')
else:
# Write a human readable summary
print '------------------------------------------------------------';
print('------------------------------------------------------------')
for metric in sorted(metric_summaries.keys()):
summary = metric_summaries[metric]
print "#", summary['description']
print metric, ", ".join((str(x) for x in summary['values']))
print '------------------------------------------------------------';
print("#", summary['description'])
print(metric, ", ".join((str(x) for x in summary['values'])))
print('------------------------------------------------------------')
return True

View File

@ -1132,14 +1132,6 @@ shell_global_end_modal (ShellGlobal *global,
sync_input_region (global);
}
void
shell_global_freeze_keyboard (ShellGlobal *global,
guint32 timestamp)
{
if (global->stage_xwindow != None)
meta_display_freeze_keyboard (global->meta_display, global->stage_xwindow, timestamp);
}
/* Code to close all file descriptors before we exec; copied from gspawn.c in GLib.
*
* Authors: Padraig O'Briain, Matthias Clasen, Lennart Poettering

View File

@ -45,8 +45,6 @@ gboolean shell_global_begin_modal (ShellGlobal *global,
MetaModalOptions options);
void shell_global_end_modal (ShellGlobal *global,
guint32 timestamp);
void shell_global_freeze_keyboard (ShellGlobal *global,
guint32 timestamp);
void shell_global_set_stage_input_region (ShellGlobal *global,
GSList *rectangles);

View File

@ -12,6 +12,7 @@
#include <gdk/gdkx.h>
#include <X11/extensions/XTest.h>
#include <locale.h>
#ifdef HAVE__NL_TIME_FIRST_WEEKDAY
#include <langinfo.h>
#endif
@ -208,6 +209,32 @@ shell_util_get_week_start ()
return week_start;
}
/**
* shell_util_translate_time_string:
* @str: String to translate
*
* Translate @str according to the locale defined by LC_TIME; unlike
* dcgettext(), the translations is still taken from the LC_MESSAGES
* catalogue and not the LC_TIME one.
*
* Returns: the translated string
*/
const char *
shell_util_translate_time_string (const char *str)
{
const char *locale = g_getenv ("LC_TIME");
const char *res;
if (locale)
setlocale (LC_MESSAGES, locale);
res = gettext (str);
setlocale (LC_MESSAGES, "");
return res;
}
/**
* shell_write_string_to_stream:
* @stream: a #GOutputStream

View File

@ -21,6 +21,7 @@ int shell_util_get_week_start (void);
char *shell_util_format_date (const char *format,
gint64 time_ms);
const char *shell_util_translate_time_string (const char *str);
gboolean shell_write_string_to_stream (GOutputStream *stream,
const char *str,

View File

@ -27,7 +27,7 @@
struct _StBorderImage {
GObject parent;
char *filename;
GFile *file;
int border_top;
int border_right;
int border_bottom;
@ -48,7 +48,7 @@ st_border_image_finalize (GObject *object)
{
StBorderImage *image = ST_BORDER_IMAGE (object);
g_free (image->filename);
g_object_unref (image->file);
G_OBJECT_CLASS (st_border_image_parent_class)->finalize (object);
}
@ -67,18 +67,18 @@ st_border_image_init (StBorderImage *image)
}
StBorderImage *
st_border_image_new (const char *filename,
int border_top,
int border_right,
int border_bottom,
int border_left,
int scale_factor)
st_border_image_new (GFile *file,
int border_top,
int border_right,
int border_bottom,
int border_left,
int scale_factor)
{
StBorderImage *image;
image = g_object_new (ST_TYPE_BORDER_IMAGE, NULL);
image->filename = g_strdup (filename);
image->file = g_object_ref (file);
image->border_top = border_top;
image->border_right = border_right;
image->border_bottom = border_bottom;
@ -88,12 +88,18 @@ st_border_image_new (const char *filename,
return image;
}
const char *
st_border_image_get_filename (StBorderImage *image)
/**
* st_border_image_get_file:
* @image: a #StBorder_Image
*
* Returns: (transfer none): the #GFile for the #StBorder_Image
*/
GFile *
st_border_image_get_file (StBorderImage *image)
{
g_return_val_if_fail (ST_IS_BORDER_IMAGE (image), NULL);
return image->filename;
return image->file;
}
void
@ -135,5 +141,5 @@ st_border_image_equal (StBorderImage *image,
image->border_right == other->border_right &&
image->border_bottom == other->border_bottom &&
image->border_left == other->border_left &&
strcmp (image->filename, other->filename) == 0);
g_file_equal (image->file, other->file));
}

View File

@ -22,6 +22,7 @@
#define __ST_BORDER_IMAGE_H__
#include <glib-object.h>
#include <gio/gio.h>
G_BEGIN_DECLS
@ -39,14 +40,14 @@ typedef struct _StBorderImageClass StBorderImageClass;
GType st_border_image_get_type (void) G_GNUC_CONST;
StBorderImage *st_border_image_new (const char *filename,
StBorderImage *st_border_image_new (GFile *file,
int border_top,
int border_right,
int border_bottom,
int border_left,
int scale_factor);
const char *st_border_image_get_filename (StBorderImage *image);
GFile *st_border_image_get_file (StBorderImage *image);
void st_border_image_get_borders (StBorderImage *image,
int *border_top,
int *border_right,

View File

@ -267,7 +267,8 @@ st_button_key_press (ClutterActor *actor,
{
if (event->keyval == CLUTTER_KEY_space ||
event->keyval == CLUTTER_KEY_Return ||
event->keyval == CLUTTER_KEY_KP_Enter)
event->keyval == CLUTTER_KEY_KP_Enter ||
event->keyval == CLUTTER_KEY_ISO_Enter)
{
st_button_press (button, NULL, ST_BUTTON_ONE, NULL);
return TRUE;
@ -287,7 +288,8 @@ st_button_key_release (ClutterActor *actor,
{
if (event->keyval == CLUTTER_KEY_space ||
event->keyval == CLUTTER_KEY_Return ||
event->keyval == CLUTTER_KEY_KP_Enter)
event->keyval == CLUTTER_KEY_KP_Enter ||
event->keyval == CLUTTER_KEY_ISO_Enter)
{
gboolean is_click;

View File

@ -373,6 +373,7 @@ st_scroll_view_get_preferred_width (ClutterActor *actor,
break;
case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC:
case GTK_POLICY_EXTERNAL:
/* Should theoretically use the min width of the hscrollbar,
* but that's not cleanly defined at the moment */
min_width = 0;
@ -382,6 +383,7 @@ st_scroll_view_get_preferred_width (ClutterActor *actor,
switch (priv->vscrollbar_policy)
{
case GTK_POLICY_NEVER:
case GTK_POLICY_EXTERNAL:
account_for_vscrollbar = FALSE;
break;
case GTK_POLICY_ALWAYS:
@ -443,6 +445,7 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
switch (priv->vscrollbar_policy)
{
case GTK_POLICY_NEVER:
case GTK_POLICY_EXTERNAL:
break;
case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC:
@ -454,6 +457,7 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
switch (priv->hscrollbar_policy)
{
case GTK_POLICY_NEVER:
case GTK_POLICY_EXTERNAL:
account_for_hscrollbar = FALSE;
break;
case GTK_POLICY_ALWAYS:
@ -480,6 +484,7 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
break;
case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC:
case GTK_POLICY_EXTERNAL:
/* Should theoretically use the min height of the vscrollbar,
* but that's not cleanly defined at the moment */
min_height = 0;
@ -567,7 +572,7 @@ st_scroll_view_allocate (ClutterActor *actor,
}
else
{
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER;
hscrollbar_visible = priv->hscrollbar_policy == GTK_POLICY_ALWAYS;
/* try without a vertical scrollbar */
clutter_actor_get_preferred_height (priv->child, avail_width, &child_min_height, NULL);
@ -576,18 +581,20 @@ st_scroll_view_allocate (ClutterActor *actor,
}
else
{
vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER;
vscrollbar_visible = priv->vscrollbar_policy == GTK_POLICY_ALWAYS;
if (priv->hscrollbar_policy == GTK_POLICY_AUTOMATIC)
hscrollbar_visible = child_min_width > avail_height - (vscrollbar_visible ? 0 : sb_width);
else
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER;
hscrollbar_visible = priv->hscrollbar_policy == GTK_POLICY_ALWAYS;
}
}
else
{
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER;
vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER;
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER &&
priv->hscrollbar_policy != GTK_POLICY_EXTERNAL;
vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER &&
priv->vscrollbar_policy != GTK_POLICY_EXTERNAL;
}
/* Whether or not we show the scrollbars, if the scrollbars are visible
@ -629,15 +636,19 @@ st_scroll_view_allocate (ClutterActor *actor,
clutter_actor_allocate (priv->hscroll, &child_box, flags);
/* In case the scrollbar policy is NEVER or scrollbars should be
* overlayed, we don't trim the content box allocation by the
* scrollbar size.
/* In case the scrollbar policy is NEVER or EXTERNAL or scrollbars
* should be overlayed, we don't trim the content box allocation by
* the scrollbar size.
* Fold this into the scrollbar sizes to simplify the rest of the
* computations.
*/
if (priv->hscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars)
if (priv->hscrollbar_policy == GTK_POLICY_NEVER ||
priv->hscrollbar_policy == GTK_POLICY_EXTERNAL ||
priv->overlay_scrollbars)
sb_height = 0;
if (priv->vscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars)
if (priv->vscrollbar_policy == GTK_POLICY_NEVER ||
priv->vscrollbar_policy == GTK_POLICY_EXTERNAL ||
priv->overlay_scrollbars)
sb_width = 0;
/* Child */

View File

@ -28,8 +28,8 @@
#include <glib.h>
#define CACHE_PREFIX_ICON "icon:"
#define CACHE_PREFIX_URI "uri:"
#define CACHE_PREFIX_URI_FOR_CAIRO "uri-for-cairo:"
#define CACHE_PREFIX_FILE "file:"
#define CACHE_PREFIX_FILE_FOR_CAIRO "file-for-cairo:"
struct _StTextureCachePrivate
{
@ -101,7 +101,7 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
G_SIGNAL_RUN_LAST,
0, /* no default handler slot */
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_STRING);
G_TYPE_NONE, 1, G_TYPE_FILE);
}
/* Evicts all cached textures for named icons */
@ -147,7 +147,7 @@ st_texture_cache_init (StTextureCache *self)
g_free, cogl_object_unref);
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
self->priv->file_monitors = g_hash_table_new_full (g_str_hash, g_str_equal,
self->priv->file_monitors = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal,
g_object_unref, g_object_unref);
}
@ -268,7 +268,7 @@ typedef struct {
GtkIconInfo *icon_info;
StIconColors *colors;
char *uri;
GFile *file;
} AsyncTextureLoadData;
static void
@ -282,8 +282,8 @@ texture_load_data_free (gpointer p)
if (data->colors)
st_icon_colors_unref (data->colors);
}
else if (data->uri)
g_free (data->uri);
else if (data->file)
g_object_unref (data->file);
if (data->key)
g_free (data->key);
@ -405,83 +405,17 @@ out:
return rotated_pixbuf;
}
static GdkPixbuf*
decode_image (const char *val)
{
int i;
GError *error = NULL;
GdkPixbuf *res = NULL;
struct {
const char *prefix;
const char *mime_type;
} formats[] = {
{ "data:image/x-icon;base64,", "image/x-icon" },
{ "data:image/png;base64,", "image/png" }
};
g_return_val_if_fail (val, NULL);
for (i = 0; i < G_N_ELEMENTS (formats); i++)
{
if (g_str_has_prefix (val, formats[i].prefix))
{
gsize len;
guchar *data = NULL;
char *unescaped;
unescaped = g_uri_unescape_string (val + strlen (formats[i].prefix), NULL);
if (unescaped)
{
data = g_base64_decode (unescaped, &len);
g_free (unescaped);
}
if (data)
{
GdkPixbufLoader *loader;
loader = gdk_pixbuf_loader_new_with_mime_type (formats[i].mime_type, &error);
if (loader &&
gdk_pixbuf_loader_write (loader, data, len, &error) &&
gdk_pixbuf_loader_close (loader, &error))
{
res = gdk_pixbuf_loader_get_pixbuf (loader);
g_object_ref (res);
}
g_object_unref (loader);
g_free (data);
}
}
}
if (!res)
{
if (error)
{
g_warning ("%s\n", error->message);
g_error_free (error);
}
else
g_warning ("incorrect data uri");
}
return res;
}
static GdkPixbuf *
impl_load_pixbuf_file (const char *uri,
impl_load_pixbuf_file (GFile *file,
int available_width,
int available_height,
int scale,
GError **error)
{
GdkPixbuf *pixbuf = NULL;
GFile *file;
char *contents = NULL;
gsize size;
if (g_str_has_prefix (uri, "data:"))
return decode_image (uri);
file = g_file_new_for_uri (uri);
if (g_file_load_contents (file, NULL, &contents, &size, NULL, error))
{
pixbuf = impl_load_pixbuf_data ((const guchar *) contents, size,
@ -490,7 +424,6 @@ impl_load_pixbuf_file (const char *uri,
error);
}
g_object_unref (file);
g_free (contents);
return pixbuf;
@ -507,9 +440,9 @@ load_pixbuf_thread (GSimpleAsyncResult *result,
data = g_async_result_get_user_data (G_ASYNC_RESULT (result));
g_assert (data != NULL);
g_assert (data->uri != NULL);
g_assert (data->file != NULL);
pixbuf = impl_load_pixbuf_file (data->uri, data->width, data->height, data->scale, &error);
pixbuf = impl_load_pixbuf_file (data->file, data->width, data->height, data->scale, &error);
if (error != NULL)
{
@ -647,7 +580,7 @@ static void
load_texture_async (StTextureCache *cache,
AsyncTextureLoadData *data)
{
if (data->uri)
if (data->file)
{
GSimpleAsyncResult *result;
result = g_simple_async_result_new (G_OBJECT (cache), on_pixbuf_loaded, data, load_texture_async);
@ -1014,46 +947,43 @@ file_changed_cb (GFileMonitor *monitor,
gpointer user_data)
{
StTextureCache *cache = user_data;
char *uri, *key;
char *key;
guint file_hash;
if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
return;
uri = g_file_get_uri (file);
file_hash = g_file_hash (file);
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
key = g_strdup_printf (CACHE_PREFIX_FILE "%u", file_hash);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", file_hash);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, uri);
g_free (uri);
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, file);
}
static void
ensure_monitor_for_uri (StTextureCache *cache,
const gchar *uri)
ensure_monitor_for_file (StTextureCache *cache,
GFile *file)
{
StTextureCachePrivate *priv = cache->priv;
GFile *file = g_file_new_for_uri (uri);
if (g_hash_table_lookup (priv->file_monitors, uri) == NULL)
if (g_hash_table_lookup (priv->file_monitors, file) == NULL)
{
GFileMonitor *monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE,
NULL, NULL);
g_signal_connect (monitor, "changed",
G_CALLBACK (file_changed_cb), cache);
g_hash_table_insert (priv->file_monitors, g_strdup (uri), monitor);
g_hash_table_insert (priv->file_monitors, g_object_ref (file), monitor);
}
g_object_unref (file);
}
typedef struct {
gchar *path;
GFile *gfile;
gint grid_width, grid_height;
gint scale_factor;
ClutterActor *actor;
@ -1065,7 +995,7 @@ static void
on_data_destroy (gpointer data)
{
AsyncImageData *d = (AsyncImageData *)data;
g_free (d->path);
g_object_unref (d->gfile);
g_object_unref (d->actor);
g_free (d);
}
@ -1138,7 +1068,7 @@ load_sliced_image (GSimpleAsyncResult *result,
loader = gdk_pixbuf_loader_new ();
g_signal_connect (loader, "size-prepared", G_CALLBACK (on_loader_size_prepared), data);
if (!g_file_get_contents (data->path, &buffer, &length, NULL))
if (!g_file_load_contents (data->gfile, NULL, &buffer, &length, NULL, NULL))
goto out;
if (!gdk_pixbuf_loader_write (loader, (const guchar *) buffer, length, NULL))
@ -1173,7 +1103,7 @@ load_sliced_image (GSimpleAsyncResult *result,
/**
* st_texture_cache_load_sliced_image:
* @cache: A #StTextureCache
* @path: Path to a filename
* @file: A #GFile
* @grid_width: Width in pixels
* @grid_height: Height in pixels
* @scale: Scale factor of the display
@ -1189,7 +1119,7 @@ load_sliced_image (GSimpleAsyncResult *result,
*/
ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache,
const gchar *path,
GFile *file,
gint grid_width,
gint grid_height,
gint scale,
@ -1204,7 +1134,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
data->grid_width = grid_width;
data->grid_height = grid_height;
data->scale_factor = scale;
data->path = g_strdup (path);
data->gfile = g_object_ref (file);
data->actor = actor;
data->load_callback = load_callback;
data->load_callback_data = user_data;
@ -1221,9 +1151,9 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
}
/**
* st_texture_cache_load_uri_async:
* st_texture_cache_load_file_async:
* @cache: The texture cache instance
* @uri: uri of the image file from which to create a pixbuf
* @file: a #GFile of the image file from which to create a pixbuf
* @available_width: available width for the image, can be -1 if not limited
* @available_height: available height for the image, can be -1 if not limited
* @scale: scale factor of the display
@ -1235,18 +1165,18 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
* Return value: (transfer none): A new #ClutterActor with no image loaded initially.
*/
ClutterActor *
st_texture_cache_load_uri_async (StTextureCache *cache,
const gchar *uri,
int available_width,
int available_height,
int scale)
st_texture_cache_load_file_async (StTextureCache *cache,
GFile *file,
int available_width,
int available_height,
int scale)
{
ClutterActor *texture;
AsyncTextureLoadData *request;
StTextureCachePolicy policy;
gchar *key;
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
key = g_strdup_printf (CACHE_PREFIX_FILE "%u", g_file_hash (file));
policy = ST_TEXTURE_CACHE_POLICY_NONE; /* XXX */
@ -1264,7 +1194,7 @@ st_texture_cache_load_uri_async (StTextureCache *cache,
request->cache = cache;
/* Transfer ownership of key */
request->key = key;
request->uri = g_strdup (uri);
request->file = g_object_ref (file);
request->policy = policy;
request->width = available_width;
request->height = available_height;
@ -1273,31 +1203,31 @@ st_texture_cache_load_uri_async (StTextureCache *cache,
load_texture_async (cache, request);
}
ensure_monitor_for_uri (cache, uri);
ensure_monitor_for_file (cache, file);
return CLUTTER_ACTOR (texture);
}
static CoglTexture *
st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
StTextureCachePolicy policy,
const gchar *uri,
int available_width,
int available_height,
int scale,
GError **error)
st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache,
StTextureCachePolicy policy,
GFile *file,
int available_width,
int available_height,
int scale,
GError **error)
{
CoglTexture *texdata;
GdkPixbuf *pixbuf;
char *key;
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
key = g_strdup_printf (CACHE_PREFIX_FILE "%u", g_file_hash (file));
texdata = g_hash_table_lookup (cache->priv->keyed_cache, key);
if (texdata == NULL)
{
pixbuf = impl_load_pixbuf_file (uri, available_width, available_height, scale, error);
pixbuf = impl_load_pixbuf_file (file, available_width, available_height, scale, error);
if (!pixbuf)
goto out;
@ -1313,7 +1243,7 @@ st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
else
cogl_object_ref (texdata);
ensure_monitor_for_uri (cache, uri);
ensure_monitor_for_file (cache, file);
out:
g_free (key);
@ -1321,25 +1251,25 @@ out:
}
static cairo_surface_t *
st_texture_cache_load_uri_sync_to_cairo_surface (StTextureCache *cache,
StTextureCachePolicy policy,
const gchar *uri,
int available_width,
int available_height,
int scale,
GError **error)
st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
StTextureCachePolicy policy,
GFile *file,
int available_width,
int available_height,
int scale,
GError **error)
{
cairo_surface_t *surface;
GdkPixbuf *pixbuf;
char *key;
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", g_file_hash (file));
surface = g_hash_table_lookup (cache->priv->keyed_cache, key);
if (surface == NULL)
{
pixbuf = impl_load_pixbuf_file (uri, available_width, available_height, scale, error);
pixbuf = impl_load_pixbuf_file (file, available_width, available_height, scale, error);
if (!pixbuf)
goto out;
@ -1355,7 +1285,7 @@ st_texture_cache_load_uri_sync_to_cairo_surface (StTextureCache *cache,
else
cairo_surface_reference (surface);
ensure_monitor_for_uri (cache, uri);
ensure_monitor_for_file (cache, file);
out:
g_free (key);
@ -1365,7 +1295,7 @@ out:
/**
* st_texture_cache_load_file_to_cogl_texture: (skip)
* @cache: A #StTextureCache
* @file_path: Path to a file in supported image format
* @file: A #GFile in supported image format
* @scale: Scale factor of the display
*
* This function synchronously loads the given file path
@ -1376,35 +1306,30 @@ out:
*/
CoglTexture *
st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
const gchar *file_path,
GFile *file,
gint scale)
{
CoglTexture *texture;
GFile *file;
char *uri;
GError *error = NULL;
file = g_file_new_for_path (file_path);
uri = g_file_get_uri (file);
texture = st_texture_cache_load_uri_sync_to_cogl_texture (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
uri, -1, -1, scale, &error);
g_object_unref (file);
g_free (uri);
texture = st_texture_cache_load_file_sync_to_cogl_texture (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
file, -1, -1, scale, &error);
if (texture == NULL)
{
g_warning ("Failed to load %s: %s", file_path, error->message);
char *uri = g_file_get_uri (file);
g_warning ("Failed to load %s: %s", uri, error->message);
g_clear_error (&error);
return NULL;
g_free (uri);
}
return texture;
}
/**
* st_texture_cache_load_file_to_cairo_surface:
* @cache: A #StTextureCache
* @file_path: Path to a file in supported image format
* @file: A #GFile in supported image format
* @scale: Scale factor of the display
*
* This function synchronously loads the given file path
@ -1415,28 +1340,23 @@ st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
*/
cairo_surface_t *
st_texture_cache_load_file_to_cairo_surface (StTextureCache *cache,
const gchar *file_path,
GFile *file,
gint scale)
{
cairo_surface_t *surface;
GFile *file;
char *uri;
GError *error = NULL;
file = g_file_new_for_path (file_path);
uri = g_file_get_uri (file);
surface = st_texture_cache_load_uri_sync_to_cairo_surface (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
uri, -1, -1, scale, &error);
g_object_unref (file);
g_free (uri);
surface = st_texture_cache_load_file_sync_to_cairo_surface (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
file, -1, -1, scale, &error);
if (surface == NULL)
{
g_warning ("Failed to load %s: %s", file_path, error->message);
char *uri = g_file_get_uri (file);
g_warning ("Failed to load %s: %s", uri, error->message);
g_clear_error (&error);
return NULL;
g_free (uri);
}
return surface;
}

View File

@ -70,7 +70,7 @@ StTextureCache* st_texture_cache_get_default (void);
ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache,
const gchar *path,
GFile *file,
gint grid_width,
gint grid_height,
gint scale,
@ -87,18 +87,18 @@ ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
gint size,
gint scale);
ClutterActor *st_texture_cache_load_uri_async (StTextureCache *cache,
const gchar *uri,
int available_width,
int available_height,
int scale);
ClutterActor *st_texture_cache_load_file_async (StTextureCache *cache,
GFile *file,
int available_width,
int available_height,
int scale);
CoglTexture *st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
const gchar *file_path,
GFile *file,
gint scale);
cairo_surface_t *st_texture_cache_load_file_to_cairo_surface (StTextureCache *cache,
const gchar *file_path,
GFile *file,
gint scale);
/**

View File

@ -600,7 +600,7 @@ create_cairo_pattern_of_background_image (StThemeNode *node,
cairo_pattern_t *pattern;
cairo_content_t content;
cairo_matrix_t matrix;
const char *file;
GFile *file;
StTextureCache *texture_cache;
@ -1037,7 +1037,7 @@ st_theme_node_prerender_background (StThemeNode *node,
}
else
{
const char *background_image;
GFile *background_image;
background_image = st_theme_node_get_background_image (node);
@ -1303,14 +1303,14 @@ st_theme_node_load_border_image (StThemeNode *node)
if (border_image == NULL)
goto out;
const char *filename;
filename = st_border_image_get_filename (border_image);
GFile *file;
file = st_border_image_get_file (border_image);
int scale_factor;
g_object_get (node->context, "scale-factor", &scale_factor, NULL);
node->border_slices_texture = st_texture_cache_load_file_to_cogl_texture (st_texture_cache_get_default (),
filename, scale_factor);
file, scale_factor);
if (node->border_slices_texture == COGL_INVALID_HANDLE)
goto out;
@ -1348,7 +1348,7 @@ st_theme_node_load_background_image (StThemeNode *node)
{
if (node->background_texture == COGL_INVALID_HANDLE)
{
const char *background_image;
GFile *background_image;
StShadow *background_image_shadow_spec;
background_image = st_theme_node_get_background_image (node);

View File

@ -68,7 +68,7 @@ struct _StThemeNode {
int transition_duration;
char *background_image;
GFile *background_image;
StBorderImage *border_image;
StShadow *box_shadow;
StShadow *background_image_shadow;

View File

@ -158,7 +158,10 @@ st_theme_node_finalize (GObject *object)
}
if (node->background_image)
g_free (node->background_image);
{
g_object_unref (node->background_image);
node->background_image = NULL;
}
if (node->background_texture != COGL_INVALID_HANDLE)
cogl_handle_unref (node->background_texture);
@ -905,7 +908,7 @@ st_theme_node_get_double (StThemeNode *node,
* parent's parent, and so forth. Note that if the property has a
* value of 'inherit' it will be inherited even if %FALSE is passed
* in for @inherit; this only affects the default behavior for inheritance.
* @value: (out): location to store the newly allocated value that was
* @file: (out) (transfer full): location to store the newly allocated value that was
* determined. If the property is not found, the value in this location
* will not be changed.
*
@ -920,7 +923,7 @@ gboolean
st_theme_node_lookup_url (StThemeNode *node,
const char *property_name,
gboolean inherit,
char **value)
GFile **file)
{
gboolean result = FALSE;
int i;
@ -935,7 +938,6 @@ st_theme_node_lookup_url (StThemeNode *node,
{
CRTerm *term = decl->value;
CRStyleSheet *base_stylesheet;
GFile *file;
if (term->type != TERM_URI && term->type != TERM_STRING)
continue;
@ -945,23 +947,21 @@ st_theme_node_lookup_url (StThemeNode *node,
else
base_stylesheet = NULL;
file = _st_theme_resolve_url (node->theme,
base_stylesheet,
decl->value->content.str->stryng->str);
*value = g_file_get_path (file);
g_object_unref (file);
*file = _st_theme_resolve_url (node->theme,
base_stylesheet,
decl->value->content.str->stryng->str);
result = TRUE;
break;
}
}
if (!result && inherit && node->parent_node)
result = st_theme_node_lookup_url (node->parent_node, property_name, inherit, value);
result = st_theme_node_lookup_url (node->parent_node, property_name, inherit, file);
return result;
}
/*
/**
* st_theme_node_get_url:
* @node: a #StThemeNode
* @property_name: The name of the string property
@ -972,18 +972,18 @@ st_theme_node_lookup_url (StThemeNode *node,
* and lets you handle the case where the theme does not specify the
* indicated value.
*
* Return value: the newly allocated value if found.
* Returns: (transfer full): the newly allocated value if found.
* If @property_name is not found, a warning will be logged and %NULL
* will be returned.
*/
char *
GFile *
st_theme_node_get_url (StThemeNode *node,
const char *property_name)
{
char *value;
GFile *file;
if (st_theme_node_lookup_url (node, property_name, FALSE, &value))
return value;
if (st_theme_node_lookup_url (node, property_name, FALSE, &file))
return file;
else
{
g_warning ("Did not find string property '%s'", property_name);
@ -1926,8 +1926,7 @@ _st_theme_node_ensure_background (StThemeNode *node)
CRTerm *term;
/* background: property sets all terms to specified or default values */
node->background_color = TRANSPARENT_COLOR;
g_free (node->background_image);
node->background_image = NULL;
g_clear_object (&node->background_image);
node->background_position_set = FALSE;
node->background_size = ST_BACKGROUND_SIZE_AUTO;
@ -1943,7 +1942,7 @@ _st_theme_node_ensure_background (StThemeNode *node)
if (node->parent_node)
{
st_theme_node_get_background_color (node->parent_node, &node->background_color);
node->background_image = g_strdup (st_theme_node_get_background_image (node->parent_node));
node->background_image = g_object_ref (st_theme_node_get_background_image (node->parent_node));
}
}
else if (term_is_none (term))
@ -1964,8 +1963,7 @@ _st_theme_node_ensure_background (StThemeNode *node)
base_stylesheet,
term->content.str->stryng->str);
node->background_image = g_file_get_path (file);
g_object_unref (file);
node->background_image = file;
}
}
}
@ -2062,30 +2060,25 @@ _st_theme_node_ensure_background (StThemeNode *node)
if (decl->value->type == TERM_URI)
{
CRStyleSheet *base_stylesheet;
GFile *file;
if (decl->parent_statement != NULL)
base_stylesheet = decl->parent_statement->parent_sheet;
else
base_stylesheet = NULL;
g_free (node->background_image);
file = _st_theme_resolve_url (node->theme,
base_stylesheet,
decl->value->content.str->stryng->str);
node->background_image = g_file_get_path (file);
g_object_unref (file);
g_clear_object (&node->background_image);
node->background_image = _st_theme_resolve_url (node->theme,
base_stylesheet,
decl->value->content.str->stryng->str);
}
else if (term_is_inherit (decl->value))
{
g_free (node->background_image);
node->background_image = g_strdup (st_theme_node_get_background_image (node->parent_node));
g_clear_object (&node->background_image);
node->background_image = g_object_ref (st_theme_node_get_background_image (node->parent_node));
}
else if (term_is_none (decl->value))
{
g_free (node->background_image);
node->background_image = NULL;
g_clear_object (&node->background_image);
}
}
else if (strcmp (property_name, "-gradient-direction") == 0)
@ -2142,7 +2135,13 @@ st_theme_node_get_background_color (StThemeNode *node,
*color = node->background_color;
}
const char *
/**
* st_theme_node_get_background_image:
* @node: a #StThemeNode
*
* Returns: (transfer none): @node's background image.
*/
GFile *
st_theme_node_get_background_image (StThemeNode *node)
{
g_return_val_if_fail (ST_IS_THEME_NODE (node), NULL);
@ -2894,7 +2893,6 @@ st_theme_node_get_border_image (StThemeNode *node)
int border_left;
GFile *file;
char *filename;
/* Support border-image: none; to suppress a previously specified border image */
if (term_is_none (term))
@ -2973,17 +2971,15 @@ st_theme_node_get_border_image (StThemeNode *node)
base_stylesheet = NULL;
file = _st_theme_resolve_url (node->theme, base_stylesheet, url);
filename = g_file_get_path (file);
g_object_unref (file);
if (filename == NULL)
if (file == NULL)
goto next_property;
node->border_image = st_border_image_new (filename,
node->border_image = st_border_image_new (file,
border_top, border_right, border_bottom, border_left,
scale_factor);
g_free (filename);
g_object_unref (file);
return node->border_image;
}
@ -3853,7 +3849,9 @@ st_theme_node_paint_equal (StThemeNode *node,
!clutter_color_equal (&node->background_gradient_end, &other->background_gradient_end))
return FALSE;
if (g_strcmp0 (node->background_image, other->background_image) != 0)
if ((node->background_image != NULL) &&
(other->background_image != NULL) &&
!g_file_equal (node->background_image, other->background_image))
return FALSE;
_st_theme_node_ensure_geometry (node);

View File

@ -162,7 +162,7 @@ gboolean st_theme_node_lookup_shadow (StThemeNode *node,
gboolean st_theme_node_lookup_url (StThemeNode *node,
const char *property_name,
gboolean inherit,
char **value);
GFile **file);
/* Easier-to-use variants of the above, for application-level use */
void st_theme_node_get_color (StThemeNode *node,
@ -174,7 +174,7 @@ gdouble st_theme_node_get_length (StThemeNode *node,
const char *property_name);
StShadow *st_theme_node_get_shadow (StThemeNode *node,
const char *property_name);
char *st_theme_node_get_url (StThemeNode *node,
GFile *st_theme_node_get_url (StThemeNode *node,
const char *property_name);
/* Specific getters for particular properties: cached
@ -188,7 +188,7 @@ void st_theme_node_get_background_gradient (StThemeNode *node,
ClutterColor *start,
ClutterColor *end);
const char *st_theme_node_get_background_image (StThemeNode *node);
GFile *st_theme_node_get_background_image (StThemeNode *node);
int st_theme_node_get_border_width (StThemeNode *node,
StSide side);

View File

@ -60,13 +60,13 @@ struct _StTheme
{
GObject parent;
char *application_stylesheet;
char *default_stylesheet;
char *theme_stylesheet;
GFile *application_stylesheet;
GFile *default_stylesheet;
GFile *theme_stylesheet;
GSList *custom_stylesheets;
GHashTable *stylesheets_by_filename;
GHashTable *filenames_by_stylesheet;
GHashTable *stylesheets_by_file;
GHashTable *files_by_stylesheet;
CRCascade *cascade;
};
@ -98,12 +98,25 @@ G_DEFINE_TYPE (StTheme, st_theme, G_TYPE_OBJECT)
#define strqcmp(str,lit,lit_len) \
(strlen (str) != (lit_len) || memcmp (str, lit, lit_len))
static gboolean
file_equal0 (GFile *file1,
GFile *file2)
{
if (file1 == file2)
return TRUE;
if ((file1 == NULL) || (file2 == NULL))
return FALSE;
return g_file_equal (file1, file2);
}
static void
st_theme_init (StTheme *theme)
{
theme->stylesheets_by_filename = g_hash_table_new_full (g_str_hash, g_str_equal,
(GDestroyNotify)g_free, (GDestroyNotify)cr_stylesheet_unref);
theme->filenames_by_stylesheet = g_hash_table_new (g_direct_hash, g_direct_equal);
theme->stylesheets_by_file = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal,
(GDestroyNotify)g_object_unref, (GDestroyNotify)cr_stylesheet_unref);
theme->files_by_stylesheet = g_hash_table_new (g_direct_hash, g_direct_equal);
}
static void
@ -124,10 +137,10 @@ st_theme_class_init (StThemeClass *klass)
*/
g_object_class_install_property (object_class,
PROP_APPLICATION_STYLESHEET,
g_param_spec_string ("application-stylesheet",
g_param_spec_object ("application-stylesheet",
"Application Stylesheet",
"Stylesheet with application-specific styling",
NULL,
G_TYPE_FILE,
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
/**
@ -138,10 +151,10 @@ st_theme_class_init (StThemeClass *klass)
*/
g_object_class_install_property (object_class,
PROP_THEME_STYLESHEET,
g_param_spec_string ("theme-stylesheet",
g_param_spec_object ("theme-stylesheet",
"Theme Stylesheet",
"Stylesheet with theme-specific styling",
NULL,
G_TYPE_FILE,
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
/**
@ -152,10 +165,10 @@ st_theme_class_init (StThemeClass *klass)
*/
g_object_class_install_property (object_class,
PROP_DEFAULT_STYLESHEET,
g_param_spec_string ("default-stylesheet",
g_param_spec_object ("default-stylesheet",
"Default Stylesheet",
"Stylesheet with global default styling",
NULL,
G_TYPE_FILE,
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
signals[STYLESHEETS_CHANGED] =
@ -168,23 +181,32 @@ st_theme_class_init (StThemeClass *klass)
}
static CRStyleSheet *
parse_stylesheet (const char *filename,
GError **error)
parse_stylesheet (GFile *file,
GError **error)
{
enum CRStatus status;
CRStyleSheet *stylesheet;
char *contents;
gsize length;
if (filename == NULL)
if (file == NULL)
return NULL;
status = cr_om_parser_simply_parse_file ((const guchar *) filename,
CR_UTF_8,
&stylesheet);
if (!g_file_load_contents (file, NULL, &contents, &length, NULL, error))
return NULL;
status = cr_om_parser_simply_parse_buf ((const guchar *) contents,
length,
CR_UTF_8,
&stylesheet);
g_free (contents);
if (status != CR_OK)
{
char *uri = g_file_get_uri (file);
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Error parsing stylesheet '%s'; errcode:%d", filename, status);
"Error parsing stylesheet '%s'; errcode:%d", uri, status);
g_free (uri);
return NULL;
}
@ -203,12 +225,12 @@ _st_theme_parse_declaration_list (const char *str)
/* Just g_warning for now until we have something nicer to do */
static CRStyleSheet *
parse_stylesheet_nofail (const char *filename)
parse_stylesheet_nofail (GFile *file)
{
GError *error = NULL;
CRStyleSheet *result;
result = parse_stylesheet (filename, &error);
result = parse_stylesheet (file, &error);
if (error)
{
g_warning ("%s", error->message);
@ -219,35 +241,33 @@ parse_stylesheet_nofail (const char *filename)
static void
insert_stylesheet (StTheme *theme,
const char *filename,
GFile *file,
CRStyleSheet *stylesheet)
{
char *filename_copy;
if (stylesheet == NULL)
return;
filename_copy = g_strdup(filename);
g_object_ref (file);
cr_stylesheet_ref (stylesheet);
g_hash_table_insert (theme->stylesheets_by_filename, filename_copy, stylesheet);
g_hash_table_insert (theme->filenames_by_stylesheet, stylesheet, filename_copy);
g_hash_table_insert (theme->stylesheets_by_file, file, stylesheet);
g_hash_table_insert (theme->files_by_stylesheet, stylesheet, file);
}
gboolean
st_theme_load_stylesheet (StTheme *theme,
const char *path,
GFile *file,
GError **error)
{
CRStyleSheet *stylesheet;
stylesheet = parse_stylesheet (path, error);
stylesheet = parse_stylesheet (file, error);
if (!stylesheet)
return FALSE;
stylesheet->app_data = GUINT_TO_POINTER (TRUE);
insert_stylesheet (theme, path, stylesheet);
insert_stylesheet (theme, file, stylesheet);
cr_stylesheet_ref (stylesheet);
theme->custom_stylesheets = g_slist_prepend (theme->custom_stylesheets, stylesheet);
g_signal_emit (theme, signals[STYLESHEETS_CHANGED], 0);
@ -257,11 +277,11 @@ st_theme_load_stylesheet (StTheme *theme,
void
st_theme_unload_stylesheet (StTheme *theme,
const char *path)
GFile *file)
{
CRStyleSheet *stylesheet;
stylesheet = g_hash_table_lookup (theme->stylesheets_by_filename, path);
stylesheet = g_hash_table_lookup (theme->stylesheets_by_file, file);
if (!stylesheet)
return;
@ -269,8 +289,8 @@ st_theme_unload_stylesheet (StTheme *theme,
return;
theme->custom_stylesheets = g_slist_remove (theme->custom_stylesheets, stylesheet);
g_hash_table_remove (theme->stylesheets_by_filename, path);
g_hash_table_remove (theme->filenames_by_stylesheet, stylesheet);
g_hash_table_remove (theme->stylesheets_by_file, file);
g_hash_table_remove (theme->files_by_stylesheet, stylesheet);
cr_stylesheet_unref (stylesheet);
g_signal_emit (theme, signals[STYLESHEETS_CHANGED], 0);
}
@ -279,7 +299,7 @@ st_theme_unload_stylesheet (StTheme *theme,
* st_theme_get_custom_stylesheets:
* @theme: an #StTheme
*
* Returns: (transfer full) (element-type utf8): the list of stylesheet filenames
* Returns: (transfer full) (element-type GFile): the list of stylesheet files
* that were loaded with st_theme_load_stylesheet()
*/
GSList*
@ -291,9 +311,9 @@ st_theme_get_custom_stylesheets (StTheme *theme)
for (iter = theme->custom_stylesheets; iter; iter = iter->next)
{
CRStyleSheet *stylesheet = iter->data;
gchar *filename = g_hash_table_lookup (theme->filenames_by_stylesheet, stylesheet);
GFile *file = g_hash_table_lookup (theme->files_by_stylesheet, stylesheet);
result = g_slist_prepend (result, g_strdup (filename));
result = g_slist_prepend (result, g_object_ref (file));
}
return result;
@ -334,12 +354,12 @@ st_theme_finalize (GObject * object)
g_slist_free (theme->custom_stylesheets);
theme->custom_stylesheets = NULL;
g_hash_table_destroy (theme->stylesheets_by_filename);
g_hash_table_destroy (theme->filenames_by_stylesheet);
g_hash_table_destroy (theme->stylesheets_by_file);
g_hash_table_destroy (theme->files_by_stylesheet);
g_free (theme->application_stylesheet);
g_free (theme->theme_stylesheet);
g_free (theme->default_stylesheet);
g_clear_object (&theme->application_stylesheet);
g_clear_object (&theme->theme_stylesheet);
g_clear_object (&theme->default_stylesheet);
if (theme->cascade)
{
@ -362,36 +382,39 @@ st_theme_set_property (GObject *object,
{
case PROP_APPLICATION_STYLESHEET:
{
const char *path = g_value_get_string (value);
GFile *file = g_value_get_object (value);
if (path != theme->application_stylesheet)
if (!file_equal0 (file, theme->application_stylesheet))
{
g_free (theme->application_stylesheet);
theme->application_stylesheet = g_strdup (path);
g_clear_object (&theme->application_stylesheet);
if (file != NULL)
theme->application_stylesheet = g_object_ref (file);
}
break;
}
case PROP_THEME_STYLESHEET:
{
const char *path = g_value_get_string (value);
GFile *file = g_value_get_object (value);
if (path != theme->theme_stylesheet)
if (!file_equal0 (file, theme->theme_stylesheet))
{
g_free (theme->theme_stylesheet);
theme->theme_stylesheet = g_strdup (path);
g_clear_object (&theme->theme_stylesheet);
if (file != NULL)
theme->theme_stylesheet = g_object_ref (file);
}
break;
}
case PROP_DEFAULT_STYLESHEET:
{
const char *path = g_value_get_string (value);
GFile *file = g_value_get_object (value);
if (path != theme->default_stylesheet)
if (!file_equal0 (file, theme->default_stylesheet))
{
g_free (theme->default_stylesheet);
theme->default_stylesheet = g_strdup (path);
g_clear_object (&theme->default_stylesheet);
if (file != NULL)
theme->default_stylesheet = g_object_ref (file);
}
break;
@ -413,13 +436,13 @@ st_theme_get_property (GObject *object,
switch (prop_id)
{
case PROP_APPLICATION_STYLESHEET:
g_value_set_string (value, theme->application_stylesheet);
g_value_set_object (value, theme->application_stylesheet);
break;
case PROP_THEME_STYLESHEET:
g_value_set_string (value, theme->theme_stylesheet);
g_value_set_object (value, theme->theme_stylesheet);
break;
case PROP_DEFAULT_STYLESHEET:
g_value_set_string (value, theme->default_stylesheet);
g_value_set_object (value, theme->default_stylesheet);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -439,9 +462,9 @@ st_theme_get_property (GObject *object,
* Return value: the newly created theme object
**/
StTheme *
st_theme_new (const char *application_stylesheet,
const char *theme_stylesheet,
const char *default_stylesheet)
st_theme_new (GFile *application_stylesheet,
GFile *theme_stylesheet,
GFile *default_stylesheet)
{
StTheme *theme = g_object_new (ST_TYPE_THEME,
"application-stylesheet", application_stylesheet,
@ -852,26 +875,19 @@ add_matched_properties (StTheme *a_this,
if (import_rule->sheet == NULL)
{
char *filename = NULL;
GFile *file = NULL;
if (import_rule->url->stryng && import_rule->url->stryng->str)
{
GFile *file;
file = _st_theme_resolve_url (a_this,
a_nodesheet,
import_rule->url->stryng->str);
filename = g_file_get_path (file);
g_object_unref (file);
import_rule->sheet = parse_stylesheet (file, NULL);
}
if (filename)
import_rule->sheet = parse_stylesheet (filename, NULL);
if (import_rule->sheet)
{
insert_stylesheet (a_this, filename, import_rule->sheet);
insert_stylesheet (a_this, file, import_rule->sheet);
/* refcount of stylesheets starts off at zero, so we don't need to unref! */
}
else
@ -882,8 +898,8 @@ add_matched_properties (StTheme *a_this,
import_rule->sheet = (CRStyleSheet *) - 1;
}
if (filename)
g_free (filename);
if (file)
g_object_unref (file);
}
if (import_rule->sheet != (CRStyleSheet *) - 1)
@ -1008,8 +1024,8 @@ _st_theme_get_matched_properties (StTheme *theme,
return props;
}
/* Resolve an url from an url() reference in a stylesheet into an absolute
* local filename, if possible. The resolution here is distinctly lame and
/* Resolve an url from an url() reference in a stylesheet into a GFile,
* if possible. The resolution here is distinctly lame and
* will fail on many examples.
*/
GFile *
@ -1018,7 +1034,7 @@ _st_theme_resolve_url (StTheme *theme,
const char *url)
{
char *scheme;
GFile *stylesheet, *resource;
GFile *resource;
if ((scheme = g_uri_parse_scheme (url)))
{
@ -1027,21 +1043,18 @@ _st_theme_resolve_url (StTheme *theme,
}
else if (base_stylesheet != NULL)
{
const char *base_filename = NULL;
char *dirname;
GFile *base_file = NULL, *parent;
base_filename = g_hash_table_lookup (theme->filenames_by_stylesheet, base_stylesheet);
base_file = g_hash_table_lookup (theme->files_by_stylesheet, base_stylesheet);
/* This is an internal function, if we get here with
a bad @base_stylesheet we have a problem. */
g_assert (base_filename);
g_assert (base_file);
dirname = g_path_get_dirname (base_filename);
stylesheet = g_file_new_for_path (dirname);
resource = g_file_resolve_relative_path (stylesheet, url);
parent = g_file_get_parent (base_file);
resource = g_file_resolve_relative_path (parent, url);
g_object_unref (stylesheet);
g_free (dirname);
g_object_unref (parent);
}
else
{

View File

@ -47,12 +47,12 @@ typedef struct _StThemeClass StThemeClass;
GType st_theme_get_type (void) G_GNUC_CONST;
StTheme *st_theme_new (const char *application_stylesheet,
const char *theme_stylesheet,
const char *default_stylesheet);
StTheme *st_theme_new (GFile *application_stylesheet,
GFile *theme_stylesheet,
GFile *default_stylesheet);
gboolean st_theme_load_stylesheet (StTheme *theme, const char *path, GError **error);
void st_theme_unload_stylesheet (StTheme *theme, const char *path);
gboolean st_theme_load_stylesheet (StTheme *theme, GFile *file, GError **error);
void st_theme_unload_stylesheet (StTheme *theme, GFile *file);
GSList *st_theme_get_custom_stylesheets (StTheme *theme);
G_END_DECLS

View File

@ -277,26 +277,26 @@ current_paint_state (StWidget *widget)
static void
st_widget_texture_cache_changed (StTextureCache *cache,
const char *uri,
GFile *file,
gpointer user_data)
{
StWidget *actor = ST_WIDGET (user_data);
StThemeNode *node = actor->priv->theme_node;
char *path;
gboolean changed = FALSE;
GFile *theme_file;
if (node == NULL)
return;
path = g_filename_from_uri (uri, NULL, NULL);
if (g_strcmp0 (st_theme_node_get_background_image (node), path) == 0)
theme_file = st_theme_node_get_background_image (node);
if ((theme_file != NULL) && g_file_equal (theme_file, file))
{
st_theme_node_invalidate_background_image (node);
changed = TRUE;
}
if (g_strcmp0 (st_border_image_get_filename (st_theme_node_get_border_image (node)), path) == 0)
theme_file = st_border_image_get_file (st_theme_node_get_border_image (node));
if ((theme_file != NULL) && g_file_equal (theme_file, file))
{
st_theme_node_invalidate_border_image (node);
changed = TRUE;
@ -317,8 +317,6 @@ st_widget_texture_cache_changed (StTextureCache *cache,
if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor)))
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
}
g_free (path);
}
static void

View File

@ -173,17 +173,21 @@ assert_background_image (StThemeNode *node,
const char *node_description,
const char *expected)
{
const char *value = st_theme_node_get_background_image (node);
if (expected == NULL)
expected = "(null)";
if (value == NULL)
value = "(null)";
GFile *value = st_theme_node_get_background_image (node);
GFile *expected_file;
if (strcmp (expected, value) != 0)
if (expected != NULL && value != NULL)
{
g_print ("%s: %s.background-image: expected: %s, got: %s\n",
test, node_description, expected, value);
fail = TRUE;
expected_file = g_file_new_for_path (expected);
if (!g_file_equal (expected_file, value))
{
char *uri = g_file_get_uri (expected_file);
g_print ("%s: %s.background-image: expected: %s, got: %s\n",
test, node_description, expected, uri);
fail = TRUE;
g_free (uri);
}
}
}
@ -426,14 +430,16 @@ main (int argc, char **argv)
StTheme *theme;
StThemeContext *context;
PangoFontDescription *font_desc;
GFile *file;
gtk_init (&argc, &argv);
if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
return 1;
theme = st_theme_new ("st/test-theme.css",
NULL, NULL);
file = g_file_new_for_path ("st/test-theme.css");
theme = st_theme_new (file, NULL, NULL);
g_object_unref (file);
stage = clutter_stage_new ();
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));

View File

@ -312,6 +312,9 @@ function test() {
button.label = 'NEVER';
break;
case 'NEVER':
button.label = 'EXTERNAL';
break;
case 'EXTERNAL':
button.label = 'AUTOMATIC';
break;
}

View File

@ -1,6 +1,7 @@
// -*- 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 St = imports.gi.St;
@ -10,7 +11,7 @@ function init(stage) {
Environment.init();
let context = St.ThemeContext.get_for_stage(stage);
let stylesheetPath = GLib.getenv("GNOME_SHELL_TESTSDIR") + "/testcommon/test.css";
let theme = new St.Theme({ application_stylesheet: stylesheetPath });
let theme = new St.Theme({ application_stylesheet: Gio.File.new_for_path(stylesheetPath) });
context.set_theme(theme);
}

View File

@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
#
# This is a simple script that we use to check for files in git
# and not in the distribution. It was previously written in shell
@ -16,10 +16,10 @@ os.chdir(srcdir)
status=0
for f in subprocess.Popen(["git", "ls-files"], stdout=subprocess.PIPE).stdout:
f = f.strip()
f = f.decode('utf-8').strip()
if (not os.path.exists(os.path.join(distdir, f)) and
not any((fnmatch.fnmatch(f, p) for p in excludes))):
print "File missing from distribution:", f
print("File missing from distribution:", f)
status=1
sys.exit(status)