Compare commits

..

69 Commits

Author SHA1 Message Date
David Zeuthen
a69e45b5eb goa: implement marking a message as Starred or Junk
This works with the latest GOA tree

Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-05-19 14:52:52 -04:00
David Zeuthen
a355398b0f Initial goa client work
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-05-16 17:10:43 -04:00
Dan Winship
4bfc3bafcb main: make "gnome-shell" the default gettext domain
Since libmutter uses dgettext(), we can take over the default domain

https://bugzilla.gnome.org/show_bug.cgi?id=649203
2011-05-16 14:57:31 -04:00
Dan Winship
898b2b903d environment: put gettext stuff into global environment
Rather than defining _() as a local function in every module, put it
into the global environment (along with C_() and ngettext()).

https://bugzilla.gnome.org/show_bug.cgi?id=649203
2011-05-16 14:57:21 -04:00
Dan Winship
7921954a31 environment: move more init stuff here from main.js
Move some more environment-initializationy stuff from main.js to
environment.js, and be more careful about not importing shell JS
modules until after the environment has been fully patched.

Change gnome-shell-plugin to call Environment.init() before
Main.start(); this means that Environment.init() now runs before any
shell JS modules (besides environment itself) have been imported.

Make run-js-test create a ShellGlobal and use its js_context, so that
the shell_global_set_property_mutable() stuff in Environment.init()
will work correctly in tests as well.

https://bugzilla.gnome.org/show_bug.cgi?id=649203
2011-05-16 14:56:27 -04:00
Dan Winship
0e42de9149 run-js-test: link to libgnome-shell.la
The tests were broken again, because since Shell-0.1.gir now has
'shared-library="libgnome-shell.so"', the references to Shell.PerfLog
ended up pulling in libgnome-shell in addition to the copy of
shell-perf-log.c that libjs-test was built with.

Fix all this hopefully forever by just making run-js-test link to
libgnome-shell.

https://bugzilla.gnome.org/show_bug.cgi?id=649203
2011-05-16 14:54:04 -04:00
Dan Winship
8e4a5f1ac5 Shell: sort, align, clean up shell-global.h and shell-util.h
https://bugzilla.gnome.org/show_bug.cgi?id=648755
2011-05-16 14:51:35 -04:00
Dan Winship
61577e176e shell: move non-ShellGlobal functions from shell-global to shell-util
shell-global had become a dumping ground for functions that didn't
have anywhere else to be. Make shell-util the dumping ground instead,
and have shell-global only have methods that involve the ShellGlobal
object.

https://bugzilla.gnome.org/show_bug.cgi?id=648755
2011-05-16 14:51:35 -04:00
Dan Winship
4b008b1ada shell-global: Remove unused ShellGlobal parameters
Remove the ShellGlobal parameter from any method that isn't actually
ShellGlobal-related (and rename them to not have "global" in the
name).

https://bugzilla.gnome.org/show_bug.cgi?id=648755
2011-05-16 14:51:35 -04:00
Dan Winship
bee37b5bc4 lookingGlass: make Esc work on any page
The lg window was losing focus when the page with the entry got unmapped;
fix it to refocus itself after that.

Fixing this problem revealed that previously we were focusing the
entry on open(), but not ensuring that that page was selected, meaning
you could type into the entry without being able to see it. Fix that.

https://bugzilla.gnome.org/show_bug.cgi?id=647303
2011-05-16 06:43:47 -04:00
Kristjan SCHMIDT
b5ab8b6ed5 Add Esperanto translation 2011-05-15 17:57:01 +02:00
Kristjan SCHMIDT
4d6bd91d16 Add Esperanto translation 2011-05-15 17:55:50 +02:00
Yaron Shahrabani
5428db5385 Updated Hebrew translation. 2011-05-13 13:23:36 +03:00
Jasper St. Pierre
6e6b1e6052 workspace: End zooming when starting a window drag
The mouse-wheel zooming "easter egg" breaks horribly when you
drag a window, due to ugly lightbox reparenting tricks it uses.

For now, just end any zoom before we drag the window around.

https://bugzilla.gnome.org/show_bug.cgi?id=649632
2011-05-12 11:04:37 -04:00
Jasper St. Pierre
bc2b47974d workspace: Use Main.uiGroup instead of global.stage
The mouse-wheel zoom "easter egg" broke when using the magnifier
because it was using global.stage. Fix it to use Main.uiGroup instead.

https://bugzilla.gnome.org/show_bug.cgi?id=649632
2011-05-12 11:04:37 -04:00
Jonny Lamb
2244b6ff1b telepathyClient: don't notify for delivery reports
Signed-off-by: Jonny Lamb <jonnylamb@gnome.org>
2011-05-12 11:28:43 +01:00
Jasper St. Pierre
fb384fc291 shell-tp-client: enable client recovery
This makes sure that we get any channels that existed at the time the shell
started, otherwise some chats may never appear.

https://bugzilla.gnome.org/show_bug.cgi?id=649633
2011-05-11 21:01:03 -04:00
Christopher Aillon
73cae8ce9a st-scroll-view: remove spurious assignment of uninitialized data
https://bugzilla.gnome.org/show_bug.cgi?id=649596
2011-05-11 16:19:00 -04:00
Colin Walters
dcd07eb23f StTextureCache: plug leak in not-found icon case
Need to free the key too.

https://bugzilla.gnome.org/show_bug.cgi?id=649508
2011-05-11 16:18:10 -04:00
Kjartan Maraas
fa24448489 Updated Norwegian bokmål translation from Sigurd Gartmann 2011-05-11 21:20:47 +02:00
Colin Walters
c975740f92 st-private: Correct fix for memory leak
The previous fix in 72f9f482d was wrong; we need to keep around
the buffer until cairo is done with the pattern.

https://bugzilla.gnome.org/show_bug.cgi?id=649497
2011-05-11 11:23:53 -04:00
Matej Urbančič
1e0187fa57 Updated Slovenian translation 2011-05-09 20:18:33 +02:00
Daniel Martinez Cucalon
cbdf060bca Added Aragonese trasnlation 2011-05-09 10:36:48 +02:00
Yaron Shahrabani
19a8dff975 Updated Hebrew translation. 2011-05-09 00:28:28 +03:00
Colin Walters
72f9f482d6 st-private: Fix memory leak
==13810== 11,360 bytes in 1 blocks are definitely lost in loss record 18,574 of 18,765
==13810==    at 0x4005447: calloc (vg_replace_malloc.c:467)
==13810==    by 0x5191882: standard_calloc (gmem.c:107)
==13810==    by 0x51920A7: g_malloc0 (gmem.c:196)
==13810==    by 0x4056201: blur_pixels (st-private.c:466)
==13810==    by 0x40573B4: _st_create_shadow_cairo_pattern (st-private.c:710)
==13810==    by 0x4070746: st_theme_node_paint (st-theme-node-drawing.c:856)
==13810==    by 0x3FEFFFFF: ???

https://bugzilla.gnome.org/show_bug.cgi?id=649497
2011-05-05 16:02:00 -04:00
Maxim Ermilov
88de26138a shell-xfixes-cursor: missing XFree
memory returned by XFixesGetCursorImage should be freed after usage.
https://bugzilla.gnome.org/show_bug.cgi?id=642652
2011-05-05 23:49:57 +04:00
Timo Jyrinki
57bd964cb3 Finnish date/time fixes from Marko Myllynen. Full usage however depends on getting bugs #647320 / #648678 in g_date_time_format fixed. 2011-05-05 18:02:36 +03:00
Jasper St. Pierre
74a39ae57c shell-app: Fix a case where last_user_time isn't updated.
When activating an uninteresting window, the last_user_time isn't updated,
because we aren't tracking the window that the user_time gets updated on.
Hack around this by setting the last_user_time in shell_app_activate when
activating an uninteresting window.

https://bugzilla.gnome.org/show_bug.cgi?id=643302
2011-05-04 12:10:52 -04:00
Dan Williams
5090a4ccce network: request that nm-applet show the mobile broadband wizard
Use nm-applet 0.8.999 API to call the mobile broadband wizard and
activate the new connection.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=649318
2011-05-04 10:23:08 -05:00
Dan Williams
ae0652d13f network: fix initial connections to WPA[2] Enterprise APs
Call out to nm-applet to do the dirty work since the dialog of
doom is pretty complicated and we don't have a JS equivalent
of it for now.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=648171
2011-05-04 10:20:33 -05:00
Dan Williams
101a07a3d7 network: fix handling of AP flags and enhance for 802.1x
All WPA APs were getting set as WPA2 due to the check for privacy;
WPA/WPA2 APs *must* set the Privacy bit according to the standard,
so we'd never end up in the case for NMAccessPointSecurity.WPA.

Fix that, and also add flags for WPA[2] Enterprise which we'll
use a bit later for the first-time connect case for 802.1x enabled
access points.
2011-05-04 10:20:21 -05:00
Kjartan Maraas
b012e93121 Updated Norwegian bokmål translation 2011-05-04 10:34:52 +02:00
Dan Williams
c31109800b network: simplify connection sorting by using libnm-glib functions
Instead of rolling our own code, use new libnm-glib functions to do
the same thing.  Requires libnm-glib as of
779215c742bbe29a2c66202ec7e2e6d43edeb8ff (which will be part of 0.9).

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=648648
2011-05-04 00:33:51 -05:00
Owen W. Taylor
c0dc363a3d appDisplay: Fix off-by-one when incrementally adding application icons
A "cosmetic" code arrangement I requested in code review resulted
in one too few items being removed from the queue for each incremental
chunk of icons added. Fix.

https://bugzilla.gnome.org/show_bug.cgi?id=648739
2011-05-03 08:52:39 -04:00
Abduxukur Abdurixit
739bb28220 Added UG translation 2011-05-02 18:45:32 +02:00
Abduxukur Abdurixit
aab2794e05 Added UG translation 2011-05-02 18:39:44 +02:00
Abduxukur Abdurixit
75c8c1bfb6 Added UG translation 2011-05-02 07:27:15 +02:00
Daniel Korostil
6f8bd96195 Uploaded Ukranian 2011-05-02 02:46:26 +03:00
Daniel Nylander
25f0d098bd Updated Swedish translation 2011-05-01 09:53:59 +02:00
Adel Gadllah
56d584b7c6 workspacesView: Don't change opacity during dnd
We used used to indicate to the user the ability to move to another workspace
during dnd by highligthing the adjacent workspaces on hover.

This was done by changing the workspace's opacity to 200 and set it to
255 for the highlighted adjacent ones.

This is now no longer needed as the design was completely changed since
then (overview relayout; we no longer represent workspaces in the way
we did before) and introduces a bug where we don't properly reset the
opacity after the drag action, so just remove that code.

https://bugzilla.gnome.org/show_bug.cgi?id=648983
2011-04-30 00:04:22 +02:00
Daniel Mustieles
20bf53add1 Updated Spanish translation 2011-04-29 20:01:34 +02:00
Ray Strode
0d440bb0a2 StTooltip: add missing break statement
This commit is a small fix to prevent the
tip area property setter code from erroneously
falling through to the unhandled property case.

https://bugzilla.gnome.org/show_bug.cgi?id=648894
2011-04-29 09:45:19 -04:00
Dan Williams
8ec62ce46b bluetooth: fix mis-spelling of "Set up"
"setup" is not a verb.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=648410
2011-04-28 16:22:04 -05:00
Dan Winship
79927faaec shell-global: remove some no-longer-used methods
https://bugzilla.gnome.org/show_bug.cgi?id=648755
2011-04-27 15:32:26 -04:00
Dan Winship
e4c7f1f3c4 St: require libcroco >= 0.6.2
and remove the workaround for the parsing bug in earlier versions

https://bugzilla.gnome.org/show_bug.cgi?id=648760
2011-04-27 15:29:24 -04:00
Jasper St. Pierre
68710c4647 Revert "shell-app: Fix a case where last_user_time isn't updated."
This reverts commit 7d7cbde1f3.

This was acidentally pushed.
2011-04-27 12:53:33 -04:00
Jasper St. Pierre
7d7cbde1f3 shell-app: Fix a case where last_user_time isn't updated.
When activating an uninteresting window, the last_user_time isn't updated,
because we aren't tracking the window that the user_time gets updated on.
Hack around this by setting the last_user_time in shell_app_activate when
activating an uninteresting window.

https://bugzilla.gnome.org/show_bug.cgi?id=643302
2011-04-27 11:12:27 -04:00
Jasper St. Pierre
bafd9c777a history: Fix navigation when entering a repeat
If the user typed "a", hit up, and pressed enter again, we wouldn't re-set the
history pointer to the end, so the broken navigation would instead go to the
entry before that.

https://bugzilla.gnome.org/show_bug.cgi?id=648765
2011-04-27 10:08:00 -04:00
Dan Winship
42a5531f15 network: fix a variable name 2011-04-27 09:05:39 -04:00
Guillaume Desmottes
227da25776 Move Telepathy utility functions from shell-global to shell-tp-client
https://bugzilla.gnome.org/show_bug.cgi?id=645585
2011-04-27 10:43:17 +02:00
Guillaume Desmottes
2028f33e38 telepathyClient.js: use ShellTpClient instead of TpSimpleObserver
https://bugzilla.gnome.org/show_bug.cgi?id=645585
2011-04-27 10:43:17 +02:00
Guillaume Desmottes
145bf19636 add shell-tp-client
https://bugzilla.gnome.org/show_bug.cgi?id=645585
2011-04-27 10:43:17 +02:00
Peter Mráz
d1675c44e2 Added Slovak translation 2011-04-27 08:57:24 +02:00
Alejandro Piñeiro
6934e4db26 Setting StWidget::label-actor on some ui elements
Specifically:
  * Icons on Alt+Tab menu
  * Icons on Ctrl+Alt+Tab menu
  * Icons on the list of applications
2011-04-27 02:09:11 +02:00
Alejandro Piñeiro
cae3414854 [a11y] Use StWidget::label-actor on StWidgetAccessible
It uses this label-actor to set the proper atk relationships
between the widget and his label
2011-04-27 02:09:11 +02:00
Alejandro Piñeiro
90d061edaf Add a new property StWidget:label-actor
This property represents that the widget is being labelled by an
actor. The name is label-actor to avoid problems with the current
StButton:label and StTooltip:label
2011-04-27 02:09:10 +02:00
Jasper St. Pierre
2e02918323 WindowOverlay: Show close button after an animation
If a user is fast and mouses over a window while the workspace thumbnail
animations are playing, it can be frustrating when the close button won't
appear at the end of the animation.

https://bugzilla.gnome.org/show_bug.cgi?id=645848
2011-04-26 17:16:53 -04:00
Daniel Nylander
e77a1fd33b Updated Swedish translation 2011-04-26 23:10:00 +02:00
Florian Müllner
dd01c24c34 build: Remove deleted files from Makefile
Commit f88fbee8 removed unused theme files, but the Makefile still
referenced them.
2011-04-26 22:49:19 +02:00
Sean Wilson
f88fbee80d Remove unneeded theme files.
https://bugzilla.gnome.org/show_bug.cgi?id=648006
2011-04-26 22:41:16 +02:00
Dan Winship
fe08edbe2b altTab: fix Alt+Tab scrolling on initial display
The initial selection of the Alt+Tab dialog was happening before the
dialog was shown and allocated, and so the "do we need to scroll"
check used bogus coordinates. Fix by showing the dialog (and forcing
an allocation) first.

https://bugzilla.gnome.org/show_bug.cgi?id=647807
2011-04-26 21:10:46 +02:00
Adel Gadllah
d2a16bca10 altTab: Fix the appSwitcher's allocation
A typo in AltTabPopup._allocate was causing the allocation to be wrong
which broke icon scrolling, so fix that.

https://bugzilla.gnome.org/show_bug.cgi?id=647807
2011-04-26 21:10:45 +02:00
Adam Dingle
a87f51487e Display dialogs on the primary monitor when no window has focus.
Before this change, we displayed dialogs on the monitor containing the
focused window if there was any, otherwise on monitor 0.  We now use
the primary monitor rather than monitor 0 when no window has focus.

https://bugzilla.gnome.org/show_bug.cgi?id=648305
2011-04-26 21:09:41 +02:00
Giovanni Campagna
76fce94b66 BluetoothStatus: always update devices
Previously, we skipped rebuilding device items in case the device
had already been seen, but this caused the connected switch not to
be updated. Now it has been refactored to update in case the device
changes, and to create only when the device is completely new.

https://bugzilla.gnome.org/show_bug.cgi?id=647565
2011-04-26 18:05:39 +02:00
Giovanni Campagna
d104f9210a PopupSliderMenuItem: intercept clicks outside the slider
Connect to button-press-event on the menu item actor, not on the
slider, so any part that is highlighted is also clicked. This means
that click on the left of the volume slider is a rapid way to mute.

https://bugzilla.gnome.org/show_bug.cgi?id=646660
2011-04-26 15:40:51 +02:00
Giovanni Campagna
d0780d1622 NetworkMenu: keep wirelesss networks in predictable order
Adds a function that compares wireless networks and keeps them sorted
at all times. Order is: first already configured connections, then
first secure networks, then alphabtic. Also, the appearance of a new access
point no longer causes the whole menu to be rebuilt (but it still linear
searches for the position, I guess that could be skipped), which caused
the addition of more code for tracking the active access point.

https://bugzilla.gnome.org/show_bug.cgi?id=646580
2011-04-26 14:46:43 +02:00
Dan Winship
9d5906dae3 panel: provide a consistent way to refer to panel items from lg
Rename a few Panel fields and add a _statusArea object pointing to the
status area PanelButton objects. You can now address each item
consistently from lg:

    Main.panel._activities
    Main.panel._appMenu
    Main.panel._dateMenu
    Main.panel._statusArea.a11y
    Main.panel._statusArea.volume ...
    Main.panel._userMenu

https://bugzilla.gnome.org/show_bug.cgi?id=646915
2011-04-26 08:21:41 -04:00
Dan Winship
07a0960265 environment: improve Object.toString for delegate objects
If a JS object has an 'actor' property pointing to a ClutterActor,
include the actor's toString() output in the delegate's toString()
output. Eg:

  js>>> Main.panel
  [object Object delegate for 0xff6080 StBoxLayout.menu-bar "panel" ("Activities")]

https://bugzilla.gnome.org/show_bug.cgi?id=646919
2011-04-26 08:19:43 -04:00
Dan Winship
72bee6d7ca Revert "telepathyClient: remove alias-change messages, to unbreak string freeze"
Add this message back, now that master is no longer in string freeze.

This reverts commit f6cb215042db1404a8e5a3f694d23670ee23e370.

https://bugzilla.gnome.org/show_bug.cgi?id=642793
2011-04-26 08:17:32 -04:00
84 changed files with 5218 additions and 3725 deletions

37
NEWS
View File

@@ -1,40 +1,3 @@
3.0.2
=====
* Network Menu [Dan Williams
- Fix connecting to WPA2 Enterprise access points
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=648171
- Show the mobile broadband wizard when selecting 3G network
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=649318
- Miscellaneous bug fixes
648648, 650124
* Fix duplicate icons in the application browser [Owen]
https://bugzilla.gnome.org/show_bug.cgi?id=648739
* Make clicking anywhere on the volume icon slider work [Giovanni]
https://bugzilla.gnome.org/show_bug.cgi?id=646660
* Fix a case where activating and clicking the hot corner
at the same time could result in immediately leaving the
overview [Rui]
https://bugzilla.gnome.org/show_bug.cgi?id=649427
* Fix a case where applications became misordered in Alt-Tab [Jasper]
https://bugzilla.gnome.org/show_bug.cgi?id=643302
* Fix a bug where messages you send could show up in
notifications as if someone else sent them [Jonny]
https://bugzilla.gnome.org/show_bug.cgi?id=650219
* Memory leak fixes [Colin, Maxim]
642652, 649508, 649497
* Miscellaneous minor bug fixes [Adel, Christopher, Jasper]
649596,648765, 648983, 649632
Contributors:
Christopher Aillon, Giovanni Campagna, Maxim Ermilov,
Adel Gadllah, Jonny Lamb, Rui Matos, Jasper St. Pierre,
Owen Taylor, Colin Walters, Dan Williams
Translations:
Arash Mousavi [fa], Seán de Búrca [ga], Timo Jyrinki [fi],
Sigurd Gartmann [nb], Daniel Nylander [se], Peter Mráz [sl],
Abduxukur Abdurixit [ug], Nguyễn Thái Ngọc Duy [vi]
3.0.1
=====

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.0.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.0.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])
@@ -116,11 +116,10 @@ AC_CHECK_FUNCS(JS_NewGlobalObject sn_startup_sequence_get_application_id XFixesC
CFLAGS=$saved_CFLAGS
LIBS=$saved_LIBS
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 gnome-desktop-3.0 >= 2.90.0 x11)
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 gnome-desktop-3.0 >= 2.90.0 x11)
PKG_CHECK_MODULES(GDMUSER, dbus-glib-1 gtk+-3.0)
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
PKG_CHECK_MODULES(JS_TEST, clutter-x11-1.0 gjs-1.0 gobject-introspection-1.0 gtk+-3.0)
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 0.1.7)
AC_MSG_CHECKING([for bluetooth support])

View File

@@ -30,26 +30,14 @@ dist_theme_DATA = \
theme/filter-selected-ltr.svg \
theme/filter-selected-rtl.svg \
theme/gnome-shell.css \
theme/mosaic-view-active.svg \
theme/mosaic-view.svg \
theme/move-window-on-new.svg \
theme/panel-border.svg \
theme/panel-button-border.svg \
theme/panel-button-highlight-narrow.svg \
theme/panel-button-highlight-wide.svg \
theme/process-working.svg \
theme/running-indicator.svg \
theme/scroll-button-down-hover.png \
theme/scroll-button-down.png \
theme/scroll-button-up-hover.png \
theme/scroll-button-up.png \
theme/scroll-hhandle.svg \
theme/scroll-vhandle.svg \
theme/section-more.svg \
theme/section-more-open.svg \
theme/separator-white.png \
theme/single-view-active.svg \
theme/single-view.svg \
theme/source-button-border.svg \
theme/toggle-off-us.svg \
theme/toggle-off-intl.svg \

View File

@@ -1655,3 +1655,49 @@ StTooltip StLabel {
.magnifier-zoom-region.full-screen {
border-width: 0px;
}
/* goa message popup */
.goa-message-table {
}
.goa-message-base {
font-size: 9pt;
}
.goa-message-from-header {
color: #666666;
font-weight: bold;
}
.goa-message-subject-header {
color: #666666;
font-weight: bold;
}
.goa-message-date-header {
color: #666666;
font-weight: bold;
}
.goa-message-from {
font-weight: bold;
min-width: 125px;
}
.goa-message-hbox {
spacing: 0.25em;
min-width: 300px;
}
.goa-message-subject {
}
.goa-message-excerpt {
color: rgba(153, 153, 153, 1.0);
}
.goa-message-date {
min-width: 80px;
}

View File

@@ -1,113 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="16"
id="svg6503"
version="1.1"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="mosaic-view-active.svg">
<defs
id="defs6505">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
id="perspective6511" />
<inkscape:perspective
id="perspective6494"
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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.197802"
inkscape:cx="-15.97056"
inkscape:cy="16"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1680"
inkscape:window-height="997"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1" />
<metadata
id="metadata6508">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-16)">
<g
style="display:inline;fill:#cbcbcb;fill-opacity:1"
transform="translate(-449.85476,-685.85869)"
id="g5306">
<rect
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999970000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none"
id="rect5308"
width="11"
height="7"
x="450.5"
y="710.5"
rx="0.99999958"
ry="1" />
<rect
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999970000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none;display:inline"
id="rect5310"
width="11"
height="7"
x="462.5"
y="702.5"
rx="0.99999958"
ry="1" />
<rect
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999976000000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none;display:inline"
id="rect5312"
width="11"
height="7"
x="450.5"
y="702.5"
rx="0.99999958"
ry="1" />
<rect
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999970000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none;display:inline"
id="rect5314"
width="11"
height="7"
x="462.5"
y="710.5"
rx="0.99999958"
ry="1" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -1,113 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="16"
id="svg6503"
version="1.1"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="New document 19">
<defs
id="defs6505">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
id="perspective6511" />
<inkscape:perspective
id="perspective6494"
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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.197802"
inkscape:cx="16"
inkscape:cy="16"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1680"
inkscape:window-height="997"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1" />
<metadata
id="metadata6508">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-16)">
<g
style="display:inline"
transform="translate(-449.85476,-685.85869)"
id="g5306">
<rect
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none"
id="rect5308"
width="11"
height="7"
x="450.5"
y="710.5"
rx="0.99999958"
ry="1" />
<rect
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none;display:inline"
id="rect5310"
width="11"
height="7"
x="462.5"
y="702.5"
rx="0.99999958"
ry="1" />
<rect
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.99999976;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none;display:inline"
id="rect5312"
width="11"
height="7"
x="450.5"
y="702.5"
rx="0.99999958"
ry="1" />
<rect
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none;display:inline"
id="rect5314"
width="11"
height="7"
x="462.5"
y="710.5"
rx="0.99999958"
ry="1" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1,89 +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="98"
height="98"
id="svg6375"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="add-workspace.svg">
<defs
id="defs6377">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
id="perspective6383" />
<inkscape:perspective
id="perspective6366"
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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.9590209"
inkscape:cx="56.650687"
inkscape:cy="20.635343"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1680"
inkscape:window-height="997"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1" />
<metadata
id="metadata6380">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,66)">
<g
id="g2824"
transform="matrix(11.568551,0,0,11.698271,-78.828159,-304.81518)">
<path
style="fill:none;stroke:#666666;stroke-width:1.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 11.07363,21.36834 0,6.43903"
id="path5322" />
<path
style="fill:none;stroke:#666666;stroke-width:1.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 14.29314,24.58786 -6.43902,0"
id="path5324" />
</g>
<path
style="fill:#000000;fill-opacity:0.98823529"
d="m 48.239516,97.908047 c -0.41677,-0.05102 -1.269253,-0.222408 -1.894408,-0.380859 -4.088493,-1.036262 -7.520781,-4.753234 -8.330163,-9.021094 -0.154947,-0.817026 -0.257819,-6.68112 -0.257819,-14.696556 l 0,-13.337088 -13.829177,-0.08909 C 10.802042,60.298796 10.026884,60.268266 8.6851548,59.783022 3.6288503,57.954375 0.62673331,53.828648 0.62673331,48.708554 c 0,-5.625522 4.25936019,-10.425065 9.97721469,-11.242548 0.987903,-0.141242 7.368912,-0.254994 14.460646,-0.257791 l 12.692532,-0.005 0,-13.586668 c 0,-14.6441583 0.03287,-15.0698926 1.364686,-17.6753047 2.185477,-4.2754229 6.938193,-6.75739913 11.687647,-6.10355607 3.382776,0.46569661 6.737962,2.72496967 8.414081,5.66577137 1.480816,2.5981315 1.519067,3.0522448 1.519067,18.0333334 l 0,13.666424 12.692533,0.005 c 7.091733,0.0028 13.472742,0.116549 14.460646,0.257791 6.395303,0.914337 10.804785,6.623716 9.941157,12.871766 -0.698243,5.051565 -4.792685,9.104635 -9.941157,9.840713 -0.987904,0.141242 -7.368913,0.254995 -14.460646,0.257791 l -12.692533,0.005 0,13.801945 c 0,13.031417 -0.02798,13.895893 -0.501177,15.484801 -1.526902,5.127058 -6.919246,8.802262 -12.001914,8.18002 z"
id="path2828"
transform="translate(0,-66)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 B

View File

@@ -1,87 +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="5.8600588"
height="9"
id="svg3647"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="section-more.svg">
<defs
id="defs3649">
<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="perspective3655" />
<inkscape:perspective
id="perspective3603"
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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="82.777778"
inkscape:cx="2.9300294"
inkscape:cy="5.466443"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1680"
inkscape:window-height="997"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1" />
<metadata
id="metadata3652">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-262.78425,-490.71933)">
<path
transform="matrix(0,-0.98149546,0.71467449,0,25.404986,578.15569)"
d="M 88.830127,340 80.169873,340 84.5,332.5 88.830127,340 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.5707963"
sodipodi:arg1="0.52359878"
sodipodi:r2="2.5"
sodipodi:r1="5"
sodipodi:cy="337.5"
sodipodi:cx="84.5"
sodipodi:sides="3"
id="path5497-5"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.59699643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
sodipodi:type="star" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -1,87 +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="5.8600588"
height="9"
id="svg3647"
version="1.1"
inkscape:version="0.46+devel"
sodipodi:docname="New document 6">
<defs
id="defs3649">
<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="perspective3655" />
<inkscape:perspective
id="perspective3603"
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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="112.21575"
inkscape:cy="-32.642856"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="609"
inkscape:window-height="501"
inkscape:window-x="164"
inkscape:window-y="26"
inkscape:window-maximized="0" />
<metadata
id="metadata3652">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-262.78425,-490.71933)">
<path
transform="matrix(0,0.98149546,-0.71467449,0,506.02358,412.28296)"
d="M 88.830127,340 80.169873,340 84.5,332.5 88.830127,340 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.5707963"
sodipodi:arg1="0.52359878"
sodipodi:r2="2.5"
sodipodi:r1="5"
sodipodi:cy="337.5"
sodipodi:cx="84.5"
sodipodi:sides="3"
id="path5497-5"
style="fill:#5f5f5f;fill-opacity:1;stroke:#5f5f5f;stroke-width:0.59699643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
sodipodi:type="star" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 531 B

View File

@@ -1,81 +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="24"
height="16"
id="svg6446"
version="1.1"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="single-view-active.svg">
<defs
id="defs6448">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
id="perspective6454" />
<inkscape:perspective
id="perspective6441"
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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.197802"
inkscape:cx="0.014720032"
inkscape:cy="16"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1680"
inkscape:window-height="997"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1" />
<metadata
id="metadata6451">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-17)">
<rect
ry="0.5"
rx="0.49999979"
y="17.483809"
x="0.53483802"
height="15"
width="23"
id="rect5304"
style="fill:#cccccc;fill-opacity:1;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -1,81 +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="24"
height="16"
id="svg6446"
version="1.1"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="single-view.svg">
<defs
id="defs6448">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
id="perspective6454" />
<inkscape:perspective
id="perspective6441"
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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.197802"
inkscape:cx="0.014720032"
inkscape:cy="16"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1680"
inkscape:window-height="997"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1" />
<metadata
id="metadata6451">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-17)">
<rect
ry="0.5"
rx="0.49999979"
y="17.483809"
x="0.53483802"
height="15"
width="23"
id="rect5304"
style="fill:#626262;fill-opacity:1;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -26,6 +26,7 @@ nobase_dist_js_DATA = \
ui/endSessionDialog.js \
ui/environment.js \
ui/extensionSystem.js \
ui/goaClient.js \
ui/iconGrid.js \
ui/lightbox.js \
ui/link.js \

View File

@@ -7,9 +7,6 @@ const Shell = imports.gi.Shell;
const Main = imports.ui.main;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
/* http://daringfireball.net/2010/07/improved_regex_for_matching_urls */
const _urlRegexp = new RegExp('\\b(([a-z][\\w-]+:(/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)([^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'\\".,<>?«»“”‘’]))', 'gi');

View File

@@ -87,7 +87,7 @@ AltTabPopup.prototype = {
let [childMinHeight, childNaturalHeight] = this._appSwitcher.actor.get_preferred_height(primary.width - hPadding);
let [childMinWidth, childNaturalWidth] = this._appSwitcher.actor.get_preferred_width(childNaturalHeight);
childBox.x1 = Math.max(primary.x + leftPadding, primary.x + Math.floor((primary.width - childNaturalWidth) / 2));
childBox.x2 = Math.min(primary.x + primary.width - hPadding, childBox.x1 + childNaturalWidth);
childBox.x2 = Math.min(primary.x + primary.width - rightPadding, childBox.x1 + childNaturalWidth);
childBox.y1 = primary.y + Math.floor((primary.height - childNaturalHeight) / 2);
childBox.y2 = childBox.y1 + childNaturalHeight;
this._appSwitcher.actor.allocate(childBox, flags);
@@ -145,6 +145,12 @@ AltTabPopup.prototype = {
this._appIcons = this._appSwitcher.icons;
// Need to force an allocation so we can figure out whether we
// need to scroll when selecting
this.actor.opacity = 0;
this.actor.show();
this.actor.get_allocation_box();
// Make the initial selection
if (switch_group) {
if (backward) {
@@ -174,8 +180,6 @@ AltTabPopup.prototype = {
return false;
}
this.actor.opacity = 0;
this.actor.show();
Tweener.addTween(this.actor,
{ opacity: 255,
time: POPUP_FADE_TIME,
@@ -583,7 +587,7 @@ SwitcherList.prototype = {
this._rightArrow.opacity = this._rightGradient.opacity;
},
addItem : function(item) {
addItem : function(item, label) {
let bbox = new St.Button({ style_class: 'item-box',
reactive: true });
@@ -594,6 +598,8 @@ SwitcherList.prototype = {
bbox.connect('clicked', Lang.bind(this, function() { this._onItemClicked(n); }));
bbox.connect('enter-event', Lang.bind(this, function() { this._onItemEnter(n); }));
bbox.label_actor = label;
this._items.push(bbox);
},
@@ -979,7 +985,7 @@ AppSwitcher.prototype = {
_addIcon : function(appIcon) {
this.icons.push(appIcon);
this.addItem(appIcon.actor);
this.addItem(appIcon.actor, appIcon.label);
let n = this._arrows.length;
let arrow = new St.DrawingArea({ style_class: 'switcher-arrow' });
@@ -1049,9 +1055,12 @@ ThumbnailList.prototype = {
this._labels.push(bin);
bin.add_actor(name);
box.add_actor(bin);
this.addItem(box, name);
} else {
this.addItem(box, null);
}
this.addItem(box);
}
},

View File

@@ -9,8 +9,6 @@ const Signals = imports.signals;
const Meta = imports.gi.Meta;
const St = imports.gi.St;
const Mainloop = imports.mainloop;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const AppFavorites = imports.ui.appFavorites;
const DND = imports.ui.dnd;
@@ -434,6 +432,8 @@ AppWellIcon.prototype = {
this.icon = new AppIcon(app, iconParams);
this.actor.set_child(this.icon.actor);
this.actor.label_actor = this.icon.label;
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this.actor.connect('popup-menu', Lang.bind(this, this._onKeyboardPopupMenu));

View File

@@ -3,8 +3,6 @@
const Shell = imports.gi.Shell;
const Lang = imports.lang;
const Signals = imports.signals;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Main = imports.ui.main;

View File

@@ -8,9 +8,6 @@ const St = imports.gi.St;
const Signals = imports.signals;
const Pango = imports.gi.Pango;
const Gettext_gtk30 = imports.gettext.domain('gtk30');
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const C_ = Gettext.pgettext;
const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell;

View File

@@ -323,6 +323,6 @@ CtrlAltTabSwitcher.prototype = {
let text = new St.Label({ text: item.name });
box.add(text, { x_fill: false });
this.addItem(box);
this.addItem(box, text);
}
};

View File

@@ -6,8 +6,6 @@ const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const AppDisplay = imports.ui.appDisplay;
const AppFavorites = imports.ui.appFavorites;

View File

@@ -8,8 +8,6 @@ const Cairo = imports.cairo;
const Clutter = imports.gi.Clutter;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Util = imports.misc.util;
const Main = imports.ui.main;

View File

@@ -1,8 +1,5 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const DocInfo = imports.misc.docInfo;
const Params = imports.misc.params;
const Search = imports.ui.search;

View File

@@ -22,9 +22,6 @@ const DBus = imports.dbus;
const Lang = imports.lang;
const Signals = imports.signals;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Clutter = imports.gi.Clutter;
const Gdm = imports.gi.Gdm;
const GLib = imports.gi.GLib;

View File

@@ -1,14 +1,22 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
imports.gi.versions.Clutter = '1.0';
imports.gi.versions.Gio = '2.0';
imports.gi.versions.Gdk = '3.0';
imports.gi.versions.GdkPixbuf = '2.0';
imports.gi.versions.Gtk = '3.0';
const Clutter = imports.gi.Clutter;;
const Gettext = imports.gettext;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Gettext_gtk30 = imports.gettext.domain('gtk30');
const Tweener = imports.ui.tweener;
// We can't import shell JS modules yet, because they may have
// variable initializations, etc, that depend on init() already having
// been run.
const Format = imports.misc.format;
// "monkey patch" in some varargs ClutterContainer methods; we need
// to do this per-container class since there is no representation
@@ -61,26 +69,20 @@ function _blockMethod(method, replacement, reason) {
}
function init() {
Tweener.init();
String.prototype.format = Format.format;
// Add some bindings to the global JS namespace; (gjs keeps the web
// browser convention of having that namespace be called 'window'.)
window.global = Shell.Global.get();
// Work around https://bugzilla.mozilla.org/show_bug.cgi?id=508783
Date.prototype.toLocaleFormat = function(format) {
return Shell.util_format_date(format, this.getTime());
};
window._ = Gettext.gettext;
window.C_ = Gettext.pgettext;
window.ngettext = Gettext.ngettext;
// Set the default direction for St widgets (this needs to be done before any use of St)
if (Gettext_gtk30.gettext('default:LTR') == 'default:RTL') {
if (Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL) {
St.Widget.set_default_direction(St.TextDirection.RTL);
}
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
if (slowdownEnv) {
let factor = parseFloat(slowdownEnv);
if (!isNaN(factor) && factor > 0.0)
St.set_slow_down_factor(factor);
}
// Miscellaneous monkeypatching
_patchContainerClass(St.BoxLayout);
_patchContainerClass(St.Table);
@@ -88,8 +90,14 @@ function init() {
return St.describe_actor(this);
};
if (window.global === undefined) // test environment
return;
let origToString = Object.prototype.toString;
Object.prototype.toString = function() {
let base = origToString.call(this);
if ('actor' in this && this.actor instanceof Clutter.Actor)
return base.replace(/\]$/, ' delegate for ' + this.actor.toString().substring(1));
else
return base;
};
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
'gjs\'s handling of Clutter.ModifierType is broken. See bug 597292.');
@@ -101,4 +109,23 @@ function init() {
// Shell.Global.prototype itself is read-only.
global.set_property_mutable('imports.gi.Shell.Global.prototype', 'set_property_mutable', true);
Shell.Global.prototype.set_property_mutable = undefined;
// Work around https://bugzilla.mozilla.org/show_bug.cgi?id=508783
Date.prototype.toLocaleFormat = function(format) {
return Shell.util_format_date(format, this.getTime());
};
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
if (slowdownEnv) {
let factor = parseFloat(slowdownEnv);
if (!isNaN(factor) && factor > 0.0)
St.set_slow_down_factor(factor);
}
// OK, now things are initialized enough that we can import shell JS
const Format = imports.misc.format;
const Tweener = imports.ui.tweener;
Tweener.init();
String.prototype.format = Format.format;
}

500
js/ui/goaClient.js Normal file
View File

@@ -0,0 +1,500 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Goa = imports.gi.Goa;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const St = imports.gi.St;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const C_ = Gettext.pgettext;
const Gtk = imports.gi.Gtk;
const Pango = imports.gi.Pango;
const History = imports.misc.history;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
// ----------------------------------------------------------------------------------------------------
function Client() {
this._init();
}
Client.prototype = {
_init : function() {
this._client = null;
this._accountIdToMailMonitor = {}
this._mailSource = null;
// TODO: need to call refreshAllMonitors() when network-connectivity changes
Goa.Client.new(null, /* cancellable */
Lang.bind(this, this._onClientConstructed));
},
_onClientConstructed : function(object, asyncRes) {
this._client = object.new_finish(asyncRes);
this._updateAccounts();
this._client.connect('account-added', Lang.bind(this, this._updateAccounts));
this._client.connect('account-removed', Lang.bind(this, this._updateAccounts));
this._client.connect('account-changed', Lang.bind(this, this._updateAccounts));
},
_updateAccounts : function () {
let objects = this._client.get_accounts();
let mailIds = {};
// Add monitors for accounts that now exist
for (let n = 0; n < objects.length; n++) {
let object = objects[n];
let id = object.account.id;
if (object.mail) {
mailIds[id] = true;
if (!(id in this._accountIdToMailMonitor)) {
let monitor = new MailMonitor(this, object);
this._accountIdToMailMonitor[id] = monitor;
}
}
}
// Nuke monitors for accounts that are now non-existant
let monitorsToRemove = []
for (let existingMonitorId in this._accountIdToMailMonitor) {
if (!(existingMonitorId in mailIds)) {
monitorsToRemove.push(existingMonitorId);
}
}
for (let n = 0; n < monitorsToRemove.length; n++) {
let id = monitorsToRemove[n];
let monitor = this._accountIdToMailMonitor[id];
delete this._accountIdToMailMonitor[id]
monitor.destroy();
}
},
_ensureMailSource: function() {
if (!this._mailSource) {
this._mailSource = new MailSource(this);
this._mailSource.connect('destroy', Lang.bind(this,
function () {
this._mailSource = null;
}));
Main.messageTray.add(this._mailSource);
}
},
addPendingMessage: function(message) {
this._ensureMailSource();
this._mailSource.addMessage(message);
},
refreshAllMonitors: function() {
log('Refreshing all mail monitors');
for (let id in this._accountIdToMailMonitor) {
let monitor = this._accountIdToMailMonitor[id];
monitor.refresh();
}
}
}
// ----------------------------------------------------------------------------------------------------
function Message(uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred) {
this._init(uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred);
}
Message.prototype = {
_init: function(uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred) {
this.uid = uid;
this.from = from;
this.subject = subject;
this.excerpt = excerpt;
this.uri = uri;
this.can_be_marked_as_spam = can_be_marked_as_spam;
this.can_be_starred = can_be_starred;
this.receivedAt = new Date();
}
}
// ----------------------------------------------------------------------------------------------------
function MailMonitor(client, accountObject) {
this._init(client, accountObject);
}
MailMonitor.prototype = {
_init : function(client, accountObject) {
this._client = client;
this._accountObject = accountObject;
this._account = this._accountObject.get_account();
this._mail = this._accountObject.get_mail();
// Create the remote monitor object
this._proxy = null;
this._cancellable = new Gio.Cancellable();
this._mail.call_create_monitor(this._cancellable, Lang.bind(this, this._onMonitorCreated));
},
destroy : function() {
this._cancellable.cancel();
if (this._proxy) {
// We don't really care if this fails or not
this._proxy.call_close(null, Lang.bind(this, function() { }));
this._proxy.disconnect(this._messageReceivedId);
this._proxy = null;
}
},
refresh : function() {
if (this._proxy) {
// We don't really care if this fails or not
log('Refreshing mail monitor for account ' + this._account.name);
this._proxy.call_refresh(null, Lang.bind(this, function() { }));
}
},
_onMonitorCreated : function(mail, asyncRes) {
// TODO: a (gboolean, object_path) tuple is returned here
// See https://bugzilla.gnome.org/show_bug.cgi?id=649657
let ret = mail.call_create_monitor_finish(asyncRes);
let object_path = ret[1];
Goa.MailMonitorProxy.new_for_bus(Gio.BusType.SESSION,
Gio.DBusProxyFlags.NONE,
'org.gnome.OnlineAccounts',
object_path,
null, /* cancellable */
Lang.bind(this, this._onMonitorProxyConstructed));
},
_onMonitorProxyConstructed : function(monitor, asyncRes) {
this._proxy = monitor.new_for_bus_finish(asyncRes);
// Now listen for changes on the mail monitor proxy
this._messageReceivedId = this._proxy.connect('message-received',
Lang.bind(this, this._onMessageReceived));
},
_onMessageReceived : function(monitor, uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred) {
let message = new Message(uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred);
if (!Main.messageTray.getBusy()) {
let source = new Source(this._client, message);
let notification = new Notification(source, this._client, this, message);
// If the user is not marked as busy, present the notification to the user
Main.messageTray.add(source);
source.notify(notification);
} else {
// ... otherwise, if the user is busy, just add it to the MailSource's list
// of pending messages
this._client.addPendingMessage(message);
}
},
MessageAddStar: function (message) {
this._proxy.call_add_star(message.uid,
null, /* cancellable */
Lang.bind(this,
function(object, asyncRes) {
this._proxy.call_add_star_finish(asyncRes);
}));
},
MessageMarkAsSpam: function (message) {
this._proxy.call_mark_as_spam(message.uid,
null, /* cancellable */
Lang.bind(this,
function(object, asyncRes) {
this._proxy.call_add_star_finish(asyncRes);
}));
}
}
// ----------------------------------------------------------------------------------------------------
function Source(client, message) {
this._init(client, message);
}
Source.prototype = {
__proto__: MessageTray.Source.prototype,
_init : function(client, message) {
this._client = client;
this._message = message;
// Init super class and add ourselves to the message tray
MessageTray.Source.prototype._init.call(this, 'Message from ' + _stripEmailAddress(this._message.from));
this.setTransient(true);
this.isChat = true;
this._setSummaryIcon(this.createNotificationIcon());
},
createNotificationIcon : function() {
// TODO: use account icon
let icon = new St.Icon({ icon_type: St.IconType.FULLCOLOR,
icon_size: this.ICON_SIZE,
icon_name: 'mail-send'});
return icon;
}
}
// ----------------------------------------------------------------------------------------------------
function _stripEmailAddress(name_and_addr) {
let bracketStartPos = name_and_addr.indexOf(' <');
if (bracketStartPos == -1) {
return name_and_addr;
} else {
return name_and_addr.slice(0, bracketStartPos);
}
}
function Notification(source, client, monitor, message) {
this._init(source, client, monitor, message);
}
Notification.prototype = {
__proto__: MessageTray.Notification.prototype,
_init : function(source, client, monitor, message) {
this._client = client;
this._monitor = monitor
this._message = message;
this._ignore = false;
this._alreadyExpanded = false;
this._strippedFrom = _stripEmailAddress(this._message.from);
let title = this._strippedFrom;
let banner = this._message.subject + ' \u2014 ' + this._message.excerpt; // — U+2014 EM DASH
// Init super class
MessageTray.Notification.prototype._init.call(this, source, title, banner);
// Change the contents once expanded
this.connect('expanded', Lang.bind (this, this._onExpanded));
this.update(title, banner);
this.setUrgency(MessageTray.Urgency.NORMAL);
this.setTransient(true);
this.addButton('ignore', 'Ignore');
if (message.can_be_starred)
this.addButton('star', 'Star');
if (message.can_be_marked_as_spam)
this.addButton('spam', 'Junk');
if (this._message.uri.length > 0) {
this.addButton('open', 'Open');
}
this.connect('action-invoked', Lang.bind(this,
function(notification, id) {
if (id == 'ignore') {
this._actionIgnore();
} else if (id == 'star') {
this._actionStar();
} else if (id == 'spam') {
this._actionSpam();
} else if (id == 'open') {
this._actionOpen();
}
}));
this.connect('clicked', Lang.bind(this,
function() {
if (this._message.uri.length > 0) {
this._actionOpen();
}
}));
// Hmm, should be ::done-displaying instead?
this.connect('destroy', Lang.bind(this, this._onDestroyed));
},
_onExpanded : function() {
if (this._alreadyExpanded)
return;
this._alreadyExpanded = true;
let escapedExcerpt = GLib.markup_escape_text(this._message.excerpt, -1);
let bannerMarkup = '<b>Subject:</b> ' + this._message.subject + '\n';
// TODO: if available, insert other headers such as Cc
bannerMarkup += '\n' + escapedExcerpt;
this.update(this._strippedFrom, bannerMarkup, {bannerMarkup: true});
},
_onDestroyed : function(reason) {
// If not ignoring the message, push it onto the Mail source
if (!this._ignore) {
this._client.addPendingMessage(this._message);
}
},
_actionIgnore : function() {
this._ignore = true;
},
_actionStar : function() {
this._ignore = true;
this._monitor.MessageAddStar(this._message);
},
_actionSpam : function() {
this._ignore = true;
this._monitor.MessageMarkAsSpam(this._message);
},
_actionOpen : function() {
this._ignore = true;
Gio.app_info_launch_default_for_uri(this._message.uri,
global.create_app_launch_context());
}
}
// ----------------------------------------------------------------------------------------------------
function _sameDay(dateA, dateB) {
return (dateA.getDate() == dateB.getDate() &&
dateA.getMonth() == dateB.getMonth() &&
dateA.getYear() == dateB.getYear());
}
function _sameYear(dateA, dateB) {
return (dateA.getYear() == dateB.getYear());
}
function _formatRelativeDate(date) {
let ret = ''
let now = new Date();
if (_sameDay(date, now)) {
ret = date.toLocaleFormat("%l:%M %p");
} else {
if (_sameYear(date, now)) {
ret = date.toLocaleFormat("%B %e");
} else {
ret = date.toLocaleFormat("%B %e, %Y");
}
}
return ret;
}
function _addMessageToTable(table, message) {
let formattedExcerpt = message.excerpt.replace(/\r/g, '').replace(/\n/g, ' ');
let formattedDate = _formatRelativeDate(message.receivedAt);
let fromLabel = new St.Label({ style_class: 'goa-message-base goa-message-from',
text: _stripEmailAddress(message.from)});
let hbox = new St.BoxLayout({ style_class: 'goa-message-hbox', vertical: false });
let subjectLabel = new St.Label({ style_class: 'goa-message-base goa-message-subject',
text: message.subject });
let excerptLabel = new St.Label({ style_class: 'goa-message-base goa-message-excerpt',
text: formattedExcerpt });
let dateLabel = new St.Label({ style_class: 'goa-message-base goa-message-date',
text: formattedDate });
excerptLabel.clutter_text.line_wrap = false;
excerptLabel.clutter_text.ellipsize = Pango.EllipsizeMode.END;
hbox.add(subjectLabel, { x_fill: true,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.START });
hbox.add(excerptLabel, { x_fill: true,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.START });
let n = table.get_row_count();
table.add(fromLabel, { x_fill: true, x_expand: true, row: n, col: 0 });
table.add(hbox, { row: n, col: 1 });
table.add(dateLabel, { row: n, col: 2 });
}
function MailSource(client) {
this._init(client);
}
MailSource.prototype = {
__proto__: MessageTray.Source.prototype,
_init : function(client) {
this._client = client;
this._pendingMessages = [];
// Init super class and add ourselves to the message tray
MessageTray.Source.prototype._init.call(this, 'Mail');
// Create the notification
this._notification = new MessageTray.Notification(this)
this._notification.setUrgency(MessageTray.Urgency.NORMAL);
this._notification.setResident(true);
this._updateNotification();
this.pushNotification(this._notification);
// Refresh all monitors everytime the "Mail" notification is displayed
this._notification.connect('expanded', Lang.bind(this,
function() {
this._client.refreshAllMonitors();
}));
},
createNotificationIcon : function() {
let numPending = this._pendingMessages.length;
let baseIcon = new Gio.ThemedIcon({ name: 'mail-mark-unread'});
let numerableIcon = new Gtk.NumerableIcon({ gicon: baseIcon });
numerableIcon.set_count(numPending);
let icon = new St.Icon({ icon_type: St.IconType.FULLCOLOR,
icon_size: this.ICON_SIZE });
icon.set_gicon(numerableIcon);
return icon;
},
_updateNotification: function() {
if (!this._notification)
return
let title = 'Mail';
let banner = ''
let table = new St.Table({ homogeneous: false,
style_class: 'goa-message-table',
reactive: true });
for (let n = 0; n < this._pendingMessages.length; n++)
_addMessageToTable (table, this._pendingMessages[n]);
this._notification.update(title, banner, { clear: true,
icon: this.createNotificationIcon() });
this._notification.addActor(table);
this._notification.addButton('close', 'Close');
this._notification.addButton('ignore-all', 'Ignore All');
this._notification.connect('action-invoked', Lang.bind(this,
function(notification, id) {
if (id == 'close') {
// TODO: Can't find another way hide it
notification._onClicked();
} else if (id == 'ignore-all') {
this.clearMessages();
}
}));
},
addMessage: function(message) {
this._pendingMessages.push(message);
// Update notification
this._updateNotification();
// Update icon with latest pending count
this._setSummaryIcon(this.createNotificationIcon());
},
clearMessages: function() {
let notification = this._notification;
this._notification = null;
if (notification)
notification.destroy();
this.destroy();
},
}

View File

@@ -42,10 +42,10 @@ BaseIcon.prototype = {
box.add_actor(this._iconBin);
if (params.showLabel) {
this._name = new St.Label({ text: label });
box.add_actor(this._name);
this.label = new St.Label({ text: label });
box.add_actor(this.label);
} else {
this._name = null;
this.label = null;
}
if (params.createIcon)
@@ -67,8 +67,8 @@ BaseIcon.prototype = {
let childBox = new Clutter.ActorBox();
if (this._name) {
let [labelMinHeight, labelNatHeight] = this._name.get_preferred_height(-1);
if (this.label) {
let [labelMinHeight, labelNatHeight] = this.label.get_preferred_height(-1);
preferredHeight += this._spacing + labelNatHeight;
let labelHeight = availHeight >= preferredHeight ? labelNatHeight
@@ -79,7 +79,7 @@ BaseIcon.prototype = {
childBox.x2 = availWidth;
childBox.y1 = iconSize + this._spacing;
childBox.y2 = childBox.y1 + labelHeight;
this._name.allocate(childBox, flags);
this.label.allocate(childBox, flags);
}
childBox.x1 = Math.floor((availWidth - iconNatWidth) / 2);
@@ -98,8 +98,8 @@ BaseIcon.prototype = {
alloc.min_size = iconMinHeight;
alloc.natural_size = iconNatHeight;
if (this._name) {
let [labelMinHeight, labelNatHeight] = this._name.get_preferred_height(forWidth);
if (this.label) {
let [labelMinHeight, labelNatHeight] = this.label.get_preferred_height(forWidth);
alloc.min_size += this._spacing + labelMinHeight;
alloc.natural_size += this._spacing + labelNatHeight;
}

View File

@@ -5,14 +5,13 @@ const Cogl = imports.gi.Cogl;
const GConf = imports.gi.GConf;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Pango = imports.gi.Pango;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const History = imports.misc.history;
const ExtensionSystem = imports.ui.extensionSystem;
@@ -100,12 +99,19 @@ Notebook.prototype = {
selectIndex: function(index) {
if (index == this._selectedIndex)
return;
this._unselect();
if (index < 0) {
this._unselect();
this.emit('selection', null);
return;
}
// Focus the new tab before unmapping the old one
let tabData = this._tabs[index];
if (!tabData.scrollView.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false))
this.actor.grab_key_focus();
this._unselect();
tabData.labelBox.add_style_pseudo_class('selected');
tabData.scrollView.show();
this._selectedIndex = index;
@@ -745,12 +751,7 @@ LookingGlass.prototype = {
let label = new St.Label({ text: 'js>>> ' });
entryArea.add(label);
this._entry = new St.Entry();
/* unmapping the edit box will un-focus it, undo that */
notebook.connect('selection', Lang.bind(this, function (nb, child) {
if (child == this._evalBox)
global.stage.set_key_focus(this._entry);
}));
this._entry = new St.Entry({ can_focus: true });
entryArea.add(this._entry, { expand: true });
this._windowList = new WindowList();
@@ -909,6 +910,7 @@ LookingGlass.prototype = {
if (!Main.pushModal(this._entry))
return;
this._notebook.selectIndex(0);
this.actor.show();
this.actor.lower(Main.chrome.actor);
this._open = true;

View File

@@ -1,11 +1,5 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
imports.gi.versions.Clutter = '1.0';
imports.gi.versions.Gio = '2.0';
imports.gi.versions.Gdk = '3.0';
imports.gi.versions.GdkPixbuf = '2.0';
imports.gi.versions.Gtk = '3.0';
const Clutter = imports.gi.Clutter;
const DBus = imports.dbus;
const Gdk = imports.gi.Gdk;
@@ -17,8 +11,6 @@ const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Chrome = imports.ui.chrome;
const CtrlAltTab = imports.ui.ctrlAltTab;
@@ -37,6 +29,7 @@ const WindowAttentionHandler = imports.ui.windowAttentionHandler;
const Scripting = imports.ui.scripting;
const ShellDBus = imports.ui.shellDBus;
const TelepathyClient = imports.ui.telepathyClient;
const GoaClient = imports.ui.goaClient;
const WindowManager = imports.ui.windowManager;
const Magnifier = imports.ui.magnifier;
const XdndHandler = imports.ui.xdndHandler;
@@ -58,6 +51,7 @@ let messageTray = null;
let notificationDaemon = null;
let windowAttentionHandler = null;
let telepathyClient = null;
let goaClient = null;
let ctrlAltTabManager = null;
let recorder = null;
let shellDBusService = null;
@@ -75,12 +69,7 @@ let _cssStylesheet = null;
let background = null;
function start() {
// Add a binding for 'global' in the global JS namespace; (gjs
// keeps the web browser convention of having that namespace be
// called 'window'.)
window.global = Shell.Global.get();
// Now monkey patch utility functions into the global proxy;
// Monkey patch utility functions into the global proxy;
// This is easier and faster than indirecting down into global
// if we want to call back up into JS.
global.logError = _logError;
@@ -102,8 +91,6 @@ function start() {
// not loading any events until the user presses the clock
global.launch_calendar_server();
Environment.init();
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
// also initialize ShellAppSystem first. ShellAppSystem
// needs to load all the .desktop files, and ShellWindowTracker
@@ -154,6 +141,7 @@ function start() {
notificationDaemon = new NotificationDaemon.NotificationDaemon();
windowAttentionHandler = new WindowAttentionHandler.WindowAttentionHandler();
telepathyClient = new TelepathyClient.Client();
goaClient = new GoaClient.Client();
overview.init();
statusIconDispatcher.start(messageTray.actor);

View File

@@ -20,9 +20,6 @@ const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const ANIMATION_TIME = 0.2;
const NOTIFICATION_TIMEOUT = 4;
const SUMMARY_TIMEOUT = 1;
@@ -1304,6 +1301,10 @@ MessageTray.prototype = {
},
getBusy: function(source) {
return this._busy;
},
contains: function(source) {
return this._getIndexOfSummaryItemForSource(source) >= 0;
},

View File

@@ -10,8 +10,6 @@ const Pango = imports.gi.Pango;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Params = imports.misc.params;

View File

@@ -7,8 +7,6 @@ const Lang = imports.lang;
const Shell = imports.gi.Shell;
const Mainloop = imports.mainloop;
const St = imports.gi.St;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Config = imports.misc.config;
const Main = imports.ui.main;

View File

@@ -8,8 +8,6 @@ const Signals = imports.signals;
const Lang = imports.lang;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Gdk = imports.gi.Gdk;
const AppDisplay = imports.ui.appDisplay;

View File

@@ -9,8 +9,6 @@ const Pango = imports.gi.Pango;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Signals = imports.signals;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Config = imports.misc.config;
const CtrlAltTab = imports.ui.ctrlAltTab;
@@ -776,7 +774,7 @@ HotCorner.prototype = {
_onCornerClicked : function() {
if (!Main.overview.animationInProgress)
this.maybeToggleOverviewOnClick();
return true;
return false;
},
_onCornerLeft : function(actor, event) {
@@ -817,6 +815,8 @@ Panel.prototype = {
reactive: true });
this.actor._delegate = this;
this._statusArea = {};
Main.overview.connect('shown', Lang.bind(this, function () {
this.actor.add_style_class_name('in-overview');
}));
@@ -913,6 +913,7 @@ Panel.prototype = {
style_class: 'panel-button',
reactive: true,
can_focus: true });
this._activities = this.button;
this.button.set_child(label);
this.button._delegate = this.button;
this.button._xdndTimeOut = 0;
@@ -941,10 +942,10 @@ Panel.prototype = {
this._hotCorner = null;
let appMenuButton = new AppMenuButton();
this._leftBox.add(appMenuButton.actor);
this._appMenu = new AppMenuButton();
this._leftBox.add(this._appMenu.actor);
this._menus.addMenu(appMenuButton.menu);
this._menus.addMenu(this._appMenu.menu);
/* center */
this._dateMenu = new DateMenu.DateMenuButton();
@@ -963,12 +964,12 @@ Panel.prototype = {
this._rightBox.add(this._trayBox);
this._rightBox.add(this._statusBox);
this._statusmenu = new StatusMenu.StatusMenuButton();
this._statusmenu.actor.name = 'panelStatus';
this._rightBox.add(this._statusmenu.actor);
this._userMenu = new StatusMenu.StatusMenuButton();
this._userMenu.actor.name = 'panelStatus';
this._rightBox.add(this._userMenu.actor);
// Synchronize the buttons pseudo classes with its corner
this._statusmenu.actor.connect('style-changed', Lang.bind(this,
this._userMenu.actor.connect('style-changed', Lang.bind(this,
function(actor) {
let rtl = actor.get_direction() == St.TextDirection.RTL;
let corner = rtl ? this._leftCorner : this._rightCorner;
@@ -1051,11 +1052,13 @@ Panel.prototype = {
let indicator = new constructor();
this._statusBox.add(indicator.actor);
this._menus.addMenu(indicator.menu);
this._statusArea[role] = indicator;
}
// PopupMenuManager depends on menus being added in order for
// keyboard navigation
this._menus.addMenu(this._statusmenu.menu);
this._menus.addMenu(this._userMenu.menu);
},
startupAnimation: function() {

View File

@@ -7,8 +7,6 @@ const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Signals = imports.signals;
const St = imports.gi.St;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const DND = imports.ui.dnd;
const Main = imports.ui.main;

View File

@@ -22,8 +22,6 @@
const Lang = imports.lang;
const Signals = imports.signals;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Shell = imports.gi.Shell;
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;

View File

@@ -13,9 +13,6 @@ const Main = imports.ui.main;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */
function PopupBaseMenuItem(params) {

View File

@@ -8,8 +8,6 @@ const Meta = imports.gi.Meta;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const FileUtils = imports.misc.fileUtils;
const Main = imports.ui.main;

View File

@@ -7,9 +7,6 @@ const Signals = imports.signals;
const Shell = imports.gi.Shell;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const FileUtils = imports.misc.fileUtils;
const Main = imports.ui.main;
@@ -276,7 +273,7 @@ OpenSearchSystem.prototype = {
_addProvider: function(fileName) {
let path = global.datadir + '/search_providers/' + fileName;
let source = Shell.get_file_contents_utf8_sync(path);
let [success, name, url, langs, icon_uri] = global.parse_search_provider(source);
let [success, name, url, langs, icon_uri] = Shell.parse_search_provider(source);
let provider ={ name: name,
url: url,
id: this._providers.length,

View File

@@ -2,8 +2,6 @@
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta;
const St = imports.gi.St;
@@ -39,6 +37,7 @@ SearchResult.prototype = {
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
{ createIcon: this.metaInfo['createIcon'] });
content.set_child(icon.actor);
this.actor.label_actor = icon.label;
}
this._content = content;
this.actor.set_child(content);
@@ -259,6 +258,7 @@ SearchResults.prototype = {
let title = new St.Label({ text: provider.name,
style_class: 'dash-search-button-label' });
button.label_actor = title;
bin.set_child(title);
button.set_child(bin);
provider.actor = button;

View File

@@ -14,9 +14,6 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
const KEY_STICKY_KEYS_ENABLED = 'stickykeys-enable';
const KEY_BOUNCE_KEYS_ENABLED = 'bouncekeys-enable';

View File

@@ -16,9 +16,6 @@ const MessageTray = imports.ui.messageTray;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const ConnectionState = {
DISCONNECTED: 0,
CONNECTED: 1,
@@ -67,7 +64,7 @@ Indicator.prototype = {
this._fullMenuItems = [new PopupMenu.PopupSeparatorMenuItem(),
new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
new PopupMenu.PopupMenuItem(_("Setup a New Device...")),
new PopupMenu.PopupMenuItem(_("Set up a New Device...")),
new PopupMenu.PopupSeparatorMenuItem()];
this._hasDevices = false;
this._deviceSep = this._fullMenuItems[0]; // hidden if no device exists
@@ -127,13 +124,6 @@ Indicator.prototype = {
}
},
_deviceCompare: function(d1, d2) {
return d1.device_path == d2.device_path &&
d1.bdaddr == d2.bdaddr &&
d1.can_connect == d2.can_connect &&
d1.capabilities == d2.capabilities;
},
_updateDevices: function() {
let devices = this._applet.get_devices();
@@ -142,12 +132,8 @@ Indicator.prototype = {
let item = this._deviceItems[i];
let destroy = true;
for (let j = 0; j < devices.length; j++) {
// we need to deep compare because BluetoothSimpleDevice is a boxed type
// (but we take advantage of that, because _skip will disappear the next
// time get_devices() is called)
if (this._deviceCompare(item._device, devices[j])) {
item.label.text = devices[j].alias;
devices[j]._skip = true;
if (item._device.device_path == devices[j].device_path) {
this._updateDeviceItem(item, devices[j]);
destroy = false;
break;
}
@@ -162,7 +148,7 @@ Indicator.prototype = {
this._hasDevices = newlist.length > 0;
for (let i = 0; i < devices.length; i++) {
let d = devices[i];
if (d._skip)
if (d._item)
continue;
let item = this._createDeviceItem(d);
if (item) {
@@ -177,17 +163,55 @@ Indicator.prototype = {
this._deviceSep.actor.hide();
},
_updateDeviceItem: function(item, device) {
if (!device.can_connect && device.capabilities == GnomeBluetoothApplet.Capabilities.NONE) {
item.destroy();
return;
}
let prevDevice = item._device;
let prevCapabilities = prevDevice.capabilities;
let prevCanConnect = prevDevice.can_connect;
// adopt the new device object
item._device = device;
device._item = item;
// update properties
item.label.text = device.alias;
if (prevCapabilities != device.capabilities ||
prevCanConnect != device.can_connect) {
// need to rebuild the submenu
item.menu.removeAll();
this._buildDeviceSubMenu(item, device);
}
// update connected property
if (device.can_connect)
item._connectedMenuitem.setToggleState(device.connected);
},
_createDeviceItem: function(device) {
if (!device.can_connect && device.capabilities == GnomeBluetoothApplet.Capabilities.NONE)
return null;
let item = new PopupMenu.PopupSubMenuMenuItem(device.alias);
item._device = device;
// adopt the device object, and add a back link
item._device = device;
device._item = item;
this._buildDeviceSubMenu(item, device);
return item;
},
_buildDeviceSubMenu: function(item, device) {
if (device.can_connect) {
item._connected = device.connected;
let menuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
item._connectedMenuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
menuitem.connect('toggled', Lang.bind(this, function() {
item._connectedMenuitem.connect('toggled', Lang.bind(this, function() {
if (item._connected > ConnectionState.CONNECTED) {
// operation already in progress, revert
menuitem.setToggleState(menuitem.state);
@@ -217,7 +241,7 @@ Indicator.prototype = {
}
}));
item.menu.addMenuItem(menuitem);
item.menu.addMenuItem(item._connectedMenuitem);
}
if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_PUSH) {
@@ -263,8 +287,6 @@ Indicator.prototype = {
default:
break;
}
return item;
},
_updateFullMenu: function() {

View File

@@ -13,9 +13,6 @@ const PopupMenu = imports.ui.popupMenu;
const PanelMenu = imports.ui.panelMenu;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
function LayoutMenuItem() {
this._init.apply(this, arguments);
}

View File

@@ -18,9 +18,6 @@ const MessageTray = imports.ui.messageTray;
const ModemManager = imports.misc.modemManager;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const NMConnectionCategory = {
INVALID: 'invalid',
WIRED: 'wired',
@@ -44,6 +41,10 @@ const NM80211Mode = NetworkManager['80211Mode'];
const NM80211ApFlags = NetworkManager['80211ApFlags'];
const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags'];
// number of wireless networks that should be visible
// (the remaining are placed into More...)
const NUM_VISIBLE_NETWORKS = 5;
const NMAppletHelperInterface = {
name: 'org.gnome.network_manager_applet',
methods: [
@@ -837,7 +838,7 @@ NMDeviceModem.prototype = {
},
get connected() {
return this._enabled && this.device.state == NetworkManager.DeviceState.ACTIVATED;
return this._enabled && this.device.state == NetworkManager.DeviceState.CONNECTED;
},
destroy: function() {
@@ -1026,6 +1027,7 @@ NMDeviceWireless.prototype = {
item: null,
accessPoints: [ ap ]
};
obj.ssidText = NetworkManager.utils_ssid_to_utf8(obj.ssid);
this._networks.push(obj);
}
@@ -1038,6 +1040,14 @@ NMDeviceWireless.prototype = {
}
}
}
if (this.device.active_access_point) {
this._activeNetwork = this._networks[this._findNetwork(this.device.active_access_point)];
} else {
this._activeNetwork = null;
}
this._networks.sort(this._networkSortFunction);
this._apChangedId = device.connect('notify::active-access-point', Lang.bind(this, this._activeApChanged));
this._apAddedId = device.connect('access-point-added', Lang.bind(this, this._accessPointAdded));
this._apRemovedId = device.connect('access-point-removed', Lang.bind(this, this._accessPointRemoved));
@@ -1045,8 +1055,13 @@ NMDeviceWireless.prototype = {
},
destroy: function() {
if (this._apAddedId) {
if (this._apChangedId) {
// see above for this HACK
GObject.Object.prototype.disconnect.call(this.device, this._apChangedId);
this._apChangedId = 0;
}
if (this._apAddedId) {
GObject.Object.prototype.disconnect.call(this.device, this._apAddedId);
this._apAddedId = 0;
}
@@ -1112,6 +1127,19 @@ NMDeviceWireless.prototype = {
}
},
_activeApChanged: function() {
this._activeNetwork = null;
let activeAp = this.device.active_access_point;
if (activeAp) {
let pos = this._findNetwork(activeAp);
this._activeNetwork = this._networks[pos];
}
// we don't refresh the view here, setActiveConnection will
},
_getApSecurityType: function(accessPoint) {
if (accessPoint._secType)
return accessPoint._secType;
@@ -1143,6 +1171,32 @@ NMDeviceWireless.prototype = {
return type;
},
_networkSortFunction: function(one, two) {
let oneHasConnection = one.connections.length != 0;
let twoHasConnection = two.connections.length != 0;
// place known connections first
// (-1 = good order, 1 = wrong order)
if (oneHasConnection && !twoHasConnection)
return -1;
else if (!oneHasConnection && twoHasConnection)
return 1;
let oneHasSecurity = one.security != NMAccessPointSecurity.NONE;
let twoHasSecurity = two.security != NMAccessPointSecurity.NONE;
// place secure connections first
// (we treat WEP/WPA/WPA2 the same as there is no way to
// take them apart from the UI)
if (oneHasSecurity && !twoHasSecurity)
return -1;
else if (!oneHasSecurity && twoHasSecurity)
return 1;
// sort alphabetically
return GLib.utf8_collate(one.ssidText, two.ssidText);
},
_networkCompare: function(network, accessPoint) {
if (!ssidCompare(network.ssid, accessPoint.get_ssid()))
return false;
@@ -1165,6 +1219,8 @@ NMDeviceWireless.prototype = {
_accessPointAdded: function(device, accessPoint) {
let pos = this._findNetwork(accessPoint);
let apObj;
let needsupdate = false;
if (pos != -1) {
apObj = this._networks[pos];
if (apObj.accessPoints.indexOf(accessPoint) != -1) {
@@ -1173,6 +1229,8 @@ NMDeviceWireless.prototype = {
}
apObj.accessPoints.push(accessPoint);
if (apObj.item)
apObj.item.updateAccessPoints(apObj.accessPoints);
} else {
apObj = { ssid: accessPoint.get_ssid(),
mode: accessPoint.mode,
@@ -1181,7 +1239,8 @@ NMDeviceWireless.prototype = {
item: null,
accessPoints: [ accessPoint ]
};
this._networks.push(apObj);
apObj.ssidText = NetworkManager.utils_ssid_to_utf8(apObj.ssid);
needsupdate = true;
}
// check if this enables new connections for this group
@@ -1190,12 +1249,44 @@ NMDeviceWireless.prototype = {
if (accessPoint.connection_valid(connection) &&
apObj.connections.indexOf(connection) == -1) {
apObj.connections.push(connection);
// this potentially changes the order
needsupdate = true;
}
}
// update everything
this._clearSection();
this._createSection();
if (needsupdate) {
if (apObj.item)
apObj.item.destroy();
if (pos != -1)
this._networks.splice(pos, 1);
if (this._networks.length == 0) {
// only network in the list
this._networks.push(apObj);
this._clearSection();
this._createSection();
return;
}
// skip networks that should appear earlier
let menuPos = 0;
for (pos = 0;
pos < this._networks.length &&
this._networkSortFunction(this._networks[pos], apObj) < 0; ++pos) {
if (this._networks[pos] != this._activeNetwork)
menuPos++;
}
// (re-)add the network
this._networks.splice(pos, 0, apObj);
if (this._shouldShowConnectionList()) {
menuPos += (this._activeConnectionItem ? 1 : 0);
this._createNetworkItem(apObj, menuPos);
}
}
},
_accessPointRemoved: function(device, accessPoint) {
@@ -1273,6 +1364,12 @@ NMDeviceWireless.prototype = {
// remove the connection from the access point group
connections.splice(k);
anyauto = connections.length == 0;
if (anyauto) {
// this potentially changes the sorting order
forceupdate = true;
break;
}
if (apObj.item) {
if (apObj.item instanceof PopupMenu.PopupSubMenuMenuItem) {
let items = apObj.item.menu.getMenuItems();
@@ -1298,6 +1395,7 @@ NMDeviceWireless.prototype = {
}
if (forceupdate || anyauto) {
this._networks.sort(this._networkSortFunction);
this._clearSection();
this._createSection();
}
@@ -1313,42 +1411,24 @@ NMDeviceWireless.prototype = {
this._connections.push(obj);
// find an appropriate access point
let any = false, forceupdate = false;
let forceupdate = false;
for (let i = 0; i < this._networks.length; i++) {
let apObj = this._networks[i];
// Check if connection is valid for any of these access points
let any = false;
for (let k = 0; k < apObj.accessPoints.length; k++) {
let ap = apObj.accessPoints[k];
if (ap.connection_valid(connection)) {
apObj.connections.push(connection);
any = true;
// this potentially changes the sorting order
forceupdate = true;
break;
}
}
if (any && this._shouldShowConnectionList()) {
// we need to show this connection
if (apObj.item && apObj.item.menu) {
// We're already showing the submenu for this access point
apObj.item.menu.addMenuItem(this._createAPItem(connection, apObj, true));
} else {
if (apObj.item)
apObj.item.destroy();
if (apObj.connections.length == 1) {
apObj.item = this._createAPItem(connection, apObj, false);
this.section.addMenuItem(apObj.item);
} else {
apObj.item = null;
// we need to force an update to create the submenu
forceupdate = true;
}
}
}
}
if (forceupdate) {
this._networks.sort(this._networkSortFunction);
this._clearSection();
this._createSection();
}
@@ -1400,6 +1480,48 @@ NMDeviceWireless.prototype = {
return connection;
},
_createNetworkItem: function(apObj, position) {
if(apObj.connections.length > 0) {
if (apObj.connections.length == 1)
apObj.item = this._createAPItem(apObj.connections[0], apObj, false);
else {
let title = apObj.ssidText;
apObj.item = new PopupMenu.PopupSubMenuMenuItem(title);
apObj.item._apObj = apObj;
for (let i = 0; i < apObj.connections.length; i++)
apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true));
}
} else {
apObj.item = new NMNetworkMenuItem(apObj.accessPoints);
apObj.item._apObj = apObj;
apObj.item.connect('activate', Lang.bind(this, function() {
let accessPoints = sortAccessPoints(apObj.accessPoints);
if ( (accessPoints[0]._secType == NMAccessPointSecurity.WPA2_ENT)
|| (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) {
// 802.1x-enabled APs get handled by nm-applet for now...
this._applet_proxy.ConnectTo8021xNetworkRemote(this.device.get_path(),
accessPoints[0].dbus_path,
Lang.bind(this, function(results, err) {
if (err)
log(err);
}));
} else {
let connection = this._createAutomaticConnection(apObj);
this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null)
}
}));
}
if (position < NUM_VISIBLE_NETWORKS)
this.section.addMenuItem(apObj.item);
else {
if (!this._overflowItem) {
this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
this.section.addMenuItem(this._overflowItem);
}
this._overflowItem.menu.addMenuItem(apObj.item, position - NUM_VISIBLE_NETWORKS);
}
},
_createSection: function() {
if (!this._shouldShowConnectionList())
return;
@@ -1409,58 +1531,14 @@ NMDeviceWireless.prototype = {
this.section.addMenuItem(this._activeConnectionItem);
}
let activeAp = this.device.active_access_point;
let activeApSsid = activeAp ? activeAp.get_ssid() : null;
// we want five access points in the menu, including the active one
let numItems = this._activeConnection ? 4 : 5;
let activeOffset = this._activeConnectionItem ? 1 : 0;
for(let j = 0; j < this._networks.length; j++) {
let apObj = this._networks[j];
if(activeAp && ssidCompare(apObj.ssid, activeApSsid))
if (apObj == this._activeNetwork)
continue;
let menuItem;
if(apObj.connections.length > 0) {
if (apObj.connections.length == 1)
apObj.item = this._createAPItem(apObj.connections[0], apObj, false);
else {
let title = NetworkManager.utils_ssid_to_utf8(apObj.ssid) || _("<unknown>");
apObj.item = new PopupMenu.PopupSubMenuMenuItem(title);
apObj.item._apObj = apObj;
for (let i = 0; i < apObj.connections.length; i++)
apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true));
}
} else {
apObj.item = new NMNetworkMenuItem(apObj.accessPoints);
apObj.item._apObj = apObj;
apObj.item.connect('activate', Lang.bind(this, function() {
let accessPoints = sortAccessPoints(apObj.accessPoints);
if ( (accessPoints[0]._secType == NMAccessPointSecurity.WPA2_ENT)
|| (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) {
// 802.1x-enabled APs get handled by nm-applet for now...
this._applet_proxy.ConnectTo8021xNetworkRemote(this.device.get_path(),
accessPoints[0].dbus_path,
Lang.bind(this, function(results, err) {
if (err)
log(err);
}));
} else {
let connection = this._createAutomaticConnection(apObj);
this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null)
}
}));
}
if (j < numItems)
this.section.addMenuItem(apObj.item);
else {
if (!this._overflowItem) {
this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
this.section.addMenuItem(this._overflowItem);
}
this._overflowItem.menu.addMenuItem(apObj.item);
}
this._createNetworkItem(apObj, j + activeOffset);
}
},
};

View File

@@ -11,9 +11,6 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const BUS_NAME = 'org.gnome.PowerManager';
const OBJECT_PATH = '/org/gnome/PowerManager';
@@ -115,15 +112,15 @@ Indicator.prototype = {
let timestring;
if (time > 60) {
if (minutes == 0) {
timestring = Gettext.ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
timestring = ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
} else {
/* TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining" */
let template = _("%d %s %d %s remaining");
timestring = template.format (hours, Gettext.ngettext("hour", "hours", hours), minutes, Gettext.ngettext("minute", "minutes", minutes));
timestring = template.format (hours, ngettext("hour", "hours", hours), minutes, ngettext("minute", "minutes", minutes));
}
} else
timestring = Gettext.ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
timestring = ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
this._batteryItem.label.text = timestring;
}
this._primaryPercentage.text = Math.round(percentage) + '%';

View File

@@ -13,9 +13,6 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const VOLUME_ADJUSTMENT_STEP = 0.05; /* Volume adjustment step in % */
const VOLUME_NOTIFY_ID = 1;

View File

@@ -9,8 +9,6 @@ const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Tp = imports.gi.TelepathyGLib;
const UPowerGlib = imports.gi.UPowerGlib;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const GnomeSession = imports.misc.gnomeSession;
const Main = imports.ui.main;

View File

@@ -9,9 +9,6 @@ const Signals = imports.signals;
const St = imports.gi.St;
const Tpl = imports.gi.TelepathyLogger;
const Tp = imports.gi.TelepathyGLib;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const C_ = Gettext.pgettext;
const History = imports.misc.history;
const Main = imports.ui.main;
@@ -80,14 +77,9 @@ Client.prototype = {
// The second argument, recover, means _observeChannels will be run
// for any existing channel as well.
let dbus = Tp.DBusDaemon.dup();
this._observer = Tp.SimpleObserver.new(dbus, true, 'GnomeShell', true,
Lang.bind(this, this._observeChannels));
// We only care about single-user text-based chats
let props = {};
props[Tp.PROP_CHANNEL_CHANNEL_TYPE] = Tp.IFACE_CHANNEL_TYPE_TEXT;
props[Tp.PROP_CHANNEL_TARGET_HANDLE_TYPE] = Tp.HandleType.CONTACT;
this._observer.add_observer_filter(props);
this._observer = Shell.TpClient.new(dbus);
this._observer.set_observe_channels_func(
Lang.bind(this, this._observeChannels));
try {
this._observer.register();
@@ -294,6 +286,9 @@ Source.prototype = {
},
_messageReceived: function(channel, message) {
if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT)
return;
message = makeMessageFromTpMessage(message, NotificationDirection.RECEIVED);
this._notification.appendMessage(message);
this.notify();
@@ -416,11 +411,7 @@ Notification.prototype = {
styles.push('chat-action');
}
if (message.direction == NotificationDirection.RECEIVED) {
this.update(this.source.title, messageBody, { customContent: true,
bannerMarkup: true });
}
this.update(this.source.title, messageBody, { customContent: true, bannerMarkup: true });
this._append(messageBody, styles, message.timestamp, noTimestamp);
},
@@ -525,18 +516,16 @@ Notification.prototype = {
},
appendAliasChange: function(oldAlias, newAlias) {
// FIXME: uncomment this after 3.0 string freeze ends
oldAlias = GLib.markup_escape_text(oldAlias, -1);
newAlias = GLib.markup_escape_text(newAlias, -1);
// oldAlias = GLib.markup_escape_text(oldAlias, -1);
// newAlias = GLib.markup_escape_text(newAlias, -1);
// /* Translators: this is the other person changing their old IM name to their new
// IM name. */
// let message = '<i>' + _("%s is now known as %s").format(oldAlias, newAlias) + '</i>';
// let label = this.addBody(message, true);
// label.add_style_class_name('chat-meta-message');
// this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false });
// this.update(newAlias, null, { customContent: true });
/* Translators: this is the other person changing their old IM name to their new
IM name. */
let message = '<i>' + _("%s is now known as %s").format(oldAlias, newAlias) + '</i>';
let label = this.addBody(message, true);
label.add_style_class_name('chat-meta-message');
this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false });
this.update(newAlias, null, { customContent: true });
},
_onEntryActivated: function() {

View File

@@ -8,8 +8,6 @@ const Signals = imports.signals;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Main = imports.ui.main;
const Search = imports.ui.search;

View File

@@ -2,8 +2,6 @@
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;

View File

@@ -397,6 +397,8 @@ WindowOverlay.prototype = {
show: function() {
this._hidden = false;
if (this._windowClone.actor.has_pointer)
this.closeButton.show();
this.title.show();
},

View File

@@ -7,8 +7,6 @@ const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Signals = imports.signals;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const DND = imports.ui.dnd;
const Main = imports.ui.main;

View File

@@ -1,4 +1,5 @@
af
an
ar
bg
bn
@@ -9,6 +10,7 @@ da
de
el
en_GB
eo
es
et
eu

1161
po/an.po Normal file

File diff suppressed because it is too large Load Diff

1222
po/eo.po Normal file

File diff suppressed because it is too large Load Diff

285
po/es.po
View File

@@ -2,17 +2,17 @@
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
# Benjamín Valero Espinosa <benjavalero@gmail.com>, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-03-25 20:20+0000\n"
"PO-Revision-Date: 2011-04-21 18:47+0200\n"
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
"POT-Creation-Date: 2011-04-28 21:32+0000\n"
"PO-Revision-Date: 2011-04-29 11:09+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -96,16 +96,16 @@ msgid ""
"at the optimal thread count on the system."
msgstr ""
"Establece la tubería GStreamer usada para codificar grabaciones. Sigue la "
"sintaxis usada para gst-launch. La tubería debería tener un sumidero "
"(«sink») de ensamblaje/sesensamblaje donde el vídeo que se está grabando se "
"graba. Generalmente tendrá un origen de ensamblado/desensamblado; la salida "
"de ese punto se escibirá en el archivo de salida. No obstante la tubería "
"también puede tomar parte en su propia salida; esto se puede usar para "
"enviar la salida a un servidor «icecast» a través de shout2send o similar. "
"Cuando no está establecido o lo está a un valor vacío, se usará la tubería "
"predeterminada. Actualmente es «videorate ! vp8enc quality=10 speed=2 "
"threads=%T ! queue ! webmmux» y greba en WEBM usando el códec VP8. Se usa %T "
"como suposición para el número de hilos óptimos en el sistema."
"sintaxis usada para gst-launch. La tubería debería tener un sumidero («sink») "
"de ensamblaje/sesensamblaje donde el vídeo que se está grabando se graba. "
"Generalmente tendrá un origen de ensamblado/desensamblado; la salida de ese "
"punto se escibirá en el archivo de salida. No obstante la tubería también "
"puede tomar parte en su propia salida; esto se puede usar para enviar la "
"salida a un servidor «icecast» a través de shout2send o similar. Cuando no "
"está establecido o lo está a un valor vacío, se usará la tubería "
"predeterminada. Actualmente es «videorate ! vp8enc quality=10 speed=2 threads="
"%T ! queue ! webmmux» y greba en WEBM usando el códec VP8. Se usa %T como "
"suposición para el número de hilos óptimos en el sistema."
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock"
@@ -190,27 +190,27 @@ msgid "Execution of '%s' failed:"
msgstr "Falló la ejecución de «%s»:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:230
#: ../js/ui/appDisplay.js:260
msgid "All"
msgstr "Todas"
#: ../js/ui/appDisplay.js:328
#: ../js/ui/appDisplay.js:359
msgid "APPLICATIONS"
msgstr "APLICACIONES"
#: ../js/ui/appDisplay.js:354
#: ../js/ui/appDisplay.js:385
msgid "SETTINGS"
msgstr "CONFIGURACIÓN"
#: ../js/ui/appDisplay.js:625
#: ../js/ui/appDisplay.js:658
msgid "New Window"
msgstr "Ventana nueva"
#: ../js/ui/appDisplay.js:628
#: ../js/ui/appDisplay.js:661
msgid "Remove from Favorites"
msgstr "Quitar de los favoritos"
#: ../js/ui/appDisplay.js:629
#: ../js/ui/appDisplay.js:662
msgid "Add to Favorites"
msgstr "Añadir a los favoritos"
@@ -343,13 +343,13 @@ msgid "Nothing Scheduled"
msgstr "Nada programado"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:487
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:723
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:490
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y"
@@ -370,7 +370,7 @@ msgstr "Esta semana"
msgid "Next week"
msgstr "La semana que viene"
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
msgid "Remove"
msgstr "Quitar"
@@ -498,8 +498,8 @@ msgstr "El sistema se reiniciará automáticamente en %d segundos."
msgid "Restarting the system."
msgstr "Reiniciando el sistema."
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:491
msgid "Cancel"
msgstr "Cancelar"
@@ -533,11 +533,11 @@ msgstr "Ver fuente"
msgid "Web Page"
msgstr "Página web"
#: ../js/ui/messageTray.js:987
#: ../js/ui/messageTray.js:1030
msgid "Open"
msgstr "Abrir"
#: ../js/ui/messageTray.js:2145
#: ../js/ui/messageTray.js:2194
msgid "System Information"
msgstr "Información del sistema"
@@ -560,18 +560,18 @@ msgid "Dash"
msgstr "Tablero"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:515
#: ../js/ui/panel.js:533
#, c-format
msgid "Quit %s"
msgstr "Salir de %s"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:878
#: ../js/ui/panel.js:913
msgid "Activities"
msgstr "Actividades"
#: ../js/ui/panel.js:979
#: ../js/ui/panel.js:1015
msgid "Top Bar"
msgstr "Barra superior"
@@ -604,11 +604,15 @@ msgstr "Administrador"
msgid "Authenticate"
msgstr "Autenticar"
#: ../js/ui/polkitAuthenticationAgent.js:260
#. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: ../js/ui/polkitAuthenticationAgent.js:264
msgid "Sorry, that didn't work. Please try again."
msgstr "Inténtelo de nuevo,"
#: ../js/ui/polkitAuthenticationAgent.js:272
#: ../js/ui/polkitAuthenticationAgent.js:276
msgid "Password:"
msgstr "Contraseña:"
@@ -625,11 +629,11 @@ msgstr "toggle-switch-intl"
msgid "Please enter a command:"
msgstr "Introduzca un comando:"
#: ../js/ui/searchDisplay.js:310
#: ../js/ui/searchDisplay.js:313
msgid "Searching..."
msgstr "Buscando…"
#: ../js/ui/searchDisplay.js:324
#: ../js/ui/searchDisplay.js:327
msgid "No matching results."
msgstr "No se encontró ningún resultado coincidente."
@@ -712,9 +716,9 @@ msgstr "Contraste alto"
msgid "Large Text"
msgstr "Texto grande"
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:264
#: ../js/ui/status/bluetooth.js:358 ../js/ui/status/bluetooth.js:392
#: ../js/ui/status/bluetooth.js:432 ../js/ui/status/bluetooth.js:465
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -727,101 +731,102 @@ msgid "Send Files to Device..."
msgstr "Enviar archivos al dispositivo…"
#: ../js/ui/status/bluetooth.js:70
msgid "Setup a New Device..."
#| msgid "Setup a New Device..."
msgid "Set up a New Device..."
msgstr "Configurar un dispositivo nuevo…"
#: ../js/ui/status/bluetooth.js:95
msgid "Bluetooth Settings"
msgstr "Configuración de Bluetooth"
#: ../js/ui/status/bluetooth.js:188
#: ../js/ui/status/bluetooth.js:215
msgid "Connection"
msgstr "Conexión"
#: ../js/ui/status/bluetooth.js:224
#: ../js/ui/status/bluetooth.js:251
msgid "Send Files..."
msgstr "Enviar archivos…"
#: ../js/ui/status/bluetooth.js:229
#: ../js/ui/status/bluetooth.js:256
msgid "Browse Files..."
msgstr "Examinar archivos…"
#: ../js/ui/status/bluetooth.js:238
#: ../js/ui/status/bluetooth.js:265
msgid "Error browsing device"
msgstr "Error al examinar el dispositivo"
#: ../js/ui/status/bluetooth.js:239
#: ../js/ui/status/bluetooth.js:266
#, c-format
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "No se puede examinar el dispositivo solicitado, el error es «%s»"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:274
msgid "Keyboard Settings"
msgstr "Configuración del teclado"
#: ../js/ui/status/bluetooth.js:252
#: ../js/ui/status/bluetooth.js:279
msgid "Mouse Settings"
msgstr "Ajustes del ratón…"
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
#: ../js/ui/status/bluetooth.js:286 ../js/ui/status/volume.js:66
msgid "Sound Settings"
msgstr "Configuración del sonido"
#: ../js/ui/status/bluetooth.js:368
#: ../js/ui/status/bluetooth.js:393
#, c-format
msgid "Authorization request from %s"
msgstr "Solicitud de autorización de %s"
#: ../js/ui/status/bluetooth.js:374
#: ../js/ui/status/bluetooth.js:399
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "El dispositivo %s quiere acceder al servicio «%s»"
#: ../js/ui/status/bluetooth.js:376
#: ../js/ui/status/bluetooth.js:401
msgid "Always grant access"
msgstr "Conceder acceso siempre"
#: ../js/ui/status/bluetooth.js:377
#: ../js/ui/status/bluetooth.js:402
msgid "Grant this time only"
msgstr "Conceder sólo esta vez"
#: ../js/ui/status/bluetooth.js:378
#: ../js/ui/status/bluetooth.js:403
msgid "Reject"
msgstr "Rechazar"
#: ../js/ui/status/bluetooth.js:408
#: ../js/ui/status/bluetooth.js:433
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Confirmación de emparejamiento para «%s»"
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:439 ../js/ui/status/bluetooth.js:473
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
#: ../js/ui/status/bluetooth.js:415
#: ../js/ui/status/bluetooth.js:440
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "Confirme que el PIN mostrado en «%s» coincide con el del dispositivo."
#: ../js/ui/status/bluetooth.js:417
#: ../js/ui/status/bluetooth.js:442
msgid "Matches"
msgstr "Coincide"
#: ../js/ui/status/bluetooth.js:418
#: ../js/ui/status/bluetooth.js:443
msgid "Does not match"
msgstr "No coincide"
#: ../js/ui/status/bluetooth.js:441
#: ../js/ui/status/bluetooth.js:466
#, c-format
msgid "Pairing request for %s"
msgstr "Solicitud de emparejamiento para «%s»"
#: ../js/ui/status/bluetooth.js:449
#: ../js/ui/status/bluetooth.js:474
msgid "Please enter the PIN mentioned on the device."
msgstr "Introduzca el PIN mencionado en el dispositivo."
#: ../js/ui/status/bluetooth.js:465
#: ../js/ui/status/bluetooth.js:490
msgid "OK"
msgstr "Aceptar"
@@ -833,139 +838,139 @@ msgstr "Mostrar la distribución del teclado…"
msgid "Localization Settings"
msgstr "Configuración regional"
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1437
#: ../js/ui/status/network.js:113
msgid "<unknown>"
msgstr "<desconocido>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:295
#: ../js/ui/status/network.js:330
msgid "disabled"
msgstr "desactivada"
#: ../js/ui/status/network.js:478
#: ../js/ui/status/network.js:528
msgid "connecting..."
msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:481
#: ../js/ui/status/network.js:531
msgid "authentication required"
msgstr "se necesita autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:491
#: ../js/ui/status/network.js:541
msgid "firmware missing"
msgstr "falta el «firmware»"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:498
#: ../js/ui/status/network.js:548
msgid "cable unplugged"
msgstr "cable desconectado"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:503
#: ../js/ui/status/network.js:553
msgid "unavailable"
msgstr "no disponible"
#: ../js/ui/status/network.js:505
#: ../js/ui/status/network.js:555
msgid "connection failed"
msgstr "falló la conexión"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1385
#: ../js/ui/status/network.js:635 ../js/ui/status/network.js:1532
msgid "Connected (private)"
msgstr "Conectada (privada)"
#: ../js/ui/status/network.js:666
#: ../js/ui/status/network.js:720
msgid "Auto Ethernet"
msgstr "Ethernet automática"
#: ../js/ui/status/network.js:741
#: ../js/ui/status/network.js:795
msgid "Auto broadband"
msgstr "Banda ancha automática"
#: ../js/ui/status/network.js:744
#: ../js/ui/status/network.js:798
msgid "Auto dial-up"
msgstr "Marcado automático"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:887 ../js/ui/status/network.js:1397
#: ../js/ui/status/network.js:944 ../js/ui/status/network.js:1544
#, c-format
msgid "Auto %s"
msgstr "%s automática"
#: ../js/ui/status/network.js:889
#: ../js/ui/status/network.js:946
msgid "Auto bluetooth"
msgstr "Bluetooth automático"
#: ../js/ui/status/network.js:1399
#: ../js/ui/status/network.js:1546
msgid "Auto wireless"
msgstr "Inalámbrica automática"
#: ../js/ui/status/network.js:1457
#: ../js/ui/status/network.js:1583
msgid "More..."
msgstr "Más…"
#: ../js/ui/status/network.js:1480
#: ../js/ui/status/network.js:1625
msgid "Enable networking"
msgstr "Activar red"
#: ../js/ui/status/network.js:1492
#: ../js/ui/status/network.js:1637
msgid "Wired"
msgstr "Cableada"
#: ../js/ui/status/network.js:1503
#: ../js/ui/status/network.js:1648
msgid "Wireless"
msgstr "Inalámbrica"
#: ../js/ui/status/network.js:1513
#: ../js/ui/status/network.js:1658
msgid "Mobile broadband"
msgstr "Banda ancha móvil"
#: ../js/ui/status/network.js:1523
#: ../js/ui/status/network.js:1668
msgid "VPN Connections"
msgstr "Conexiones VPN"
#: ../js/ui/status/network.js:1532
#: ../js/ui/status/network.js:1680
msgid "Network Settings"
msgstr "Configuración de la red"
#: ../js/ui/status/network.js:1827
#: ../js/ui/status/network.js:1974
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Ahora está conectado a la red de banda ancha móvil «%s»"
#: ../js/ui/status/network.js:1831
#: ../js/ui/status/network.js:1978
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Ahora está conectado a la red inalámbrica «%s»"
#: ../js/ui/status/network.js:1835
#: ../js/ui/status/network.js:1982
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Ahora está conectado a la red cableada «%s»"
#: ../js/ui/status/network.js:1839
#: ../js/ui/status/network.js:1986
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Ahora está conectado a la VPN «%s»"
#: ../js/ui/status/network.js:1844
#: ../js/ui/status/network.js:1991
#, c-format
msgid "You're now connected to '%s'"
msgstr "Ahora está conectado a «%s»"
#: ../js/ui/status/network.js:1852
#: ../js/ui/status/network.js:1999
msgid "Connection established"
msgstr "Conexión establecida"
#: ../js/ui/status/network.js:1974
#: ../js/ui/status/network.js:2125
msgid "Networking is disabled"
msgstr "La red está desactivada"
#: ../js/ui/status/network.js:2099
#: ../js/ui/status/network.js:2250
msgid "Network Manager"
msgstr "Gestor de la red"
@@ -1067,22 +1072,22 @@ msgstr "Volumen"
msgid "Microphone"
msgstr "Micrófono"
#: ../js/ui/telepathyClient.js:332
#: ../js/ui/telepathyClient.js:330
#, c-format
msgid "%s is online."
msgstr "%s está conectado/a."
#: ../js/ui/telepathyClient.js:337
#: ../js/ui/telepathyClient.js:335
#, c-format
msgid "%s is offline."
msgstr "%s está desconectado/a."
#: ../js/ui/telepathyClient.js:340
#: ../js/ui/telepathyClient.js:338
#, c-format
msgid "%s is away."
msgstr "%s está ausente."
#: ../js/ui/telepathyClient.js:343
#: ../js/ui/telepathyClient.js:341
#, c-format
msgid "%s is busy."
msgstr "%s está ocupado/a."
@@ -1090,11 +1095,18 @@ msgstr "%s está ocupado/a."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:474
#: ../js/ui/telepathyClient.js:479
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Enviado a las %X el %A"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:524
#, c-format
msgid "%s is now known as %s"
msgstr "Ahora %s se llama %s"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@@ -1139,7 +1151,7 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sonidos del sistema"
#: ../src/main.c:446
#: ../src/main.c:445
msgid "Print version"
msgstr "Imprimir versión"
@@ -1148,38 +1160,6 @@ msgstr "Imprimir versión"
msgid "Failed to launch '%s'"
msgstr "Falló al lanzar «%s»"
#: ../src/shell-global.c:1395
msgid "Less than a minute ago"
msgstr "Hace menos de un minuto"
#: ../src/shell-global.c:1399
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "Hace %d minuto"
msgstr[1] "Hace %d minutos"
#: ../src/shell-global.c:1404
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "Hace %d hora"
msgstr[1] "Hace %d horas"
#: ../src/shell-global.c:1409
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "Hace %d día"
msgstr[1] "Hace %d días"
#: ../src/shell-global.c:1414
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "Hace %d semana"
msgstr[1] "Hace %d semanas"
#: ../src/shell-mobile-providers.c:80
msgid "United Kingdom"
msgstr "Reino Unido"
@@ -1212,6 +1192,29 @@ msgstr "Sistema de archivos"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "Less than a minute ago"
#~ msgstr "Hace menos de un minuto"
#~ msgid "%d minute ago"
#~ msgid_plural "%d minutes ago"
#~ msgstr[0] "Hace %d minuto"
#~ msgstr[1] "Hace %d minutos"
#~ msgid "%d hour ago"
#~ msgid_plural "%d hours ago"
#~ msgstr[0] "Hace %d hora"
#~ msgstr[1] "Hace %d horas"
#~ msgid "%d day ago"
#~ msgid_plural "%d days ago"
#~ msgstr[0] "Hace %d día"
#~ msgstr[1] "Hace %d días"
#~ msgid "%d week ago"
#~ msgid_plural "%d weeks ago"
#~ msgstr[0] "Hace %d semana"
#~ msgstr[1] "Hace %d semanas"
#~ msgid "Shut Down"
#~ msgstr "Apagar"
@@ -1239,9 +1242,6 @@ msgstr "%1$s: %2$s"
#~ msgid "Screen Keyboard"
#~ msgstr "Teclado en pantalla"
#~ msgid "%s is now known as %s"
#~ msgstr "Ahora %s se llama %s"
#~ msgid "PREFERENCES"
#~ msgstr "PREFERENCIAS"
@@ -1416,8 +1416,8 @@ msgstr "%1$s: %2$s"
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
#~ "in time."
#~ msgstr ""
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los "
#~ "segundos en la hora."
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los segundos "
#~ "en la hora."
#~ msgid ""
#~ "This key specifies the format used by the panel clock when the format key "
@@ -1434,19 +1434,18 @@ msgstr "%1$s: %2$s"
#~ msgid ""
#~ "This key specifies the hour format used by the panel clock. Possible "
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
#~ "to the format specified in the custom_format key. Note that if set to "
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
#~ "ignored."
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
#~ "01-01. If set to \"custom\", the clock will display time according to the "
#~ "format specified in the custom_format key. Note that if set to either "
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
#~ msgstr ""
#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 "
#~ "horas), «unix» y «custom» (personalizado).Si se establece a «unix» el "
#~ "reloj mostrará la hora en segundos desde la época (1 de enero de 1970). "
#~ "Si se establece a «custom» el reloj mostrará la hora según el formato "
#~ "especificado en la clave «custom_format». Note que si se establece a "
#~ "«unix» o «custom» se ignoran las claves «show_date» y «show_seconds»."
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
#~ "«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
#~ "la hora en segundos desde la época (1 de enero de 1970). Si se establece "
#~ "a «custom» el reloj mostrará la hora según el formato especificado en la "
#~ "clave «custom_format». Note que si se establece a «unix» o «custom» se "
#~ "ignoran las claves «show_date» y «show_seconds»."
#~ msgid "Clock Format"
#~ msgstr "Formato del reloj"

174
po/fa.po
View File

@@ -7,9 +7,10 @@
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-04-15 18:20+0000\n"
"PO-Revision-Date: 2011-05-17 00:53+0330\n"
"PO-Revision-Date: 2011-04-06 23:37+0330\n"
"Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
"Language-Team: Persian <translate@ifsug.org>\n"
"Language: fa\n"
@@ -30,12 +31,18 @@ msgid "Window management and application launching"
msgstr "مدیریت پنجره‌ها و اجرا کننده‌ی برنامه‌ها"
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
msgstr "اجازه دسترسی به ابزارهای اشکال‌زدا و پایشگر داخلی با استفاده از محاوره‌ی Alt-F2."
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
"dialog."
msgstr ""
"اجازه دسترسی به ابزارهای اشکال‌زدا و پایشگر داخلی با استفاده از محاوره‌ی Alt-"
"F2."
#: ../data/org.gnome.shell.gschema.xml.in.h:2
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "فعال کردن ابزارهای داخلی مفید برای توسعه دهندگان و آزمایش کنندگان از طریق Alt-F2"
msgstr ""
"فعال کردن ابزارهای داخلی مفید برای توسعه دهندگان و آزمایش کنندگان از طریق "
"Alt-F2"
#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
@@ -46,8 +53,12 @@ msgid "Framerate used for recording screencasts."
msgstr "سرعت فریم استفاده شده در تصویربرداری از صفحه‌نمایش."
#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid "GNOME Shell extensions have a uuid property; this key lists extensions which should not be loaded."
msgstr "افزونه‌های پوسته‌ی گنوم مشخصه‌ی uuid دارند؛ این کلید افزونه‌هایی که نباید بار شوند را فهرست می‌کند."
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
msgstr ""
"افزونه‌های پوسته‌ی گنوم مشخصه‌ی uuid دارند؛ این کلید افزونه‌هایی که نباید بار "
"شوند را فهرست می‌کند."
#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
@@ -75,7 +86,17 @@ msgstr "فهرست شناسه‌های پرونده‌ی رومیزی برای
#: ../data/org.gnome.shell.gschema.xml.in.h:13
#, no-c-format
msgid "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently 'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a placeholder for a guess at the optimal thread count on the system."
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
"the recorded video is recorded. It will normally have a unconnected source "
"pad; output from that pad will be written into the output file. However the "
"pipeline can also take care of its own output - this might be used to send "
"the output to an icecast server via shout2send or similar. When unset or set "
"to an empty value, the default pipeline will be used. This is currently "
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
"at the optimal thread count on the system."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:14
@@ -91,24 +112,45 @@ msgid "Show time with seconds"
msgstr "نمایش ساعت همراه با ثانیه"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr "برنامه‌های مشابه این شناسه‌ها در قسمت مورد پسندها نمایش داده می‌شود."
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
msgstr "نام پرونده‌ی ضبط شده برای تصویربرداری از صفحه‌نمایش یکتا و براساس تاریخ جاری خواهد بود و از این افزونه استفاده خواهد کرد. اگر در زمان ضبط از قالب دیگری استفاده کنید باید تغییر کند."
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
"a different container format."
msgstr ""
"نام پرونده‌ی ضبط شده برای تصویربرداری از صفحه‌نمایش یکتا و براساس تاریخ جاری "
"خواهد بود و از این افزونه استفاده خواهد کرد. اگر در زمان ضبط از قالب دیگری "
"استفاده کنید باید تغییر کند."
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
msgstr "سرعت فریم حاصل از تصویربرداری از صفحه نمایش با استفاده از ضبط کننده نمایشگر پوسته‌ی گنوم بر اساس فریم بر ثانیه"
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
"سرعت فریم حاصل از تصویربرداری از صفحه نمایش با استفاده از ضبط کننده نمایشگر "
"پوسته‌ی گنوم بر اساس فریم بر ثانیه"
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "مجرای ارتباطی gstreamer برای کدگذاری تصویربرداری از صفحه نمایش"
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "The shell normally monitors active applications in order to present the most used ones (e.g. in launchers). While this data will be kept private, you may want to disable this for privacy reasons. Please note that doing so won't remove already saved data."
msgstr "پوسته گنوم در حالت عادی برنامه‌های فعال را جهت ارائه برنامه‌های بیشتر استفاده شده پایش می کند. (برای مثال در اجرا کننده‌ها). با اینکه که این اطلاعات به صورت خصوصی نگاه‌داری می‌شود، ممکن است شما بخواهید این امکان را به دلایل امنیتی غیرفعال کنید. لطفا توجه کنید این کار باعث پاک شدن اطلاعاتی که تاکنون ذخیره شده‌اند نمی‌شود."
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
msgstr ""
"پوسته گنوم در حالت عادی برنامه‌های فعال را جهت ارائه برنامه‌های بیشتر استفاده "
"شده پایش می کند. (برای مثال در اجرا کننده‌ها). با اینکه که این اطلاعات به "
"صورت خصوصی نگاه‌داری می‌شود، ممکن است شما بخواهید این امکان را به دلایل امنیتی "
"غیرفعال کنید. لطفا توجه کنید این کار باعث پاک شدن اطلاعاتی که تاکنون ذخیره "
"شده‌اند نمی‌شود."
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "Uuids of extensions to disable"
@@ -116,7 +158,8 @@ msgstr "شناسه‌های Uuid مربوط به افزونه‌ها که غیر
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "Whether to collect stats about applications usage"
msgstr "اینکه اطلاعات برنامه‌ها درباره‌ی میزان استفاده از منابع جمع‌آوری شود یا خیر"
msgstr ""
"اینکه اطلاعات برنامه‌ها درباره‌ی میزان استفاده از منابع جمع‌آوری شود یا خیر"
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "disabled OpenSearch providers"
@@ -184,13 +227,13 @@ msgstr "تمام روز"
#: ../js/ui/calendar.js:71
msgctxt "event list time"
msgid "%H:%M"
msgstr "%H:%M"
msgstr "%OH:%OM"
#. Transators: Shown in calendar event list, if 12h format
#: ../js/ui/calendar.js:78
msgctxt "event list time"
msgid "%l:%M %p"
msgstr "%l:%M %p"
msgstr "%OI:%OM"
#. Translators: Calendar grid abbreviation for Sunday.
#. *
@@ -291,18 +334,16 @@ msgid "Nothing Scheduled"
msgstr "بدون برنامه‌ریزی"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720
#: ../js/ui/telepathyClient.js:492
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:492
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %B %d"
msgstr "%A %Od %B "
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:723
#: ../js/ui/telepathyClient.js:495
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:495
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y"
msgstr "%A %Od %B %Oy"
#: ../js/ui/calendar.js:733
msgid "Today"
@@ -320,8 +361,7 @@ msgstr "این هفته"
msgid "Next week"
msgstr "هفته آینده"
#: ../js/ui/dash.js:174
#: ../js/ui/messageTray.js:1037
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
msgid "Remove"
msgstr "حذف"
@@ -337,48 +377,48 @@ msgstr "بازکردن تقویم"
#. in 24-hour mode.
#: ../js/ui/dateMenu.js:164
msgid "%a %b %e, %R:%S"
msgstr "%a %b %e, %R:%S"
msgstr "%a %Od %b %OH:%OM:%OS"
#: ../js/ui/dateMenu.js:165
msgid "%a %b %e, %R"
msgstr "%a %b %e, %R"
msgstr "%a %Od %b %OH:%OM"
#. Translators: This is the time format without date used
#. in 24-hour mode.
#: ../js/ui/dateMenu.js:169
msgid "%a %R:%S"
msgstr "%a %R:%S"
msgstr "%a %OH:%OM:%OS"
#: ../js/ui/dateMenu.js:170
msgid "%a %R"
msgstr "%a %R"
msgstr "%a %OH:%OM"
#. Translators: This is a time format with date used
#. for AM/PM.
#: ../js/ui/dateMenu.js:177
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %b %e, %l:%M:%S %p"
msgstr "%a Od% %b %OH:%OM:%OS"
#: ../js/ui/dateMenu.js:178
msgid "%a %b %e, %l:%M %p"
msgstr "%a %b %e, %l:%M %p"
msgstr "%a %Od %b %OH:%OM"
#. Translators: This is a time format without date used
#. for AM/PM.
#: ../js/ui/dateMenu.js:182
msgid "%a %l:%M:%S %p"
msgstr "%a %l:%M:%S %p"
msgstr "%a %OH:%OM:%OS"
#: ../js/ui/dateMenu.js:183
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
msgstr "%a %OH:%OM"
#. 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").
#.
#: ../js/ui/dateMenu.js:194
msgid "%A %B %e, %Y"
msgstr "%A %B %e, %Y"
msgstr "%A %Od %B"
#: ../js/ui/docDisplay.js:19
msgid "RECENT ITEMS"
@@ -389,14 +429,14 @@ msgstr "موارد اخیر"
msgid "Log Out %s"
msgstr "خروج از %s"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:70
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
msgid "Log Out"
msgstr "خروج از سیستم"
#: ../js/ui/endSessionDialog.js:65
msgid "Click Log Out to quit these applications and log out of the system."
msgstr "بر روی خروج از سیستم کلیک کنید تا از این برنامه‌ها خارج و از سیستم خارج شوید."
msgstr ""
"بر روی خروج از سیستم کلیک کنید تا از این برنامه‌ها خارج و از سیستم خارج شوید."
#: ../js/ui/endSessionDialog.js:66
#, c-format
@@ -412,8 +452,7 @@ msgstr "شما در مدت %Id ثانیه به طور خودکار از سیست
msgid "Logging out of the system."
msgstr "درحال خروج از سیستم."
#: ../js/ui/endSessionDialog.js:75
#: ../js/ui/endSessionDialog.js:82
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
msgid "Power Off"
msgstr "خاموش کردن"
@@ -430,15 +469,16 @@ msgstr "سیستم در مدت %Id ثانیه به طور خودکار خامو
msgid "Powering off the system."
msgstr "درحال خاموش کردن سیستم."
#: ../js/ui/endSessionDialog.js:80
#: ../js/ui/endSessionDialog.js:88
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
#: ../js/ui/endSessionDialog.js:93
msgid "Restart"
msgstr "راه‌اندازی مجدد"
#: ../js/ui/endSessionDialog.js:89
msgid "Click Restart to quit these applications and restart the system."
msgstr "بر روی راه‌اندازی مجدد کلیک کنید تا از این برنامه‌ها خارج و سیستم مجددا راه‌اندازی گردد."
msgstr ""
"بر روی راه‌اندازی مجدد کلیک کنید تا از این برنامه‌ها خارج و سیستم مجددا "
"راه‌اندازی گردد."
#: ../js/ui/endSessionDialog.js:90
#, c-format
@@ -449,8 +489,7 @@ msgstr "سیستم در مدت %Id ثانیه به طور خودکار مجدد
msgid "Restarting the system."
msgstr "درحال راه‌اندازی مجدد سیستم."
#: ../js/ui/endSessionDialog.js:413
#: ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
msgid "Cancel"
msgstr "لغو"
@@ -465,8 +504,7 @@ msgstr "به کار انداختن"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:627
#: ../src/gvc/gvc-mixer-control.c:1091
#: ../js/ui/lookingGlass.js:627 ../src/gvc/gvc-mixer-control.c:1091
msgid "Disabled"
msgstr "از کار انداختن"
@@ -590,14 +628,12 @@ msgstr "درحال حستجو..."
msgid "No matching results."
msgstr "نتیجه‌ی منطبقی پیدا نشد."
#: ../js/ui/statusMenu.js:161
#: ../js/ui/statusMenu.js:163
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
#: ../js/ui/statusMenu.js:228
msgid "Power Off..."
msgstr "خاموش کردن..."
#: ../js/ui/statusMenu.js:163
#: ../js/ui/statusMenu.js:227
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
msgid "Suspend"
msgstr "تعلیق"
@@ -671,12 +707,9 @@ msgstr "کنتراست بالا"
msgid "Large Text"
msgstr "متن درشت"
#: ../js/ui/status/bluetooth.js:42
#: ../js/ui/status/bluetooth.js:237
#: ../js/ui/status/bluetooth.js:333
#: ../js/ui/status/bluetooth.js:367
#: ../js/ui/status/bluetooth.js:407
#: ../js/ui/status/bluetooth.js:440
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
msgid "Bluetooth"
msgstr "بلوتوث"
@@ -725,8 +758,7 @@ msgstr "تنظیمات صفحه‌کلید"
msgid "Mouse Settings"
msgstr "تنظیمات موشی"
#: ../js/ui/status/bluetooth.js:259
#: ../js/ui/status/volume.js:66
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
msgid "Sound Settings"
msgstr "تنظیمات صدا"
@@ -757,8 +789,7 @@ msgstr "رد کردن"
msgid "Pairing confirmation for %s"
msgstr "تایید جهت جفت‌شدن با %s"
#: ../js/ui/status/bluetooth.js:414
#: ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "دستگاه %s می‌خواهد با این رایانه جفت شود"
@@ -766,7 +797,9 @@ msgstr "دستگاه %s می‌خواهد با این رایانه جفت شود
#: ../js/ui/status/bluetooth.js:415
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "لطفا تایید کنید که آیا PIN مربوط به «%s» با همتای آن در دستگاه مطابقت دارد یا خیر."
msgstr ""
"لطفا تایید کنید که آیا PIN مربوط به «%s» با همتای آن در دستگاه مطابقت دارد "
"یا خیر."
#: ../js/ui/status/bluetooth.js:417
msgid "Matches"
@@ -797,8 +830,7 @@ msgstr "نمایش چیدمان صفحه‌کلید..."
msgid "Localization Settings"
msgstr "تنظیمات محلی‌سازی"
#: ../js/ui/status/network.js:109
#: ../js/ui/status/network.js:1498
#: ../js/ui/status/network.js:109 ../js/ui/status/network.js:1498
msgid "<unknown>"
msgstr "<ناشناخته>"
@@ -820,7 +852,7 @@ msgstr "تصدیق هویت لازم است"
#. module, which is missing
#: ../js/ui/status/network.js:534
msgid "firmware missing"
msgstr "میان‌افزار پیدا نشد"
msgstr ""
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:541
@@ -839,8 +871,7 @@ msgstr "اتصال شکست خورد"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:628
#: ../js/ui/status/network.js:1446
#: ../js/ui/status/network.js:628 ../js/ui/status/network.js:1446
msgid "Connected (private)"
msgstr "متصل شد (خصوصی)"
@@ -857,8 +888,7 @@ msgid "Auto dial-up"
msgstr "دایال‌آپ خودکار"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:937
#: ../js/ui/status/network.js:1458
#: ../js/ui/status/network.js:937 ../js/ui/status/network.js:1458
#, c-format
msgid "Auto %s"
msgstr "اتصال بیسیم %s خودکار"
@@ -1018,8 +1048,7 @@ msgstr "لوح‌رایانه"
msgid "Computer"
msgstr "رایانه"
#: ../js/ui/status/power.js:250
#: ../src/shell-app-system.c:1088
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
msgid "Unknown"
msgstr "ناشناخته"
@@ -1067,8 +1096,7 @@ msgstr "ارسال در %X بر روی %A"
msgid "Type to search..."
msgstr "برای جستجو تایپ کنید..."
#: ../js/ui/viewSelector.js:142
#: ../src/shell-util.c:250
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
msgid "Search"
msgstr "جستجو"

1229
po/ga.po

File diff suppressed because it is too large Load Diff

265
po/he.po
View File

@@ -8,10 +8,11 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-26 00:54+0200\n"
"PO-Revision-Date: 2011-03-26 00:55+0200\n"
"POT-Creation-Date: 2011-05-13 13:23+0300\n"
"PO-Revision-Date: 2011-05-13 13:23+0200\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <sh.yaron@gmail.com>\n"
"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -62,7 +63,7 @@ msgstr "History for command (Alt-F2) dialog"
#: ../data/org.gnome.shell.gschema.xml.in.h:7
msgid "History for the looking glass dialog"
msgstr "היסטוריית תיבת הדו־שיח של זכוכית המגדלת"
msgstr "History for the looking glass dialog"
#: ../data/org.gnome.shell.gschema.xml.in.h:8
msgid "If true, display date in the clock, in addition to time."
@@ -187,27 +188,27 @@ msgid "Execution of '%s' failed:"
msgstr "ההרצה של '%s' נכשלה:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:230
#: ../js/ui/appDisplay.js:260
msgid "All"
msgstr "הכול"
#: ../js/ui/appDisplay.js:328
#: ../js/ui/appDisplay.js:359
msgid "APPLICATIONS"
msgstr "יישומים"
#: ../js/ui/appDisplay.js:354
#: ../js/ui/appDisplay.js:385
msgid "SETTINGS"
msgstr "הגדרות"
#: ../js/ui/appDisplay.js:625
#: ../js/ui/appDisplay.js:658
msgid "New Window"
msgstr "חלון חדש"
#: ../js/ui/appDisplay.js:628
#: ../js/ui/appDisplay.js:661
msgid "Remove from Favorites"
msgstr "הסרה מהמועדפים"
#: ../js/ui/appDisplay.js:629
#: ../js/ui/appDisplay.js:662
msgid "Add to Favorites"
msgstr "הוספה למועדפים"
@@ -340,13 +341,13 @@ msgid "Nothing Scheduled"
msgstr "היומן ריק"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, ה־%e ב%B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:723
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:493
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, ה־%e ב%B, %Y"
@@ -367,7 +368,7 @@ msgstr "השבוע"
msgid "Next week"
msgstr "בשבוע הבא"
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1000
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
msgid "Remove"
msgstr "הסרה"
@@ -492,8 +493,8 @@ msgstr "המערכת תופעל מחדש בעוד %d שניות."
msgid "Restarting the system."
msgstr "המערכת מופעלת מחדש"
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:491
msgid "Cancel"
msgstr "ביטול"
@@ -527,11 +528,11 @@ msgstr "צפייה במקור"
msgid "Web Page"
msgstr "דף אינטרנט"
#: ../js/ui/messageTray.js:993
#: ../js/ui/messageTray.js:1030
msgid "Open"
msgstr "פתיחה"
#: ../js/ui/messageTray.js:2151
#: ../js/ui/messageTray.js:2194
msgid "System Information"
msgstr "פרטי המערכת"
@@ -554,18 +555,18 @@ msgid "Dash"
msgstr "חלונית"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:515
#: ../js/ui/panel.js:533
#, c-format
msgid "Quit %s"
msgstr "יציאה מ־%s"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:878
#: ../js/ui/panel.js:913
msgid "Activities"
msgstr "פעילויות"
#: ../js/ui/panel.js:979
#: ../js/ui/panel.js:1015
msgid "Top Bar"
msgstr "הסרגל העליון"
@@ -598,11 +599,15 @@ msgstr "מנהל"
msgid "Authenticate"
msgstr "אימות"
#: ../js/ui/polkitAuthenticationAgent.js:260
#. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: ../js/ui/polkitAuthenticationAgent.js:264
msgid "Sorry, that didn't work. Please try again."
msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסליחה."
#: ../js/ui/polkitAuthenticationAgent.js:272
#: ../js/ui/polkitAuthenticationAgent.js:276
msgid "Password:"
msgstr "ססמה:"
@@ -619,11 +624,11 @@ msgstr "toggle-switch-intl"
msgid "Please enter a command:"
msgstr "נא להזין פקודה:"
#: ../js/ui/searchDisplay.js:310
#: ../js/ui/searchDisplay.js:313
msgid "Searching..."
msgstr "בחיפוש..."
#: ../js/ui/searchDisplay.js:324
#: ../js/ui/searchDisplay.js:327
msgid "No matching results."
msgstr "אין תוצאות תואמות."
@@ -638,7 +643,7 @@ msgstr "השהיה"
#: ../js/ui/statusMenu.js:184
msgid "Available"
msgstr "זמין"
msgstr "פנוי"
#: ../js/ui/statusMenu.js:189
msgid "Busy"
@@ -706,9 +711,9 @@ msgstr "ניגודיות גבוהה"
msgid "Large Text"
msgstr "טקסט גדול"
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:264
#: ../js/ui/status/bluetooth.js:358 ../js/ui/status/bluetooth.js:392
#: ../js/ui/status/bluetooth.js:432 ../js/ui/status/bluetooth.js:465
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -721,101 +726,101 @@ msgid "Send Files to Device..."
msgstr "שליחת קובץ להתקן..."
#: ../js/ui/status/bluetooth.js:70
msgid "Setup a New Device..."
msgid "Set up a New Device..."
msgstr "הגדרת התקן חדש..."
#: ../js/ui/status/bluetooth.js:95
msgid "Bluetooth Settings"
msgstr "הגדרות Bluetooth"
#: ../js/ui/status/bluetooth.js:188
#: ../js/ui/status/bluetooth.js:215
msgid "Connection"
msgstr "חיבור"
#: ../js/ui/status/bluetooth.js:224
#: ../js/ui/status/bluetooth.js:251
msgid "Send Files..."
msgstr "שליחת קבצים..."
#: ../js/ui/status/bluetooth.js:229
#: ../js/ui/status/bluetooth.js:256
msgid "Browse Files..."
msgstr "עיון בקבצים..."
#: ../js/ui/status/bluetooth.js:238
#: ../js/ui/status/bluetooth.js:265
msgid "Error browsing device"
msgstr "שגיאה בעיון בהתקן"
#: ../js/ui/status/bluetooth.js:239
#: ../js/ui/status/bluetooth.js:266
#, c-format
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "לא ניתן לעיין בהתקן הנבחר, השגיאה היא '%s'"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:274
msgid "Keyboard Settings"
msgstr "הגדרות מקלדת"
#: ../js/ui/status/bluetooth.js:252
#: ../js/ui/status/bluetooth.js:279
msgid "Mouse Settings"
msgstr "הגדרות עכבר"
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
#: ../js/ui/status/bluetooth.js:286 ../js/ui/status/volume.js:66
msgid "Sound Settings"
msgstr "הגדרות שמע"
#: ../js/ui/status/bluetooth.js:368
#: ../js/ui/status/bluetooth.js:393
#, c-format
msgid "Authorization request from %s"
msgstr "בקשת אישור מאת %s"
#: ../js/ui/status/bluetooth.js:374
#: ../js/ui/status/bluetooth.js:399
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "ההתקן %s מעוניין לגשת אל השירות '%s'"
#: ../js/ui/status/bluetooth.js:376
#: ../js/ui/status/bluetooth.js:401
msgid "Always grant access"
msgstr "תמיד להעניק גישה"
#: ../js/ui/status/bluetooth.js:377
#: ../js/ui/status/bluetooth.js:402
msgid "Grant this time only"
msgstr "הענקת גישה הפעם בלבד"
#: ../js/ui/status/bluetooth.js:378
#: ../js/ui/status/bluetooth.js:403
msgid "Reject"
msgstr "סירוב"
#: ../js/ui/status/bluetooth.js:408
#: ../js/ui/status/bluetooth.js:433
#, c-format
msgid "Pairing confirmation for %s"
msgstr "אישור צימוד עבור %s"
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:439 ../js/ui/status/bluetooth.js:473
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "ההתקן %s מעוניין בצימוד עם מחשב זה"
#: ../js/ui/status/bluetooth.js:415
#: ../js/ui/status/bluetooth.js:440
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "נא לאשר האם קוד ה־PIN '%s' תואם את זה שמופיע בהתקן."
#: ../js/ui/status/bluetooth.js:417
#: ../js/ui/status/bluetooth.js:442
msgid "Matches"
msgstr "התאמות"
#: ../js/ui/status/bluetooth.js:418
#: ../js/ui/status/bluetooth.js:443
msgid "Does not match"
msgstr "אינו תואם"
#: ../js/ui/status/bluetooth.js:441
#: ../js/ui/status/bluetooth.js:466
#, c-format
msgid "Pairing request for %s"
msgstr "בקשת צימוד עבור %s"
#: ../js/ui/status/bluetooth.js:449
#: ../js/ui/status/bluetooth.js:474
msgid "Please enter the PIN mentioned on the device."
msgstr "נא להזין את קוד ה־PIN המוזכר בהתקן."
#: ../js/ui/status/bluetooth.js:465
#: ../js/ui/status/bluetooth.js:490
msgid "OK"
msgstr "אישור"
@@ -827,139 +832,139 @@ msgstr "הצגת פריסת המקלדת..."
msgid "Localization Settings"
msgstr "הגדרות אזוריות"
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1453
#: ../js/ui/status/network.js:126
msgid "<unknown>"
msgstr "<לא ידוע>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:311
#: ../js/ui/status/network.js:343
msgid "disabled"
msgstr "מנוטרל"
#: ../js/ui/status/network.js:494
#: ../js/ui/status/network.js:542
msgid "connecting..."
msgstr "בהתחברות..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:497
#: ../js/ui/status/network.js:545
msgid "authentication required"
msgstr "נדרש אימות"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:507
#: ../js/ui/status/network.js:555
msgid "firmware missing"
msgstr "הקושחה חסרה"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:514
#: ../js/ui/status/network.js:562
msgid "cable unplugged"
msgstr "הכבל מנותק"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:519
#: ../js/ui/status/network.js:567
msgid "unavailable"
msgstr "לא זמין"
#: ../js/ui/status/network.js:521
#: ../js/ui/status/network.js:569
msgid "connection failed"
msgstr "החיבור נכשל"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:601 ../js/ui/status/network.js:1401
#: ../js/ui/status/network.js:650 ../js/ui/status/network.js:1459
msgid "Connected (private)"
msgstr "מחובר (פרטי)"
#: ../js/ui/status/network.js:682
#: ../js/ui/status/network.js:735
msgid "Auto Ethernet"
msgstr "אתרנט אוטומטי"
#: ../js/ui/status/network.js:757
#: ../js/ui/status/network.js:803
msgid "Auto broadband"
msgstr "פס רחב אוטומטי"
#: ../js/ui/status/network.js:760
#: ../js/ui/status/network.js:806
msgid "Auto dial-up"
msgstr "חיוג אוטומטי"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:903 ../js/ui/status/network.js:1413
#: ../js/ui/status/network.js:930 ../js/ui/status/network.js:1471
#, c-format
msgid "Auto %s"
msgstr "%s אוטומטי"
#: ../js/ui/status/network.js:905
#: ../js/ui/status/network.js:932
msgid "Auto bluetooth"
msgstr "Bluetooth אוטומטי"
#: ../js/ui/status/network.js:1415
#: ../js/ui/status/network.js:1473
msgid "Auto wireless"
msgstr "אלחוטי אוטומטי"
#: ../js/ui/status/network.js:1473
#: ../js/ui/status/network.js:1521
msgid "More..."
msgstr "עוד..."
#: ../js/ui/status/network.js:1496
#: ../js/ui/status/network.js:1563
msgid "Enable networking"
msgstr "הפעלת תכונת הרשת"
#: ../js/ui/status/network.js:1508
#: ../js/ui/status/network.js:1575
msgid "Wired"
msgstr "קווי"
#: ../js/ui/status/network.js:1519
#: ../js/ui/status/network.js:1586
msgid "Wireless"
msgstr "אלחוטי"
#: ../js/ui/status/network.js:1529
#: ../js/ui/status/network.js:1596
msgid "Mobile broadband"
msgstr "פס־רחב נייד"
#: ../js/ui/status/network.js:1539
#: ../js/ui/status/network.js:1606
msgid "VPN Connections"
msgstr "חיבורי VPN"
#: ../js/ui/status/network.js:1548
#: ../js/ui/status/network.js:1618
msgid "Network Settings"
msgstr "הגדרות הרשת"
#: ../js/ui/status/network.js:1843
#: ../js/ui/status/network.js:1912
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "כרגע ישנו חיבור בינך ובין רשת הפס הרחב הניידת '%s'"
#: ../js/ui/status/network.js:1847
#: ../js/ui/status/network.js:1916
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "כרגע ישנו חיבור בינך ובין הרשת האלחוטית '%s'"
#: ../js/ui/status/network.js:1851
#: ../js/ui/status/network.js:1920
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "כרגע ישנו חיבור בינך ובין הרשת הקווית '%s'"
#: ../js/ui/status/network.js:1855
#: ../js/ui/status/network.js:1924
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "כרגע ישנו חיבור בינך ובין רשת ה־VPN '%s'"
#: ../js/ui/status/network.js:1860
#: ../js/ui/status/network.js:1929
#, c-format
msgid "You're now connected to '%s'"
msgstr "כעת ישנו חיבור בינך ובין '%s'"
#: ../js/ui/status/network.js:1868
#: ../js/ui/status/network.js:1937
msgid "Connection established"
msgstr "ההתחברות הצליחה"
#: ../js/ui/status/network.js:1990
#: ../js/ui/status/network.js:2063
msgid "Networking is disabled"
msgstr "תכונת הרשת מנוטרלת"
#: ../js/ui/status/network.js:2115
#: ../js/ui/status/network.js:2188
msgid "Network Manager"
msgstr "מנהל הרשתות"
@@ -1065,22 +1070,22 @@ msgstr "עצמה"
msgid "Microphone"
msgstr "מיקרופון"
#: ../js/ui/telepathyClient.js:331
#: ../js/ui/telepathyClient.js:333
#, c-format
msgid "%s is online."
msgstr "%s התחבר/ה."
#: ../js/ui/telepathyClient.js:336
#: ../js/ui/telepathyClient.js:338
#, c-format
msgid "%s is offline."
msgstr "%s התנתק/ה."
#: ../js/ui/telepathyClient.js:339
#: ../js/ui/telepathyClient.js:341
#, c-format
msgid "%s is away."
msgstr "'%s' מרוחק/ת."
#: ../js/ui/telepathyClient.js:342
#: ../js/ui/telepathyClient.js:344
#, c-format
msgid "%s is busy."
msgstr "%s עסוק/ה."
@@ -1088,11 +1093,18 @@ msgstr "%s עסוק/ה."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:473
#: ../js/ui/telepathyClient.js:482
#, no-c-format
msgid "Sent at %X on %A"
msgstr "נשלח ב־%X בשעה %A"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:527
#, c-format
msgid "%s is now known as %s"
msgstr "השם של %s הוחלף ל־%s"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@@ -1139,51 +1151,15 @@ msgstr[2] "2 קלטים"
msgid "System Sounds"
msgstr "צלילי מערכת"
#: ../src/main.c:446
#: ../src/main.c:445
msgid "Print version"
msgstr "Print version"
#: ../src/shell-app.c:454
#: ../src/shell-app.c:464
#, c-format
msgid "Failed to launch '%s'"
msgstr "אירע כשל בטעינת '%s'"
#: ../src/shell-global.c:1395
msgid "Less than a minute ago"
msgstr "לפני פחות מדקה"
#: ../src/shell-global.c:1399
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "לפני דקה"
msgstr[1] "לפני %d דקות"
msgstr[2] "לפני 2 דקות"
#: ../src/shell-global.c:1404
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "לפני שעה"
msgstr[1] "לפני %d שעות"
msgstr[2] "לפני שעתיים"
#: ../src/shell-global.c:1409
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "לפני יום"
msgstr[1] "לפני %d ימים"
msgstr[2] "לפני יומיים"
#: ../src/shell-global.c:1414
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "לפני שבוע"
msgstr[1] "לפני %d שבועות"
msgstr[2] "לפני שבועיים"
#: ../src/shell-mobile-providers.c:80
msgid "United Kingdom"
msgstr "בריטניה"
@@ -1216,6 +1192,33 @@ msgstr "מערכת הקבצים"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "Less than a minute ago"
#~ msgstr "לפני פחות מדקה"
#~ msgid "%d minute ago"
#~ msgid_plural "%d minutes ago"
#~ msgstr[0] "לפני דקה"
#~ msgstr[1] "לפני %d דקות"
#~ msgstr[2] "לפני 2 דקות"
#~ msgid "%d hour ago"
#~ msgid_plural "%d hours ago"
#~ msgstr[0] "לפני שעה"
#~ msgstr[1] "לפני %d שעות"
#~ msgstr[2] "לפני שעתיים"
#~ msgid "%d day ago"
#~ msgid_plural "%d days ago"
#~ msgstr[0] "לפני יום"
#~ msgstr[1] "לפני %d ימים"
#~ msgstr[2] "לפני יומיים"
#~ msgid "%d week ago"
#~ msgid_plural "%d weeks ago"
#~ msgstr[0] "לפני שבוע"
#~ msgstr[1] "לפני %d שבועות"
#~ msgstr[2] "לפני שבועיים"
#~ msgid "Shut Down"
#~ msgstr "כיבוי"
@@ -1428,17 +1431,19 @@ msgstr "%1$s: %2$s"
#~ msgid ""
#~ "This key specifies the hour format used by the panel clock. Possible "
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
#~ "01-01. If set to \"custom\", the clock will display time according to the "
#~ "format specified in the custom_format key. Note that if set to either "
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
#~ "to the format specified in the custom_format key. Note that if set to "
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
#~ "ignored."
#~ msgstr ""
#~ "This key specifies the hour format used by the panel clock. Possible "
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
#~ "01-01. If set to \"custom\", the clock will display time according to the "
#~ "format specified in the custom_format key. Note that if set to either "
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
#~ "to the format specified in the custom_format key. Note that if set to "
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
#~ "ignored."
#~ msgid "Clock Format"
#~ msgstr "מבנה השעון"

189
po/nb.po
View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 2.91.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-05-11 21:22+0200\n"
"PO-Revision-Date: 2011-05-11 21:23+0200\n"
"POT-Creation-Date: 2011-05-11 00:12+0200\n"
"PO-Revision-Date: 2011-05-11 21:20+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: \n"
@@ -80,7 +80,7 @@ msgid "List of desktop file IDs for favorite applications"
msgstr "Liste av skrivebordfil-ider for favorittprogrammer"
#: ../data/org.gnome.shell.gschema.xml.in.h:13
#, fuzzy, no-c-format
#, no-c-format, fuzzy
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -92,9 +92,7 @@ msgid ""
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
"at the optimal thread count on the system."
msgstr ""
"Setter GStreamer-rør som brukes til å kode opptak. Den følger syntaksen som "
"brukes for gst-launch."
msgstr "Setter GStreamer-rør som brukes til å kode opptak. Den følger syntaksen som brukes for gst-launch."
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock"
@@ -190,15 +188,15 @@ msgstr "PROGRAMMER"
msgid "SETTINGS"
msgstr "INNSTILLINGER"
#: ../js/ui/appDisplay.js:656
#: ../js/ui/appDisplay.js:658
msgid "New Window"
msgstr "Nytt vindu"
#: ../js/ui/appDisplay.js:659
#: ../js/ui/appDisplay.js:661
msgid "Remove from Favorites"
msgstr "Fjern fra favoritter"
#: ../js/ui/appDisplay.js:660
#: ../js/ui/appDisplay.js:662
msgid "Add to Favorites"
msgstr "Legg til i favoritter"
@@ -331,13 +329,13 @@ msgid "Nothing Scheduled"
msgstr "Ingenting planlagt"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:492
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:487
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:495
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:490
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A %B %d, %Y"
@@ -488,7 +486,7 @@ msgid "Restarting the system."
msgstr "Starter systemet på nytt."
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
#: ../js/ui/status/bluetooth.js:491
msgid "Cancel"
msgstr "Avbryt"
@@ -556,11 +554,11 @@ msgstr "Avslutt %s"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:911
#: ../js/ui/panel.js:913
msgid "Activities"
msgstr "Aktiviteter"
#: ../js/ui/panel.js:1012
#: ../js/ui/panel.js:1015
msgid "Top Bar"
msgstr "Topp-panel"
@@ -618,11 +616,11 @@ msgstr "toggle-switch-intl"
msgid "Please enter a command:"
msgstr "Oppgi en kommando:"
#: ../js/ui/searchDisplay.js:311
#: ../js/ui/searchDisplay.js:313
msgid "Searching..."
msgstr "Søker …"
#: ../js/ui/searchDisplay.js:325
#: ../js/ui/searchDisplay.js:327
msgid "No matching results."
msgstr "Ingen treff."
@@ -705,9 +703,9 @@ msgstr "Høy kontrast"
msgid "Large Text"
msgstr "Stor tekst"
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:264
#: ../js/ui/status/bluetooth.js:358 ../js/ui/status/bluetooth.js:392
#: ../js/ui/status/bluetooth.js:432 ../js/ui/status/bluetooth.js:465
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -720,101 +718,101 @@ msgid "Send Files to Device..."
msgstr "Send filer til enhet …"
#: ../js/ui/status/bluetooth.js:70
msgid "Setup a New Device..."
msgid "Set up a New Device..."
msgstr "Sett opp en ny enhet …"
#: ../js/ui/status/bluetooth.js:95
msgid "Bluetooth Settings"
msgstr "Innstillinger for Bluetooth"
#: ../js/ui/status/bluetooth.js:188
#: ../js/ui/status/bluetooth.js:215
msgid "Connection"
msgstr "Tilkobling"
#: ../js/ui/status/bluetooth.js:224
#: ../js/ui/status/bluetooth.js:251
msgid "Send Files..."
msgstr "Send filer …"
#: ../js/ui/status/bluetooth.js:229
#: ../js/ui/status/bluetooth.js:256
msgid "Browse Files..."
msgstr "Bla gjennom filer …"
#: ../js/ui/status/bluetooth.js:238
#: ../js/ui/status/bluetooth.js:265
msgid "Error browsing device"
msgstr "Feil under lesing av enhet"
#: ../js/ui/status/bluetooth.js:239
#: ../js/ui/status/bluetooth.js:266
#, c-format
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "Kan ikke bla gjennom forespurt enhet. Feilen er «%s»"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:274
msgid "Keyboard Settings"
msgstr "Innstillinger for tastatur"
#: ../js/ui/status/bluetooth.js:252
#: ../js/ui/status/bluetooth.js:279
msgid "Mouse Settings"
msgstr "Innstillinger for mus"
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
#: ../js/ui/status/bluetooth.js:286 ../js/ui/status/volume.js:66
msgid "Sound Settings"
msgstr "Innstillinger for lyd"
#: ../js/ui/status/bluetooth.js:368
#: ../js/ui/status/bluetooth.js:393
#, c-format
msgid "Authorization request from %s"
msgstr "Forespørsel om autorisering fra %s"
#: ../js/ui/status/bluetooth.js:374
#: ../js/ui/status/bluetooth.js:399
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "Enhet %s vil ha tilgang til tjenesten «%s»"
#: ../js/ui/status/bluetooth.js:376
#: ../js/ui/status/bluetooth.js:401
msgid "Always grant access"
msgstr "Alltid gi tilgang"
#: ../js/ui/status/bluetooth.js:377
#: ../js/ui/status/bluetooth.js:402
msgid "Grant this time only"
msgstr "Gi tilgang kun denne ene gangen"
#: ../js/ui/status/bluetooth.js:378
#: ../js/ui/status/bluetooth.js:403
msgid "Reject"
msgstr "Avvis"
#: ../js/ui/status/bluetooth.js:408
#: ../js/ui/status/bluetooth.js:433
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Bekreftelse for tilkobling for %s"
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:439 ../js/ui/status/bluetooth.js:473
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Enhet %s vil koble seg sammen med denne datamaskinen"
#: ../js/ui/status/bluetooth.js:415
#: ../js/ui/status/bluetooth.js:440
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "Vennligst bekreft om PIN «%s» er lik den som brukes på enheten."
#: ../js/ui/status/bluetooth.js:417
#: ../js/ui/status/bluetooth.js:442
msgid "Matches"
msgstr "Stemmer overens"
#: ../js/ui/status/bluetooth.js:418
#: ../js/ui/status/bluetooth.js:443
msgid "Does not match"
msgstr "Stemmer ikke overens"
#: ../js/ui/status/bluetooth.js:441
#: ../js/ui/status/bluetooth.js:466
#, c-format
msgid "Pairing request for %s"
msgstr "Forespørsel om tilkobling for %s"
#: ../js/ui/status/bluetooth.js:449
#: ../js/ui/status/bluetooth.js:474
msgid "Please enter the PIN mentioned on the device."
msgstr "Vennligst oppgi PIN som oppgitt på enheten."
#: ../js/ui/status/bluetooth.js:465
#: ../js/ui/status/bluetooth.js:490
msgid "OK"
msgstr "OK"
@@ -826,74 +824,74 @@ msgstr "Vis tastaturutforming …"
msgid "Localization Settings"
msgstr "Innstillinger for lokalisering"
#: ../js/ui/status/network.js:109 ../js/ui/status/network.js:1501
#: ../js/ui/status/network.js:126
msgid "<unknown>"
msgstr "<ukjent>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:326
#: ../js/ui/status/network.js:343
msgid "disabled"
msgstr "slått av"
#: ../js/ui/status/network.js:524
#: ../js/ui/status/network.js:542
msgid "connecting..."
msgstr "kobler til …"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:527
#: ../js/ui/status/network.js:545
msgid "authentication required"
msgstr "autentisering kreves"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:537
#: ../js/ui/status/network.js:555
msgid "firmware missing"
msgstr "fastvare mangler"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:544
#: ../js/ui/status/network.js:562
msgid "cable unplugged"
msgstr "kabel koblet fra"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:549
#: ../js/ui/status/network.js:567
msgid "unavailable"
msgstr "ikke tilgjengelig"
#: ../js/ui/status/network.js:551
#: ../js/ui/status/network.js:569
msgid "connection failed"
msgstr "tilkobling feilet"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:631 ../js/ui/status/network.js:1449
#: ../js/ui/status/network.js:650 ../js/ui/status/network.js:1459
msgid "Connected (private)"
msgstr "Tilkoblet (privat)"
#: ../js/ui/status/network.js:716
#: ../js/ui/status/network.js:735
msgid "Auto Ethernet"
msgstr "Automatisk Ethernet"
#: ../js/ui/status/network.js:791
#: ../js/ui/status/network.js:803
msgid "Auto broadband"
msgstr "Automatisk bredbånd"
#: ../js/ui/status/network.js:794
#: ../js/ui/status/network.js:806
msgid "Auto dial-up"
msgstr "Automatisk oppringt"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:940 ../js/ui/status/network.js:1461
#: ../js/ui/status/network.js:930 ../js/ui/status/network.js:1471
#, c-format
msgid "Auto %s"
msgstr "Automatisk %s"
#: ../js/ui/status/network.js:942
#: ../js/ui/status/network.js:932
msgid "Auto bluetooth"
msgstr "Automatisk Bluetooth"
#: ../js/ui/status/network.js:1463
#: ../js/ui/status/network.js:1473
msgid "Auto wireless"
msgstr "Automatisk trådløst"
@@ -901,64 +899,64 @@ msgstr "Automatisk trådløst"
msgid "More..."
msgstr "Mer …"
#: ../js/ui/status/network.js:1544
#: ../js/ui/status/network.js:1563
msgid "Enable networking"
msgstr "Slå på nettverk"
#: ../js/ui/status/network.js:1556
#: ../js/ui/status/network.js:1575
msgid "Wired"
msgstr "Kablet"
#: ../js/ui/status/network.js:1567
#: ../js/ui/status/network.js:1586
msgid "Wireless"
msgstr "Trådløst"
#: ../js/ui/status/network.js:1577
#: ../js/ui/status/network.js:1596
msgid "Mobile broadband"
msgstr "Mobilt bredbånd"
#: ../js/ui/status/network.js:1587
#: ../js/ui/status/network.js:1606
msgid "VPN Connections"
msgstr "VPN-tilkoblinger"
#: ../js/ui/status/network.js:1599
#: ../js/ui/status/network.js:1618
msgid "Network Settings"
msgstr "Innstillinger for nettverk"
#: ../js/ui/status/network.js:1893
#: ../js/ui/status/network.js:1912
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Du er nå koblet til mobil bredbåndstilkobling «%s»"
#: ../js/ui/status/network.js:1897
#: ../js/ui/status/network.js:1916
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Du er nå koblet til trådløst nettverk «%s»"
#: ../js/ui/status/network.js:1901
#: ../js/ui/status/network.js:1920
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Du er nå koblet til kablet nettverk «%s»"
#: ../js/ui/status/network.js:1905
#: ../js/ui/status/network.js:1924
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Du er nå koblet til virtuelt privat nettverk «%s»"
#: ../js/ui/status/network.js:1910
#: ../js/ui/status/network.js:1929
#, c-format
msgid "You're now connected to '%s'"
msgstr "Du er nå koblet til «%s»"
#: ../js/ui/status/network.js:1918
#: ../js/ui/status/network.js:1937
msgid "Connection established"
msgstr "Tilkobling etablert"
#: ../js/ui/status/network.js:2044
#: ../js/ui/status/network.js:2063
msgid "Networking is disabled"
msgstr "Nettverk er slått av"
#: ../js/ui/status/network.js:2169
#: ../js/ui/status/network.js:2188
msgid "Network Manager"
msgstr "Nettverkshåndtering"
@@ -1060,22 +1058,22 @@ msgstr "Volum"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/telepathyClient.js:335
#: ../js/ui/telepathyClient.js:330
#, c-format
msgid "%s is online."
msgstr "%s er tilkoblet."
#: ../js/ui/telepathyClient.js:340
#: ../js/ui/telepathyClient.js:335
#, c-format
msgid "%s is offline."
msgstr "%s er frakoblet."
#: ../js/ui/telepathyClient.js:343
#: ../js/ui/telepathyClient.js:338
#, c-format
msgid "%s is away."
msgstr "«%s» er borte."
#: ../js/ui/telepathyClient.js:346
#: ../js/ui/telepathyClient.js:341
#, c-format
msgid "%s is busy."
msgstr "%s er opptatt."
@@ -1083,11 +1081,18 @@ msgstr "%s er opptatt."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:484
#: ../js/ui/telepathyClient.js:479
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Sendt %X på %A"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:524
#, c-format
msgid "%s is now known as %s"
msgstr "%s er nå kjent som %s"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@@ -1136,43 +1141,11 @@ msgstr "Systemlyder"
msgid "Print version"
msgstr "Skriv ut versjon"
#: ../src/shell-app.c:454
#: ../src/shell-app.c:464
#, c-format
msgid "Failed to launch '%s'"
msgstr "Klarte ikke å starte «%s»"
#: ../src/shell-global.c:1395
msgid "Less than a minute ago"
msgstr "Mindre enn et minutt siden"
#: ../src/shell-global.c:1399
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d minutt siden"
msgstr[1] "%d minutter siden"
#: ../src/shell-global.c:1404
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d time siden"
msgstr[1] "%d timer siden"
#: ../src/shell-global.c:1409
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d dag siden"
msgstr[1] "%d dager siden"
#: ../src/shell-global.c:1414
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d uke siden"
msgstr[1] "%d uker siden"
#: ../src/shell-mobile-providers.c:80
msgid "United Kingdom"
msgstr "Storbritannia"

104
po/sk.po
View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-04-26 21:10+0000\n"
"POT-Creation-Date: 2011-04-26 12:47+0000\n"
"PO-Revision-Date: 2011-04-27 08:53+0200\n"
"Last-Translator: Peter Mráz <etkinator@gmail.com>\n"
"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
@@ -60,7 +60,7 @@ msgid "History for command (Alt-F2) dialog"
msgstr "História dialógového okna príkazov (Alt-F2)"
# neviem ako preložiť looking glass
# PŠ: tak si zisti, čo to znamená v prostredí gnome-shell
#PŠ: tak si zisti, čo to znamená v prostredí gnome-shell
#: ../data/org.gnome.shell.gschema.xml.in.h:7
#, fuzzy
msgid "History for the looking glass dialog"
@@ -102,15 +102,15 @@ msgid ""
"at the optimal thread count on the system."
msgstr ""
"Nastavuje zreťazenie systému GStreamer určené pre kódované nahrávok. Používa "
"rovnakú syntax ako gst-launch. Zreťazenie by malo mať ďalej nepripojený "
"cieľ, v ktorom sa video nahráva. Obvykle má nepripojený zdroj; výstup z "
"takého zdroja sa bude zapisovať do výstupného súboru. Zreťazenie je ale "
"schopné zabezpečiť i vlastný výstup, čo sa dá využiť na odosielanie výstupu "
"na server icecast cez shout2send a pod. Ak toto nie je nastavené, alebo je "
"to nastavené na prázdnu hodnotu, použije sa predvolené zreťazenie. Teraz je "
"to „videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux“, čo "
"nahráva do WEBM použitím kodeku VP8. %T sa použije ako zástupný symbol "
"odhadu najvhodnejšieho počtu vlákien v systéme."
"rovnakú syntax ako gst-launch. Zreťazenie by malo mať ďalej nepripojený cieľ, "
"v ktorom sa video nahráva. Obvykle má nepripojený zdroj; výstup z takého "
"zdroja sa bude zapisovať do výstupného súboru. Zreťazenie je ale schopné "
"zabezpečiť i vlastný výstup, čo sa dá využiť na odosielanie výstupu na "
"server icecast cez shout2send a pod. Ak toto nie je nastavené, alebo je to "
"nastavené na prázdnu hodnotu, použije sa predvolené zreťazenie. Teraz je to "
"„videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux“, čo "
"nahráva do WEBM použitím kodeku VP8. %T sa použije ako zástupný symbol odhadu "
"najvhodnejšieho počtu vlákien v systéme."
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock"
@@ -138,8 +138,8 @@ msgid ""
"current date, and use this extension. It should be changed when recording to "
"a different container format."
msgstr ""
"Súbor pre nahrané záznamy diania na obrazovke bude mať jedinečný názov na "
"základe aktuálneho dátumu a použije túto príponu. Pri nahrávaní do iného "
"Súbor pre nahrané záznamy diania na obrazovke bude mať jedinečný názov "
"na základe aktuálneho dátumu a použije túto príponu. Pri nahrávaní do iného "
"formátu kontajneru by mala byť zmenená."
#: ../data/org.gnome.shell.gschema.xml.in.h:19
@@ -578,11 +578,11 @@ msgstr "Ukončiť %s"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:911
#: ../js/ui/panel.js:913
msgid "Activities"
msgstr "Aktivity"
#: ../js/ui/panel.js:1012
#: ../js/ui/panel.js:1015
msgid "Top Bar"
msgstr "Horná lišta"
@@ -854,141 +854,141 @@ msgid "Localization Settings"
msgstr "Miestne nastavenia"
# zariadenie
#: ../js/ui/status/network.js:109 ../js/ui/status/network.js:1501
#: ../js/ui/status/network.js:113
msgid "<unknown>"
msgstr "<neznáme>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:326
#: ../js/ui/status/network.js:330
msgid "disabled"
msgstr "zakázané"
#: ../js/ui/status/network.js:524
#: ../js/ui/status/network.js:528
msgid "connecting..."
msgstr "pripája sa..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:527
#: ../js/ui/status/network.js:531
msgid "authentication required"
msgstr "požaduje sa overenie totožnosti"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:537
#: ../js/ui/status/network.js:541
msgid "firmware missing"
msgstr "chýba firmvér"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:544
#: ../js/ui/status/network.js:548
msgid "cable unplugged"
msgstr "kábel odpojený"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:549
#: ../js/ui/status/network.js:553
msgid "unavailable"
msgstr "nedostupné"
#: ../js/ui/status/network.js:551
#: ../js/ui/status/network.js:555
msgid "connection failed"
msgstr "pripojenie zlyhalo"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:631 ../js/ui/status/network.js:1449
#: ../js/ui/status/network.js:635 ../js/ui/status/network.js:1532
msgid "Connected (private)"
msgstr "Pripojené (súkromne)"
#: ../js/ui/status/network.js:716
#: ../js/ui/status/network.js:720
msgid "Auto Ethernet"
msgstr ""
#: ../js/ui/status/network.js:791
#: ../js/ui/status/network.js:795
msgid "Auto broadband"
msgstr ""
#: ../js/ui/status/network.js:794
#: ../js/ui/status/network.js:798
msgid "Auto dial-up"
msgstr ""
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:940 ../js/ui/status/network.js:1461
#: ../js/ui/status/network.js:944 ../js/ui/status/network.js:1544
#, c-format
msgid "Auto %s"
msgstr ""
#: ../js/ui/status/network.js:942
#: ../js/ui/status/network.js:946
msgid "Auto bluetooth"
msgstr ""
#: ../js/ui/status/network.js:1463
#: ../js/ui/status/network.js:1546
msgid "Auto wireless"
msgstr ""
#: ../js/ui/status/network.js:1521
#: ../js/ui/status/network.js:1583
msgid "More..."
msgstr "Viac..."
#: ../js/ui/status/network.js:1544
#: ../js/ui/status/network.js:1625
msgid "Enable networking"
msgstr "Povoliť sieť"
#: ../js/ui/status/network.js:1556
#: ../js/ui/status/network.js:1637
msgid "Wired"
msgstr "Drôtové"
#: ../js/ui/status/network.js:1567
#: ../js/ui/status/network.js:1648
msgid "Wireless"
msgstr "Bezdrôtové"
# podľa prekladu v module NetworkManager
#: ../js/ui/status/network.js:1577
#: ../js/ui/status/network.js:1658
msgid "Mobile broadband"
msgstr "Mobilné"
#: ../js/ui/status/network.js:1587
#: ../js/ui/status/network.js:1668
msgid "VPN Connections"
msgstr "VPN pripojenie"
#: ../js/ui/status/network.js:1599
#: ../js/ui/status/network.js:1680
msgid "Network Settings"
msgstr "Nastavenia siete"
#: ../js/ui/status/network.js:1893
#: ../js/ui/status/network.js:1974
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Teraz ste pripojený k mobilnej sieti „%s“"
#: ../js/ui/status/network.js:1897
#: ../js/ui/status/network.js:1978
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Teraz ste pripojený k bezdrôtovej sieti „%s“"
#: ../js/ui/status/network.js:1901
#: ../js/ui/status/network.js:1982
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Teraz ste pripojený k drôtovej sieti „%s“"
#: ../js/ui/status/network.js:1905
#: ../js/ui/status/network.js:1986
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Teraz ste pripojený k VPN sieti „%s“"
#: ../js/ui/status/network.js:1910
#: ../js/ui/status/network.js:1991
#, c-format
msgid "You're now connected to '%s'"
msgstr "Teraz ste pripojený k „%s“"
# PŠ: tu by sa asi zišlo connection preložiť ako spojenie - predsa len to je zaužívané slovné spojenie... alebo established preložiť inakšie
#: ../js/ui/status/network.js:1918
#: ../js/ui/status/network.js:1999
msgid "Connection established"
msgstr "Pripojenie nadviazané"
#: ../js/ui/status/network.js:2044
#: ../js/ui/status/network.js:2125
msgid "Networking is disabled"
msgstr "Sieť je zakázaná"
#: ../js/ui/status/network.js:2169
#: ../js/ui/status/network.js:2250
msgid "Network Manager"
msgstr "Správca siete"
@@ -1123,6 +1123,13 @@ msgstr "%s je zaneprázdnený."
msgid "Sent at %X on %A"
msgstr "Čas odoslania: %A, %R"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:529
#, c-format
msgid "%s is now known as %s"
msgstr "%s odteraz vystupuje ako %s"
# nič lepšie ma nenapadlo
#. Translators: this is the text displayed
#. in the search entry when no search is
@@ -1142,7 +1149,7 @@ msgid "%s has finished starting"
msgstr "Spúšťanie %s je dokočené"
# ide o zriadenie
# PŠ: a to máš odkiaľ? %s je totiž titulok okna!
#PŠ: a to máš odkiaľ? %s je totiž titulok okna!
#: ../js/ui/windowAttentionHandler.js:44
#, c-format
msgid "'%s' is ready"
@@ -1222,7 +1229,7 @@ msgid "United Kingdom"
msgstr "Veľká Británia"
# nastavenia
# PŠ: zase nesprávne: ide o APN (Access Point Name, pri GPRS pripojení) - názov, takže mužský rod
#PŠ: zase nesprávne: ide o APN (Access Point Name, pri GPRS pripojení) - názov, takže mužský rod
#: ../src/shell-mobile-providers.c:526
msgid "Default"
msgstr "Predvolený"
@@ -1252,9 +1259,6 @@ msgstr "Súborový systém"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "%s is now known as %s"
#~ msgstr "%s odteraz vystupuje ako %s"
#~ msgid "No such application"
#~ msgstr "Aplikácia neexistuje"

347
po/sl.po
View File

@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-03-26 15:31+0000\n"
"PO-Revision-Date: 2011-03-26 20:24+0100\n"
"POT-Creation-Date: 2011-05-09 08:37+0000\n"
"PO-Revision-Date: 2011-05-09 12:27+0100\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: Slovenian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: Slovenian\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
"X-Poedit-Language: Slovenian\n"
"X-Poedit-Country: SLOVENIA\n"
@@ -138,27 +138,27 @@ msgid "Execution of '%s' failed:"
msgstr "Izvedba '%s' je spodletela:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:230
#: ../js/ui/appDisplay.js:260
msgid "All"
msgstr "Vse"
#: ../js/ui/appDisplay.js:328
#: ../js/ui/appDisplay.js:359
msgid "APPLICATIONS"
msgstr "Programi"
#: ../js/ui/appDisplay.js:354
#: ../js/ui/appDisplay.js:385
msgid "SETTINGS"
msgstr "NASTAVITVE"
#: ../js/ui/appDisplay.js:625
#: ../js/ui/appDisplay.js:658
msgid "New Window"
msgstr "Novo okno"
#: ../js/ui/appDisplay.js:628
#: ../js/ui/appDisplay.js:661
msgid "Remove from Favorites"
msgstr "Odstrani iz priljubljenih"
#: ../js/ui/appDisplay.js:629
#: ../js/ui/appDisplay.js:662
msgid "Add to Favorites"
msgstr "Dodaj med priljubljene"
@@ -292,12 +292,14 @@ msgstr "Nič ni razporejeno"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720
#: ../js/ui/telepathyClient.js:487
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d. %m."
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:723
#: ../js/ui/telepathyClient.js:490
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d %B %Y"
@@ -319,7 +321,7 @@ msgid "Next week"
msgstr "Naslednji teden"
#: ../js/ui/dash.js:174
#: ../js/ui/messageTray.js:1000
#: ../js/ui/messageTray.js:1037
msgid "Remove"
msgstr "Odstrani"
@@ -447,9 +449,9 @@ msgstr "Sistem se bo samodejno ponovno zagnal čez %d sekund."
msgid "Restarting the system."
msgstr "Ponoven zagon sistema."
#: ../js/ui/endSessionDialog.js:415
#: ../js/ui/endSessionDialog.js:413
#: ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
#: ../js/ui/status/bluetooth.js:491
msgid "Cancel"
msgstr "Prekliči"
@@ -484,11 +486,11 @@ msgstr "Poglej vir"
msgid "Web Page"
msgstr "Spletna stran"
#: ../js/ui/messageTray.js:993
#: ../js/ui/messageTray.js:1030
msgid "Open"
msgstr "Odpri"
#: ../js/ui/messageTray.js:2151
#: ../js/ui/messageTray.js:2194
msgid "System Information"
msgstr "Podrobnosti sistema"
@@ -511,18 +513,18 @@ msgid "Dash"
msgstr "Armaturna plošča"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:515
#: ../js/ui/panel.js:533
#, c-format
msgid "Quit %s"
msgstr "Končaj %s"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:878
#: ../js/ui/panel.js:913
msgid "Activities"
msgstr "Dejavnosti"
#: ../js/ui/panel.js:979
#: ../js/ui/panel.js:1015
msgid "Top Bar"
msgstr "Vrhnja vrstica"
@@ -555,11 +557,15 @@ msgstr "Skrbnik"
msgid "Authenticate"
msgstr "Overi"
#: ../js/ui/polkitAuthenticationAgent.js:260
#. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: ../js/ui/polkitAuthenticationAgent.js:264
msgid "Sorry, that didn't work. Please try again."
msgstr "Dejanje je spodletelo. Poskusite znova."
#: ../js/ui/polkitAuthenticationAgent.js:272
#: ../js/ui/polkitAuthenticationAgent.js:276
msgid "Password:"
msgstr "Geslo:"
@@ -576,11 +582,11 @@ msgstr "toggle-switch-intl"
msgid "Please enter a command:"
msgstr "Vnos ukaza:"
#: ../js/ui/searchDisplay.js:310
#: ../js/ui/searchDisplay.js:313
msgid "Searching..."
msgstr "Iskanje ..."
#: ../js/ui/searchDisplay.js:324
#: ../js/ui/searchDisplay.js:327
msgid "No matching results."
msgstr "Ni zadetkov iskanja"
@@ -666,11 +672,11 @@ msgid "Large Text"
msgstr "Veliko besedilo"
#: ../js/ui/status/bluetooth.js:42
#: ../js/ui/status/bluetooth.js:237
#: ../js/ui/status/bluetooth.js:333
#: ../js/ui/status/bluetooth.js:367
#: ../js/ui/status/bluetooth.js:407
#: ../js/ui/status/bluetooth.js:440
#: ../js/ui/status/bluetooth.js:264
#: ../js/ui/status/bluetooth.js:358
#: ../js/ui/status/bluetooth.js:392
#: ../js/ui/status/bluetooth.js:432
#: ../js/ui/status/bluetooth.js:465
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -683,103 +689,103 @@ msgid "Send Files to Device..."
msgstr "Pošilji datoteke na napravo ..."
#: ../js/ui/status/bluetooth.js:70
msgid "Setup a New Device..."
msgstr "Namestitev nove naprave ..."
msgid "Set up a New Device..."
msgstr "Nastavitev nove naprave ..."
#: ../js/ui/status/bluetooth.js:95
msgid "Bluetooth Settings"
msgstr "Nastavitve za Bluetooth"
#: ../js/ui/status/bluetooth.js:188
#: ../js/ui/status/bluetooth.js:215
msgid "Connection"
msgstr "Povezava"
#: ../js/ui/status/bluetooth.js:224
#: ../js/ui/status/bluetooth.js:251
msgid "Send Files..."
msgstr "Pošlji datoteke ..."
#: ../js/ui/status/bluetooth.js:229
#: ../js/ui/status/bluetooth.js:256
msgid "Browse Files..."
msgstr "Brskanje datotek ..."
#: ../js/ui/status/bluetooth.js:238
#: ../js/ui/status/bluetooth.js:265
msgid "Error browsing device"
msgstr "Napaka med brskanjem po napravi"
#: ../js/ui/status/bluetooth.js:239
#: ../js/ui/status/bluetooth.js:266
#, c-format
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "Po zahtevani naprave ni mogoče brskati, napaka je '%s'"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:274
msgid "Keyboard Settings"
msgstr "Nastavitve tipkovnice"
#: ../js/ui/status/bluetooth.js:252
#: ../js/ui/status/bluetooth.js:279
msgid "Mouse Settings"
msgstr "Nastavitve miške"
#: ../js/ui/status/bluetooth.js:259
#: ../js/ui/status/bluetooth.js:286
#: ../js/ui/status/volume.js:66
msgid "Sound Settings"
msgstr "Nastavitve zvoka"
#: ../js/ui/status/bluetooth.js:368
#: ../js/ui/status/bluetooth.js:393
#, c-format
msgid "Authorization request from %s"
msgstr "Zahteva za pooblastitev od %s"
#: ../js/ui/status/bluetooth.js:374
#: ../js/ui/status/bluetooth.js:399
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "Naprava %s želi dostop do storitve '%s'."
#: ../js/ui/status/bluetooth.js:376
#: ../js/ui/status/bluetooth.js:401
msgid "Always grant access"
msgstr "Vedno odobri dostop"
#: ../js/ui/status/bluetooth.js:377
#: ../js/ui/status/bluetooth.js:402
msgid "Grant this time only"
msgstr "Odobri le tokrat"
#: ../js/ui/status/bluetooth.js:378
#: ../js/ui/status/bluetooth.js:403
msgid "Reject"
msgstr "Zavrni"
#: ../js/ui/status/bluetooth.js:408
#: ../js/ui/status/bluetooth.js:433
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Potrditev razčlenjevanja za %s"
#: ../js/ui/status/bluetooth.js:414
#: ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:439
#: ../js/ui/status/bluetooth.js:473
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Naprava %s se skuša povezati s tem računalnikom"
#: ../js/ui/status/bluetooth.js:415
#: ../js/ui/status/bluetooth.js:440
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "Potrdite, ali se PIN '%s' ujema s tistim na napravi."
#: ../js/ui/status/bluetooth.js:417
#: ../js/ui/status/bluetooth.js:442
msgid "Matches"
msgstr "Ujemanja"
#: ../js/ui/status/bluetooth.js:418
#: ../js/ui/status/bluetooth.js:443
msgid "Does not match"
msgstr "Se ne ujema"
#: ../js/ui/status/bluetooth.js:441
#: ../js/ui/status/bluetooth.js:466
#, c-format
msgid "Pairing request for %s"
msgstr "Zahteva razčlenjevanja za %s"
#: ../js/ui/status/bluetooth.js:449
#: ../js/ui/status/bluetooth.js:474
msgid "Please enter the PIN mentioned on the device."
msgstr "Vnesite PIN, ki je naveden na napravi."
#: ../js/ui/status/bluetooth.js:465
#: ../js/ui/status/bluetooth.js:490
msgid "OK"
msgstr "V redu"
@@ -791,142 +797,141 @@ msgstr "Pokaži razporeditev tipkovnice ..."
msgid "Localization Settings"
msgstr "Krajevne nastavitve"
#: ../js/ui/status/network.js:104
#: ../js/ui/status/network.js:1454
#: ../js/ui/status/network.js:126
msgid "<unknown>"
msgstr "<neznano>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:311
#: ../js/ui/status/network.js:343
msgid "disabled"
msgstr "onemogočeno"
#: ../js/ui/status/network.js:494
#: ../js/ui/status/network.js:542
msgid "connecting..."
msgstr "povezovanje ..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:497
#: ../js/ui/status/network.js:545
msgid "authentication required"
msgstr "zahtevana je overitev"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:507
#: ../js/ui/status/network.js:555
msgid "firmware missing"
msgstr "manjka strojna programska oprema"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:514
#: ../js/ui/status/network.js:562
msgid "cable unplugged"
msgstr "kabel ni priklopljen"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:519
#: ../js/ui/status/network.js:567
msgid "unavailable"
msgstr "ni na voljo"
#: ../js/ui/status/network.js:521
#: ../js/ui/status/network.js:569
msgid "connection failed"
msgstr "povezovanje je spodletelo"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:602
#: ../js/ui/status/network.js:1402
#: ../js/ui/status/network.js:650
#: ../js/ui/status/network.js:1459
msgid "Connected (private)"
msgstr "Povezano (zasebna povezava)"
#: ../js/ui/status/network.js:683
#: ../js/ui/status/network.js:735
msgid "Auto Ethernet"
msgstr "Samodejni eternet"
#: ../js/ui/status/network.js:758
#: ../js/ui/status/network.js:803
msgid "Auto broadband"
msgstr "Samodejni širokopasovni dostop"
#: ../js/ui/status/network.js:761
#: ../js/ui/status/network.js:806
msgid "Auto dial-up"
msgstr "Samodejni klicni dostop"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:904
#: ../js/ui/status/network.js:1414
#: ../js/ui/status/network.js:930
#: ../js/ui/status/network.js:1471
#, c-format
msgid "Auto %s"
msgstr "Samodejna povezava z %s"
#: ../js/ui/status/network.js:906
#: ../js/ui/status/network.js:932
msgid "Auto bluetooth"
msgstr "Samodejna povezava z Bluetooth"
#: ../js/ui/status/network.js:1416
#: ../js/ui/status/network.js:1473
msgid "Auto wireless"
msgstr "Samodejni brezžični dostop"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1521
msgid "More..."
msgstr "Več ..."
#: ../js/ui/status/network.js:1497
#: ../js/ui/status/network.js:1563
msgid "Enable networking"
msgstr "Omogoči omrežje"
#: ../js/ui/status/network.js:1509
#: ../js/ui/status/network.js:1575
msgid "Wired"
msgstr "Žično"
#: ../js/ui/status/network.js:1520
#: ../js/ui/status/network.js:1586
msgid "Wireless"
msgstr "Brezžično"
#: ../js/ui/status/network.js:1530
#: ../js/ui/status/network.js:1596
msgid "Mobile broadband"
msgstr "Mobilni širokopasovni dostop"
#: ../js/ui/status/network.js:1540
#: ../js/ui/status/network.js:1606
msgid "VPN Connections"
msgstr "Povezave VPN"
#: ../js/ui/status/network.js:1549
#: ../js/ui/status/network.js:1618
msgid "Network Settings"
msgstr "Omrežne nastavitve"
#: ../js/ui/status/network.js:1844
#: ../js/ui/status/network.js:1912
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Vzpostavljena je povezava z mobilnim širokopasovnim omrežjem '%s'."
#: ../js/ui/status/network.js:1848
#: ../js/ui/status/network.js:1916
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Vzpostavljena je povezava z brezžičnim omrežjem '%s'."
#: ../js/ui/status/network.js:1852
#: ../js/ui/status/network.js:1920
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Vzpostavljena je povezava z žičnim omrežjem '%s'."
#: ../js/ui/status/network.js:1856
#: ../js/ui/status/network.js:1924
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Vzpostavljena je povezava z omrežjem VPN '%s'"
#: ../js/ui/status/network.js:1861
#: ../js/ui/status/network.js:1929
#, c-format
msgid "You're now connected to '%s'"
msgstr "Vzpostavljena je povezava z '%s'."
#: ../js/ui/status/network.js:1869
#: ../js/ui/status/network.js:1937
msgid "Connection established"
msgstr "Povezava je vzpostavljena"
#: ../js/ui/status/network.js:1991
#: ../js/ui/status/network.js:2063
msgid "Networking is disabled"
msgstr "Omrežje je onemogočeno"
#: ../js/ui/status/network.js:2116
#: ../js/ui/status/network.js:2188
msgid "Network Manager"
msgstr "Upravljalnik omrežij"
@@ -1037,22 +1042,22 @@ msgstr "Glasnost"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/telepathyClient.js:331
#: ../js/ui/telepathyClient.js:330
#, c-format
msgid "%s is online."
msgstr "%s je povezan."
#: ../js/ui/telepathyClient.js:336
#: ../js/ui/telepathyClient.js:335
#, c-format
msgid "%s is offline."
msgstr "%s ni povezan."
#: ../js/ui/telepathyClient.js:339
#: ../js/ui/telepathyClient.js:338
#, c-format
msgid "%s is away."
msgstr "%s je odsoten."
#: ../js/ui/telepathyClient.js:342
#: ../js/ui/telepathyClient.js:341
#, c-format
msgid "%s is busy."
msgstr "%s je zaposlen."
@@ -1060,11 +1065,18 @@ msgstr "%s je zaposlen."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:473
#: ../js/ui/telepathyClient.js:479
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Poslano na %X ob %A"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:524
#, c-format
msgid "%s is now known as %s"
msgstr "%s je sedaj znan kot v %s"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@@ -1114,55 +1126,15 @@ msgstr[3] "%u dovodi naprave"
msgid "System Sounds"
msgstr "Sistemski zvoki"
#: ../src/main.c:446
#: ../src/main.c:445
msgid "Print version"
msgstr "Izpiši različico"
#: ../src/shell-app.c:454
#: ../src/shell-app.c:464
#, c-format
msgid "Failed to launch '%s'"
msgstr "Zaganjanje '%s' je spodletelo"
#: ../src/shell-global.c:1395
msgid "Less than a minute ago"
msgstr "Pred manj kot eno minuto"
#: ../src/shell-global.c:1399
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "Pred %d minutami"
msgstr[1] "Pred %d minuto"
msgstr[2] "Pred %d minutama"
msgstr[3] "Pred %d minutami"
#: ../src/shell-global.c:1404
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "Pred %d urami"
msgstr[1] "Pred %d uro"
msgstr[2] "Pred %d urama"
msgstr[3] "Pred %d urami"
#: ../src/shell-global.c:1409
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "Pred %d dnevi"
msgstr[1] "Pred %d dnevom"
msgstr[2] "Pred %d dnevoma"
msgstr[3] "Pred %d dnevi"
#: ../src/shell-global.c:1414
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "Pred %d tedni"
msgstr[1] "Pred %d tednom"
msgstr[2] "Pred %d tednoma"
msgstr[3] "Pred %d tedni"
#: ../src/shell-mobile-providers.c:80
msgid "United Kingdom"
msgstr "Velika Britanija"
@@ -1195,46 +1167,96 @@ msgstr "Datotečni sistem"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "Less than a minute ago"
#~ msgstr "Pred manj kot eno minuto"
#~ msgid "%d minute ago"
#~ msgid_plural "%d minutes ago"
#~ msgstr[0] "Pred %d minutami"
#~ msgstr[1] "Pred %d minuto"
#~ msgstr[2] "Pred %d minutama"
#~ msgstr[3] "Pred %d minutami"
#~ msgid "%d hour ago"
#~ msgid_plural "%d hours ago"
#~ msgstr[0] "Pred %d urami"
#~ msgstr[1] "Pred %d uro"
#~ msgstr[2] "Pred %d urama"
#~ msgstr[3] "Pred %d urami"
#~ msgid "%d day ago"
#~ msgid_plural "%d days ago"
#~ msgstr[0] "Pred %d dnevi"
#~ msgstr[1] "Pred %d dnevom"
#~ msgstr[2] "Pred %d dnevoma"
#~ msgstr[3] "Pred %d dnevi"
#~ msgid "%d week ago"
#~ msgid_plural "%d weeks ago"
#~ msgstr[0] "Pred %d tedni"
#~ msgstr[1] "Pred %d tednom"
#~ msgstr[2] "Pred %d tednoma"
#~ msgstr[3] "Pred %d tedni"
#~ msgid "Shut Down"
#~ msgstr "Izklopi"
#~ msgid "Click Shut Down to quit these applications and shut down the system."
#~ msgstr "Kliknite Izklop za končanje teh programov in izklop sistema."
#~ msgid "The system will shut down automatically in %d seconds."
#~ msgstr "Sistem se bo samodejno izklopil čez %d sekund."
#~ msgid "Shutting down the system."
#~ msgstr "Izklapljanje sistema."
#~ msgid "Confirm"
#~ msgstr "Potrdi"
#~ msgid "Panel"
#~ msgstr "Pult"
#~ msgid "No such application"
#~ msgstr "Ni takšnega programa"
#~ msgid "Screen Reader"
#~ msgstr "Zaslonski bralnik"
#~ msgid "Screen Keyboard"
#~ msgstr "Zaslonska tipkovnica"
#~ msgid "%s is now known as %s"
#~ msgstr "%s je sedaj znan kot v %s"
#~ msgid "PREFERENCES"
#~ msgstr "Možnosti"
#~ msgid "Shut Down..."
#~ msgstr "Izklopi ..."
#~ msgid "Search your computer"
#~ msgstr "Iskanje po računalniku"
#~ msgid "Clip the crosshairs at the center"
#~ msgstr "Ali merek prekriva kazalko miške v središču"
#~ msgid "Color of the crosshairs"
#~ msgstr "Barva merka"
#~ msgid ""
#~ "Determines the length of the vertical and horizontal lines that make up "
#~ "the crosshairs."
#~ msgstr "Določi dolžino navpične in vodoravne črte, ki določata merek."
#~ msgid ""
#~ "Determines the transparency of the crosshairs, from fully opaque to fully "
#~ "transparent."
#~ msgstr "Določi prosojnost merka, od prekrivne to prozorne."
#~ msgid "Enable lens mode"
#~ msgstr "Omogočeni način leče"
#~ msgid ""
#~ "For centered mouse tracking, when the system pointer is at or near the "
#~ "edge of the screen, the magnified contents continue to scroll such that "
@@ -1243,48 +1265,63 @@ msgstr "%1$s: %2$s"
#~ "Pri usredinjenem sledenju miški, ko je sistemski kazalnik ob robu "
#~ "zaslona, približanje vsebine drsi naprej tako, da je rob zaslona v "
#~ "približanem pogledu."
#~ msgid "Length of the crosshairs"
#~ msgstr "Dolžina merka"
#~ msgid "Magnification factor"
#~ msgstr "Faktor približanja"
#~ msgid "Mouse Tracking Mode"
#~ msgstr "Način sledenja miške"
#~ msgid "Opacity of the crosshairs"
#~ msgstr "Prosojnost merka"
#~ msgid "Screen position"
#~ msgstr "Položaj zaslona"
#~ msgid "Scroll magnified contents beyond the edges of the desktop"
#~ msgstr "Zdrsni približano vsebino preko robov namizja"
#~ msgid "Show or hide crosshairs"
#~ msgstr "Pokaži ali skrij merek"
#~ msgid "Show or hide the magnifier"
#~ msgstr "Pokaži ali skrij približevalnik"
#~ msgid "Show or hide the magnifier and all of its zoom regions."
#~ msgstr "Pokaže ali skrije povečevalo in vsa njegova območja približevanja."
#~ msgid ""
#~ "The color of the the vertical and horizontal lines that make up the "
#~ "crosshairs."
#~ msgstr "Barva navpične in vodoravne črte, ki določata merek."
#~ msgid ""
#~ "The magnified view either fills the entire screen, or occupies the top-"
#~ "half, bottom-half, left-half, or right-half of the screen."
#~ msgstr ""
#~ "Približan pogled lahko zapolni celoten zaslon, lahko pa zasede zgornjo, "
#~ "spodnjo, levo ali pa desno polovico zaslona."
#~ msgid ""
#~ "The power of the magnification. A value of 1.0 means no magnification. A "
#~ "value of 2.0 doubles the size."
#~ msgstr ""
#~ "Vrednost približanja. Vrednost 1.0 pomeni brez približanja, vrednost 2.0 "
#~ "pa podvoji učinek približanja."
#~ msgid "Thickness of the crosshairs"
#~ msgstr "Debelina merka"
#~ msgid ""
#~ "Whether the magnified view should be centered over the location of the "
#~ "system mouse and move with it."
#~ msgstr ""
#~ "Ali naj bo približan pogled usredinjen na mesto sistemske miške in se z "
#~ "njo premika."
#~ msgid ""
#~ "Width of the vertical and horizontal lines that make up the crosshairs."
#~ msgstr "Širina navpične in vodoravne čete, ki določata merek."
@@ -1292,28 +1329,36 @@ msgstr "%1$s: %2$s"
#, fuzzy
#~ msgid "Bluetooth Agent"
#~ msgstr "Agent KAOS"
#~ msgid ""
#~ "Can't add a new workspace because maximum workspaces limit has been "
#~ "reached."
#~ msgstr ""
#~ "Ni mogoče dodati nove delovne površine, ker je doseženo njihovo največje "
#~ "dovoljeno število."
#~ msgid "Can't remove the first workspace."
#~ msgstr "Ni mogoče odstraniti prve delovne površine."
#~ msgid "Clock"
#~ msgstr "Ura"
#~ msgid "Customize the panel clock"
#~ msgstr "Prilagodi uro pladnja"
#~ msgid "Custom format of the clock"
#~ msgstr "Zapis ure po meri"
#~ msgid "Hour format"
#~ msgstr "Urni zapis"
#~ msgid ""
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
#~ "in time."
#~ msgstr ""
#~ "Izbrana možnost določa ali \"12-urni\" ali pa \"24-urni\" zapis časa s "
#~ "prikazanimi sekundami."
#~ msgid ""
#~ "This key specifies the format used by the panel clock when the format key "
#~ "is set to \"custom\". You can use conversion specifiers understood by "
@@ -1324,77 +1369,103 @@ msgstr "%1$s: %2$s"
#~ "zapisa nastavljen kot \"prikrojen\". Za določitev zapisa lahko uporabite "
#~ "tudi oznake funkcije strftime(), ki so podrobneje zapisane v priročniku "
#~ "funkcije."
#~ msgid ""
#~ "This key specifies the hour format used by the panel clock. Possible "
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
#~ "to the format specified in the custom_format key. Note that if set to "
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
#~ "ignored."
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
#~ "01-01. If set to \"custom\", the clock will display time according to the "
#~ "format specified in the custom_format key. Note that if set to either "
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
#~ msgstr ""
#~ "Ključ določa zapis ure. Mogoče vrednosti so \"12-urni\", \"24-urni\", "
#~ "\"unix\" in \"po meri\". Možnost \"unix\" prikazuje čas v sekundah od "
#~ "začetka ere, torej od 01.01.1970, možnost \"po meri\" pa omogoča "
#~ "prikrojen zapis. Pri izbiri zapisa \"unix\" ali \"po meri\" sta izbiri "
#~ "pokaži datum in pokaži sekunde, prezrti."
#~ msgid "Clock Format"
#~ msgstr "Zapis ure"
#~ msgid "Clock Preferences"
#~ msgstr "Možnosti ure"
#~ msgid "Panel Display"
#~ msgstr "Prikazovanje pladnja"
#~ msgid "Show seco_nds"
#~ msgstr "Pokaži _sekunde"
#~ msgid "Show the _date"
#~ msgstr "Pokaži _datum"
#~ msgid "_12 hour format"
#~ msgstr "_12-urni zapis časa"
#~ msgid "_24 hour format"
#~ msgstr "_24-urni zapis časa"
#~ msgid "Preferences"
#~ msgstr "Možnosti"
#~ msgid "What's using power..."
#~ msgstr "Kaj porablja napetost ..."
#~ msgid "Overview workspace view mode"
#~ msgstr "Način pregleda predogleda delovnih površin"
#~ msgid ""
#~ "The selected workspace view mode in the overview. Supported values are "
#~ "\"single\" and \"grid\"."
#~ msgstr ""
#~ "Izbrani pogled delovnih površin v predogledu. Podprte vrednosti sta "
#~ "\"enojno\" in \"mrežno\"."
#~ msgid "Drag here to add favorites"
#~ msgstr "S potegom na to mesto se izbor doda med priljubljene"
#~ msgid "Find"
#~ msgstr "Najdi"
#~ msgid "Invisible"
#~ msgstr "Nevidno"
#~ msgid "System Preferences..."
#~ msgstr "Sistemske možnosti ..."
#~ msgid "ON"
#~ msgstr "⚪"
#~ msgid "OFF"
#~ msgstr "⚫"
#~ msgid "Sidebar"
#~ msgstr "Stranska vrstica"
#~ msgid "Recent Documents"
#~ msgstr "Nedavni dokumenti"
#~ msgid "PLACES"
#~ msgstr "Mesta"
#~ msgid "SEARCH RESULTS"
#~ msgstr "Rezultati iskanja"
#~ msgid "Can't lock screen: %s"
#~ msgstr "Ni mogoče zakleniti zaslona: %s"
#~ msgid "Can't temporarily set screensaver to blank screen: %s"
#~ msgstr ""
#~ "Ni mogoče začasno nastaviti črnega zaslona za ohranjevalnik zaslona: %s"
#~ msgid "Can't logout: %s"
#~ msgstr "Ni se mogoče odjaviti: %s"
#~ msgid "Frequent"
#~ msgstr "Pogosto"
#~ msgid "(see all)"
#~ msgstr "(poglej vse)"
#~ msgid "Browse"
#~ msgstr "Prebrskaj"

261
po/sv.po
View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-26 23:10+0200\n"
"PO-Revision-Date: 2011-04-26 23:10+0100\n"
"POT-Creation-Date: 2011-05-01 09:53+0200\n"
"PO-Revision-Date: 2011-05-01 09:53+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@@ -146,15 +146,15 @@ msgstr "PROGRAM"
msgid "SETTINGS"
msgstr "INSTÄLLNINGAR"
#: ../js/ui/appDisplay.js:656
#: ../js/ui/appDisplay.js:658
msgid "New Window"
msgstr "Nytt fönster"
#: ../js/ui/appDisplay.js:659
#: ../js/ui/appDisplay.js:661
msgid "Remove from Favorites"
msgstr "Ta bort från favoriter"
#: ../js/ui/appDisplay.js:660
#: ../js/ui/appDisplay.js:662
msgid "Add to Favorites"
msgstr "Lägg till som favorit"
@@ -288,14 +288,14 @@ msgstr "Ingenting i schemat"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720
#: ../js/ui/telepathyClient.js:492
#: ../js/ui/telepathyClient.js:487
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:723
#: ../js/ui/telepathyClient.js:495
#: ../js/ui/telepathyClient.js:490
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d %B, %Y"
@@ -447,7 +447,7 @@ msgstr "Starta om systemet."
#: ../js/ui/endSessionDialog.js:413
#: ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
#: ../js/ui/status/bluetooth.js:491
msgid "Cancel"
msgstr "Avbryt"
@@ -516,11 +516,11 @@ msgstr "Avsluta %s"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:911
#: ../js/ui/panel.js:913
msgid "Activities"
msgstr "Aktiviteter"
#: ../js/ui/panel.js:1012
#: ../js/ui/panel.js:1015
msgid "Top Bar"
msgstr "Övre rad"
@@ -578,11 +578,11 @@ msgstr "toggle-switch-intl"
msgid "Please enter a command:"
msgstr "Ange ett kommando:"
#: ../js/ui/searchDisplay.js:311
#: ../js/ui/searchDisplay.js:313
msgid "Searching..."
msgstr "Söker..."
#: ../js/ui/searchDisplay.js:325
#: ../js/ui/searchDisplay.js:327
msgid "No matching results."
msgstr "Inga sökträffar."
@@ -668,11 +668,11 @@ msgid "Large Text"
msgstr "Stor text"
#: ../js/ui/status/bluetooth.js:42
#: ../js/ui/status/bluetooth.js:237
#: ../js/ui/status/bluetooth.js:333
#: ../js/ui/status/bluetooth.js:367
#: ../js/ui/status/bluetooth.js:407
#: ../js/ui/status/bluetooth.js:440
#: ../js/ui/status/bluetooth.js:264
#: ../js/ui/status/bluetooth.js:358
#: ../js/ui/status/bluetooth.js:392
#: ../js/ui/status/bluetooth.js:432
#: ../js/ui/status/bluetooth.js:465
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -685,103 +685,103 @@ msgid "Send Files to Device..."
msgstr "Skicka filer till enhet..."
#: ../js/ui/status/bluetooth.js:70
msgid "Setup a New Device..."
msgid "Set up a New Device..."
msgstr "Konfigurera en ny enhet..."
#: ../js/ui/status/bluetooth.js:95
msgid "Bluetooth Settings"
msgstr "Inställningar för Bluetooth"
#: ../js/ui/status/bluetooth.js:188
#: ../js/ui/status/bluetooth.js:215
msgid "Connection"
msgstr "Anslutning"
#: ../js/ui/status/bluetooth.js:224
#: ../js/ui/status/bluetooth.js:251
msgid "Send Files..."
msgstr "Skicka filer..."
#: ../js/ui/status/bluetooth.js:229
#: ../js/ui/status/bluetooth.js:256
msgid "Browse Files..."
msgstr "Bläddra efter filer..."
#: ../js/ui/status/bluetooth.js:238
#: ../js/ui/status/bluetooth.js:265
msgid "Error browsing device"
msgstr "Fel vid bläddring i enheten"
#: ../js/ui/status/bluetooth.js:239
#: ../js/ui/status/bluetooth.js:266
#, c-format
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "Den begärda enheten kan inte bläddras. Felet är \"%s\""
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:274
msgid "Keyboard Settings"
msgstr "Tangentbordsinställningar"
#: ../js/ui/status/bluetooth.js:252
#: ../js/ui/status/bluetooth.js:279
msgid "Mouse Settings"
msgstr "Musinställningar"
#: ../js/ui/status/bluetooth.js:259
#: ../js/ui/status/bluetooth.js:286
#: ../js/ui/status/volume.js:66
msgid "Sound Settings"
msgstr "Ljudinställningar"
#: ../js/ui/status/bluetooth.js:368
#: ../js/ui/status/bluetooth.js:393
#, c-format
msgid "Authorization request from %s"
msgstr "Auktoriseringsbegäran från %s"
#: ../js/ui/status/bluetooth.js:374
#: ../js/ui/status/bluetooth.js:399
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "Enheten %s vill ha åtkomst till tjänsten \"%s\""
#: ../js/ui/status/bluetooth.js:376
#: ../js/ui/status/bluetooth.js:401
msgid "Always grant access"
msgstr "Tillåt alltid åtkomst"
#: ../js/ui/status/bluetooth.js:377
#: ../js/ui/status/bluetooth.js:402
msgid "Grant this time only"
msgstr "Tillåt för denna gång"
#: ../js/ui/status/bluetooth.js:378
#: ../js/ui/status/bluetooth.js:403
msgid "Reject"
msgstr "Neka"
#: ../js/ui/status/bluetooth.js:408
#: ../js/ui/status/bluetooth.js:433
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Bekräftelse av ihopparning för %s"
#: ../js/ui/status/bluetooth.js:414
#: ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:439
#: ../js/ui/status/bluetooth.js:473
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Enheten %s vill paras ihop med denna dator"
#: ../js/ui/status/bluetooth.js:415
#: ../js/ui/status/bluetooth.js:440
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "Bekräfta huruvida PIN-koden \"%s\" stämmer med den på enheten."
#: ../js/ui/status/bluetooth.js:417
#: ../js/ui/status/bluetooth.js:442
msgid "Matches"
msgstr "Stämmer"
#: ../js/ui/status/bluetooth.js:418
#: ../js/ui/status/bluetooth.js:443
msgid "Does not match"
msgstr "Stämmer inte"
#: ../js/ui/status/bluetooth.js:441
#: ../js/ui/status/bluetooth.js:466
#, c-format
msgid "Pairing request for %s"
msgstr "Ihopparningsbegäran för %s"
#: ../js/ui/status/bluetooth.js:449
#: ../js/ui/status/bluetooth.js:474
msgid "Please enter the PIN mentioned on the device."
msgstr "Ange PIN-koden som anges på enheten."
#: ../js/ui/status/bluetooth.js:465
#: ../js/ui/status/bluetooth.js:490
msgid "OK"
msgstr "OK"
@@ -793,142 +793,141 @@ msgstr "Visa tangentbordslayout..."
msgid "Localization Settings"
msgstr "Språkinställningar"
#: ../js/ui/status/network.js:109
#: ../js/ui/status/network.js:1501
#: ../js/ui/status/network.js:113
msgid "<unknown>"
msgstr "<okänd>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:326
#: ../js/ui/status/network.js:330
msgid "disabled"
msgstr "inaktiverad"
#: ../js/ui/status/network.js:524
#: ../js/ui/status/network.js:528
msgid "connecting..."
msgstr "ansluter..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:527
#: ../js/ui/status/network.js:531
msgid "authentication required"
msgstr "autentisering krävs"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:537
#: ../js/ui/status/network.js:541
msgid "firmware missing"
msgstr "fast programvara saknas"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:544
#: ../js/ui/status/network.js:548
msgid "cable unplugged"
msgstr "kabeln är inte ansluten"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:549
#: ../js/ui/status/network.js:553
msgid "unavailable"
msgstr "inte tillgänglig"
#: ../js/ui/status/network.js:551
#: ../js/ui/status/network.js:555
msgid "connection failed"
msgstr "anslutningen misslyckades"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:631
#: ../js/ui/status/network.js:1449
#: ../js/ui/status/network.js:635
#: ../js/ui/status/network.js:1532
msgid "Connected (private)"
msgstr "Ansluten (privat)"
#: ../js/ui/status/network.js:716
#: ../js/ui/status/network.js:720
msgid "Auto Ethernet"
msgstr "Automatiskt ethernet"
#: ../js/ui/status/network.js:791
#: ../js/ui/status/network.js:795
msgid "Auto broadband"
msgstr "Automatiskt bredband"
#: ../js/ui/status/network.js:794
#: ../js/ui/status/network.js:798
msgid "Auto dial-up"
msgstr "Automatiskt uppringt nätverk"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:940
#: ../js/ui/status/network.js:1461
#: ../js/ui/status/network.js:944
#: ../js/ui/status/network.js:1544
#, c-format
msgid "Auto %s"
msgstr "Automatiskt %s"
#: ../js/ui/status/network.js:942
#: ../js/ui/status/network.js:946
msgid "Auto bluetooth"
msgstr "Automatisk Bluetooth"
#: ../js/ui/status/network.js:1463
#: ../js/ui/status/network.js:1546
msgid "Auto wireless"
msgstr "Automatiskt trådlöst nätverk"
#: ../js/ui/status/network.js:1521
#: ../js/ui/status/network.js:1583
msgid "More..."
msgstr "Mer..."
#: ../js/ui/status/network.js:1544
#: ../js/ui/status/network.js:1625
msgid "Enable networking"
msgstr "Aktivera nätverk"
#: ../js/ui/status/network.js:1556
#: ../js/ui/status/network.js:1637
msgid "Wired"
msgstr "Trådbundet"
#: ../js/ui/status/network.js:1567
#: ../js/ui/status/network.js:1648
msgid "Wireless"
msgstr "Trådlöst"
#: ../js/ui/status/network.js:1577
#: ../js/ui/status/network.js:1658
msgid "Mobile broadband"
msgstr "Mobilt bredband"
#: ../js/ui/status/network.js:1587
#: ../js/ui/status/network.js:1668
msgid "VPN Connections"
msgstr "VPN-anslutningar"
#: ../js/ui/status/network.js:1599
#: ../js/ui/status/network.js:1680
msgid "Network Settings"
msgstr "Nätverksinställningar"
#: ../js/ui/status/network.js:1893
#: ../js/ui/status/network.js:1974
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Du är nu ansluten till mobila bredbandsanslutningen \"%s\""
#: ../js/ui/status/network.js:1897
#: ../js/ui/status/network.js:1978
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Du är nu ansluten till trådlösa nätverket \"%s\""
#: ../js/ui/status/network.js:1901
#: ../js/ui/status/network.js:1982
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Du är nu ansluten till trådbundna nätverket \"%s\""
#: ../js/ui/status/network.js:1905
#: ../js/ui/status/network.js:1986
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Du är nu ansluten till VPN-nätverket \"%s\""
#: ../js/ui/status/network.js:1910
#: ../js/ui/status/network.js:1991
#, c-format
msgid "You're now connected to '%s'"
msgstr "Du är nu ansluten till \"%s\""
#: ../js/ui/status/network.js:1918
#: ../js/ui/status/network.js:1999
msgid "Connection established"
msgstr "Anslutningen etablerad"
#: ../js/ui/status/network.js:2044
#: ../js/ui/status/network.js:2125
msgid "Networking is disabled"
msgstr "Nätverk är inaktiverat"
#: ../js/ui/status/network.js:2169
#: ../js/ui/status/network.js:2250
msgid "Network Manager"
msgstr "Nätverkshanterare"
@@ -1031,22 +1030,22 @@ msgstr "Volym"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/telepathyClient.js:335
#: ../js/ui/telepathyClient.js:330
#, c-format
msgid "%s is online."
msgstr "%s är ansluten."
#: ../js/ui/telepathyClient.js:340
#: ../js/ui/telepathyClient.js:335
#, c-format
msgid "%s is offline."
msgstr "%s är frånkopplad."
#: ../js/ui/telepathyClient.js:343
#: ../js/ui/telepathyClient.js:338
#, c-format
msgid "%s is away."
msgstr "%s är frånvarande."
#: ../js/ui/telepathyClient.js:346
#: ../js/ui/telepathyClient.js:341
#, c-format
msgid "%s is busy."
msgstr "%s är upptagen."
@@ -1054,11 +1053,18 @@ msgstr "%s är upptagen."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:484
#: ../js/ui/telepathyClient.js:479
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Skickades klockan %X på %A"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:524
#, c-format
msgid "%s is now known as %s"
msgstr "%s är nu känd som %s"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@@ -1113,38 +1119,6 @@ msgstr "Skriv ut version"
msgid "Failed to launch '%s'"
msgstr "Misslyckades med att starta \"%s\""
#: ../src/shell-global.c:1395
msgid "Less than a minute ago"
msgstr "Mindre än en minut sedan"
#: ../src/shell-global.c:1399
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d minut sedan"
msgstr[1] "%d minuter sedan"
#: ../src/shell-global.c:1404
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d timme sedan"
msgstr[1] "%d timmar sedan"
#: ../src/shell-global.c:1409
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d dag sedan"
msgstr[1] "%d dagar sedan"
#: ../src/shell-global.c:1414
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d vecka sedan"
msgstr[1] "%d veckor sedan"
#: ../src/shell-mobile-providers.c:80
msgid "United Kingdom"
msgstr "Storbritannien"
@@ -1177,6 +1151,33 @@ msgstr "Filsystem"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "Less than a minute ago"
#~ msgstr "Mindre än en minut sedan"
#~ msgid "%d minute ago"
#~ msgid_plural "%d minutes ago"
#~ msgstr[0] "%d minut sedan"
#~ msgstr[1] "%d minuter sedan"
#~ msgid "%d hour ago"
#~ msgid_plural "%d hours ago"
#~ msgstr[0] "%d timme sedan"
#~ msgstr[1] "%d timmar sedan"
#~ msgid "%d day ago"
#~ msgid_plural "%d days ago"
#~ msgstr[0] "%d dag sedan"
#~ msgstr[1] "%d dagar sedan"
#~ msgid "%d week ago"
#~ msgid_plural "%d weeks ago"
#~ msgstr[0] "%d vecka sedan"
#~ msgstr[1] "%d veckor sedan"
#, fuzzy
#~ msgid "No such application"
#~ msgstr "Program"
@@ -1184,90 +1185,128 @@ msgstr "%1$s: %2$s"
#, fuzzy
#~ msgid "Shut Down"
#~ msgstr "Stäng av..."
#~ msgid "Screen Reader"
#~ msgstr "Skärmläsare"
#~ msgid "Screen Keyboard"
#~ msgstr "Skärmtangentbord"
#~ msgid "Clock"
#~ msgstr "Klocka"
#~ msgid "Customize the panel clock"
#~ msgstr "Anpassa panelklockan"
#~ msgid "Custom format of the clock"
#~ msgstr "Anpassat format för klockan"
#~ msgid "Hour format"
#~ msgstr "Timmesformat"
#~ msgid ""
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
#~ "in time."
#~ msgstr ""
#~ "Om true och formatet antingen är \"12-hour\" eller \"24-hour\", visa "
#~ "sekunder i tiden."
#~ msgid "Enable lens mode"
#~ msgstr "Aktivera linsläge"
#~ msgid "Magnification factor"
#~ msgstr "Förstoringsfaktor"
#~ msgid "Screen position"
#~ msgstr "Skärmposition"
#~ msgid "Clock Format"
#~ msgstr "Klockformat"
#~ msgid "Clock Preferences"
#~ msgstr "Klockinställningar"
#~ msgid "Panel Display"
#~ msgstr "Panelvisning"
#~ msgid "Show seco_nds"
#~ msgstr "Visa seku_nder"
#~ msgid "Show the _date"
#~ msgstr "Visa _datum"
#~ msgid "_12 hour format"
#~ msgstr "_12-timmarsformat"
#~ msgid "_24 hour format"
#~ msgstr "_24-timmarsformat"
#~ msgid "PREFERENCES"
#~ msgstr "INSTÄLLNINGAR"
#~ msgid "Preferences"
#~ msgstr "Inställningar"
#~ msgid "Search your computer"
#~ msgstr "Sök i din dator"
#~ msgid ""
#~ "Can't add a new workspace because maximum workspaces limit has been "
#~ "reached."
#~ msgstr ""
#~ "Kan inte lägga till en ny arbetsyta eftersom maximalt antal arbetsytor "
#~ "har uppnåtts."
#~ msgid "Can't remove the first workspace."
#~ msgstr "Kan inte ta bort första arbetsytan."
#~ msgid "Drag here to add favorites"
#~ msgstr "Dra hit för att lägga till favorit"
#~ msgid "Find"
#~ msgstr "Sök"
#~ msgid "ON"
#~ msgstr "PÅ"
#~ msgid "OFF"
#~ msgstr "AV"
#~ msgid "Invisible"
#~ msgstr "Osynlig"
#~ msgid "PLACES"
#~ msgstr "PLATSER"
#~ msgid "SEARCH RESULTS"
#~ msgstr "SÖKRESULTAT"
#~ msgid "Recent Documents"
#~ msgstr "Senaste dokument"
#~ msgid "(see all)"
#~ msgstr "(se alla)"
#~ msgid "Can't lock screen: %s"
#~ msgstr "Kan inte låsa skärmen: %s"
#~ msgid "Can't temporarily set screensaver to blank screen: %s"
#~ msgstr "Kan inte temporärt ställa in skärmsläckaren till blank skärm: %s"
#~ msgid "Can't logout: %s"
#~ msgstr "Kan inte logga ut: %s"
#~ msgid "Sidebar"
#~ msgstr "Sidopanel"
#~ msgid "Browse"
#~ msgstr "Bläddra"
#~ msgid "Find apps or documents"
#~ msgstr "Hitta program eller dokument"
#~ msgid "DOCUMENTS"
#~ msgstr "DOKUMENT"
#~ msgid "The user manager object this user is controlled by."
#~ msgstr "Användarhanteringsobjektet som denna användare styrs av."

234
po/uk.po
View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-27 18:25+0300\n"
"PO-Revision-Date: 2011-03-27 18:27+0300\n"
"POT-Creation-Date: 2011-05-02 02:44+0300\n"
"PO-Revision-Date: 2011-05-02 02:46+0300\n"
"Last-Translator: Korostil Daniel <ted.korostiled@gmail.com>\n"
"Language-Team: translation@linux.org.ua\n"
"Language: uk\n"
@@ -98,7 +98,7 @@ msgstr ""
"Вказує канал даних GStreamer для кодування запису. Звідси відповідний "
"синтаксис для gst-launch. Канал даних повинен мати нез'єднаний приймальний "
"буфер, де відео записано. Зазвичай воно має нез'єднане джерело буфера; вивід "
"з цього буфера буде записано в вихідний файл. Однак канал даних також "
"з цього буфера буде записано в вихідний файл. Однак канал даних також "
"відповідати за власний вивід — це може бути використано для відправлення "
"виводу до сервера через протокол shout2send чи будь-який інший. Коли не "
"вказано або вказано порожнє значення, буде використано типовий канал даних. "
@@ -189,27 +189,27 @@ msgid "Execution of '%s' failed:"
msgstr "Не вдалось виконати «%s»:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:230
#: ../js/ui/appDisplay.js:260
msgid "All"
msgstr "Всі"
#: ../js/ui/appDisplay.js:328
#: ../js/ui/appDisplay.js:359
msgid "APPLICATIONS"
msgstr "ПРОГРАМИ"
#: ../js/ui/appDisplay.js:354
#: ../js/ui/appDisplay.js:385
msgid "SETTINGS"
msgstr "ПАРАМЕТРИ"
#: ../js/ui/appDisplay.js:625
#: ../js/ui/appDisplay.js:658
msgid "New Window"
msgstr "Нове вікно"
#: ../js/ui/appDisplay.js:628
#: ../js/ui/appDisplay.js:661
msgid "Remove from Favorites"
msgstr "Вилучити з улюбленого"
#: ../js/ui/appDisplay.js:629
#: ../js/ui/appDisplay.js:662
msgid "Add to Favorites"
msgstr "Додати до улюбленого"
@@ -342,13 +342,13 @@ msgid "Nothing Scheduled"
msgstr "Нічого не заплановано"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:487
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:723
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:490
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y"
@@ -369,7 +369,7 @@ msgstr "Цей тиждень"
msgid "Next week"
msgstr "Наступний тиждень"
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1000
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
msgid "Remove"
msgstr "Вилучити"
@@ -495,8 +495,8 @@ msgstr "Система автоматично перезапуститься ч
msgid "Restarting the system."
msgstr "Перезапуск системи."
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:491
msgid "Cancel"
msgstr "Скасувати"
@@ -530,11 +530,11 @@ msgstr "Переглянути джерело"
msgid "Web Page"
msgstr "Веб-сторінка"
#: ../js/ui/messageTray.js:993
#: ../js/ui/messageTray.js:1030
msgid "Open"
msgstr "Відкрити"
#: ../js/ui/messageTray.js:2151
#: ../js/ui/messageTray.js:2194
msgid "System Information"
msgstr "Інформація про систему"
@@ -557,18 +557,18 @@ msgid "Dash"
msgstr "Риска"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:515
#: ../js/ui/panel.js:533
#, c-format
msgid "Quit %s"
msgstr "Вийти з %s"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:878
#: ../js/ui/panel.js:913
msgid "Activities"
msgstr "Діяльність"
#: ../js/ui/panel.js:979
#: ../js/ui/panel.js:1015
msgid "Top Bar"
msgstr "Верхня панель"
@@ -626,11 +626,11 @@ msgstr "toggle-switch-intl"
msgid "Please enter a command:"
msgstr "Будь ласка, введіть команду:"
#: ../js/ui/searchDisplay.js:310
#: ../js/ui/searchDisplay.js:313
msgid "Searching..."
msgstr "Пошук…"
#: ../js/ui/searchDisplay.js:324
#: ../js/ui/searchDisplay.js:327
msgid "No matching results."
msgstr "Нема збігів."
@@ -713,9 +713,9 @@ msgstr "Висока контрастність"
msgid "Large Text"
msgstr "Більший текст"
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:264
#: ../js/ui/status/bluetooth.js:358 ../js/ui/status/bluetooth.js:392
#: ../js/ui/status/bluetooth.js:432 ../js/ui/status/bluetooth.js:465
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -728,101 +728,101 @@ msgid "Send Files to Device..."
msgstr "Відправити файли до пристрою…"
#: ../js/ui/status/bluetooth.js:70
msgid "Setup a New Device..."
msgid "Set up a New Device..."
msgstr "Встановити новий пристрій…"
#: ../js/ui/status/bluetooth.js:95
msgid "Bluetooth Settings"
msgstr "Параметри Bluetooth"
#: ../js/ui/status/bluetooth.js:188
#: ../js/ui/status/bluetooth.js:215
msgid "Connection"
msgstr "З'єднання"
#: ../js/ui/status/bluetooth.js:224
#: ../js/ui/status/bluetooth.js:251
msgid "Send Files..."
msgstr "Відправити файли…"
#: ../js/ui/status/bluetooth.js:229
#: ../js/ui/status/bluetooth.js:256
msgid "Browse Files..."
msgstr "Огляд файлів…"
#: ../js/ui/status/bluetooth.js:238
#: ../js/ui/status/bluetooth.js:265
msgid "Error browsing device"
msgstr "Помилка перегляду пристрою…"
#: ../js/ui/status/bluetooth.js:239
#: ../js/ui/status/bluetooth.js:266
#, c-format
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "Потрібний пристрій неможливо переглянути, помилка — «%s»"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:274
msgid "Keyboard Settings"
msgstr "Параметри клавіатури"
#: ../js/ui/status/bluetooth.js:252
#: ../js/ui/status/bluetooth.js:279
msgid "Mouse Settings"
msgstr "Параметри миші"
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
#: ../js/ui/status/bluetooth.js:286 ../js/ui/status/volume.js:66
msgid "Sound Settings"
msgstr "Параметри звуку"
#: ../js/ui/status/bluetooth.js:368
#: ../js/ui/status/bluetooth.js:393
#, c-format
msgid "Authorization request from %s"
msgstr "Запит про авторизацію від %s"
#: ../js/ui/status/bluetooth.js:374
#: ../js/ui/status/bluetooth.js:399
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "Пристрій %s потребує доступ до служби «%s»"
#: ../js/ui/status/bluetooth.js:376
#: ../js/ui/status/bluetooth.js:401
msgid "Always grant access"
msgstr "Завжди надавати доступ"
#: ../js/ui/status/bluetooth.js:377
#: ../js/ui/status/bluetooth.js:402
msgid "Grant this time only"
msgstr "Надати лише цього разу"
#: ../js/ui/status/bluetooth.js:378
#: ../js/ui/status/bluetooth.js:403
msgid "Reject"
msgstr "Відмовити"
#: ../js/ui/status/bluetooth.js:408
#: ../js/ui/status/bluetooth.js:433
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Сполучення підтвердження для %s"
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:439 ../js/ui/status/bluetooth.js:473
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Пристрій %s потребує прив'язання до цього комп'ютера"
#: ../js/ui/status/bluetooth.js:415
#: ../js/ui/status/bluetooth.js:440
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "Будь ласка, підвердьте, чи «%s» збігається з PIN на пристрої."
#: ../js/ui/status/bluetooth.js:417
#: ../js/ui/status/bluetooth.js:442
msgid "Matches"
msgstr "Збігається"
#: ../js/ui/status/bluetooth.js:418
#: ../js/ui/status/bluetooth.js:443
msgid "Does not match"
msgstr "Не збігається"
#: ../js/ui/status/bluetooth.js:441
#: ../js/ui/status/bluetooth.js:466
#, c-format
msgid "Pairing request for %s"
msgstr "Запит на сполучення для %s"
#: ../js/ui/status/bluetooth.js:449
#: ../js/ui/status/bluetooth.js:474
msgid "Please enter the PIN mentioned on the device."
msgstr "Будь ласка, введіть PIN, згаданий на пристрої."
#: ../js/ui/status/bluetooth.js:465
#: ../js/ui/status/bluetooth.js:490
msgid "OK"
msgstr "Гаразд"
@@ -834,139 +834,139 @@ msgstr "Показувати розкладку клавіатури…"
msgid "Localization Settings"
msgstr "Параметри локалізації"
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1454
#: ../js/ui/status/network.js:113
msgid "<unknown>"
msgstr "<невідомо>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:311
#: ../js/ui/status/network.js:330
msgid "disabled"
msgstr "вимкнено"
#: ../js/ui/status/network.js:494
#: ../js/ui/status/network.js:528
msgid "connecting..."
msgstr "з'єднання…"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:497
#: ../js/ui/status/network.js:531
msgid "authentication required"
msgstr "Потрібна аутентифікація"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:507
#: ../js/ui/status/network.js:541
msgid "firmware missing"
msgstr "Бракує мікропрограми"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:514
#: ../js/ui/status/network.js:548
msgid "cable unplugged"
msgstr "кабель від'єднано"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:519
#: ../js/ui/status/network.js:553
msgid "unavailable"
msgstr "недоступний"
#: ../js/ui/status/network.js:521
#: ../js/ui/status/network.js:555
msgid "connection failed"
msgstr "не вдалось з'єднатись"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:602 ../js/ui/status/network.js:1402
#: ../js/ui/status/network.js:635 ../js/ui/status/network.js:1532
msgid "Connected (private)"
msgstr "З'єднано (приватно)"
#: ../js/ui/status/network.js:683
#: ../js/ui/status/network.js:720
msgid "Auto Ethernet"
msgstr "Автоматично Ethernet"
#: ../js/ui/status/network.js:758
#: ../js/ui/status/network.js:795
msgid "Auto broadband"
msgstr "Автоматично радіомережа"
#: ../js/ui/status/network.js:761
#: ../js/ui/status/network.js:798
msgid "Auto dial-up"
msgstr "Автоматично додзвін"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:904 ../js/ui/status/network.js:1414
#: ../js/ui/status/network.js:944 ../js/ui/status/network.js:1544
#, c-format
msgid "Auto %s"
msgstr "Автоматично %s"
#: ../js/ui/status/network.js:906
#: ../js/ui/status/network.js:946
msgid "Auto bluetooth"
msgstr "Автоматично Bluetooth"
#: ../js/ui/status/network.js:1416
#: ../js/ui/status/network.js:1546
msgid "Auto wireless"
msgstr "Автоматично бездротова мережа"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1583
msgid "More..."
msgstr "Більше…"
#: ../js/ui/status/network.js:1497
#: ../js/ui/status/network.js:1625
msgid "Enable networking"
msgstr "Увімкнути мережу"
#: ../js/ui/status/network.js:1509
#: ../js/ui/status/network.js:1637
msgid "Wired"
msgstr "Дротова"
#: ../js/ui/status/network.js:1520
#: ../js/ui/status/network.js:1648
msgid "Wireless"
msgstr "Бездротова"
#: ../js/ui/status/network.js:1530
#: ../js/ui/status/network.js:1658
msgid "Mobile broadband"
msgstr "Мобільна радіомережа"
#: ../js/ui/status/network.js:1540
#: ../js/ui/status/network.js:1668
msgid "VPN Connections"
msgstr "З'єднання VPN"
#: ../js/ui/status/network.js:1549
#: ../js/ui/status/network.js:1680
msgid "Network Settings"
msgstr "Налаштування мережі"
#: ../js/ui/status/network.js:1844
#: ../js/ui/status/network.js:1974
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Зараз ви з'єднані через мобільну радіомережу «%s»"
#: ../js/ui/status/network.js:1848
#: ../js/ui/status/network.js:1978
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Зараз ви з'єднані через бездротову мережу «%s»"
#: ../js/ui/status/network.js:1852
#: ../js/ui/status/network.js:1982
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Зараз ви з'єднані через дротову мережу «%s»"
#: ../js/ui/status/network.js:1856
#: ../js/ui/status/network.js:1986
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Зараз ви з'єднані через мережу VPN «%s»"
#: ../js/ui/status/network.js:1861
#: ../js/ui/status/network.js:1991
#, c-format
msgid "You're now connected to '%s'"
msgstr "Зараз ви з'єднані через «%s»"
#: ../js/ui/status/network.js:1869
#: ../js/ui/status/network.js:1999
msgid "Connection established"
msgstr "З'єднання встановлено"
#: ../js/ui/status/network.js:1991
#: ../js/ui/status/network.js:2125
msgid "Networking is disabled"
msgstr "Мережу вимкнено"
#: ../js/ui/status/network.js:2116
#: ../js/ui/status/network.js:2250
msgid "Network Manager"
msgstr "Керування мережею"
@@ -1072,22 +1072,22 @@ msgstr "Гучність"
msgid "Microphone"
msgstr "Мікрофон"
#: ../js/ui/telepathyClient.js:331
#: ../js/ui/telepathyClient.js:330
#, c-format
msgid "%s is online."
msgstr "%s в мережі."
#: ../js/ui/telepathyClient.js:336
#: ../js/ui/telepathyClient.js:335
#, c-format
msgid "%s is offline."
msgstr "%s поза мережею."
#: ../js/ui/telepathyClient.js:339
#: ../js/ui/telepathyClient.js:338
#, c-format
msgid "%s is away."
msgstr "%s відійшов."
#: ../js/ui/telepathyClient.js:342
#: ../js/ui/telepathyClient.js:341
#, c-format
msgid "%s is busy."
msgstr "%s зайнятий."
@@ -1095,11 +1095,18 @@ msgstr "%s зайнятий."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:473
#: ../js/ui/telepathyClient.js:479
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Відправити на %X в %A"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:524
#, c-format
msgid "%s is now known as %s"
msgstr "%s тепер відомий як %s"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@@ -1146,7 +1153,7 @@ msgstr[2] "%u входів"
msgid "System Sounds"
msgstr "Системні звуки"
#: ../src/main.c:446
#: ../src/main.c:445
msgid "Print version"
msgstr "Показати версію"
@@ -1155,42 +1162,6 @@ msgstr "Показати версію"
msgid "Failed to launch '%s'"
msgstr "Не вдалось запустити «%s»"
#: ../src/shell-global.c:1395
msgid "Less than a minute ago"
msgstr "Менше хвилини тому"
#: ../src/shell-global.c:1399
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d хвилина тому"
msgstr[1] "%d хвилини тому"
msgstr[2] "%d хвилин тому"
#: ../src/shell-global.c:1404
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d година тому"
msgstr[1] "%d години тому"
msgstr[2] "%d годин тому"
#: ../src/shell-global.c:1409
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d день тому"
msgstr[1] "%d дні тому"
msgstr[2] "%d днів тому"
#: ../src/shell-global.c:1414
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d тиждень тому"
msgstr[1] "%d тижні тому"
msgstr[2] "%d тижнів тому"
#: ../src/shell-mobile-providers.c:80
msgid "United Kingdom"
msgstr "Великобританія"
@@ -1223,6 +1194,33 @@ msgstr "Файлова система"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "Less than a minute ago"
#~ msgstr "Менше хвилини тому"
#~ msgid "%d minute ago"
#~ msgid_plural "%d minutes ago"
#~ msgstr[0] "%d хвилина тому"
#~ msgstr[1] "%d хвилини тому"
#~ msgstr[2] "%d хвилин тому"
#~ msgid "%d hour ago"
#~ msgid_plural "%d hours ago"
#~ msgstr[0] "%d година тому"
#~ msgstr[1] "%d години тому"
#~ msgstr[2] "%d годин тому"
#~ msgid "%d day ago"
#~ msgid_plural "%d days ago"
#~ msgstr[0] "%d день тому"
#~ msgstr[1] "%d дні тому"
#~ msgstr[2] "%d днів тому"
#~ msgid "%d week ago"
#~ msgid_plural "%d weeks ago"
#~ msgstr[0] "%d тиждень тому"
#~ msgstr[1] "%d тижні тому"
#~ msgstr[2] "%d тижнів тому"
#~ msgid "Shut Down"
#~ msgstr "Вимкнути"

View File

@@ -9,7 +9,7 @@ msgstr ""
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-03-25 20:20+0000\n"
"PO-Revision-Date: 2011-05-22 21:50+0700\n"
"PO-Revision-Date: 2011-04-12 18:34+0700\n"
"Last-Translator: Duy <pclouds@gmail.com>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
"MIME-Version: 1.0\n"
@@ -551,7 +551,7 @@ msgstr "Ứng dụng"
#. the left of the overview
#: ../js/ui/overview.js:205
msgid "Dash"
msgstr "Neo ứng dụng"
msgstr "Khung ứng dụng"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:515

View File

@@ -100,6 +100,7 @@ shell_public_headers_h = \
shell-perf-log.h \
shell-slicer.h \
shell-stack.h \
shell-tp-client.h \
shell-tray-icon.h \
shell-tray-manager.h \
shell-util.h \
@@ -134,6 +135,7 @@ libgnome_shell_la_SOURCES = \
shell-polkit-authentication-agent.c \
shell-slicer.c \
shell-stack.c \
shell-tp-client.c \
shell-tray-icon.c \
shell-tray-manager.c \
shell-util.c \
@@ -184,27 +186,10 @@ gnome_shell_perf_helper_LDADD = $(SHELL_PERF_HELPER_LIBS)
########################################
# In order to run the interactive tests for GUI components, we need to have
# an executable that exports the St components. Libtool doesn't have a way
# to include all the symbols from a convenience library into a executable
# so what we do is build a small uninstalled library that pulls in the
# St convenience library and link the test running program to that.
noinst_LTLIBRARIES += libjs-test.la
libjs_test_la_LDFLAGS = -rpath $(libdir)
libjs_test_la_CPPFLAGS = $(JS_TEST_CFLAGS)
libjs_test_la_LIBADD = $(JS_TEST_LIBS) libst-1.0.la
# The tests use or reference a couple of Shell classes
libjs_test_la_SOURCES = \
shell-generic-container.c \
shell-perf-log.c
noinst_PROGRAMS += run-js-test
run_js_test_CPPFLAGS = $(JS_TEST_CFLAGS)
run_js_test_LDADD = $(JS_TEST_LIBS) libjs-test.la
run_js_test_CPPFLAGS = $(gnome_shell_cflags)
run_js_test_LDADD = libgnome-shell.la $(libgnome_shell_la_LIBADD)
run_js_test_LDFLAGS = -export-dynamic
run_js_test_SOURCES = \

View File

@@ -178,7 +178,8 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
gjs_context = _shell_global_get_gjs_context (shell_plugin->global);
if (!gjs_context_eval (gjs_context,
"const Main = imports.ui.main; Main.start();",
"imports.ui.environment.init();"
"imports.ui.main.start();",
-1,
"<main>",
&status,

View File

@@ -458,6 +458,7 @@ main (int argc, char **argv)
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
ctx = meta_get_option_context ();
g_option_context_add_main_entries (ctx, gnome_shell_options, GETTEXT_PACKAGE);

View File

@@ -24,15 +24,19 @@
* IN THE SOFTWARE.
*/
#include <config.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include <clutter/x11/clutter-x11.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
#include "config.h"
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#include <clutter/x11/clutter-x11.h>
#include <gdk/gdkx.h>
#include <gjs/gjs.h>
#include <gtk/gtk.h>
#include "shell-global.h"
#include "shell-global-private.h"
static char **include_path = NULL;
static char *command = NULL;
@@ -59,10 +63,10 @@ event_filter (GdkXEvent *xevent,
int
main(int argc, char **argv)
{
char *command_line;
GOptionContext *context;
ClutterActor *stage;
GError *error = NULL;
ShellGlobal *global;
GjsContext *js_context;
char *script;
const char *filename;
@@ -94,12 +98,8 @@ main(int argc, char **argv)
setlocale (LC_ALL, "");
g_type_init ();
command_line = g_strjoinv (" ", argv);
g_debug ("Command line: %s", command_line);
g_free (command_line);
g_debug ("Creating new context to eval console script");
js_context = gjs_context_new_with_search_path (include_path);
global = shell_global_get ();
js_context = _shell_global_get_gjs_context (global);
/* prepare command line arguments */
if (!gjs_context_define_string_array (js_context, "ARGV",

View File

@@ -22,9 +22,6 @@
#include <gio/gio.h>
#include <gjs/gjs-module.h>
#include <girepository.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xmlmemory.h>
#include <meta/display.h>
#include <meta/util.h>
@@ -417,31 +414,6 @@ shell_global_class_init (ShellGlobalClass *klass)
G_PARAM_READABLE));
}
/**
* shell_clutter_texture_set_from_pixbuf:
* texture: #ClutterTexture to be modified
* pixbuf: #GdkPixbuf to set as an image for #ClutterTexture
*
* Convenience function for setting an image for #ClutterTexture based on #GdkPixbuf.
* Copied from an example posted by hp in this thread http://mail.gnome.org/archives/gtk-devel-list/2008-September/msg00218.html
*
* Return value: %TRUE on success, %FALSE on failure
*/
gboolean
shell_clutter_texture_set_from_pixbuf (ClutterTexture *texture,
GdkPixbuf *pixbuf)
{
return clutter_texture_set_from_rgb_data (texture,
gdk_pixbuf_get_pixels (pixbuf),
gdk_pixbuf_get_has_alpha (pixbuf),
gdk_pixbuf_get_width (pixbuf),
gdk_pixbuf_get_height (pixbuf),
gdk_pixbuf_get_rowstride (pixbuf),
gdk_pixbuf_get_has_alpha (pixbuf)
? 4 : 3,
0, NULL);
}
/**
* shell_global_get:
*
@@ -860,30 +832,6 @@ shell_global_end_modal (ShellGlobal *global,
meta_plugin_end_modal (global->plugin, timestamp);
}
/**
* shell_global_display_is_grabbed
* @global: a #ShellGlobal
*
* Determines whether Mutter currently has a grab (keyboard or mouse or
* both) on the display. This could be the result of a current window
* management operation like a window move, or could be from
* shell_global_begin_modal().
*
* This function is useful to for ad-hoc checks to avoid over-grabbing
* the Mutter grab a grab from GTK+. Longer-term we might instead want a
* mechanism to make Mutter use GDK grabs instead of raw XGrabPointer().
*
* Return value: %TRUE if Mutter has a grab on the display
*/
gboolean
shell_global_display_is_grabbed (ShellGlobal *global)
{
MetaScreen *screen = meta_plugin_get_screen (global->plugin);
MetaDisplay *display = meta_screen_get_display (screen);
return meta_display_get_grab_op (display) != META_GRAB_OP_NONE;
}
/**
* shell_global_create_pointer_barrier
* @global: a #ShellGlobal
@@ -1134,149 +1082,6 @@ shell_global_reexec_self (ShellGlobal *global)
g_ptr_array_free (arr, TRUE);
}
/**
* shell_global_breakpoint:
* @global: A #ShellGlobal
*
* Using G_BREAKPOINT(), interrupt the current process. This is useful
* in conjunction with a debugger such as gdb.
*/
void
shell_global_breakpoint (ShellGlobal *global)
{
G_BREAKPOINT ();
}
/**
* shell_global_parse_search_provider:
* @global: A #ShellGlobal
* @data: description of provider
* @name: (out): location to store a display name
* @url: (out): location to store template of url
* @langs: (out) (transfer full) (element-type utf8): list of supported languages
* @icon_data_uri: (out): location to store uri
* @error: location to store GError
*
* Returns: %TRUE on success
*/
gboolean
shell_global_parse_search_provider (ShellGlobal *global,
const char *data,
char **name,
char **url,
GList **langs,
char **icon_data_uri,
GError **error)
{
xmlDocPtr doc = xmlParseMemory (data, strlen(data));
xmlNode *root;
*name = NULL;
*url = NULL;
*icon_data_uri = NULL;
*langs = NULL;
if (!doc)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Malformed xml");
return FALSE;
}
root = xmlDocGetRootElement (doc);
if (root && root->name && xmlStrcmp (root->name, (const xmlChar *)"OpenSearchDescription") == 0)
{
xmlNode *child;
for (child = root->children; child; child = child->next)
{
if (!child->name)
continue;
if (xmlStrcmp (child->name, (const xmlChar *)"Language") == 0)
{
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
if (!val)
continue;
*langs = g_list_append (*langs, g_strdup ((char *)val));
xmlFree (val);
}
if (!*name && xmlStrcmp (child->name, (const xmlChar *)"ShortName") == 0)
{
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
*name = g_strdup ((char *)val);
xmlFree (val);
}
if (!*icon_data_uri && xmlStrcmp (child->name, (const xmlChar *)"Image") == 0)
{
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
if (val)
*icon_data_uri = g_strdup ((char *)val);
xmlFree (val);
}
if (!*url && xmlStrcmp (child->name, (const xmlChar *)"Url") == 0)
{
xmlChar *template;
xmlChar *type;
type = xmlGetProp(child, (const xmlChar *)"type");
if (!type)
continue;
if (xmlStrcmp (type, (const xmlChar *)"text/html") != 0)
{
xmlFree (type);
continue;
}
xmlFree (type);
template = xmlGetProp(child, (const xmlChar *)"template");
if (!template)
continue;
*url = g_strdup ((char *)template);
xmlFree (template);
}
}
}
else
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Invalid OpenSearch document");
xmlFreeDoc (doc);
return FALSE;
}
xmlFreeDoc (doc);
if (*icon_data_uri && *name && *url)
return TRUE;
if (*icon_data_uri)
g_free (*icon_data_uri);
else
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"search provider doesn't have icon");
if (*name)
g_free (*name);
else if (error && !*error)
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"search provider doesn't have ShortName");
if (*url)
g_free (*url);
else if (error && !*error)
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"search provider doesn't have template for url");
if (*langs)
{
g_list_foreach (*langs, (GFunc)g_free, NULL);
g_list_free (*langs);
}
*url = NULL;
*name = NULL;
*icon_data_uri = NULL;
*langs = NULL;
return FALSE;
}
/**
* shell_global_gc:
* @global: A #ShellGlobal
@@ -1369,54 +1174,6 @@ void shell_global_init_xdnd (ShellGlobal *global)
32, PropModeReplace, (const unsigned char *)&stage_win, 1);
}
/**
* shell_global_format_time_relative_pretty:
* @global:
* @delta: Time in seconds since the current time
* @text: (out): Relative human-consumption-only time string
* @next_update: (out): Time in seconds until we should redisplay the time
*
* Format a time value for human consumption only. The passed time
* value is a delta in terms of seconds from the current time.
* This function needs to be in C because of its use of ngettext() which
* is not accessible from JavaScript.
*/
void
shell_global_format_time_relative_pretty (ShellGlobal *global,
guint delta,
char **text,
guint *next_update)
{
#define MINUTE (60)
#define HOUR (MINUTE*60)
#define DAY (HOUR*24)
#define WEEK (DAY*7)
if (delta < MINUTE) {
*text = g_strdup (_("Less than a minute ago"));
*next_update = MINUTE - delta;
} else if (delta < HOUR) {
*text = g_strdup_printf (dngettext (GETTEXT_PACKAGE,
"%d minute ago", "%d minutes ago",
delta / MINUTE), delta / MINUTE);
*next_update = MINUTE - (delta % MINUTE);
} else if (delta < DAY) {
*text = g_strdup_printf (dngettext (GETTEXT_PACKAGE,
"%d hour ago", "%d hours ago",
delta / HOUR), delta / HOUR);
*next_update = HOUR - (delta % HOUR);
} else if (delta < WEEK) {
*text = g_strdup_printf (dngettext (GETTEXT_PACKAGE,
"%d day ago", "%d days ago",
delta / DAY), delta / DAY);
*next_update = DAY - (delta % DAY);
} else {
*text = g_strdup_printf (dngettext (GETTEXT_PACKAGE,
"%d week ago", "%d weeks ago",
delta / WEEK), delta / WEEK);
*next_update = WEEK - (delta % WEEK);
}
}
/**
* shell_global_get_monitors:
* @global: the #ShellGlobal
@@ -1517,8 +1274,7 @@ shell_global_get_focus_monitor (ShellGlobal *global)
}
}
meta_screen_get_monitor_geometry (screen, 0, &rect);
return meta_rectangle_copy (&rect);
return shell_global_get_primary_monitor (global);
}
/**
@@ -1587,25 +1343,6 @@ shell_global_sync_pointer (ShellGlobal *global)
clutter_event_put ((ClutterEvent *)&event);
}
/**
* shell_get_event_state:
* @event: a #ClutterEvent
*
* Gets the current state of the event (the set of modifier keys that
* are pressed down). Thhis is a wrapper around
* clutter_event_get_state() that strips out any un-declared modifier
* flags, to make gjs happy; see
* https://bugzilla.gnome.org/show_bug.cgi?id=597292.
*
* Return value: the state from the event
*/
ClutterModifierType
shell_get_event_state (ClutterEvent *event)
{
ClutterModifierType state = clutter_event_get_state (event);
return state & CLUTTER_MODIFIER_MASK;
}
/**
* shell_global_get_settings:
* @global: A #ShellGlobal
@@ -1620,59 +1357,6 @@ shell_global_get_settings (ShellGlobal *global)
return global->settings;
}
static void
shell_popup_menu_position_func (GtkMenu *menu,
int *x,
int *y,
gboolean *push_in,
gpointer user_data)
{
*x = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu), "shell-menu-x"));
*y = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu), "shell-menu-y"));
}
/**
* shell_popup_menu:
* @menu: a #GtkMenu
* @button: mouse button that triggered the menu
* @time: timestamp of event that triggered the menu
* @menu_x: x coordinate to display the menu at
* @menu_y: y coordinate to display the menu at
*
* Wraps gtk_menu_popup(), but using @menu_x, @menu_y for the location
* rather than needing a callback.
**/
void
shell_popup_menu (GtkMenu *menu, int button, guint32 time,
int menu_x, int menu_y)
{
g_object_set_data (G_OBJECT (menu), "shell-menu-x", GINT_TO_POINTER (menu_x));
g_object_set_data (G_OBJECT (menu), "shell-menu-y", GINT_TO_POINTER (menu_y));
gtk_menu_popup (menu, NULL, NULL, shell_popup_menu_position_func, NULL,
button, time);
}
/**
* shell_write_string_to_stream:
* @stream: a #GOutputStream
* @str: a UTF-8 string to write to @stream
* @error: location to store GError
*
* Write a string to a GOutputStream as UTF-8. This is a workaround
* for not having binary buffers in GJS.
*
* Return value: %TRUE if write succeeded
*/
gboolean
shell_write_string_to_stream (GOutputStream *stream,
const char *str,
GError **error)
{
return g_output_stream_write_all (stream, str, strlen (str),
NULL, NULL, error);
}
/**
* shell_global_get_current_time:
* @global: A #ShellGlobal
@@ -2049,66 +1733,6 @@ gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
return FALSE;
}
/**
* ShellGetTpContactCb:
* @connection: The connection
* @contacts: (element-type TelepathyGLib.Contact): List of contacts
* @failed: Array of failed contacts
*/
static void
shell_global_get_tp_contacts_cb (TpConnection *self,
guint n_contacts,
TpContact * const *contacts,
guint n_failed,
const TpHandle *failed,
const GError *error,
gpointer user_data,
GObject *weak_object)
{
int i;
GList *contact_list = NULL;
for (i = 0; i < n_contacts; i++) {
contact_list = g_list_append(contact_list, contacts[i]);
}
TpHandle *failed_list = g_new0 (TpHandle, n_failed + 1);
memcpy(failed_list, failed, n_failed);
((ShellGetTpContactCb)user_data)(self, contact_list, failed_list);
}
/**
* shell_get_tp_contacts:
* @self: A connection, which must be ready
* @n_handles: Number of handles in handles
* @handles: (array length=n_handles) (element-type uint): Array of handles
* @n_features: Number of features in features
* @features: (array length=n_features) (allow-none) (element-type uint):
* Array of features
* @callback: (scope async): User callback to run when the contacts are ready
*
* Wrap tp_connection_get_contacts_by_handle so we can transform the array
* into a null-terminated one, which gjs can handle.
* We send the original callback to tp_connection_get_contacts_by_handle as
* user_data, and we have our own function as callback, which does the
* transforming.
*/
void
shell_get_tp_contacts (TpConnection *self,
guint n_handles,
const TpHandle *handles,
guint n_features,
const TpContactFeature *features,
ShellGetTpContactCb callback)
{
tp_connection_get_contacts_by_handle(self, n_handles, handles,
n_features, features,
shell_global_get_tp_contacts_cb,
callback, NULL, NULL);
}
/**
* shell_global_launch_calendar_server:
* @global: The #ShellGlobal.
@@ -2162,103 +1786,3 @@ shell_global_launch_calendar_server (ShellGlobal *global)
g_free (calendar_server_exe);
}
static void
shell_global_get_self_contact_features_cb (TpConnection *connection,
guint n_contacts,
TpContact * const *contacts,
const GError *error,
gpointer user_data,
GObject *weak_object)
{
if (error != NULL) {
g_print ("Failed to upgrade self contact: %s", error->message);
return;
}
((ShellGetSelfContactFeaturesCb)user_data)(connection, *contacts);
}
/**
* shell_get_self_contact_features:
* @self: A connection, which must be ready
* @n_features: Number of features in features
* @features: (array length=n_features) (allow-none) (element-type uint):
* Array of features
* @callback: (scope async): User callback to run when the contact is ready
*
* Wrap tp_connection_upgrade_contacts due to the lack of support for
* proper arrays arguments in GJS.
*/
void
shell_get_self_contact_features (TpConnection *self,
guint n_features,
const TpContactFeature *features,
ShellGetSelfContactFeaturesCb callback)
{
TpContact *self_contact = tp_connection_get_self_contact (self);
tp_connection_upgrade_contacts (self, 1, &self_contact,
n_features, features,
shell_global_get_self_contact_features_cb,
callback, NULL, NULL);
}
/**
* shell_get_contact_events:
* @log_manager: A #TplLogManager
* @account: A #TpAccount
* @entity: A #TplEntity
* @num_events: The number of events to retrieve
* @callback: (scope async): User callback to run when the contact is ready
*
* Wrap tpl_log_manager_get_filtered_events_async because gjs cannot support
* multiple callbacks in the same function call.
*/
void
shell_get_contact_events (TplLogManager *log_manager,
TpAccount *account,
TplEntity *entity,
guint num_events,
GAsyncReadyCallback callback)
{
tpl_log_manager_get_filtered_events_async (log_manager,
account,
entity,
TPL_EVENT_MASK_TEXT,
num_events,
NULL, NULL,
callback, NULL);
}
/**
* shell_get_file_contents_utf8_sync:
* @path: UTF-8 encoded filename path
* @error: a #GError
*
* Synchronously load the contents of a file as a NUL terminated
* string, validating it as UTF-8. Embedded NUL characters count as
* invalid content.
*
* Returns: (transfer full): File contents
*/
char *
shell_get_file_contents_utf8_sync (const char *path,
GError **error)
{
char *contents;
gsize len;
if (!g_file_get_contents (path, &contents, &len, error))
return NULL;
if (!g_utf8_validate (contents, len, NULL))
{
g_free (contents);
g_set_error (error,
G_IO_ERROR,
G_IO_ERROR_FAILED,
"File %s contains invalid UTF-8",
path);
return NULL;
}
return contents;
}

View File

@@ -7,8 +7,6 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gtk/gtk.h>
#include <meta/meta-plugin.h>
#include <telepathy-glib/telepathy-glib.h>
#include <telepathy-logger/telepathy-logger.h>
G_BEGIN_DECLS
@@ -22,42 +20,31 @@ typedef struct _ShellGlobalClass ShellGlobalClass;
#define SHELL_IS_GLOBAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GLOBAL))
#define SHELL_GLOBAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GLOBAL, ShellGlobalClass))
#define SHELL_GCONF_DIR "/desktop/gnome/shell"
struct _ShellGlobalClass
{
GObjectClass parent_class;
};
GType shell_global_get_type (void) G_GNUC_CONST;
GType shell_global_get_type (void) G_GNUC_CONST;
gboolean shell_clutter_texture_set_from_pixbuf (ClutterTexture *texture,
GdkPixbuf *pixbuf);
ShellGlobal *shell_global_get (void);
ShellGlobal *shell_global_get (void);
MetaScreen *shell_global_get_screen (ShellGlobal *global);
GdkScreen *shell_global_get_gdk_screen (ShellGlobal *global);
GList *shell_global_get_window_actors (ShellGlobal *global);
GSList *shell_global_get_monitors (ShellGlobal *global);
MetaRectangle *shell_global_get_primary_monitor (ShellGlobal *global);
int shell_global_get_primary_monitor_index (ShellGlobal *global);
MetaRectangle *shell_global_get_focus_monitor (ShellGlobal *global);
GSettings *shell_global_get_settings (ShellGlobal *global);
guint32 shell_global_get_current_time (ShellGlobal *global);
typedef enum {
SHELL_CURSOR_DND_IN_DRAG,
SHELL_CURSOR_DND_UNSUPPORTED_TARGET,
SHELL_CURSOR_DND_MOVE,
SHELL_CURSOR_DND_COPY,
SHELL_CURSOR_POINTING_HAND
} ShellCursor;
void shell_global_set_cursor (ShellGlobal *global,
ShellCursor type);
void shell_global_unset_cursor (ShellGlobal *global);
MetaScreen *shell_global_get_screen (ShellGlobal *global);
GdkScreen *shell_global_get_gdk_screen (ShellGlobal *global);
gboolean shell_global_add_extension_importer (ShellGlobal *global,
const char *target_object_script,
const char *target_property,
const char *directory,
GError **error);
/* Input/event handling */
gboolean shell_global_begin_modal (ShellGlobal *global,
guint32 timestamp);
void shell_global_end_modal (ShellGlobal *global,
guint32 timestamp);
typedef enum {
SHELL_STAGE_INPUT_MODE_NONREACTIVE,
@@ -66,127 +53,88 @@ typedef enum {
SHELL_STAGE_INPUT_MODE_FULLSCREEN
} ShellStageInputMode;
void shell_global_set_stage_input_mode (ShellGlobal *global,
ShellStageInputMode mode);
void shell_global_set_stage_input_region (ShellGlobal *global,
GSList *rectangles);
void shell_global_set_stage_input_mode (ShellGlobal *global,
ShellStageInputMode mode);
void shell_global_set_stage_input_region (ShellGlobal *global,
GSList *rectangles);
GList *shell_global_get_window_actors (ShellGlobal *global);
/* X utilities */
typedef enum {
SHELL_CURSOR_DND_IN_DRAG,
SHELL_CURSOR_DND_UNSUPPORTED_TARGET,
SHELL_CURSOR_DND_MOVE,
SHELL_CURSOR_DND_COPY,
SHELL_CURSOR_POINTING_HAND
} ShellCursor;
gboolean shell_global_begin_modal (ShellGlobal *global,
guint32 timestamp);
void shell_global_end_modal (ShellGlobal *global,
guint32 timestamp);
void shell_global_set_cursor (ShellGlobal *global,
ShellCursor type);
void shell_global_unset_cursor (ShellGlobal *global);
gboolean shell_global_display_is_grabbed (ShellGlobal *global);
guint32 shell_global_create_pointer_barrier (ShellGlobal *global,
int x1,
int y1,
int x2,
int y2,
int directions);
void shell_global_destroy_pointer_barrier (ShellGlobal *global,
guint32 barrier);
void shell_global_reexec_self (ShellGlobal *global);
void shell_global_get_pointer (ShellGlobal *global,
int *x,
int *y,
ClutterModifierType *mods);
void shell_global_breakpoint (ShellGlobal *global);
gboolean shell_global_parse_search_provider (ShellGlobal *global,
const char *data,
char **name,
char **url,
GList **langs,
char **icon_data_uri,
GError **error);
void shell_global_gc (ShellGlobal *global);
void shell_global_maybe_gc (ShellGlobal *global);
void shell_global_format_time_relative_pretty (ShellGlobal *global, guint delta, char **text, guint *next_update);
GSList *shell_global_get_monitors (ShellGlobal *global);
MetaRectangle *shell_global_get_primary_monitor (ShellGlobal *global);
int shell_global_get_primary_monitor_index (ShellGlobal *global);
MetaRectangle *shell_global_get_focus_monitor (ShellGlobal *global);
guint32 shell_global_create_pointer_barrier (ShellGlobal *global,
int x1, int y1, int x2, int y2,
int directions);
void shell_global_destroy_pointer_barrier (ShellGlobal *global,
guint32 barrier);
void shell_global_get_pointer (ShellGlobal *global,
int *x,
int *y,
ClutterModifierType *mods);
void shell_global_sync_pointer (ShellGlobal *global);
GSettings *shell_global_get_settings (ShellGlobal *global);
ClutterModifierType shell_get_event_state (ClutterEvent *event);
void shell_popup_menu (GtkMenu *menu, int button, guint32 time,
int menu_x, int menu_y);
gboolean shell_write_string_to_stream (GOutputStream *stream,
const char *str,
GError **error);
guint32 shell_global_get_current_time (ShellGlobal *global);
GAppLaunchContext *shell_global_create_app_launch_context (ShellGlobal *global);
/* JavaScript utilities */
void shell_global_gc (ShellGlobal *global);
void shell_global_maybe_gc (ShellGlobal *global);
gboolean shell_global_set_property_mutable (ShellGlobal *global,
const char *object,
const char *property,
gboolean mutable);
void shell_global_begin_work (ShellGlobal *global);
void shell_global_end_work (ShellGlobal *global);
/* Run-at-leisure API */
void shell_global_begin_work (ShellGlobal *global);
void shell_global_end_work (ShellGlobal *global);
typedef void (*ShellLeisureFunction) (gpointer data);
void shell_global_run_at_leisure (ShellGlobal *global,
ShellLeisureFunction func,
gpointer user_data,
GDestroyNotify notify);
void shell_global_play_theme_sound (ShellGlobal *global,
guint id,
const char *name);
void shell_global_cancel_theme_sound (ShellGlobal *global,
guint id);
void shell_global_run_at_leisure (ShellGlobal *global,
ShellLeisureFunction func,
gpointer user_data,
GDestroyNotify notify);
void shell_global_notify_error (ShellGlobal *global,
const char *msg,
const char *details);
/* Misc utilities / Shell API */
gboolean shell_global_add_extension_importer (ShellGlobal *global,
const char *target_object_script,
const char *target_property,
const char *directory,
GError **error);
void shell_global_init_xdnd (ShellGlobal *global);
void shell_global_sync_pointer (ShellGlobal *global);
typedef void (*ShellGetTpContactCb) (TpConnection *connection,
GList *contacts,
TpHandle *failed);
GAppLaunchContext *
shell_global_create_app_launch_context (ShellGlobal *global);
void shell_get_tp_contacts (TpConnection *self,
guint n_handles,
const TpHandle *handles,
guint n_features,
const TpContactFeature *features,
ShellGetTpContactCb callback);
void shell_global_play_theme_sound (ShellGlobal *global,
guint id,
const char *name);
void shell_global_cancel_theme_sound (ShellGlobal *global,
guint id);
void shell_global_launch_calendar_server (ShellGlobal *global);
void shell_global_notify_error (ShellGlobal *global,
const char *msg,
const char *details);
typedef void (*ShellGetSelfContactFeaturesCb) (TpConnection *connection,
TpContact *contact);
void shell_global_init_xdnd (ShellGlobal *global);
void shell_get_self_contact_features (TpConnection *self,
guint n_features,
const TpContactFeature *features,
ShellGetSelfContactFeaturesCb callback);
void shell_global_reexec_self (ShellGlobal *global);
void shell_get_contact_events (TplLogManager *log_manager,
TpAccount *account,
TplEntity *entity,
guint num_events,
GAsyncReadyCallback callback);
char *shell_get_file_contents_utf8_sync (const char *path,
GError **error);
void shell_global_launch_calendar_server (ShellGlobal *global);
G_END_DECLS

256
src/shell-tp-client.c Normal file
View File

@@ -0,0 +1,256 @@
#include "shell-tp-client.h"
#include <string.h>
#include <telepathy-glib/telepathy-glib.h>
G_DEFINE_TYPE(ShellTpClient, shell_tp_client, TP_TYPE_BASE_CLIENT)
struct _ShellTpClientPrivate
{
ShellTpClientObserveChannelsImpl observe_impl;
gpointer user_data_obs;
GDestroyNotify destroy_obs;
};
/**
* ShellTpClientObserveChannelsImpl:
* @client: a #ShellTpClient instance
* @account: a #TpAccount having %TP_ACCOUNT_FEATURE_CORE prepared if possible
* @connection: a #TpConnection having %TP_CONNECTION_FEATURE_CORE prepared
* if possible
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
* @dispatch_operation: (allow-none): a #TpChannelDispatchOperation or %NULL;
* the dispatch_operation is not guaranteed to be prepared
* @requests: (element-type TelepathyGLib.ChannelRequest): a #GList of
* #TpChannelRequest, all having their object-path defined but are not
* guaranteed to be prepared.
* @context: a #TpObserveChannelsContext representing the context of this
* D-Bus call
*
* Signature of the implementation of the ObserveChannels method.
*/
static void
shell_tp_client_init (ShellTpClient *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SHELL_TYPE_TP_CLIENT,
ShellTpClientPrivate);
/* Observer */
tp_base_client_set_observer_recover (TP_BASE_CLIENT (self), TRUE);
/* We only care about single-user text-based chats */
tp_base_client_take_observer_filter (TP_BASE_CLIENT (self),
tp_asv_new (
TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
TP_IFACE_CHANNEL_TYPE_TEXT,
TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
TP_HANDLE_TYPE_CONTACT,
NULL));
}
static void
observe_channels (TpBaseClient *client,
TpAccount *account,
TpConnection *connection,
GList *channels,
TpChannelDispatchOperation *dispatch_operation,
GList *requests,
TpObserveChannelsContext *context)
{
ShellTpClient *self = (ShellTpClient *) client;
g_assert (self->priv->observe_impl != NULL);
self->priv->observe_impl (self, account, connection, channels,
dispatch_operation, requests, context, self->priv->user_data_obs);
}
static void
shell_tp_client_dispose (GObject *object)
{
ShellTpClient *self = SHELL_TP_CLIENT (object);
void (*dispose) (GObject *) =
G_OBJECT_CLASS (shell_tp_client_parent_class)->dispose;
if (self->priv->destroy_obs != NULL)
{
self->priv->destroy_obs (self->priv->user_data_obs);
self->priv->destroy_obs = NULL;
}
if (dispose != NULL)
dispose (object);
}
static void
shell_tp_client_class_init (ShellTpClientClass *cls)
{
GObjectClass *object_class = G_OBJECT_CLASS (cls);
TpBaseClientClass *base_clt_cls = TP_BASE_CLIENT_CLASS (cls);
g_type_class_add_private (cls, sizeof (ShellTpClientPrivate));
object_class->dispose = shell_tp_client_dispose;
base_clt_cls->observe_channels = observe_channels;
}
/**
* shell_tp_client_new:
* @dbus: a #TpDBusDaemon object, may not be %NULL
*
* Returns: a new #ShellTpClient
*/
ShellTpClient *
shell_tp_client_new (TpDBusDaemon *dbus)
{
return g_object_new (SHELL_TYPE_TP_CLIENT,
"dbus-daemon", dbus,
"name", "GnomeShell",
"uniquify-name", TRUE,
NULL);
}
void
shell_tp_client_set_observe_channels_func (ShellTpClient *self,
ShellTpClientObserveChannelsImpl observe_impl,
gpointer user_data,
GDestroyNotify destroy)
{
g_assert (self->priv->observe_impl == NULL);
self->priv->observe_impl = observe_impl;
self->priv->user_data_obs = user_data;
self->priv->destroy_obs = destroy;
}
/* Telepathy utility functions */
/**
* ShellGetTpContactCb:
* @connection: The connection
* @contacts: (element-type TelepathyGLib.Contact): List of contacts
* @failed: Array of failed contacts
*/
static void
shell_global_get_tp_contacts_cb (TpConnection *self,
guint n_contacts,
TpContact * const *contacts,
guint n_failed,
const TpHandle *failed,
const GError *error,
gpointer user_data,
GObject *weak_object)
{
int i;
GList *contact_list = NULL;
for (i = 0; i < n_contacts; i++) {
contact_list = g_list_append(contact_list, contacts[i]);
}
TpHandle *failed_list = g_new0 (TpHandle, n_failed + 1);
memcpy(failed_list, failed, n_failed);
((ShellGetTpContactCb)user_data)(self, contact_list, failed_list);
}
/**
* shell_get_tp_contacts:
* @self: A connection, which must be ready
* @n_handles: Number of handles in handles
* @handles: (array length=n_handles) (element-type uint): Array of handles
* @n_features: Number of features in features
* @features: (array length=n_features) (allow-none) (element-type uint):
* Array of features
* @callback: (scope async): User callback to run when the contacts are ready
*
* Wrap tp_connection_get_contacts_by_handle so we can transform the array
* into a null-terminated one, which gjs can handle.
* We send the original callback to tp_connection_get_contacts_by_handle as
* user_data, and we have our own function as callback, which does the
* transforming.
*/
void
shell_get_tp_contacts (TpConnection *self,
guint n_handles,
const TpHandle *handles,
guint n_features,
const TpContactFeature *features,
ShellGetTpContactCb callback)
{
tp_connection_get_contacts_by_handle(self, n_handles, handles,
n_features, features,
shell_global_get_tp_contacts_cb,
callback, NULL, NULL);
}
static void
shell_global_get_self_contact_features_cb (TpConnection *connection,
guint n_contacts,
TpContact * const *contacts,
const GError *error,
gpointer user_data,
GObject *weak_object)
{
if (error != NULL) {
g_print ("Failed to upgrade self contact: %s", error->message);
return;
}
((ShellGetSelfContactFeaturesCb)user_data)(connection, *contacts);
}
/**
* shell_get_self_contact_features:
* @self: A connection, which must be ready
* @n_features: Number of features in features
* @features: (array length=n_features) (allow-none) (element-type uint):
* Array of features
* @callback: (scope async): User callback to run when the contact is ready
*
* Wrap tp_connection_upgrade_contacts due to the lack of support for
* proper arrays arguments in GJS.
*/
void
shell_get_self_contact_features (TpConnection *self,
guint n_features,
const TpContactFeature *features,
ShellGetSelfContactFeaturesCb callback)
{
TpContact *self_contact = tp_connection_get_self_contact (self);
tp_connection_upgrade_contacts (self, 1, &self_contact,
n_features, features,
shell_global_get_self_contact_features_cb,
callback, NULL, NULL);
}
/**
* shell_get_contact_events:
* @log_manager: A #TplLogManager
* @account: A #TpAccount
* @entity: A #TplEntity
* @num_events: The number of events to retrieve
* @callback: (scope async): User callback to run when the contact is ready
*
* Wrap tpl_log_manager_get_filtered_events_async because gjs cannot support
* multiple callbacks in the same function call.
*/
void
shell_get_contact_events (TplLogManager *log_manager,
TpAccount *account,
TplEntity *entity,
guint num_events,
GAsyncReadyCallback callback)
{
tpl_log_manager_get_filtered_events_async (log_manager,
account,
entity,
TPL_EVENT_MASK_TEXT,
num_events,
NULL, NULL,
callback, NULL);
}

88
src/shell-tp-client.h Normal file
View File

@@ -0,0 +1,88 @@
#ifndef __SHELL_TP_CLIENT_H__
#define __SHELL_TP_CLIENT_H__
#include <dbus/dbus-glib.h>
#include <glib-object.h>
#include <telepathy-glib/telepathy-glib.h>
#include <telepathy-logger/telepathy-logger.h>
G_BEGIN_DECLS
typedef struct _ShellTpClient ShellTpClient;
typedef struct _ShellTpClientClass ShellTpClientClass;
typedef struct _ShellTpClientPrivate ShellTpClientPrivate;
struct _ShellTpClientClass {
/*<private>*/
TpBaseClientClass parent_class;
};
struct _ShellTpClient {
/*<private>*/
TpBaseClient parent;
ShellTpClientPrivate *priv;
};
GType shell_tp_client_get_type (void);
#define SHELL_TYPE_TP_CLIENT \
(shell_tp_client_get_type ())
#define SHELL_TP_CLIENT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_TP_CLIENT, \
ShellTpClient))
#define SHELL_TP_CLIENT_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_TP_CLIENT, \
ShellTpClientClass))
#define SHELL_IS_TP_CLIENT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_TP_CLIENT))
#define SHELL_IS_TP_CLIENT_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_TP_CLIENT))
#define SHELL_TP_CLIENT_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_TP_CLIENT, \
ShellTpClientClass))
typedef void (*ShellTpClientObserveChannelsImpl) (ShellTpClient *client,
TpAccount *account,
TpConnection *connection,
GList *channels,
TpChannelDispatchOperation *dispatch_operation,
GList *requests,
TpObserveChannelsContext *context,
gpointer user_data);
ShellTpClient * shell_tp_client_new (TpDBusDaemon *dbus);
void shell_tp_client_set_observe_channels_func (ShellTpClient *self,
ShellTpClientObserveChannelsImpl observe_impl,
gpointer user_data,
GDestroyNotify destroy);
/* Telepathy utility functions */
typedef void (*ShellGetTpContactCb) (TpConnection *connection,
GList *contacts,
TpHandle *failed);
void shell_get_tp_contacts (TpConnection *self,
guint n_handles,
const TpHandle *handles,
guint n_features,
const TpContactFeature *features,
ShellGetTpContactCb callback);
typedef void (*ShellGetSelfContactFeaturesCb) (TpConnection *connection,
TpContact *contact);
void shell_get_self_contact_features (TpConnection *self,
guint n_features,
const TpContactFeature *features,
ShellGetSelfContactFeaturesCb callback);
void shell_get_contact_events (TplLogManager *log_manager,
TpAccount *account,
TplEntity *entity,
guint num_events,
GAsyncReadyCallback callback);
G_END_DECLS
#endif /* __SHELL_TP_CLIENT_H__ */

View File

@@ -7,7 +7,11 @@
#include <gconf/gconf-client.h>
#include <gtk/gtk.h>
/* The code in this file adapted under the GPLv2+ from:
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xmlmemory.h>
/* Some code in this file adapted under the GPLv2+ from:
*
* GNOME panel utils: gnome-panel/gnome-panel/panel-util.c
* (C) 1997, 1998, 1999, 2000 The Free Software Foundation
@@ -533,3 +537,214 @@ shell_util_format_date (const char *format,
g_date_time_unref (datetime);
return result;
}
/**
* shell_get_event_state:
* @event: a #ClutterEvent
*
* Gets the current state of the event (the set of modifier keys that
* are pressed down). Thhis is a wrapper around
* clutter_event_get_state() that strips out any un-declared modifier
* flags, to make gjs happy; see
* https://bugzilla.gnome.org/show_bug.cgi?id=597292.
*
* Return value: the state from the event
*/
ClutterModifierType
shell_get_event_state (ClutterEvent *event)
{
ClutterModifierType state = clutter_event_get_state (event);
return state & CLUTTER_MODIFIER_MASK;
}
/**
* shell_write_string_to_stream:
* @stream: a #GOutputStream
* @str: a UTF-8 string to write to @stream
* @error: location to store GError
*
* Write a string to a GOutputStream as UTF-8. This is a workaround
* for not having binary buffers in GJS.
*
* Return value: %TRUE if write succeeded
*/
gboolean
shell_write_string_to_stream (GOutputStream *stream,
const char *str,
GError **error)
{
return g_output_stream_write_all (stream, str, strlen (str),
NULL, NULL, error);
}
/**
* shell_get_file_contents_utf8_sync:
* @path: UTF-8 encoded filename path
* @error: a #GError
*
* Synchronously load the contents of a file as a NUL terminated
* string, validating it as UTF-8. Embedded NUL characters count as
* invalid content.
*
* Returns: (transfer full): File contents
*/
char *
shell_get_file_contents_utf8_sync (const char *path,
GError **error)
{
char *contents;
gsize len;
if (!g_file_get_contents (path, &contents, &len, error))
return NULL;
if (!g_utf8_validate (contents, len, NULL))
{
g_free (contents);
g_set_error (error,
G_IO_ERROR,
G_IO_ERROR_FAILED,
"File %s contains invalid UTF-8",
path);
return NULL;
}
return contents;
}
/**
* shell_breakpoint:
*
* Using G_BREAKPOINT(), interrupt the current process. This is useful
* in conjunction with a debugger such as gdb.
*/
void
shell_breakpoint (void)
{
G_BREAKPOINT ();
}
/**
* shell_parse_search_provider:
* @data: description of provider
* @name: (out): location to store a display name
* @url: (out): location to store template of url
* @langs: (out) (transfer full) (element-type utf8): list of supported languages
* @icon_data_uri: (out): location to store uri
* @error: location to store GError
*
* Returns: %TRUE on success
*/
gboolean
shell_parse_search_provider (const char *data,
char **name,
char **url,
GList **langs,
char **icon_data_uri,
GError **error)
{
xmlDocPtr doc = xmlParseMemory (data, strlen (data));
xmlNode *root;
*name = NULL;
*url = NULL;
*icon_data_uri = NULL;
*langs = NULL;
if (!doc)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Malformed xml");
return FALSE;
}
root = xmlDocGetRootElement (doc);
if (root && root->name && xmlStrcmp (root->name, (const xmlChar *)"OpenSearchDescription") == 0)
{
xmlNode *child;
for (child = root->children; child; child = child->next)
{
if (!child->name)
continue;
if (xmlStrcmp (child->name, (const xmlChar *)"Language") == 0)
{
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
if (!val)
continue;
*langs = g_list_append (*langs, g_strdup ((char *)val));
xmlFree (val);
}
if (!*name && xmlStrcmp (child->name, (const xmlChar *)"ShortName") == 0)
{
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
*name = g_strdup ((char *)val);
xmlFree (val);
}
if (!*icon_data_uri && xmlStrcmp (child->name, (const xmlChar *)"Image") == 0)
{
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
if (val)
*icon_data_uri = g_strdup ((char *)val);
xmlFree (val);
}
if (!*url && xmlStrcmp (child->name, (const xmlChar *)"Url") == 0)
{
xmlChar *template;
xmlChar *type;
type = xmlGetProp(child, (const xmlChar *)"type");
if (!type)
continue;
if (xmlStrcmp (type, (const xmlChar *)"text/html") != 0)
{
xmlFree (type);
continue;
}
xmlFree (type);
template = xmlGetProp(child, (const xmlChar *)"template");
if (!template)
continue;
*url = g_strdup ((char *)template);
xmlFree (template);
}
}
}
else
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Invalid OpenSearch document");
xmlFreeDoc (doc);
return FALSE;
}
xmlFreeDoc (doc);
if (*icon_data_uri && *name && *url)
return TRUE;
if (*icon_data_uri)
g_free (*icon_data_uri);
else
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"search provider doesn't have icon");
if (*name)
g_free (*name);
else if (error && !*error)
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"search provider doesn't have ShortName");
if (*url)
g_free (*url);
else if (error && !*error)
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"search provider doesn't have template for url");
if (*langs)
{
g_list_foreach (*langs, (GFunc)g_free, NULL);
g_list_free (*langs);
}
*url = NULL;
*name = NULL;
*icon_data_uri = NULL;
*langs = NULL;
return FALSE;
}

View File

@@ -8,16 +8,38 @@
G_BEGIN_DECLS
char *shell_util_get_label_for_uri (const char *text_uri);
GIcon *shell_util_get_icon_for_uri (const char *text_uri);
GIcon *shell_util_icon_from_string (const char *string, GError **error);
void shell_util_set_hidden_from_pick (ClutterActor *actor, gboolean hidden);
char *shell_util_get_label_for_uri (const char *text_uri);
GIcon *shell_util_get_icon_for_uri (const char *text_uri);
GIcon *shell_util_icon_from_string (const char *string,
GError **error);
void shell_util_get_transformed_allocation (ClutterActor *actor,
ClutterActorBox *box);
void shell_util_set_hidden_from_pick (ClutterActor *actor,
gboolean hidden);
char *shell_util_format_date (const char *format,
gint64 time_ms);
void shell_util_get_transformed_allocation (ClutterActor *actor,
ClutterActorBox *box);
char *shell_util_format_date (const char *format,
gint64 time_ms);
ClutterModifierType
shell_get_event_state (ClutterEvent *event);
gboolean shell_write_string_to_stream (GOutputStream *stream,
const char *str,
GError **error);
char *shell_get_file_contents_utf8_sync (const char *path,
GError **error);
void shell_breakpoint (void);
gboolean shell_parse_search_provider (const char *data,
char **name,
char **url,
GList **langs,
char **icon_data_uri,
GError **error);
G_END_DECLS

View File

@@ -1154,6 +1154,7 @@ create_texture_and_ensure_request (StTextureCache *cache,
{
/* Not cached and no pending request, create it */
*request = g_new0 (AsyncTextureLoadData, 1);
(*request)->key = g_strdup (key);
g_hash_table_insert (cache->priv->outstanding_requests, g_strdup (key), *request);
}
else
@@ -1173,17 +1174,17 @@ load_gicon_with_colors (StTextureCache *cache,
{
AsyncTextureLoadData *request;
ClutterActor *texture;
char *gicon_string;
guint gicon_hash;
char *key;
GtkIconTheme *theme;
GtkIconInfo *info;
gicon_string = g_icon_to_string (icon);
gicon_hash = g_icon_hash (icon);
if (colors)
{
/* This raises some doubts about the practice of using string keys */
key = g_strdup_printf (CACHE_PREFIX_GICON "icon=%s,size=%d,colors=%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x",
gicon_string, size,
key = g_strdup_printf (CACHE_PREFIX_GICON "icon_hash=%u,size=%d,colors=%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x",
gicon_hash, size,
colors->foreground.red, colors->foreground.blue, colors->foreground.green, colors->foreground.alpha,
colors->warning.red, colors->warning.blue, colors->warning.green, colors->warning.alpha,
colors->error.red, colors->error.blue, colors->error.green, colors->error.alpha,
@@ -1191,10 +1192,9 @@ load_gicon_with_colors (StTextureCache *cache,
}
else
{
key = g_strdup_printf (CACHE_PREFIX_GICON "icon=%s,size=%d",
gicon_string, size);
key = g_strdup_printf (CACHE_PREFIX_GICON "icon_hash=%u,size=%d",
gicon_hash, size);
}
g_free (gicon_string);
if (create_texture_and_ensure_request (cache, key, size, &request, &texture))
{
@@ -1208,10 +1208,9 @@ load_gicon_with_colors (StTextureCache *cache,
info = gtk_icon_theme_lookup_by_gicon (theme, icon, size, GTK_ICON_LOOKUP_USE_BUILTIN);
if (info != NULL)
{
/* Transfer ownership of key */
request->key = key;
/* hardcoded here for now; we should actually blow this away on
* icon theme changes probably */
request->key = g_strdup (key);
request->policy = ST_TEXTURE_CACHE_POLICY_FOREVER;
request->icon = g_object_ref (icon);
request->icon_info = info;
@@ -1227,13 +1226,14 @@ load_gicon_with_colors (StTextureCache *cache,
*/
g_slist_foreach (request->textures, (GFunc) g_object_unref, NULL);
g_slist_free (request->textures);
g_free (request->key);
g_free (request);
g_hash_table_remove (cache->priv->outstanding_requests, key);
g_free (key);
g_object_unref (texture);
texture = NULL;
}
g_free (key);
return CLUTTER_ACTOR (texture);
}

View File

@@ -483,21 +483,12 @@ get_color_from_term (StThemeNode *node,
/* rgba () colors - a CSS3 addition, are not supported by libcroco,
* but they are parsed as a "function", so we can emulate the
* functionality.
*
* libcroco < 0.6.2 has a bug where functions starting with 'r' are
* misparsed. We workaround this by pre-converting 'rgba' to 'RGBA'
* before parsing the stylesheet. Since libcroco isn't
* case-insensitive (a bug), it's fine with functions starting with
* 'R'. (In theory, we should be doing a case-insensitive compare
* everywhere, not just here, but that doesn't make much sense when
* the built-in parsing of libcroco is case-sensitive and things
* like 10PX don't work.)
*/
else if (term->type == TERM_FUNCTION &&
term->content.str &&
term->content.str->stryng &&
term->content.str->stryng->str &&
g_ascii_strcasecmp (term->content.str->stryng->str, "rgba") == 0)
strcmp (term->content.str->stryng->str, "rgba") == 0)
{
return get_color_from_rgba_term (term, color);
}

View File

@@ -155,90 +155,6 @@ st_theme_class_init (StThemeClass *klass)
}
/* This is a workaround for a bug in libcroco < 0.6.2 where
* function starting with 'r' (and 'u') are misparsed. We work
* around this by exploiting the fact that libcroco is incomformant
* with the CSS-spec and case sensitive and pre-convert all
* occurrences of rgba to RGBA. Then we make our own parsing
* code check for RGBA as well.
*/
#if LIBCROCO_VERSION_NUMBER < 602
static gboolean
is_identifier_character (char c)
{
/* Actual CSS rules allow for unicode > 0x00a1 and escaped
* characters, but we'll assume we won't do that in our stylesheets
* or at least not next to the string 'rgba'.
*/
return g_ascii_isalnum(c) || c == '-' || c == '_';
}
static void
convert_rgba_RGBA (char *buf)
{
char *p;
p = strstr (buf, "rgba");
while (p)
{
/* Check if this looks like a complete token; this is to
* avoiding mangling, say, a selector '.rgba-entry' */
if (!((p > buf && is_identifier_character (*(p - 1))) ||
(is_identifier_character (*(p + 4)))))
memcpy(p, "RGBA", 4);
p += 4;
p = strstr (p, "rgba");
}
}
static CRStyleSheet *
parse_stylesheet (const char *filename,
GError **error)
{
enum CRStatus status;
char *contents;
gsize length;
CRStyleSheet *stylesheet = NULL;
if (filename == NULL)
return NULL;
if (!g_file_get_contents (filename, &contents, &length, error))
return NULL;
convert_rgba_RGBA (contents);
status = cr_om_parser_simply_parse_buf ((const guchar *) contents,
length,
CR_UTF_8,
&stylesheet);
g_free (contents);
if (status != CR_OK)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Error parsing stylesheet '%s'; errcode:%d", filename, status);
return NULL;
}
return stylesheet;
}
CRDeclaration *
_st_theme_parse_declaration_list (const char *str)
{
char *copy = g_strdup (str);
CRDeclaration *result;
convert_rgba_RGBA (copy);
result = cr_declaration_parse_list_from_buf ((const guchar *)copy,
CR_UTF_8);
g_free (copy);
return result;
}
#else /* LIBCROCO_VERSION_NUMBER >= 602 */
static CRStyleSheet *
parse_stylesheet (const char *filename,
GError **error)
@@ -269,7 +185,6 @@ _st_theme_parse_declaration_list (const char *str)
return cr_declaration_parse_list_from_buf ((const guchar *)str,
CR_UTF_8);
}
#endif /* LIBCROCO_VERSION_NUMBER < 602 */
/* Just g_warning for now until we have something nicer to do */
static CRStyleSheet *

View File

@@ -91,6 +91,7 @@ st_tooltip_set_property (GObject *gobject,
case PROP_TIP_AREA:
st_tooltip_set_tip_area (tooltip, g_value_get_boxed (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);

View File

@@ -75,6 +75,8 @@ struct _StWidgetPrivate
StTextDirection direction;
AtkObject *accessible;
ClutterActor *label_actor;
};
/**
@@ -101,7 +103,8 @@ enum
PROP_TOOLTIP_TEXT,
PROP_TRACK_HOVER,
PROP_HOVER,
PROP_CAN_FOCUS
PROP_CAN_FOCUS,
PROP_LABEL_ACTOR
};
enum
@@ -186,6 +189,10 @@ st_widget_set_property (GObject *gobject,
st_widget_set_can_focus (actor, g_value_get_boolean (value));
break;
case PROP_LABEL_ACTOR:
st_widget_set_label_actor (actor, g_value_get_object (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -243,6 +250,10 @@ st_widget_get_property (GObject *gobject,
g_value_set_boolean (value, priv->can_focus);
break;
case PROP_LABEL_ACTOR:
g_value_set_object (value, priv->label_actor);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -300,6 +311,12 @@ st_widget_dispose (GObject *gobject)
if (priv->accessible)
priv->accessible = NULL;
if (priv->label_actor)
{
g_object_unref (priv->label_actor);
priv->label_actor = NULL;
}
G_OBJECT_CLASS (st_widget_parent_class)->dispose (gobject);
}
@@ -953,6 +970,19 @@ st_widget_class_init (StWidgetClass *klass)
PROP_CAN_FOCUS,
pspec);
/**
* ClutterActor:label-actor:
*
* An actor that labels this widget.
*/
g_object_class_install_property (gobject_class,
PROP_LABEL_ACTOR,
g_param_spec_object ("label-actor",
"Label",
"Label that identifies this widget",
CLUTTER_TYPE_ACTOR,
ST_PARAM_READWRITE));
/**
* StWidget::style-changed:
* @widget: the #StWidget
@@ -2125,6 +2155,53 @@ st_get_slow_down_factor ()
return st_slow_down_factor;
}
/**
* st_widget_get_label_actor:
* @widget: a #StWidget
*
* Gets the label that identifies @widget if it is defined
*
* Return value: (transfer none): the label that identifies the widget
*/
ClutterActor *
st_widget_get_label_actor (StWidget *widget)
{
g_return_val_if_fail (ST_IS_WIDGET (widget), NULL);
return widget->priv->label_actor;
}
/**
* st_widget_set_label_actor:
* @widget: a #StWidget
* @label: a #ClutterActor
*
* Sets @label as the #ClutterActor that identifies (labels)
* @widget. @label can be %NULL to indicate that @widget is not
* labelled any more
*/
void
st_widget_set_label_actor (StWidget *widget,
ClutterActor *label)
{
g_return_if_fail (ST_IS_WIDGET (widget));
if (widget->priv->label_actor != label)
{
if (widget->priv->label_actor)
g_object_unref (widget->priv->label_actor);
if (label != NULL)
widget->priv->label_actor = g_object_ref (label);
else
widget->priv->label_actor = NULL;
g_object_notify (G_OBJECT (widget), "label-actor");
}
}
/******************************************************************************/
/*************************** ACCESSIBILITY SUPPORT ****************************/
/******************************************************************************/
@@ -2133,6 +2210,7 @@ st_get_slow_down_factor ()
static void st_widget_accessible_class_init (StWidgetAccessibleClass *klass);
static void st_widget_accessible_init (StWidgetAccessible *widget);
static void st_widget_accessible_dispose (GObject *gobject);
/* AtkObject */
static AtkStateSet *st_widget_accessible_ref_state_set (AtkObject *obj);
@@ -2146,8 +2224,13 @@ static void on_pseudo_class_notify (GObject *gobject,
static void on_can_focus_notify (GObject *gobject,
GParamSpec *pspec,
gpointer data);
static void on_label_notify (GObject *gobject,
GParamSpec *pspec,
gpointer data);
static void check_selected (StWidgetAccessible *self,
StWidget *widget);
static void check_labels (StWidgetAccessible *self,
StWidget *widget);
G_DEFINE_TYPE (StWidgetAccessible, st_widget_accessible, CALLY_TYPE_ACTOR)
@@ -2159,6 +2242,11 @@ struct _StWidgetAccessiblePrivate
{
/* Cached values (used to avoid extra notifications) */
gboolean selected;
/* The current_label. Right now there are the proper atk
* relationships between this object and the label
*/
AtkObject *current_label;
};
@@ -2190,6 +2278,8 @@ st_widget_accessible_class_init (StWidgetAccessibleClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
gobject_class->dispose = st_widget_accessible_dispose;
atk_class->ref_state_set = st_widget_accessible_ref_state_set;
atk_class->initialize = st_widget_accessible_initialize;
@@ -2204,6 +2294,19 @@ st_widget_accessible_init (StWidgetAccessible *self)
self->priv = priv;
}
static void
st_widget_accessible_dispose (GObject *gobject)
{
StWidgetAccessible *self = ST_WIDGET_ACCESSIBLE (gobject);
if (self->priv->current_label)
{
g_object_unref (self->priv->current_label);
self->priv->current_label = NULL;
}
}
static void
st_widget_accessible_initialize (AtkObject *obj,
gpointer data)
@@ -2218,11 +2321,16 @@ st_widget_accessible_initialize (AtkObject *obj,
G_CALLBACK (on_can_focus_notify),
obj);
g_signal_connect (data, "notify::label-actor",
G_CALLBACK (on_label_notify),
obj);
/* Check the cached selected state and notify the first selection.
* Ie: it is required to ensure a first notification when Alt+Tab
* popup appears
*/
check_selected (ST_WIDGET_ACCESSIBLE (obj), ST_WIDGET (data));
check_labels (ST_WIDGET_ACCESSIBLE (obj), ST_WIDGET (data));
}
static AtkStateSet *
@@ -2382,3 +2490,57 @@ st_get_ui_root (ClutterStage *stage)
else
return CLUTTER_CONTAINER (stage);
}
static void
on_label_notify (GObject *gobject,
GParamSpec *pspec,
gpointer data)
{
check_labels (ST_WIDGET_ACCESSIBLE (data), ST_WIDGET (gobject));
}
static void
check_labels (StWidgetAccessible *widget_accessible,
StWidget *widget)
{
ClutterActor *label = NULL;
AtkObject *label_accessible = NULL;
/* We only call this method at startup, and when the label changes,
* so it is fine to remove the previous relationships if we have the
* current_label by default
*/
if (widget_accessible->priv->current_label != NULL)
{
AtkObject *previous_label = widget_accessible->priv->current_label;
atk_object_remove_relationship (ATK_OBJECT (widget_accessible),
ATK_RELATION_LABELLED_BY,
previous_label);
atk_object_remove_relationship (previous_label,
ATK_RELATION_LABEL_FOR,
ATK_OBJECT (widget_accessible));
g_object_unref (previous_label);
}
label = st_widget_get_label_actor (widget);
if (label == NULL)
{
widget_accessible->priv->current_label = NULL;
}
else
{
label_accessible = clutter_actor_get_accessible (label);
widget_accessible->priv->current_label = g_object_ref (label_accessible);
atk_object_add_relationship (ATK_OBJECT (widget_accessible),
ATK_RELATION_LABELLED_BY,
label_accessible);
atk_object_add_relationship (label_accessible,
ATK_RELATION_LABEL_FOR,
ATK_OBJECT (widget_accessible));
}
}

View File

@@ -152,6 +152,10 @@ gboolean st_widget_navigate_focus (StWidget *widg
GtkDirectionType direction,
gboolean wrap_around);
ClutterActor * st_widget_get_label_actor (StWidget *widget);
void st_widget_set_label_actor (StWidget *widget,
ClutterActor *label);
/* Only to be used by sub-classes of StWidget */
void st_widget_style_changed (StWidget *widget);
StThemeNode * st_widget_get_theme_node (StWidget *widget);