Compare commits

..

13 Commits

Author SHA1 Message Date
Seif Lotfy
07c39959d9 Use the correct ID for app that is being launched 2011-04-04 17:02:54 -04:00
Federico Mena Quintero
23d1d18619 Convert stringified timestamps from D-Bus to integers
We already had the symmetrical code to convert numerical timestamps to strings before
sending out D-Bus requests, anyway.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-03-31 13:07:44 -04:00
Federico Mena Quintero
23bf5db80c Merge remote branch 'origin/master' into zeitgeist 2011-03-29 17:00:54 -04:00
Seif Lotfy
550e9973b7 Add basic jumplists in the application icons
We add recently-used items relative to the app in question, and
also frequently-used items, to the app icon's popup menu.
2011-03-28 18:35:55 -04:00
Federico Mena Quintero
e4e6b26e15 Merge remote branch origin/master into zeitgeist 2011-03-25 18:28:35 -04:00
Federico Mena Quintero
9551e1c2f5 Merge remote branch 'origin/master' into zeitgeist 2011-03-14 18:35:33 -04:00
Federico Mena Quintero
a70ea12be8 Merge remote branch 'origin/master' into zeitgeist 2011-03-09 18:50:07 -05:00
Seif Lotfy
fb5a3a53fa Don't refresh all the search providers in O(n^2) fashion; just refresh the one that changed
This modification reduces the faulty clearing and redrawing of the
results.  The old code refreshed the view for every async
search provider by iterating through all result sets (one result set per
provider) and refreshing all providers. In this case there were 40
redraws. This patch adds a new method _clearDisplayForProvider that
allows us to refresh only providers with changed results.
2011-03-04 16:42:15 -05:00
Federico Mena Quintero
30eac56691 Merge master into zeitgeist 2011-03-03 21:51:15 -05:00
Federico Mena Quintero
cb6f3a0836 Add all of Zeitgeist's enum values for ResultType and StorageState
These are copied from the Python code.  It's unfortunate
that we can't introspect enum values from D-Bus.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-03-03 21:40:44 -05:00
Siegfried-Angel Gevatter Pujals
8e579024b1 Add support for Zeitgeist search providers
https://bugzilla.gnome.org/show_bug.cgi?id=640659

Co-authored-by: Seif Lotfy <seif@lotfy.com>
Co-authored-by: Federico Mena Quintero <federico@gnome.org>
2011-03-03 21:40:44 -05:00
Siegfried-Angel Gevatter Pujals
41c70293df Add JavaScript bindings for Zeitgeist
Co-authored-by: Seif Lotfy <seif@lotfy.com>
Co-authored-by: Federico Mena Quintero <federico@gnome.org>
2011-03-03 21:40:44 -05:00
Seif Lotfy
4b015903bc Add support for asynchronous search providers
https://bugzilla.gnome.org/show_bug.cgi?id=640659
2011-03-03 21:40:33 -05:00
157 changed files with 10282 additions and 26894 deletions

7
.gitignore vendored
View File

@@ -3,11 +3,11 @@
*.o
.deps
.libs
ABOUT-NLS
ChangeLog
INSTALL
Makefile
Makefile.in
NEWS
aclocal.m4
autom4te.cache
config.h
@@ -30,13 +30,8 @@ m4/
omf.make
po/*.gmo
po/gnome-shell.pot
po/*.header
po/*.sed
po/*.sin
po/Makefile.in.in
po/Makevars.template
po/POTFILES
po/Rules-quot
po/stamp-it
scripts/launcher.pyc
src/*.gir

View File

@@ -3,5 +3,5 @@ E-mail: otaylor@redhat.com
Userid: otaylor
Colin Walters
E-mail: walters@verbum.org
E-mail: walters@redhat.com
Userid: walters

263
NEWS
View File

@@ -1,263 +0,0 @@
3.1.2
=====
* Fix problem with "user theme extension" breaking the CSS for other
extensions [Giovanni; #650971]
* Telepathy IM framework integration
- Switch to using telepathy-glib rather than talking to
Telepathy via D-Bus [Guillaume, Jasper; #645585, #649633, #651138, #651227]
- Acknowledge messages when the user clicks on them [Guillaume, #647893]
- Fix problem with telepathy icon blinking for incoming messages
even though the user has been notified of them [Guillaume; #643594]
* Networking
- keep wirelesss networks in predictable order [Giovanni; #646580, #652313]
- Show unmanaged devices in the menu [Giovanni; #646946]
- Fix overflow when too many VPN connections [Giovanni; #651602]
* Bluetooth
- Show "hardware disabled" when disabled by rfkill [Giovanni; #648048]
- Fix bug updating status of devices [Giovanni; #647565]
* LookingGlass console:
- Add a "Memory" tab [Colin; #650692]
- Make escape work from any page [Dan Winship; #647303]
- Provide a way to refer to panel items as, e.g.,
Main.panel._activities [Dan Winship; #646915]
* User menu
- Fix problem with suspend menu option locking the screen even when the user
disabled that. [Florian; #652327]
- Hide "power off..." option if shutdown is disabled via PolicyKit
[Florian; #652038]
* Track changes to WM_CLASS (fixes problems with LibreOffice tracking)
[Colin; #649315]
* Remove app tracking workarounds for Firefox and LibreOffice [Colin; #651015]
* Use upstream gettext autoconfigury rather than glib version [Javier; #631576]
* Show messages in the message tray when an application is fullscreen
[Dan Winship; #608667]
* Don't autohide the workspace pager if there is more than one workspace
[Florian; #652714, #653078, #653142]
* Don't always slide out the workspace pager at drag begin [Florian; #652730]
* Only offer to remove a favorite app when dragging it's icon [Owen; #642895]
* Allow dropping an icon anywhere on a workspace [Adel; #652079]
* st-scroll-view: Make the fade effect and offset themable [Jasper; #651813]
* Obey the user's preference when running an application in a terminal
from the run dialog [Florian; #648422]
* Consistently exit overview when launching external applications
[Colin; #653095]
* Adapt to changes in GJS for how GObject APIs are bound
[Alex, Colin, Florian, Jasper, Marc-Antoine; #649981, #652597]
* Fix problems with scrolling in overflow for alt-Tab switcher
[Dan Winship, Adel; #647807]
* Mark relationships between labels and actors for accessibility [Alejandro]
* Add org.gnome.shell.enabled-extensions complementing disabled-extensions
GSetting [Tassilo; #651088]
* Visual tweaks [Jakub, Jasper; #646261, #652715]
* Switch to building against clutter-1.7 with independent Cogl [Adel; #653397]
* Code cleanups [Colin, Dan Winship, Florian; #633620, #645031, #648755, #648758,
#648760, #649203, #649517, #650317, #652730]
* Memory leak fixes [Colin, Maxim; #649508, #650934]
* Build Fixes [Colin, Dan Winship, Florian, Ionut, Morten, Owen, Sean; #647395,
#648006, #650869, #653199, #653275
* Miscellaneous bug fixes [Adam, Adel, Dan Williams, Dan Winship, Florian,
Ionut, Jasper, Maxim, Ray; #620105, #639459, #641570, #642793, #643513,
#645848, #646919, #647186, #648305, #648410, #648562, #648894, #649001,
#645990, #647893, #647907, #651012, #651086, #651606, #651569, #651866,
#652388, #653511]
Contributors:
Ionut Biru, Giovanni Campagna, Guillaume Desmottes, Adam Dingle,
Maxim Ermilov, Adel Gadllah, Tassilo Horn, Javier Jardón, Jonny Lamb,
Alexander Larsson, Rui Matos, Morten Mjelva, Florian Müllner,
Marc-Antoine Perennou, Alejandro Piñeiro, Jasper St. Pierre, Jakub Steiner,
Ray Strode, Owen Taylor, Colin Walters, Dan Williams, Sean Wilson, Dan Winship
Translations:
Daniel Martinez Cucalon [ar], Ihar Hrachyshka [be], Carles Ferrando,
Gil Forcada, Sílvia Miranda [ca], Kristjan Schmidt [eo], Jorge González,
Daniel Mustieles [es], Seán de Búrca [ga], Fran Diéguez [gl],
Yaron Shahrabani [he], Kjartan Maraas [nb], Misha Shnurapet,
Yuri Myasoedov [ru], Daniel Nylander [se], Peter Mráz [sk],
Matej Urbančič [sl], Krishnababu Krothapalli [te], Daniel Korostil [uk],
Aron Xu [zh_CN]
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
=====
* Network menu
- Fix problems updating the menu for mobile broadband devices [Giovanni]
https://bugzilla.gnome.org/show_bug.cgi?id=646395
- Fix missing device descriptions with multiple devices of the
same type [Giovanni]
https://bugzilla.gnome.org/show_bug.cgi?id=646074
- Label ad-hoc neworks with an appropriate icon [Dan]
https://bugzilla.gnome.org/show_bug.cgi?id=646141
- Fix displaying some devices states as "invalid" [Dan]
https://bugzilla.gnome.org/show_bug.cgi?id=646946
- Fix problems with access points that don't report a SSID [Giovanni]
https://bugzilla.gnome.org/show_bug.cgi?id=647040
- Miscellaneous minor bug fixes [Dan, Giovanni, Owen]
645981, 646558, 646443, 646708, 646968
* Application menu and icon
- Fix bug where application menu icon was missing at GNOME Shell
startup. [Florian]
https://bugzilla.gnome.org/show_bug.cgi?id=644122
- Fix missing application menu for dialog windows [Colin]
https://bugzilla.gnome.org/show_bug.cgi?id=647082
- When launching an application through an alternate launcher
(like for a System Settings pane), association the windows with
the application, not the launcher. [Colin]
https://bugzilla.gnome.org/show_bug.cgi?id=646689
* Activities overview
- Load the applications view incrementally to avoid potentially freezing
for multiple seconds [Colin]
https://bugzilla.gnome.org/show_bug.cgi?id=647778
- Fix bug where package installation while the overview
was up could result in a corrupted application display. [Giovanni]
https://bugzilla.gnome.org/show_bug.cgi?id=645801
- Fix dragging from the search results to launch apps and docs [Florian]
https://bugzilla.gnome.org/show_bug.cgi?id=645990
- Fix flickering of selection when searching in the overview [Florian]
https://bugzilla.gnome.org/show_bug.cgi?id=646019
- Fix bug when typing into the search box when text was already
selected [Nohemi]
https://bugzilla.gnome.org/show_bug.cgi?id=636341
* Fix layout of notifications for right-to-left languages [Florian]
https://bugzilla.gnome.org/show_bug.cgi?id=646921
* Remove a confusing special case where Alt-Tab sometimes switched
to a different window of the same application rather than to
a different application. [Rui]
https://bugzilla.gnome.org/show_bug.cgi?id=648132
* Fix a crash that could happen when a window was opened on a
workspace that was immediately removed [Dan]
https://bugzilla.gnome.org/show_bug.cgi?id=648132
* Fix keyboard navigation in logout/reboot dialogs [Dan]
https://bugzilla.gnome.org/show_bug.cgi?id=646740
* Fix missing inspector icon in Looking Glass console [Dan]
* Miscellaneous minor bug fixes [Adel, Colin, Dan, Florian, Nohemi]
645648, 646205, 646257, 646855, 647098, 646730
Contributors:
Giovanni Campagna, Nohemi Fernandez, Adel Gadllah, Rui Matos, Florian Müllner,
Owen Taylor, Colin Walters, Dan Winship
Translations:
Hendrik Richter [de], Jorge González [es], Arash Mousavi [fa],
Fran Diéguez [gl], Jiro Matsuzawa [ja], Piotr Drąg [pl], Daniel Nylander [sv],
Sira Nokyoongtong [th], Muhammet Kara [tr], Nguyễn Thái Ngọc Duy [vi],
Aron Xu [zh_CN], Chao-Hsiung Liao [zh_HK, zh_TW]
3.0.0.2
=======
* Fix missing import that was preventing extensions from loading.
[Maxim Ermilov]
https://bugzilla.gnome.org/show_bug.cgi?id=646333
Translations:
Timo Jyrinki [fi]
3.0.0.1
=======
* Fix problem with stuck event handling if network menu pops down while
user is using the scrollbar. [Owen Taylor]
https://bugzilla.gnome.org/show_bug.cgi?id=646825
Contributors to GNOME Shell 3.0
===============================
Code:
Josh Adams, Kiyoshi Aman, Nuno Araujo, Emmanuele Bassi, Dirk-Jan C. Binnema,
Wouter Bolsterlee, Raphael Bosshard, Milan Bouchet-Valat, Christina Boumpouka,
Mathieu Bridon, Alban Browaeys, Phil Bull, Micro Cai, Giovanni Campagna,
Cosimo Cecchi, Tor-björn Claesson, Matthias Clasen, Jason D. Clinton,
Frederic Crozat, Guillaume Desmottes, Sander Dijkhuis, Neha Doijode,
Maxim Ermilov, Diego Escalante Urrelo, Luca Ferretti, Steve Frécinaux,
Takao Fujiwara, Adel Gadllah, Vadim Girlin, Nick Glynn, Guido Günther,
Leon Handreke, Lex Hider, Richard Hughes, Javier Jardón, Abderrahim Kitouni,
Andre Klapper, Alexander Larsson, Nickolas Lloyd, Ryan Lortie, Kjartan Maraas,
Koop Mast, Rui Matos, Jonathan Matthew, William Jon McCann, Morten Mjelva,
Federico Mena Quintero, Florian Müllner, Jon Nettleton, Hellyna Ng,
Discardi Nicola, Carlos Martín Nieto, Bastien Nocera, Bill Nottingham,
Matt Novenstern, Marc-Antoine Perennou, Neil Perry, Frédéric Péters,
Alejandro Piñeiro, Siegfried-Angel Gevatter Pujals, "res", Neil Roberts,
"Sardem FF7", Florian Scandella, Joseph Scheuhammer, Christian Schramm,
Gustavo Noronha Silva, Jasper St. Pierre, Eric Springer, Jakub Steiner,
Jonathan Strander, Ray Strode, Owen Taylor, Rico Tzschichholz,
Sergey V. Udaltsov, Daiki Ueno, Vincent Untz, Marcelo Jorge Vieira,
Mads Villadsen, Colin Walters, Dan Winship, William Wolf, Thomas Wood,
Pierre Yager, David Zeuthen, Marina Zhurakhinskaya
Design:
Allan Day, William Jon McCann, Jeremy Perry, Jakub Steiner
2008 Boston GNOME design hackfest participants (especially Neil J. Patel
for turning the resulting sketches into our first mockups.)
Everybody on irc.gnome.org:#gnome-design
Translations:
Friedel Wolff (af), Khaled Hosny (ar), Ivaylo Valkov (bg), Jamil Ahmed (bn)
Runa Bhattacharjee (bn_IN), Gil Forcada, Siegfried-Angel Gevatter Pujals,
Jordi Serratosa (ca), Andre Klapper, Petr Kovar (cs), Kenneth Nielsen,
Kris Thomsen (da), Mario Blättermann, Hendrik Brandt, Christian Kirbach,
Hendrik Richter, Wolfgang Stöggl (de), Michael Kotsarinis, Kostas Papadimas,
Jennie Petoumenou, Sterios Prosiniklis, Fotis Tsamis, Simos Xenitellis (el),
Bruce Cowan, Philip Withnall (en_GB), Jorge Gonzalez, Daniel Mustieles (es),
Mattias Põldaru, Ivar Smolin (et), Inaki Larranaga Murgoitio (eu),
Mahyar Moghimi (fa), Timo Jyrinki (fi), Cyril Arnaud, Bruno Brouard,
Pablo Martin-Gomez, Claude Paroz, Frédéric Peters (fr), Seán de Búrca (ga)
Francisco Diéguez, Antón Méixome (gl), Sweta Kothari (gu), Liel Fridman,
Yaron Shahrabani (he), Rajesh Ranjan (hi), Gabor Kelemen (hu), Milo Casagrande,
Luca Ferretti (it), Dirgita, Andika Triwidada (id), Takayuki KUSANO,
Takayoshi OKANO, Kiyotaka NISHIBORI, Futoshi NISHIO (ja), Shankar Prasad (kn),
Young-Ho Cha, Changwoo Ryu (ko), Žygimantas Beručka, Gintautas Miliauskas (lt),
Rudolfs Mazurs (lv), Sandeep Shedmake (mr), Kjartan Maraas (nb),
Wouter Bolsterlee, Sander Dijkhuis, Reinout van Schouwen (nl),
Torstein Winterseth (nn), A S Alam (pa), Tomasz Dominikowski, Piotr Drąg (pl),
Duarte Loreto (pt), Felipe Borges, Rodrigo Padula de Oliveira,
Rodrigo L. M. Flores, Amanda Magalhães, Og B. Maciel, Gabriel F. Vilar,
Jonh Wendell (pt_BR), Lucian Adrian Grijincu, Daniel Șerbănescu (ro),
Sergey V. Kovylov, Andrey Korzinev, Yuri Myasoedov, Marina Zhurakhinskaya (ru),
Daniel Nylander (se), Matej Urbančič, Andrej Žnidaršič (sl),
Miloš Popović (sr, sr@latin), Miroslav Nikolić (sr), Tirumurti Vasudevan (ta),
Sira Nokyoongtong (th), Baris Cicek (tr), Abduxukur Abdurixit,
Gheyret T. Kenji (ug), Maxim V. Dziumanenko, Daniel Korostil (uk),
Nguyễn Thái Ngọc Duy (vi), Jessica Ban, 'jiero', Wei Li, YunQiang Su, Ray Wang,
Aron Xu (zh_CN), Chao-Hsiung Liao (zh_HK, zh_TW)

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.1.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[2.91.93],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -23,16 +23,12 @@ AM_PROG_CC_C_O
LT_PREREQ([2.2.6])
LT_INIT([disable-static])
# i18n
IT_PROG_INTLTOOL([0.40])
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.17])
GETTEXT_PACKAGE=gnome-shell
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
[The prefix for our gettext translation domains.])
IT_PROG_INTLTOOL(0.26)
AM_GLIB_GNU_GETTEXT
PKG_PROG_PKG_CONFIG([0.22])
@@ -67,16 +63,16 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.5.15
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=0.7.11
MUTTER_MIN_VERSION=3.0.0
MUTTER_MIN_VERSION=2.91.93
GTK_MIN_VERSION=3.0.0
GIO_MIN_VERSION=2.25.9
LIBECAL_MIN_VERSION=2.32.0
LIBEDATASERVER_MIN_VERSION=1.2.0
LIBEDATASERVERUI_MIN_VERSION=2.91.6
TELEPATHY_GLIB_MIN_VERSION=0.15.0
LIBEDATASERVERUI2_MIN_VERSION=1.2.0
LIBEDATASERVERUI3_MIN_VERSION=2.91.6
TELEPATHY_GLIB_MIN_VERSION=0.13.12
TELEPATHY_LOGGER_MIN_VERSION=0.2.4
POLKIT_MIN_VERSION=0.100
STARTUP_NOTIFICATION_MIN_VERSION=0.11
# Collect more than 20 libraries for a prize!
PKG_CHECK_MODULES(GNOME_SHELL, gio-2.0 >= $GIO_MIN_VERSION
@@ -88,7 +84,7 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-2.0 >= $GIO_MIN_VERSION
gdk-x11-3.0
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
libstartup-notification-1.0
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
libcanberra
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
@@ -104,7 +100,7 @@ AC_SUBST([GJS_VERSION], ["$GJS_VERSION"])
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
JHBUILD_TYPELIBDIR="$INTROSPECTION_TYPELIBDIR"
# NM is the only typelib we use that we don't jhbuild
PKG_CHECK_EXISTS([libnm-glib >= 0.8.999],
PKG_CHECK_EXISTS([libnm-glib >= 0.8.995],
[NM_TYPELIBDIR=`$PKG_CONFIG --variable=libdir libnm-glib`/girepository-1.0
if test "$INTROSPECTION_TYPELIBDIR" != "$NM_TYPELIBDIR"; then
JHBUILD_TYPELIBDIR="$JHBUILD_TYPELIBDIR:$NM_TYPELIBDIR"
@@ -115,20 +111,22 @@ saved_CFLAGS=$CFLAGS
saved_LIBS=$LIBS
CFLAGS=$GNOME_SHELL_CFLAGS
LIBS=$GNOME_SHELL_LIBS
AC_CHECK_FUNCS(JS_NewGlobalObject XFixesCreatePointerBarrier)
# sn_startup_sequence_get_application_id, we can replace with a version check later
AC_CHECK_FUNCS(JS_NewGlobalObject sn_startup_sequence_get_application_id XFixesCreatePointerBarrier)
CFLAGS=$saved_CFLAGS
LIBS=$saved_LIBS
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 gnome-desktop-3.0 >= 2.90.0 x11)
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 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])
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0],
[BLUETOOTH_DIR=`$PKG_CONFIG --variable=applet_libdir gnome-bluetooth-1.0`
BLUETOOTH_LIBS=`$PKG_CONFIG --variable=applet_libs gnome-bluetooth-1.0`
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 2.90.0],
[BLUETOOTH_DIR=`$PKG_CONFIG --variable=libdir gnome-bluetooth-1.0`/gnome-bluetooth
BLUETOOTH_LIBS="-L'$BLUETOOTH_DIR' -lgnome-bluetooth-applet"
AC_SUBST([BLUETOOTH_LIBS],["$BLUETOOTH_LIBS"])
AC_DEFINE_UNQUOTED([BLUETOOTH_DIR],["$BLUETOOTH_DIR"],[Path to installed GnomeBluetooth typelib and library])
AC_DEFINE([HAVE_BLUETOOTH],[1],[Define if you have libgnome-bluetooth-applet])
@@ -138,7 +136,13 @@ PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0],
AC_SUBST([HAVE_BLUETOOTH],[0])
AC_MSG_RESULT([no])])
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION libedataserverui-3.0 >= $LIBEDATASERVERUI_MIN_VERSION gio-2.0)
# Default to libedataserverui-3.0, but allow falling back to 1.2
PKG_CHECK_EXISTS(libedataserverui-3.0,
[EDS_API=3.0
LIBEDATASERVERUI_MIN_VERSION=$LIBEDATASERVERUI3_MIN_VERSION],
[EDS_API=1.2
LIBEDATASERVERUI_MIN_VERSION=$LIBEDATASERVERUI2_MIN_VERSION])
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION libedataserverui-$EDS_API >= $LIBEDATASERVERUI_MIN_VERSION gio-2.0)
AC_SUBST(CALENDAR_SERVER_CFLAGS)
AC_SUBST(CALENDAR_SERVER_LIBS)

View File

@@ -30,14 +30,26 @@ 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

@@ -15,18 +15,8 @@
<default>[]</default>
<_summary>Uuids of extensions to disable</_summary>
<_description>
GNOME Shell extensions have a uuid property; this key lists extensions
which should not be loaded. This setting overrides enabled-extensions
for extensions that appear in both lists.
</_description>
</key>
<key name="enabled-extensions" type="as">
<default>[]</default>
<_summary>Uuids of extensions to enable</_summary>
<_description>
GNOME Shell extensions have a uuid property; this key lists extensions
which should be loaded. disabled-extensions overrides this setting for
extensions that appear in both lists.
GNOME Shell extensions have a uuid property;
this key lists extensions which should not be loaded.
</_description>
</key>
<key name="enable-app-monitoring" type="b">

View File

@@ -39,11 +39,6 @@ StScrollBar
padding: 0px;
}
StScrollView.vfade
{
-st-vfade-offset: 68px;
}
StScrollView StScrollBar
{
min-width: 16px;
@@ -107,36 +102,8 @@ StTooltip StLabel {
min-width: 200px;
}
.popup-submenu-menu-item:open {
background-color: #4c4c4c;
}
.popup-sub-menu {
background-gradient-start: rgba(80,80,80,0.3);
background-gradient-end: rgba(80,80,80,0.7);
background-gradient-direction: vertical;
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.9);
}
.popup-sub-menu .popup-menu-item:ltr {
padding-right: 0em;
}
.popup-sub-menu .popup-menu-item:rtl {
padding-left: 0em;
}
.popup-sub-menu StScrollBar {
padding: 4px;
}
.popup-sub-menu StScrollBar StBin#trough {
border-width: 0px;
}
.popup-sub-menu StScrollBar StBin#vhandle {
background-color: #4c4c4c;
border-width: 0px;
background-color: #606060;
}
/* The remaining popup-menu sizing is all done in ems, so that if you
@@ -187,7 +154,6 @@ StTooltip StLabel {
}
.popup-inactive-menu-item {
font-weight: normal;
color: #999;
}
@@ -799,7 +765,7 @@ StTooltip StLabel {
#calendarArea {
/* this is the width of the entire popup */
min-width: 600px;
width: 600px;
}
.calendar-vertical-separator {
@@ -937,13 +903,11 @@ StTooltip StLabel {
}
.events-header-vbox {
spacing: 6pt;
padding-right: 1.75em;
spacing: 8px;
}
.events-header-vbox:rtl {
padding-right: 0em;
padding-left: 1.75em;
.events-header {
height: 40px;
}
.events-header-hbox {
@@ -988,17 +952,17 @@ StTooltip StLabel {
}
.events-day-name-box {
min-width: 15pt;
width: 20px;
}
.events-time-box {
min-width: 53pt;
padding-right: 6pt;
width: 70px;
padding-right: 8px;
}
.events-time-box:rtl {
padding-right: 0px;
padding-left: 6pt;
padding-left: 8px;
}
.events-event-box {

View File

@@ -0,0 +1,113 @@
<?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>

After

Width:  |  Height:  |  Size: 3.7 KiB

113
data/theme/mosaic-view.svg Normal file
View File

@@ -0,0 +1,113 @@
<?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>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -0,0 +1,89 @@
<?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>

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -2,62 +2,24 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="119.97824"
height="119.97824"
id="svg7355"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="running-indicator.svg">
<metadata
id="metadata4175">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#2c1cff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1141"
id="namedview4173"
showgrid="false"
inkscape:zoom="8.1348081"
inkscape:cx="81.120662"
inkscape:cy="58.117986"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1"
inkscape:current-layer="g30864" />
version="1.1">
<defs
id="defs7357">
<radialGradient
xlink:href="#linearGradient36429"
id="radialGradient7461"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.011539,0,0,0.57582113,-0.39262194,71.83807)"
cx="47.428951"
cy="167.16817"
fx="47.428951"
fy="167.16817"
gradientTransform="matrix(1.0525552,0,0,1.0525552,-2.5162753,-9.0000838)"
cx="47.878681"
cy="171.25"
fx="47.878681"
fy="171.25"
r="37" />
<linearGradient
id="linearGradient36429">
@@ -97,7 +59,7 @@
fx="49.067139"
cy="242.50381"
cx="49.067139"
gradientTransform="matrix(1.1891549,0,0,0.15252127,-9.281289,132.52772)"
gradientTransform="matrix(1.1891549,0,0,0.55513246,-9.281289,36.12653)"
gradientUnits="userSpaceOnUse"
id="radialGradient7488"
xlink:href="#linearGradient36471" />
@@ -110,21 +72,19 @@
id="g30864"
transform="translate(255.223,70.118091)">
<rect
ry="3.4593496"
rx="3.4593496"
y="99.596962"
x="12.596948"
height="71.116341"
width="71.116341"
ry="3.5996203"
rx="3.5996203"
y="98"
x="11"
height="74"
width="74"
id="rect14000"
style="opacity:0.37187500000000001;fill:url(#radialGradient7461);fill-opacity:1;stroke:none" />
style="opacity:0.371875;fill:url(#radialGradient7461);fill-opacity:1;stroke:none" />
<path
id="rect34520"
d="m 83.273151,166.72152 c 0,1.96759 -1.584022,3.55163 -3.551629,3.55163 l -63.443032,0 c -1.967608,0 -3.551648,-1.58402 -3.551643,-3.55164 0,-5.85318 0,-5.85318 0,0"
style="opacity:0.35;fill:none;stroke:url(#radialGradient7488);stroke-width:1;stroke-opacity:1"
connector-curvature="0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccscc" />
d="m 84.506708,167.95508 c 6e-6,1.96759 -1.584022,3.55162 -3.551629,3.55163 l -65.910146,0 c -1.967608,-1e-5 -3.551648,-1.58402 -3.551643,-3.55164"
style="opacity:0.2;fill:none;stroke:url(#radialGradient7488);stroke-width:1;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

View File

@@ -0,0 +1,87 @@
<?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>

After

Width:  |  Height:  |  Size: 2.8 KiB

87
data/theme/section-more.svg Executable file
View File

@@ -0,0 +1,87 @@
<?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>

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 B

View File

@@ -0,0 +1,81 @@
<?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>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,81 @@
<?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>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -13,8 +13,8 @@
height="22"
id="svg3199"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="toggle-on-intl.svg">
inkscape:version="0.47 r22583"
sodipodi:docname="New document 11">
<defs
id="defs3201">
<inkscape:perspective
@@ -39,14 +39,14 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="49.147112"
inkscape:cy="17.532036"
inkscape:zoom="0.35"
inkscape:cx="32.500004"
inkscape:cy="10.999997"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1412"
inkscape:window-height="1067"
inkscape:window-width="609"
inkscape:window-height="501"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="0" />
@@ -58,7 +58,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
@@ -72,7 +72,7 @@
transform="translate(-453.5,448.36218)"
id="g16453">
<rect
style="color:#000000;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
style="color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect16256-9-4"
width="63.000004"
height="19"

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -13,8 +13,8 @@
height="22"
id="svg2857"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="toggle-on-us.svg">
inkscape:version="0.47 r22583"
sodipodi:docname="New document 2">
<defs
id="defs2859">
<inkscape:perspective
@@ -40,18 +40,16 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="19.689855"
inkscape:cy="2.0517979"
inkscape:cx="-69.642856"
inkscape:cy="42.428569"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="941"
inkscape:window-height="751"
inkscape:window-x="2577"
inkscape:window-y="206"
inkscape:window-maximized="0"
borderlayer="true"
inkscape:showpageshadow="false" />
inkscape:window-width="609"
inkscape:window-height="501"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="0" />
<metadata
id="metadata2862">
<rdf:RDF>
@@ -60,7 +58,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
@@ -74,7 +72,7 @@
transform="translate(-351.35714,708.36218)"
id="g16453">
<rect
style="color:#000000;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
style="color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect16256-9-4"
width="63.000004"
height="19"

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -10,7 +10,9 @@ nobase_dist_js_DATA = \
misc/history.js \
misc/modemManager.js \
misc/params.js \
misc/semantic.js \
misc/util.js \
misc/zeitgeist.js \
perf/core.js \
ui/altTab.js \
ui/appDisplay.js \
@@ -22,7 +24,6 @@ nobase_dist_js_DATA = \
ui/dash.js \
ui/dateMenu.js \
ui/dnd.js \
ui/docDisplay.js \
ui/endSessionDialog.js \
ui/environment.js \
ui/extensionSystem.js \
@@ -64,4 +65,5 @@ nobase_dist_js_DATA = \
ui/workspaceThumbnail.js \
ui/workspacesView.js \
ui/workspaceSwitcherPopup.js \
ui/xdndHandler.js
ui/xdndHandler.js \
ui/zeitgeistSearch.js

View File

@@ -1,36 +1,32 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
const Signals = imports.signals;
const Search = imports.ui.search;
const THUMBNAIL_ICON_MARGIN = 2;
function DocInfo(recentInfo) {
this._init(recentInfo);
function ZeitgeistItemInfo(event) {
this._init(event);
}
DocInfo.prototype = {
_init : function(recentInfo) {
this.recentInfo = recentInfo;
// We actually used get_modified() instead of get_visited()
// here, as GtkRecentInfo doesn't updated get_visited()
// correctly. See http://bugzilla.gnome.org/show_bug.cgi?id=567094
this.timestamp = recentInfo.get_modified();
this.name = recentInfo.get_display_name();
ZeitgeistItemInfo.prototype = {
_init : function(event) {
this.event = event;
this.subject = event.subjects[0];
this.timestamp = event.timestamp;
this.name = this.subject.text;
this._lowerName = this.name.toLowerCase();
this.uri = recentInfo.get_uri();
this.mimeType = recentInfo.get_mime_type();
this.uri = this.subject.uri;
this.mimeType = this.subject.mimetype;
this.interpretation = this.subject.interpretation;
},
createIcon : function(size) {
return St.TextureCache.get_default().load_recent_thumbnail(size, this.recentInfo);
return St.TextureCache.get_default().load_thumbnail(size, this.uri, this.subject.mimetype);
// FIXME: We should consider caching icons
},
launch : function(workspaceIndex) {
Shell.DocSystem.get_default().open(this.recentInfo, workspaceIndex);
launch : function() {
Gio.app_info_launch_default_for_uri(this.uri,
global.create_app_launch_context());
},
matchTerms: function(terms) {
@@ -48,93 +44,5 @@ DocInfo.prototype = {
}
}
return mtype;
}
},
};
var docManagerInstance = null;
function getDocManager() {
if (docManagerInstance == null)
docManagerInstance = new DocManager();
return docManagerInstance;
}
/**
* DocManager wraps the DocSystem, primarily to expose DocInfo objects.
*/
function DocManager() {
this._init();
}
DocManager.prototype = {
_init: function() {
this._docSystem = Shell.DocSystem.get_default();
this._infosByTimestamp = [];
this._infosByUri = {};
this._docSystem.connect('changed', Lang.bind(this, this._reload));
this._reload();
},
_reload: function() {
let docs = this._docSystem.get_all();
this._infosByTimestamp = [];
this._infosByUri = {};
for (let i = 0; i < docs.length; i++) {
let recentInfo = docs[i];
let docInfo = new DocInfo(recentInfo);
this._infosByTimestamp.push(docInfo);
this._infosByUri[docInfo.uri] = docInfo;
}
this.emit('changed');
},
getTimestampOrderedInfos: function() {
return this._infosByTimestamp;
},
getInfosByUri: function() {
return this._infosByUri;
},
lookupByUri: function(uri) {
return this._infosByUri[uri];
},
queueExistenceCheck: function(count) {
return this._docSystem.queue_existence_check(count);
},
_searchDocs: function(items, terms) {
let multiplePrefixMatches = [];
let prefixMatches = [];
let multipleSubtringMatches = [];
let substringMatches = [];
for (let i = 0; i < items.length; i++) {
let item = items[i];
let mtype = item.matchTerms(terms);
if (mtype == Search.MatchType.MULTIPLE_PREFIX)
multiplePrefixMatches.push(item.uri);
else if (mtype == Search.MatchType.PREFIX)
prefixMatches.push(item.uri);
else if (mtype == Search.MatchType.MULTIPLE_SUBSTRING)
multipleSubtringMatches.push(item.uri);
else if (mtype == Search.MatchType.SUBSTRING)
substringMatches.push(item.uri);
}
return multiplePrefixMatches.concat(prefixMatches.concat(multipleSubtringMatches.concat(substringMatches)));
},
initialSearch: function(terms) {
return this._searchDocs(this._infosByTimestamp, terms);
},
subsearch: function(previousResults, terms) {
return this._searchDocs(previousResults.map(Lang.bind(this,
function(url) {
return this._infosByUri[url];
})), terms);
}
};
Signals.addSignalMethods(DocManager.prototype);

View File

@@ -109,8 +109,7 @@ const SessionManagerIface = {
name: 'org.gnome.SessionManager',
methods: [
{ name: 'Logout', inSignature: 'u', outSignature: '' },
{ name: 'Shutdown', inSignature: '', outSignature: '' },
{ name: 'CanShutdown', inSignature: '', outSignature: 'b' }
{ name: 'Shutdown', inSignature: '', outSignature: '' }
]
};

View File

@@ -77,9 +77,9 @@ HistoryManager.prototype = {
this._history[this._history.length - 1] != input) {
this._history.push(input);
this._historyIndex = this._history.length;
this._save();
}
this._historyIndex = this._history.length;
}
},
_onEntryKeyPress: function(entry, event) {

43
js/misc/semantic.js Normal file
View File

@@ -0,0 +1,43 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
*
* Semantic-desktop interpretations for various data types
*
* Authors: Federico Mena Quintero <federico@gnome.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
const NFO_AUDIO = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Audio";
const NFO_DOCUMENT = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Document";
const NFO_HTML_DOCUMENT = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#HtmlDocument";
const NFO_IMAGE = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Image";
const NFO_MEDIA = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Media";
const NFO_MIND_MAP = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#MindMap";
const NFO_PAGINATED_TEXT_DOCUMENT = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#PaginatedTextDocument";
const NFO_PLAIN_TEXT_DOCUMENT = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#PlainTextDocument";
const NFO_PRESENTATION = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Presentation";
const NFO_RASTER_IMAGE = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#RasterImage";
const NFO_SOURCE_CODE = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#SourceCode";
const NFO_SPREADSHEET = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Spreadsheet";
const NFO_TEXT_DOCUMENT = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#TextDocument";
const NFO_VECTOR_IMAGE = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#VectorImage";
const NFO_VIDEO = "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Video";
const NMM_CURSOR = "http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#Cursor";
const NMM_ICON = "http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#Icon";
const NMM_MOVIE = "http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#Movie";
const NMM_MUSIC_PIECE = "http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#MusicPiece";
const NMM_TV_SHOW = "http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#TVShow";

View File

@@ -7,6 +7,9 @@ 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');
@@ -45,7 +48,7 @@ function spawn(argv) {
// occur when trying to parse or start the program.
function spawnCommandLine(command_line) {
try {
let [success, argv] = GLib.shell_parse_argv(command_line);
let [success, argc, argv] = GLib.shell_parse_argv(command_line);
trySpawn(argv);
} catch (err) {
_handleSpawnError(command_line, err);
@@ -85,10 +88,10 @@ function trySpawn(argv)
// Runs @command_line in the background. If launching @command_line
// fails, this will throw an error.
function trySpawnCommandLine(command_line) {
let success, argv;
let success, argc, argv;
try {
[success, argv] = GLib.shell_parse_argv(command_line);
[success, argc, argv] = GLib.shell_parse_argv(command_line);
} catch (err) {
// Replace "Error invoking GLib.shell_parse_argv: " with
// something nicer
@@ -147,7 +150,7 @@ const _IGNORED_WORDS = [
'Incorporated',
'Ltd.',
'Limited.',
'Intel',
'Intel?',
'chipset',
'adapter',
'[hex]',
@@ -178,7 +181,7 @@ const _IGNORED_PHRASES = [
];
function fixupPCIDescription(desc) {
desc = desc.replace(/[_,]/, ' ');
desc.replace(/[_,]/, ' ');
/* Attempt to shorten ID by ignoring certain phrases */
for (let i = 0; i < _IGNORED_PHRASES.length; i++) {
@@ -194,7 +197,7 @@ function fixupPCIDescription(desc) {
/* Attmept to shorten ID by ignoring certain individual words */
let words = desc.split(' ');
let out = [ ];
for (let i = 0; i < words.length; i++) {
for (let i = 0; i < words; i++) {
let item = words[i];
// skip empty items (that come out from consecutive spaces)

264
js/misc/zeitgeist.js Normal file
View File

@@ -0,0 +1,264 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
*
* Copyright (C) 2010 Seif Lotfy <seif@lotfy.com>
* Copyright (C) 2011 Siegfried-Angel Gevatter Pujals <siegfried@gevatter.com>
* Copyright (C) 2010-2011 Collabora Ltd.
* Authored by: Seif Lotfy <seif@lotfy.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
const DBus = imports.dbus;
const SIG_EVENT = '(asaasay)';
const MAX_TIMESTAMP = 9999999999999;
// Number of results given by fullTextSearch; 100 is probably enough.
// Note: We can't currently increase this number to anything above 132, due to
// https://bugs.launchpad.net/zeitgeist-extensions/+bug/716503
const MAX_RESULTS = 100;
const ResultType = {
// http://zeitgeist-project.com/docs/0.6/datamodel.html#resulttype
// It's unfortunate to have to define these by hand; maybe if D-Bus had a way to introspect enums...
MOST_RECENT_EVENTS : 0,
LEAST_RECENT_EVENTS : 1,
MOST_RECENT_SUBJECTS : 2,
LEAST_RECENT_SUBJECTS : 3,
MOST_POPULAR_SUBJECTS : 4,
LEAST_POPULAR_SUBJECTS : 5,
MOST_POPULAR_ACTOR : 6,
LEAST_POPULAR_ACTOR : 7,
MOST_RECENT_ACTOR : 8,
LEAST_RECENT_ACTOR : 9,
MOST_RECENT_ORIGIN : 10,
LEAST_RECENT_ORIGIN : 11,
MOST_POPULAR_ORIGIN : 12,
LEAST_POPULAR_ORIGIN : 13,
OLDEST_ACTOR : 14,
MOST_RECENT_SUBJECT_INTERPRETATION : 15,
LEAST_RECENT_SUBJECT_INTERPRETATION : 16,
MOST_POPULAR_SUBJECT_INTERPRETATION : 17,
LEAST_POPULAR_SUBJECT_INTERPRETATION : 18,
MOST_RECENT_MIME_TYPE : 19,
LEAST_RECENT_MIME_TYPE : 20,
MOST_POPULAR_MIME_TYPE : 21,
LEAST_POPULAR_MIME_TYPE : 22
};
const StorageState = {
// http://zeitgeist-project.com/docs/0.6/datamodel.html#storagestate
// As with ResultType, it would be nice if we could introspect enums through D-Bus
NOT_AVAILABLE : 0,
AVAILABLE : 1,
ANY : 2
};
/* Zeitgeist Subjects (files, people, etc.) */
function Subject(uri, interpretation, manifestation, origin, mimetype, text, storage) {
this._init(uri, interpretation, manifestation, origin, mimetype, text, storage);
};
Subject.prototype = {
_init: function(uri, interpretation, manifestation, origin, mimetype, text, storage) {
this.uri = uri;
this.interpretation = interpretation;
this.manifestation = manifestation;
this.origin = origin;
this.mimetype = mimetype;
this.text = text;
this.storage = storage;
},
};
Subject.fromPlain = function(rawSubject) {
return new Subject(rawSubject[0], // uri
rawSubject[1], // interpretation
rawSubject[2], // manifestation
rawSubject[3], // origin
rawSubject[4], // mimetype
rawSubject[5], // text
rawSubject[6]); // storage
};
Subject.toPlain = function(subject) {
let rawSubject = [];
rawSubject[0] = subject.uri;
rawSubject[1] = subject.interpretation;
rawSubject[2] = subject.manifestation
rawSubject[3] = subject.origin;
rawSubject[4] = subject.mimetype;
rawSubject[5] = subject.text;
rawSubject[6] = subject.storage;
return rawSubject;
};
/* Zeitgeist Events */
function Event(interpretation, manifestation, actor, subjects, payload) {
this._init(interpretation, manifestation, actor, subjects, payload);
};
Event.prototype = {
_init: function(interpretation, manifestation, actor, subjects, payload) {
this.id = 0;
this.timestamp = 0;
this.actor = actor;
this.interpretation = interpretation;
this.manifestation = manifestation;
this.actor = actor;
this.payload = payload;
this.subjects = subjects;
},
};
Event.fromPlain = function(rawEvent) {
let subjects = rawEvent[1].map(Subject.fromPlain);
let event = new Event(rawEvent[0][2], // interpretation
rawEvent[0][3], // manifestation
rawEvent[0][4], // actor
subjects, // subjects
rawEvent[2]);// payload
event.id = rawEvent[0][0]; // id
event.timestamp = parseInt(rawEvent[0][1], 10); // timestamp - it comes as a string over d-bus (yuck)
return event;
};
Event.toPlain = function(event) {
let rawEvent = [];
rawEvent[0] = [];
rawEvent[0][0] = event.id.toString();
rawEvent[0][1] = event.timestamp.toString();
rawEvent[0][2] = event.interpretation;
rawEvent[0][3] = event.manifestation;
rawEvent[0][4] = event.actor;
rawEvent[1] = event.subjects.map(Subject.toPlain);
rawEvent[2] = event.payload;
return rawEvent;
};
// Zeitgeist D-Bus interface definitions. Note that most of these are
// incomplete, and only cover the methods/properties/signals that
// we're currently using.
/* Zeitgeist D-Bus Interface */
const LOG_NAME = 'org.gnome.zeitgeist.Engine';
const LOG_PATH = '/org/gnome/zeitgeist/log/activity';
const LogIface = {
name: 'org.gnome.zeitgeist.Log',
methods: [
{ name: 'GetEvents',
inSignature: 'au',
outSignature: 'a'+SIG_EVENT },
{ name: 'FindRelatedUris',
inSignature: 'au',
outSignature: '(xx)a(' + SIG_EVENT + ')a'+ SIG_EVENT + 'uuu' },
{ name: 'FindEventIds',
inSignature: '(xx)a' + SIG_EVENT + 'uuu',
outSignature: 'au' },
{ name: 'FindEvents',
inSignature: '(xx)a' + SIG_EVENT + 'uuu',
outSignature: 'a' + SIG_EVENT },
{ name: 'InsertEvents',
inSignature: 'a' + SIG_EVENT,
outSignature: 'au' },
{ name: 'DeleteEvents',
inSignature: 'au',
outSignature: '(xx)' },
{ name: 'DeleteLog',
inSignature: '',
outSignature: '' },
{ name: 'Quit',
inSignature: '',
outSignature: '' },
// FIXME: Add missing DBus Methods
// - InstallMonitor
// - RemoveMonitor
],
properties: [
{ name: 'Get',
inSignature: 'ss',
outSignature: 'v',
access: 'read' },
{ name: 'Set',
inSignature: 'ssv',
outSignature: '',
access: 'read' },
{ name: 'GetAll',
inSignature: 's',
outSignature: 'a{sv}',
access: 'read' },
]
};
const Log = DBus.makeProxyClass(LogIface);
const _log = new Log(DBus.session, LOG_NAME, LOG_PATH);
function findEvents(timeRange, eventTemplates, storageState, numEvents, resultType, callback) {
function handler(results, error) {
if (error != null)
log("Error querying Zeitgeist for events: "+error);
else
callback(results.map(Event.fromPlain));
}
_log.FindEventsRemote(timeRange, eventTemplates.map(Event.toPlain),
storageState, numEvents, resultType, handler);
}
/* Zeitgeist Full-Text-Search Interface */
const INDEX_NAME = 'org.gnome.zeitgeist.Engine';
const INDEX_PATH = '/org/gnome/zeitgeist/index/activity';
const IndexIface = {
name: 'org.gnome.zeitgeist.Index',
methods: [
{ name: 'Search',
inSignature: 's(xx)a'+SIG_EVENT+'uuu',
outSignature: 'a'+SIG_EVENT+'u' },
],
};
const Index = DBus.makeProxyClass(IndexIface);
const _index = new Index(DBus.session, INDEX_NAME, INDEX_PATH);
/**
* fullTextSearch:
*
* Asynchronously search Zeitgeist's index for events relating to the query.
*
* @param query The query string, using asterisks for wildcards. Wildcards must
* be used at the start and/or end of a string to get relevant information.
* @param eventTemplates Zeitgeist event templates, see
* http://zeitgeist-project.com/docs/0.6/datamodel.html#event for more
* information
* @param callback The callback, takes a list containing Zeitgeist.Event
* objects
*/
function fullTextSearch(query, eventTemplates, callback) {
function handler(results, error) {
if (error != null)
log("Error searching with Zeitgeist FTS: "+error);
else
callback(results[0].map(Event.fromPlain));
}
_index.SearchRemote(query, [0, MAX_TIMESTAMP],
eventTemplates.map(Event.toPlain),
0, // offset into the search results
MAX_RESULTS,
ResultType.MOST_POPULAR_SUBJECTS, handler);
}

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 - rightPadding, childBox.x1 + childNaturalWidth);
childBox.x2 = Math.min(primary.x + primary.width - hPadding, childBox.x1 + childNaturalWidth);
childBox.y1 = primary.y + Math.floor((primary.height - childNaturalHeight) / 2);
childBox.y2 = childBox.y1 + childNaturalHeight;
this._appSwitcher.actor.allocate(childBox, flags);
@@ -97,6 +97,8 @@ AltTabPopup.prototype = {
// those calculations
if (this._thumbnails) {
let icon = this._appIcons[this._currentApp].actor;
// Force a stage relayout to make sure we get the correct position
global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, 0, 0);
let [posX, posY] = icon.get_transformed_position();
let thumbnailCenter = posX + icon.width / 2;
let [childMinWidth, childNaturalWidth] = this._thumbnails.actor.get_preferred_width(-1);
@@ -143,12 +145,6 @@ 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) {
@@ -160,11 +156,29 @@ AltTabPopup.prototype = {
this._select(0, 0);
}
} else if (this._appIcons.length == 1) {
this._select(0);
if (!backward && this._appIcons[0].cachedWindows.length > 1) {
// For compatibility with the multi-app case below
this._select(0, 1, true);
} else
this._select(0);
} else if (backward) {
this._select(this._appIcons.length - 1);
} else {
this._select(1);
let firstWindows = this._appIcons[0].cachedWindows;
if (firstWindows.length > 1) {
let curAppNextWindow = firstWindows[1];
let nextAppWindow = this._appIcons[1].cachedWindows[0];
// If the next window of the current app is more-recently-used
// than the first window of the next app, then select it.
if (curAppNextWindow.get_workspace() == global.screen.get_active_workspace() &&
curAppNextWindow.get_user_time() > nextAppWindow.get_user_time())
this._select(0, 1, true);
else
this._select(1);
} else {
this._select(1);
}
}
// There's a race condition; if the user released Alt before
@@ -178,6 +192,8 @@ AltTabPopup.prototype = {
return false;
}
this.actor.opacity = 0;
this.actor.show();
Tweener.addTween(this.actor,
{ opacity: 255,
time: POPUP_FADE_TIME,
@@ -217,21 +233,33 @@ AltTabPopup.prototype = {
this._disableHover();
if (keysym == Clutter.Escape) {
this.destroy();
} else if (action == Meta.KeyBindingAction.SWITCH_GROUP) {
if (action == Meta.KeyBindingAction.SWITCH_GROUP)
this._select(this._currentApp, backwards ? this._previousWindow() : this._nextWindow());
} else if (action == Meta.KeyBindingAction.SWITCH_WINDOWS) {
this._select(backwards ? this._previousApp() : this._nextApp());
} else if (this._thumbnailsFocused) {
if (keysym == Clutter.Left)
else if (keysym == Clutter.Escape)
this.destroy();
else if (this._thumbnailsFocused) {
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS)
if (backwards) {
if (this._currentWindow == 0 || this._currentWindow == -1)
this._select(this._previousApp());
else
this._select(this._currentApp, this._previousWindow());
} else {
if (this._currentWindow == this._appIcons[this._currentApp].cachedWindows.length - 1)
this._select(this._nextApp());
else
this._select(this._currentApp, this._nextWindow());
}
else if (keysym == Clutter.Left)
this._select(this._currentApp, this._previousWindow());
else if (keysym == Clutter.Right)
this._select(this._currentApp, this._nextWindow());
else if (keysym == Clutter.Up)
this._select(this._currentApp, null, true);
} else {
if (keysym == Clutter.Left)
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS)
this._select(backwards ? this._previousApp() : this._nextApp());
else if (keysym == Clutter.Left)
this._select(this._previousApp());
else if (keysym == Clutter.Right)
this._select(this._nextApp());
@@ -573,7 +601,7 @@ SwitcherList.prototype = {
this._rightArrow.opacity = this._rightGradient.opacity;
},
addItem : function(item, label) {
addItem : function(item) {
let bbox = new St.Button({ style_class: 'item-box',
reactive: true });
@@ -584,8 +612,6 @@ 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);
},
@@ -971,7 +997,7 @@ AppSwitcher.prototype = {
_addIcon : function(appIcon) {
this.icons.push(appIcon);
this.addItem(appIcon.actor, appIcon.label);
this.addItem(appIcon.actor);
let n = this._arrows.length;
let arrow = new St.DrawingArea({ style_class: 'switcher-arrow' });
@@ -1041,12 +1067,9 @@ 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

@@ -2,16 +2,19 @@
const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
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;
const DocInfo = imports.misc.docInfo;
const IconGrid = imports.ui.iconGrid;
const Main = imports.ui.main;
const Overview = imports.ui.overview;
@@ -20,8 +23,8 @@ const Search = imports.ui.search;
const Tweener = imports.ui.tweener;
const Workspace = imports.ui.workspace;
const Params = imports.misc.params;
const Zeitgeist = imports.misc.zeitgeist;
const MAX_APPLICATION_WORK_MILLIS = 75;
const MENU_POPUP_TIMEOUT = 600;
const SCROLL_TIME = 0.1;
@@ -34,8 +37,6 @@ AlphabeticalView.prototype = {
this._grid = new IconGrid.IconGrid({ xAlign: St.Align.START });
this._appSystem = Shell.AppSystem.get_default();
this._pendingAppLaterId = 0;
this._apps = [];
this._filterApp = null;
let box = new St.BoxLayout({ vertical: true });
@@ -44,7 +45,7 @@ AlphabeticalView.prototype = {
this.actor = new St.ScrollView({ x_fill: true,
y_fill: false,
y_align: St.Align.START,
style_class: 'vfade' });
vfade: true });
this.actor.add_actor(box);
this.actor.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
this.actor.connect('notify::mapped', Lang.bind(this,
@@ -111,30 +112,6 @@ AlphabeticalView.prototype = {
this._apps[i].actor.visible = filter(this._apps[i]._appInfo);
},
// Create actors for the applications in an idle to avoid blocking
// for too long; see bug 647778
_addPendingApps: function() {
let i;
let startTimeMillis = new Date().getTime();
for (i = 0; i < this._pendingAppIds.length; i++) {
let id = this._pendingAppIds[i];
this._addApp(this._pendingApps[id]);
let currentTimeMillis = new Date().getTime();
if (currentTimeMillis - startTimeMillis > MAX_APPLICATION_WORK_MILLIS)
break;
}
this._pendingAppIds.splice(0, i + 1);
if (this._pendingAppIds.length > 0) {
return true;
} else {
this._pendingAppLaterId = 0;
this._pendingAppIds = null;
this._pendingApps = null;
return false;
}
},
refresh: function(apps) {
let ids = [];
for (let i in apps)
@@ -145,12 +122,9 @@ AlphabeticalView.prototype = {
this._removeAll();
this._pendingAppIds = ids;
this._pendingApps = apps;
if (this._pendingAppLaterId)
Meta.later_remove(this._pendingAppLaterId);
this._pendingAppLaterId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
Lang.bind(this, this._addPendingApps));
for (let i = 0; i < ids.length; i++) {
this._addApp(apps[ids[i]]);
}
}
};
@@ -253,6 +227,7 @@ ViewByCategories.prototype = {
let sections = this._appSystem.get_sections();
this._apps = apps;
this._view.refresh(apps);
/* Translators: Filter to display all applications */
this._addFilter(_("All"), -1);
@@ -264,7 +239,6 @@ ViewByCategories.prototype = {
this._addFilter(sections[i], i);
this._selectCategory(-1);
this._view.refresh(apps);
if (this._focusDummy) {
let focused = this._focusDummy.has_key_focus();
@@ -342,7 +316,7 @@ BaseAppSearchProvider.prototype = {
timestamp: null });
let app = this._appSys.get_app(id);
app.open_new_window(params.workspace ? params.workspace.index() : -1);
app.open_new_window(params.workspace ? params.workspace.get_index() : -1);
}
};
@@ -432,8 +406,6 @@ 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));
@@ -613,6 +585,7 @@ AppIconMenu.prototype = {
this.blockSourceEvents = true;
this._source = source;
this._eventTemplate = new Zeitgeist.Event('', '', "application://" + this._source.app.get_id(), [], []);
this.connect('activate', Lang.bind(this, this._onActivate));
this.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
@@ -659,6 +632,63 @@ AppIconMenu.prototype = {
this._toggleFavoriteMenuItem = this._appendMenuItem(isFavorite ? _("Remove from Favorites")
: _("Add to Favorites"));
Zeitgeist.findEvents([new Date().getTime() - 86400000*90, Zeitgeist.MAX_TIMESTAMP],
[this._eventTemplate],
Zeitgeist.StorageState.ANY,
100,
Zeitgeist.ResultType.MOST_RECENT_SUBJECTS,
Lang.bind(this, this._appendJumplist));
},
_appendJumplist: function (events) {
let fetchedUris = [];
let hasJumplist = false;
function appendEvents(events2, count, type) {
if (count == null) {
count = 3;
}
if (type == null) {
type = "emblem-favorite";
}
let j = 0;
if (events.length > 0) {
for (let i in events) {
let uri = events[i].subjects[0].uri.replace('file://', '');
uri = uri.replace(/\%20/g, ' '); // FIXME: properly unescape, or get the display name otherwise
if (fetchedUris.indexOf(uri) == -1 &&
(GLib.file_test(uri, GLib.FileTest.EXISTS) || this._source.app.get_id() == "tomboy.desktop")) {
if (!hasJumplist) {
this._appendSeparator();
hasJumplist = true;
}
this._appendJumplistItem(events[i], type);
fetchedUris.push(uri);
j++;
if (j >= count)
break;
}
}
}
}
appendEvents.call(this, events, 4, "document-open-recent");
Zeitgeist.findEvents([new Date().getTime() - 86400000*90, Zeitgeist.MAX_TIMESTAMP],
[this._eventTemplate],
Zeitgeist.StorageState.ANY,
100,
Zeitgeist.ResultType.MOST_POPULAR_SUBJECTS,
Lang.bind(this, appendEvents));
},
_appendJumplistItem: function (event, type) {
let info = new DocInfo.ZeitgeistItemInfo(event);
let item = new PopupMenu.PopupImageMenuItem(info.name, type);
this.addMenuItem(item);
item.connect('activate', Lang.bind(this, function () {
let app = new Gio.DesktopAppInfo.new(this._source.app.get_id());
app.launch_uris([info.uri], null);
}));
},
_appendSeparator: function () {

View File

@@ -3,6 +3,8 @@
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,6 +8,9 @@ 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

@@ -14,6 +14,7 @@ const Params = imports.misc.params;
// workspace content.
const defaultParams = {
visibleInOverview: false,
visibleInFullscreen: false,
affectsStruts: true,
affectsInputRegion: true
@@ -72,8 +73,11 @@ Chrome.prototype = {
// in its visibility will affect the input region, but NOT the
// struts.
//
// If %visibleInFullscreen is %true, the actor will be visible
// even when a fullscreen window should be covering it.
// If %visibleInOverview is %true in @params, @actor will remain
// visible when the overview is brought up. Otherwise it will
// automatically be hidden. Likewise, if %visibleInFullscreen is
// %true, the actor will be visible even when a fullscreen window
// should be covering it.
//
// If %affectsStruts or %affectsInputRegion is %false, the actor
// will not have the indicated effect.
@@ -92,7 +96,7 @@ Chrome.prototype = {
//
// @params can have any of the same values as in addActor(), though
// some possibilities don't make sense (eg, trying to have a
// %visibleInFullscreen child of a non-%visibleInFullscreen parent).
// %visibleInOverview child of a non-%visibleInOverview parent).
// By default, @actor has the same params as its chrome ancestor.
trackActor: function(actor, params) {
let ancestor = actor.get_parent();
@@ -185,8 +189,10 @@ Chrome.prototype = {
_updateVisibility: function() {
for (let i = 0; i < this._trackedActors.length; i++) {
let actorData = this._trackedActors[i];
if (!this._inOverview && !actorData.visibleInFullscreen &&
this._findMonitorForActor(actorData.actor).inFullscreen)
if (this._inOverview && !actorData.visibleInOverview)
this.actor.set_skip_paint(actorData.actor, true);
else if (!this._inOverview && !actorData.visibleInFullscreen &&
this._findMonitorForActor(actorData.actor).inFullscreen)
this.actor.set_skip_paint(actorData.actor, true);
else
this.actor.set_skip_paint(actorData.actor, false);
@@ -329,6 +335,11 @@ Chrome.prototype = {
this._updateVisibility();
this._queueUpdateRegions();
}
// Figure out where the pointer is in case we lost track of
// it during a grab. (In particular, if a trayicon popup menu
// is dismissed, see if we need to close the message tray.)
global.sync_pointer();
},
_updateRegions: function() {

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, text);
this.addItem(box);
}
};

View File

@@ -6,6 +6,8 @@ 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;
@@ -324,7 +326,7 @@ Dash.prototype = {
this._favRemoveTarget = null;
}));
}
DND.removeDragMonitor(this._dragMonitor);
DND.removeMonitor(this._dragMonitor);
},
_onDragMotion: function(dragEvent) {
@@ -342,10 +344,7 @@ Dash.prototype = {
let srcIsFavorite = (id in favorites);
if (srcIsFavorite &&
dragEvent.source.actor &&
this.actor.contains (dragEvent.source.actor) &&
this._favRemoveTarget == null) {
if (srcIsFavorite && this._favRemoveTarget == null) {
this._favRemoveTarget = new RemoveFavoriteIcon();
this._favRemoveTarget.icon.setIconSize(this.iconSize);
this._box.add(this._favRemoveTarget.actor);

View File

@@ -8,6 +8,8 @@ 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;
@@ -198,7 +200,6 @@ DateMenuButton.prototype = {
_onPreferencesActivate: function() {
this.menu.close();
Main.overview.hide();
let app = Shell.AppSystem.get_default().get_app('gnome-datetime-panel.desktop');
app.activate(-1);
},

View File

@@ -61,7 +61,7 @@ function addDragMonitor(monitor) {
dragMonitors.push(monitor);
}
function removeDragMonitor(monitor) {
function removeMonitor(monitor) {
for (let i = 0; i < dragMonitors.length; i++)
if (dragMonitors[i] == monitor) {
dragMonitors.splice(i, 1);
@@ -284,13 +284,13 @@ _Draggable.prototype = {
this._dragOffsetY = actorStageY - this._dragStartY;
// Set the actor's scale such that it will keep the same
// transformed size when it's reparented to the uiGroup
// transformed size when it's reparented to the stage
let [scaledWidth, scaledHeight] = this.actor.get_transformed_size();
this.actor.set_scale(scaledWidth / this.actor.width,
scaledHeight / this.actor.height);
}
this._dragActor.reparent(Main.uiGroup);
this._dragActor.reparent(this.actor.get_stage());
this._dragActor.raise_top();
Shell.util_set_hidden_from_pick(this._dragActor, true);
@@ -442,7 +442,7 @@ _Draggable.prototype = {
return true;
// If it accepted the drop without taking the actor,
// handle it ourselves.
if (this._dragActor.get_parent() == Main.uiGroup) {
if (this._dragActor.get_parent() == this._dragActor.get_stage()) {
if (this._restoreOnSuccess) {
this._restoreDragActor(event.get_time());
return true;

View File

@@ -1,47 +0,0 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const DocInfo = imports.misc.docInfo;
const Params = imports.misc.params;
const Search = imports.ui.search;
function DocSearchProvider() {
this._init();
}
DocSearchProvider.prototype = {
__proto__: Search.SearchProvider.prototype,
_init: function(name) {
Search.SearchProvider.prototype._init.call(this, _("RECENT ITEMS"));
this._docManager = DocInfo.getDocManager();
},
getResultMeta: function(resultId) {
let docInfo = this._docManager.lookupByUri(resultId);
if (!docInfo)
return null;
return { 'id': resultId,
'name': docInfo.name,
'createIcon': function(size) {
return docInfo.createIcon(size);
}
};
},
activateResult: function(id, params) {
params = Params.parse(params, { workspace: null,
timestamp: null });
let docInfo = this._docManager.lookupByUri(id);
docInfo.launch(params.workspace ? params.workspace.index() : -1);
},
getInitialResultSet: function(terms) {
return this._docManager.initialSearch(terms);
},
getSubsearchResultSet: function(previousResults, terms) {
return this._docManager.subsearch(previousResults, terms);
}
};

View File

@@ -22,6 +22,9 @@ 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;
@@ -363,10 +366,8 @@ EndSessionDialog.prototype = {
if (this._user.is_loaded && !dialogContent.iconName) {
let iconFile = this._user.get_icon_file();
if (GLib.file_test(iconFile, GLib.FileTest.EXISTS))
this._setIconFromFile(iconFile, dialogContent.iconStyleClass);
else
this._setIconFromName('avatar-default', dialogContent.iconStyleClass);
this._setIconFromFile(iconFile, dialogContent.iconStyleClass);
} else if (dialogContent.iconName) {
this._setIconFromName(dialogContent.iconName,
dialogContent.iconStyleClass);
@@ -405,6 +406,10 @@ EndSessionDialog.prototype = {
},
_updateButtons: function() {
if (this.state != ModalDialog.State.OPENING &&
this.state != ModalDialog.State.OPENED)
return;
let dialogContent = DialogContent[this._type];
let buttons = [{ action: Lang.bind(this, this.cancel),
label: _("Cancel"),
@@ -514,12 +519,11 @@ EndSessionDialog.prototype = {
this._inhibitors.push(inhibitor);
}
this._updateButtons();
if (!this.open(timestamp))
throw new DBus.DBusError('org.gnome.Shell.ModalDialog.GrabError',
"Cannot grab pointer and keyboard");
this._updateButtons();
this._updateContent();
let signalId = this.connect('opened',

View File

@@ -1,22 +1,14 @@
/* -*- 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');
// We can't import shell JS modules yet, because they may have
// variable initializations, etc, that depend on init() already having
// been run.
const Tweener = imports.ui.tweener;
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
@@ -39,42 +31,49 @@ function _patchContainerClass(containerClass) {
};
}
// Replace @method with something that throws an error instead
function _blockMethod(method, replacement, reason) {
let match = method.match(/^(.+)\.([^.]+)$/);
if (!match)
throw new Error('Bad method name "' + method + '"');
let proto = 'imports.gi.' + match[1] + '.prototype';
let property = match[2];
if (!global.set_property_mutable(proto, property, true))
throw new Error('Bad method name "' + method + '"');
// eval() is evil in general, but we know it's safe here since
// set_property_mutable() would have failed if proto was
// malformed.
let node = eval(proto);
let msg = 'Do not use "' + method + '".';
if (replacement)
msg += ' Use "' + replacement + '" instead.';
if (reason)
msg += ' (' + reason + ')';
node[property] = function() {
throw new Error(msg);
};
global.set_property_mutable(proto, property, false);
}
function init() {
// 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();
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 (Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL) {
St.Widget.set_default_direction(St.TextDirection.RTL);
}
// Miscellaneous monkeypatching
_patchContainerClass(St.BoxLayout);
_patchContainerClass(St.Table);
Clutter.Actor.prototype.toString = function() {
return St.describe_actor(this);
};
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;
};
Tweener.init();
String.prototype.format = Format.format;
// Work around https://bugzilla.mozilla.org/show_bug.cgi?id=508783
Date.prototype.toLocaleFormat = function(format) {
return Shell.util_format_date(format, this.getTime());
};
// 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') {
St.Widget.set_default_direction(St.TextDirection.RTL);
}
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
if (slowdownEnv) {
let factor = parseFloat(slowdownEnv);
@@ -82,10 +81,24 @@ function init() {
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;
_patchContainerClass(St.BoxLayout);
_patchContainerClass(St.Table);
Tweener.init();
String.prototype.format = Format.format;
Clutter.Actor.prototype.toString = function() {
return St.describe_actor(this);
};
if (window.global === undefined) // test environment
return;
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
'gjs\'s handling of Clutter.ModifierType is broken. See bug 597292.');
_blockMethod('Gdk.Window.get_device_position', 'global.get_pointer',
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
// Now close the back door to prevent extensions from trying to
// abuse it. We can't actually delete it since
// 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;
}

View File

@@ -3,7 +3,6 @@
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Config = imports.misc.config;
@@ -23,9 +22,8 @@ const ExtensionType = {
const extensionMeta = {};
// Maps uuid -> importer object (extension directory tree)
const extensions = {};
// Arrays of uuids
// Array of uuids
var disabledExtensions;
var enabledExtensions;
// GFile for user extensions
var userExtensionsDir = null;
@@ -69,13 +67,7 @@ function loadExtension(dir, enabled, type) {
return;
}
let metadataContents;
try {
metadataContents = Shell.get_file_contents_utf8_sync(metadataFile.get_path());
} catch (e) {
global.logError(baseErrorString + 'Failed to load metadata.json: ' + e);
return;
}
let [success, metadataContents, len, etag] = metadataFile.load_contents(null);
let meta;
try {
meta = JSON.parse(metadataContents);
@@ -179,7 +171,6 @@ function init() {
}
disabledExtensions = global.settings.get_strv('disabled-extensions', -1);
enabledExtensions = global.settings.get_strv('enabled-extensions', -1);
}
function _loadExtensionsIn(dir, type) {
@@ -197,10 +188,7 @@ function _loadExtensionsIn(dir, type) {
if (fileType != Gio.FileType.DIRECTORY)
continue;
let name = info.get_name();
// Enable all but disabled extensions if enabledExtensions is not set.
// If it is set, enable one those, except they are disabled as well.
let enabled = (enabledExtensions.length == 0 || enabledExtensions.indexOf(name) >= 0)
&& disabledExtensions.indexOf(name) < 0;
let enabled = disabledExtensions.indexOf(name) < 0;
let child = dir.get_child(name);
loadExtension(child, enabled, type);
}

View File

@@ -42,10 +42,10 @@ BaseIcon.prototype = {
box.add_actor(this._iconBin);
if (params.showLabel) {
this.label = new St.Label({ text: label });
box.add_actor(this.label);
this._name = new St.Label({ text: label });
box.add_actor(this._name);
} else {
this.label = null;
this._name = null;
}
if (params.createIcon)
@@ -67,8 +67,8 @@ BaseIcon.prototype = {
let childBox = new Clutter.ActorBox();
if (this.label) {
let [labelMinHeight, labelNatHeight] = this.label.get_preferred_height(-1);
if (this._name) {
let [labelMinHeight, labelNatHeight] = this._name.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.label.allocate(childBox, flags);
this._name.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.label) {
let [labelMinHeight, labelNatHeight] = this.label.get_preferred_height(forWidth);
if (this._name) {
let [labelMinHeight, labelNatHeight] = this._name.get_preferred_height(forWidth);
alloc.min_size += this._spacing + labelMinHeight;
alloc.natural_size += this._spacing + labelNatHeight;
}

View File

@@ -5,13 +5,14 @@ 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;
@@ -25,11 +26,13 @@ var commandHeader = 'const Clutter = imports.gi.Clutter; ' +
'const Gtk = imports.gi.Gtk; ' +
'const Mainloop = imports.mainloop; ' +
'const Meta = imports.gi.Meta; ' +
'const Semantic = imports.misc.semantic' +
'const Shell = imports.gi.Shell; ' +
'const Tp = imports.gi.TelepathyGLib; ' +
'const Main = imports.ui.main; ' +
'const Lang = imports.lang; ' +
'const Tweener = imports.ui.tweener; ' +
'const Zeitgeist = imports.misc.zeitgeist; ' +
/* Utility functions...we should probably be able to use these
* in the shell core code too. */
'const stage = global.stage; ' +
@@ -99,19 +102,12 @@ 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;
@@ -582,53 +578,6 @@ ErrorLog.prototype = {
}
};
function Memory() {
this._init();
}
Memory.prototype = {
_init: function() {
this.actor = new St.BoxLayout({ vertical: true });
this._glibc_uordblks = new St.Label();
this.actor.add(this._glibc_uordblks);
this._js_bytes = new St.Label();
this.actor.add(this._js_bytes);
this._gjs_boxed = new St.Label();
this.actor.add(this._gjs_boxed);
this._gjs_gobject = new St.Label();
this.actor.add(this._gjs_gobject);
this._gjs_function = new St.Label();
this.actor.add(this._gjs_function);
this._gjs_closure = new St.Label();
this.actor.add(this._gjs_closure);
this._gcbutton = new St.Button({ label: 'Full GC',
style_class: 'lg-obj-inspector-button' });
this._gcbutton.connect('clicked', Lang.bind(this, function () { global.gc(); this._renderText(); }));
this.actor.add(this._gcbutton, { x_align: St.Align.START,
x_fill: false });
this.actor.connect('notify::mapped', Lang.bind(this, this._renderText));
},
_renderText: function() {
if (!this.actor.mapped)
return;
let memInfo = global.get_memory_info();
this._glibc_uordblks.text = 'glibc_uordblks: ' + memInfo.glibc_uordblks;
this._js_bytes.text = 'js bytes: ' + memInfo.js_bytes;
this._gjs_boxed.text = 'gjs_boxed: ' + memInfo.gjs_boxed;
this._gjs_gobject.text = 'gjs_gobject: ' + memInfo.gjs_gobject;
this._gjs_function.text = 'gjs_function: ' + memInfo.gjs_function;
this._gjs_closure.text = 'gjs_closure: ' + memInfo.gjs_closure;
}
};
function Extensions() {
this._init();
}
@@ -760,7 +709,6 @@ LookingGlass.prototype = {
let toolbar = new St.BoxLayout({ name: 'Toolbar' });
this.actor.add_actor(toolbar);
let inspectIcon = new St.Icon({ icon_name: 'gtk-color-picker',
icon_type: St.IconType.FULLCOLOR,
icon_size: 24 });
toolbar.add_actor(inspectIcon);
inspectIcon.reactive = true;
@@ -798,7 +746,12 @@ LookingGlass.prototype = {
let label = new St.Label({ text: 'js>>> ' });
entryArea.add(label);
this._entry = new St.Entry({ can_focus: true });
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);
}));
entryArea.add(this._entry, { expand: true });
this._windowList = new WindowList();
@@ -811,9 +764,6 @@ LookingGlass.prototype = {
this._errorLog = new ErrorLog();
notebook.appendPage('Errors', this._errorLog.actor);
this._memory = new Memory();
notebook.appendPage('Memory', this._memory.actor);
this._extensions = new Extensions();
notebook.appendPage('Extensions', this._extensions.actor);
@@ -960,7 +910,6 @@ 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,5 +1,11 @@
/* -*- 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;
@@ -11,6 +17,8 @@ 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;
@@ -67,7 +75,12 @@ let _cssStylesheet = null;
let background = null;
function start() {
// Monkey patch utility functions into the global proxy;
// 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;
// This is easier and faster than indirecting down into global
// if we want to call back up into JS.
global.logError = _logError;
@@ -89,6 +102,8 @@ 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
@@ -208,7 +223,6 @@ function start() {
global.screen.connect('window-entered-monitor', _windowEnteredMonitor);
global.screen.connect('window-left-monitor', _windowLeftMonitor);
global.screen.connect('restacked', _windowsRestacked);
_nWorkspacesChanged();
}
@@ -311,13 +325,6 @@ function _windowEnteredMonitor(metaScreen, monitorIndex, metaWin) {
_queueCheckWorkspaces();
}
function _windowsRestacked() {
// Figure out where the pointer is in case we lost track of
// it during a grab. (In particular, if a trayicon popup menu
// is dismissed, see if we need to close the message tray.)
global.sync_pointer();
}
function _queueCheckWorkspaces() {
if (_checkWorkspacesId == 0)
_checkWorkspacesId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, _checkWorkspaces);
@@ -401,21 +408,12 @@ function setThemeStylesheet(cssStylesheet)
*/
function loadTheme() {
let themeContext = St.ThemeContext.get_for_stage (global.stage);
let previousTheme = themeContext.get_theme();
let cssStylesheet = _defaultCssStylesheet;
if (_cssStylesheet != null)
cssStylesheet = _cssStylesheet;
let theme = new St.Theme ({ application_stylesheet: cssStylesheet });
if (previousTheme) {
let customStylesheets = previousTheme.get_custom_stylesheets();
for (let i = 0; i < customStylesheets.length; i++)
theme.load_stylesheet(customStylesheets[i]);
}
themeContext.set_theme (theme);
}

View File

@@ -20,6 +20,9 @@ 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;
@@ -408,7 +411,6 @@ Notification.prototype = {
this._bannerBodyText = null;
this._bannerBodyMarkup = false;
this._titleFitsInBannerMode = true;
this._titleDirection = St.TextDirection.NONE;
this._spacing = 0;
this._scrollPolicy = Gtk.PolicyType.AUTOMATIC;
@@ -508,19 +510,6 @@ Notification.prototype = {
title = title ? _fixMarkup(title.replace(/\n/g, ' '), params.titleMarkup) : '';
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
if (Pango.find_base_dir(title, -1) == Pango.Direction.RTL)
this._titleDirection = St.TextDirection.RTL;
else
this._titleDirection = St.TextDirection.LTR;
// Let the title's text direction control the overall direction
// of the notification - in case where different scripts are used
// in the notification, this is the right thing for the icon, and
// arguably for action buttons as well. Labels other than the title
// will be allocated at the available width, so that their alignment
// is done correctly automatically.
this._table.set_direction(this._titleDirection);
// Unless the notification has custom content, we save this._bannerBodyText
// to add it to the content of the notification if the notification is
// expandable due to other elements in its content area or due to the banner
@@ -557,7 +546,7 @@ Notification.prototype = {
this._scrollArea = new St.ScrollView({ name: 'notification-scrollview',
vscrollbar_policy: this._scrollPolicy,
hscrollbar_policy: Gtk.PolicyType.NEVER,
style_class: 'vfade' });
vfade: true });
this._table.add(this._scrollArea, { row: 1, col: 1 });
this._contentArea = new St.BoxLayout({ name: 'notification-body',
vertical: true });
@@ -722,39 +711,23 @@ Notification.prototype = {
let availWidth = box.x2 - box.x1;
let titleBox = new Clutter.ActorBox();
let titleBoxW = Math.min(titleNatW, availWidth);
if (this._titleDirection == St.TextDirection.RTL) {
titleBox.x1 = availWidth - titleBoxW;
titleBox.x2 = availWidth;
} else {
titleBox.x1 = 0;
titleBox.x2 = titleBoxW;
}
titleBox.y1 = 0;
titleBox.x1 = titleBox.y1 = 0;
titleBox.x2 = Math.min(titleNatW, availWidth);
titleBox.y2 = titleNatH;
this._titleLabel.allocate(titleBox, flags);
this._titleFitsInBannerMode = (titleNatW <= availWidth);
let bannerFits = true;
if (titleBoxW + this._spacing > availWidth) {
if (titleBox.x2 + this._spacing > availWidth) {
this._bannerLabel.opacity = 0;
bannerFits = false;
} else {
let bannerBox = new Clutter.ActorBox();
if (this._titleDirection == St.TextDirection.RTL) {
bannerBox.x1 = 0;
bannerBox.x2 = titleBox.x1 - this._spacing;
bannerFits = (bannerBox.x2 - bannerNatW >= 0);
} else {
bannerBox.x1 = titleBox.x2 + this._spacing;
bannerBox.x2 = availWidth;
bannerFits = (bannerBox.x1 + bannerNatW <= availWidth);
}
bannerBox.x1 = titleBox.x2 + this._spacing;
bannerBox.y1 = 0;
bannerBox.x2 = Math.min(bannerBox.x1 + bannerNatW, availWidth);
bannerBox.y2 = titleNatH;
bannerFits = (bannerBox.x1 + bannerNatW <= availWidth);
this._bannerLabel.allocate(bannerBox, flags);
// Make _bannerLabel visible if the entire notification
@@ -829,7 +802,6 @@ Notification.prototype = {
// Restore banner opacity in case the notification is shown in the
// banner mode again on update.
this._bannerLabel.opacity = 255;
this.emit('collapsed');
},
_onActionInvoked: function(actor, mouseButtonClicked, id) {
@@ -894,11 +866,6 @@ Source.prototype = {
this.isTransient = isTransient;
},
setTitle: function(newTitle) {
this.title = newTitle;
this.emit('title-changed');
},
// Called to create a new icon actor (of size this.ICON_SIZE).
// Must be overridden by the subclass if you do not pass icons
// explicitly to the Notification() constructor.
@@ -1001,11 +968,6 @@ SummaryItem.prototype = {
this._sourceTitleBin.child = this._sourceTitle;
this._sourceTitleBin.width = 0;
this.source.connect('title-changed',
Lang.bind(this, function() {
this._sourceTitle.text = source.title;
}));
this._sourceBox.add(this._sourceIcon, { y_fill: false });
this._sourceBox.add(this._sourceTitleBin, { expand: true, y_fill: false });
this.actor.child = this._sourceBox;
@@ -1013,7 +975,7 @@ SummaryItem.prototype = {
this.notificationStackView = new St.ScrollView({ name: source.isChat ? '' : 'summary-notification-stack-scrollview',
vscrollbar_policy: source.isChat ? Gtk.PolicyType.NEVER : Gtk.PolicyType.AUTOMATIC,
hscrollbar_policy: Gtk.PolicyType.NEVER,
style_class: 'vfade' });
vfade: true });
this.notificationStack = new St.BoxLayout({ name: 'summary-notification-stack',
vertical: true });
this.notificationStackView.add_actor(this.notificationStack);
@@ -1253,7 +1215,7 @@ MessageTray.prototype = {
this._reNotifyAfterHideNotification = null;
Main.chrome.addActor(this.actor, { affectsStruts: false,
visibleInFullscreen: true });
visibleInOverview: true });
Main.chrome.trackActor(this._notificationBin);
Main.chrome.trackActor(this._summaryBoxPointer.actor);
@@ -1616,8 +1578,6 @@ MessageTray.prototype = {
this._clickedSummaryItemMouseButton != button) {
this._clickedSummaryItem = summaryItem;
this._clickedSummaryItemMouseButton = button;
summaryItem.source.emit('summary-item-clicked', button);
} else {
this._unsetClickedSummaryItem();
}
@@ -2024,15 +1984,9 @@ MessageTray.prototype = {
this._notification.expand(!autoExpanding);
},
_onNotificationExpanded: function() {
_onNotificationExpanded: function() {
let expandedY = this.actor.height - this._notificationBin.height;
// Don't animate the notification to its new position if it has shrunk:
// there will be a very visible "gap" that breaks the illusion.
if (this._notificationBin.y < expandedY)
this._notificationBin.y = expandedY;
else if (this._notification.y != expandedY)
if (this._notificationBin.y != expandedY)
this._tween(this._notificationBin, '_notificationState', State.SHOWN,
{ y: expandedY,
time: ANIMATION_TIME,

View File

@@ -10,6 +10,8 @@ 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;
@@ -48,6 +50,10 @@ ModalDialog.prototype = {
coordinate: Clutter.BindCoordinate.POSITION | Clutter.BindCoordinate.SIZE });
this._group.add_constraint(constraint);
global.focus_manager.add_group(this._group);
this._initialKeyFocus = this._group;
this._savedKeyFocus = null;
this._group.connect('destroy', Lang.bind(this, this._onGroupDestroy));
this._actionKeys = {};
@@ -88,10 +94,6 @@ ModalDialog.prototype = {
{ expand: true,
x_align: St.Align.MIDDLE,
y_align: St.Align.END });
global.focus_manager.add_group(this._dialogLayout);
this._initialKeyFocus = this._dialogLayout;
this._savedKeyFocus = null;
},
setButtons: function(buttons) {
@@ -193,7 +195,6 @@ ModalDialog.prototype = {
this.state = State.CLOSING;
this.popModal(timestamp);
this._savedKeyFocus = null;
Tweener.addTween(this._group,
{ opacity: 0,

View File

@@ -7,6 +7,8 @@ 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;
@@ -165,11 +167,8 @@ NotificationDaemon.prototype = {
// with a transient one from the same sender, so we
// always create a new source object for new transient notifications
// and never add it to this._sources .
if (!isForTransientNotification && this._sources[pid]) {
let source = this._sources[pid];
source.setTitle(title);
return source;
}
if (!isForTransientNotification && this._sources[pid])
return this._sources[pid];
let source = new Source(title, pid);
source.setTransient(isForTransientNotification);
@@ -190,11 +189,9 @@ NotificationDaemon.prototype = {
actions, hints, timeout) {
let id;
// Filter out chat and presence notifications from Empathy, since we
// Filter out notifications from Empathy, since we
// handle that information from telepathyClient.js
if (appName == 'Empathy' && (hints['category'] == 'im.received' ||
hints['category'] == 'presence.online' ||
hints['category'] == 'presence.offline')) {
if (appName == 'Empathy') {
// Ignore replacesId since we already sent back a
// NotificationClosed for that id.
id = nextNotificationId++;

View File

@@ -8,12 +8,13 @@ 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;
const Dash = imports.ui.dash;
const DND = imports.ui.dnd;
const DocDisplay = imports.ui.docDisplay;
const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
@@ -23,6 +24,7 @@ const Tweener = imports.ui.tweener;
const ViewSelector = imports.ui.viewSelector;
const WorkspacesView = imports.ui.workspacesView;
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
const ZeitgeistSearch = imports.ui.zeitgeistSearch;
// Time for initial animation going into Overview mode
const ANIMATION_TIME = 0.25;
@@ -190,7 +192,11 @@ Overview.prototype = {
this.viewSelector.addSearchProvider(new AppDisplay.AppSearchProvider());
this.viewSelector.addSearchProvider(new AppDisplay.PrefsSearchProvider());
this.viewSelector.addSearchProvider(new PlaceDisplay.PlaceSearchProvider());
this.viewSelector.addSearchProvider(new DocDisplay.DocSearchProvider());
this.viewSelector.addSearchProvider(new ZeitgeistSearch.DocumentsAsyncSearchProvider());
this.viewSelector.addSearchProvider(new ZeitgeistSearch.VideosAsyncSearchProvider());
this.viewSelector.addSearchProvider(new ZeitgeistSearch.MusicAsyncSearchProvider());
this.viewSelector.addSearchProvider(new ZeitgeistSearch.PicturesAsyncSearchProvider());
this.viewSelector.addSearchProvider(new ZeitgeistSearch.OtherAsyncSearchProvider());
// TODO - recalculate everything when desktop size changes
this.dash = new Dash.Dash();
@@ -220,7 +226,7 @@ Overview.prototype = {
}
this._resetWindowSwitchTimeout();
this._lastHoveredWindow = null;
DND.removeDragMonitor(this._dragMonitor);
DND.removeMonitor(this._dragMonitor);
this.endItemDrag();
},
@@ -281,8 +287,7 @@ Overview.prototype = {
},
_onButtonPress: function(actor, event) {
if (this._scrollDirection == SwipeScrollDirection.NONE
|| event.get_button() != 1)
if (this._scrollDirection == SwipeScrollDirection.NONE)
return;
let [stageX, stageY] = event.get_coords();

View File

@@ -9,6 +9,8 @@ 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;
@@ -258,14 +260,10 @@ AppMenuButton.prototype = {
this._iconBox = new Shell.Slicer({ name: 'appMenuIcon' });
this._iconBox.connect('style-changed',
Lang.bind(this, this._onIconBoxStyleChanged));
this._iconBox.connect('notify::allocation',
Lang.bind(this, this._updateIconBoxClip));
this._container.add_actor(this._iconBox);
this._label = new TextShadower();
this._container.add_actor(this._label.actor);
this._iconBottomClip = 0;
this._quitMenu = new PopupMenu.PopupMenuItem('');
this.menu.addMenuItem(this._quitMenu);
this._quitMenu.connect('activate', Lang.bind(this, this._onQuit));
@@ -302,7 +300,6 @@ AppMenuButton.prototype = {
this._visible = true;
this.actor.show();
this.actor.reactive = true;
if (!this._targetIsCurrent)
return;
@@ -319,7 +316,6 @@ AppMenuButton.prototype = {
return;
this._visible = false;
this.actor.reactive = false;
if (!this._targetIsCurrent) {
this.actor.hide();
return;
@@ -338,16 +334,11 @@ AppMenuButton.prototype = {
_onIconBoxStyleChanged: function() {
let node = this._iconBox.get_theme_node();
this._iconBottomClip = node.get_length('app-icon-bottom-clip');
this._updateIconBoxClip();
},
_updateIconBoxClip: function() {
let allocation = this._iconBox.allocation;
if (this._iconBottomClip > 0)
let bottomClip = node.get_length('app-icon-bottom-clip');
if (bottomClip > 0)
this._iconBox.set_clip(0, 0,
allocation.x2 - allocation.x1,
allocation.y2 - allocation.y1 - this._iconBottomClip);
this._iconBox.width,
this._iconBox.height - bottomClip);
else
this._iconBox.remove_clip();
},
@@ -708,7 +699,7 @@ HotCorner.prototype = {
}
});
Main.chrome.addActor(this.actor, { affectsStruts: false });
Main.chrome.addActor(this.actor, { visibleInOverview: true, affectsStruts: false });
},
destroy: function() {
@@ -776,7 +767,7 @@ HotCorner.prototype = {
_onCornerClicked : function() {
if (!Main.overview.animationInProgress)
this.maybeToggleOverviewOnClick();
return true;
return false;
},
_onCornerLeft : function(actor, event) {
@@ -817,8 +808,6 @@ 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');
}));
@@ -915,7 +904,6 @@ 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;
@@ -944,10 +932,10 @@ Panel.prototype = {
this._hotCorner = null;
this._appMenu = new AppMenuButton();
this._leftBox.add(this._appMenu.actor);
let appMenuButton = new AppMenuButton();
this._leftBox.add(appMenuButton.actor);
this._menus.addMenu(this._appMenu.menu);
this._menus.addMenu(appMenuButton.menu);
/* center */
this._dateMenu = new DateMenu.DateMenuButton();
@@ -966,12 +954,12 @@ Panel.prototype = {
this._rightBox.add(this._trayBox);
this._rightBox.add(this._statusBox);
this._userMenu = new StatusMenu.StatusMenuButton();
this._userMenu.actor.name = 'panelStatus';
this._rightBox.add(this._userMenu.actor);
this._statusmenu = new StatusMenu.StatusMenuButton();
this._statusmenu.actor.name = 'panelStatus';
this._rightBox.add(this._statusmenu.actor);
// Synchronize the buttons pseudo classes with its corner
this._userMenu.actor.connect('style-changed', Lang.bind(this,
this._statusmenu.actor.connect('style-changed', Lang.bind(this,
function(actor) {
let rtl = actor.get_direction() == St.TextDirection.RTL;
let corner = rtl ? this._leftCorner : this._rightCorner;
@@ -1004,11 +992,13 @@ Panel.prototype = {
this.button.checked = false;
}));
Main.chrome.addActor(this.actor);
Main.chrome.addActor(this._leftCorner.actor, { affectsStruts: false,
affectsInputRegion: false });
Main.chrome.addActor(this._rightCorner.actor, { affectsStruts: false,
affectsInputRegion: false });
Main.chrome.addActor(this.actor, { visibleInOverview: true });
Main.chrome.addActor(this._leftCorner.actor, { visibleInOverview: true,
affectsStruts: false,
affectsInputRegion: false });
Main.chrome.addActor(this._rightCorner.actor, { visibleInOverview: true,
affectsStruts: false,
affectsInputRegion: false });
Main.ctrlAltTabManager.addGroup(this.actor, _("Top Bar"), 'start-here',
{ sortGroup: CtrlAltTab.SortGroup.TOP });
@@ -1052,13 +1042,11 @@ 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._userMenu.menu);
this._menus.addMenu(this._statusmenu.menu);
},
startupAnimation: function() {

View File

@@ -26,20 +26,12 @@ Button.prototype = {
this.menu = new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, 0);
this.menu.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
this.menu.actor.connect('key-press-event', Lang.bind(this, this._onMenuKeyPress));
Main.chrome.addActor(this.menu.actor, { affectsStruts: false });
Main.chrome.addActor(this.menu.actor, { visibleInOverview: true,
affectsStruts: false });
this.menu.actor.hide();
},
_onButtonPress: function(actor, event) {
if (!this.menu.isOpen) {
// Setting the max-height won't do any good if the minimum height of the
// menu is higher then the screen; it's useful if part of the menu is
// scrollable so the minimum height is smaller than the natural height
let monitor = global.get_primary_monitor();
this.menu.actor.style = ('max-height: ' +
Math.round(monitor.height - Main.panel.actor.height) +
'px;');
}
this.menu.toggle();
},

View File

@@ -7,6 +7,8 @@ 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;
@@ -268,7 +270,10 @@ PlacesManager.prototype = {
if (!GLib.file_test(this._bookmarksPath, GLib.FileTest.EXISTS))
return;
let bookmarksContent = Shell.get_file_contents_utf8_sync(this._bookmarksPath);
let [success, bookmarksContent, len] = GLib.file_get_contents(this._bookmarksPath);
if (!success)
return;
let bookmarks = bookmarksContent.split('\n');

View File

@@ -22,6 +22,8 @@
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,6 +13,9 @@ 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) {
@@ -495,7 +498,7 @@ PopupSliderMenuItem.prototype = {
this._slider = new St.DrawingArea({ style_class: 'popup-slider-menu-item', reactive: true });
this.addActor(this._slider, { span: -1, expand: true });
this._slider.connect('repaint', Lang.bind(this, this._sliderRepaint));
this.actor.connect('button-press-event', Lang.bind(this, this._startDragging));
this._slider.connect('button-press-event', Lang.bind(this, this._startDragging));
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this._releaseId = this._motionId = 0;
@@ -704,36 +707,11 @@ PopupSwitchMenuItem.prototype = {
this._switch = new Switch(active);
this.addActor(this.label);
this.addActor(this._switch.actor, { align: St.Align.END });
this._statusBin = new St.Bin({ x_align: St.Align.END });
this.addActor(this._statusBin, { align: St.Align.END });
this._statusLabel = new St.Label({ text: '',
style_class: 'popup-inactive-menu-item'
});
this._switch = new Switch(false);
this._statusBin.child = this._switch.actor;
},
setStatus: function(text) {
if (text != null) {
this._statusLabel.text = text;
this._statusBin.child = this._statusLabel;
this.actor.reactive = false;
this.actor.can_focus = false;
} else {
this._statusBin.child = this._switch.actor;
this.actor.reactive = true;
this.actor.can_focus = true;
}
},
activate: function(event) {
if (this._switch.actor.mapped) {
this.connect('activate', Lang.bind(this,function(from) {
this.toggle();
}
PopupBaseMenuItem.prototype.activate.call(this, event);
}));
},
toggle: function() {
@@ -788,7 +766,6 @@ PopupMenuBase.prototype = {
this.box = new St.BoxLayout({ vertical: true });
}
this.box.connect_after('queue-relayout', Lang.bind(this, this._menuQueueRelayout));
this.length = 0;
this.isOpen = false;
@@ -796,10 +773,6 @@ PopupMenuBase.prototype = {
// for the menu which causes its prelight state to freeze
this.blockSourceEvents = false;
// Can be set while a menu is up to let all events through without special
// menu handling useful for scrollbars in menus, and probably not otherwise.
this.passEvents = false;
this._activeMenuItem = null;
},
@@ -878,8 +851,6 @@ PopupMenuBase.prototype = {
menuItem.connect('destroy', Lang.bind(this, function() {
menuItem.disconnect(menuItem._subMenuActivateId);
menuItem.disconnect(menuItem._subMenuActiveChangeId);
this.length--;
}));
} else if (menuItem instanceof PopupSubMenuMenuItem) {
if (before_item == null)
@@ -896,8 +867,6 @@ PopupMenuBase.prototype = {
this._connectItemSignals(menuItem);
else
throw TypeError("Invalid argument to PopupMenuBase.addMenuItem()");
this.length++;
},
getColumnWidths: function() {
@@ -1069,109 +1038,45 @@ PopupSubMenu.prototype = {
__proto__: PopupMenuBase.prototype,
_init: function(sourceActor, sourceArrow) {
PopupMenuBase.prototype._init.call(this, sourceActor);
PopupMenuBase.prototype._init.call(this, sourceActor, 'popup-sub-menu');
this._arrow = sourceArrow;
this._arrow.rotation_center_z_gravity = Clutter.Gravity.CENTER;
// Since a function of a submenu might be to provide a "More.." expander
// with long content, we make it scrollable - the scrollbar will only take
// effect if a CSS max-height is set on the top menu.
this.actor = new St.ScrollView({ style_class: 'popup-sub-menu',
hscrollbar_policy: Gtk.PolicyType.NEVER,
vscrollbar_policy: Gtk.PolicyType.NEVER });
// StScrollbar plays dirty tricks with events, calling
// clutter_set_motion_events_enabled (FALSE) during the scroll; this
// confuses our event tracking, so we just turn it off during the
// scroll.
let vscroll = this.actor.get_vscroll_bar();
vscroll.connect('scroll-start',
Lang.bind(this, function() {
let topMenu = this._getTopMenu();
if (topMenu)
topMenu.passEvents = true;
}));
vscroll.connect('scroll-stop',
Lang.bind(this, function() {
let topMenu = this._getTopMenu();
if (topMenu)
topMenu.passEvents = false;
}));
this.actor.add_actor(this.box);
this.actor = this.box;
this.actor._delegate = this;
this.actor.clip_to_allocation = true;
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
this.actor.hide();
},
_getTopMenu: function() {
let actor = this.actor.get_parent();
while (actor) {
if (actor._delegate && actor._delegate instanceof PopupMenu)
return actor._delegate;
actor = actor.get_parent();
}
return null;
},
_needsScrollbar: function() {
let topMenu = this._getTopMenu();
let [topMinHeight, topNaturalHeight] = topMenu.actor.get_preferred_height(-1);
let topThemeNode = topMenu.actor.get_theme_node();
let topMaxHeight = topThemeNode.get_max_height();
return topMaxHeight >= 0 && topNaturalHeight >= topMaxHeight;
},
open: function(animate) {
if (this.isOpen)
return;
this.isOpen = true;
// we don't implement the !animate case because that doesn't
// currently get used...
let [naturalHeight, minHeight] = this.actor.get_preferred_height(-1);
this.actor.height = 0;
this.actor.show();
let needsScrollbar = this._needsScrollbar();
// St.ScrollView always requests space horizontally for a possible vertical
// scrollbar if in AUTOMATIC mode. Doing better would require implementation
// of width-for-height in St.BoxLayout and St.ScrollView. This looks bad
// when we *don't* need it, so turn off the scrollbar when that's true.
// Dynamic changes in whether we need it aren't handled properly.
this.actor.vscrollbar_policy =
needsScrollbar ? Gtk.PolicyType.AUTOMATIC : Gtk.PolicyType.NEVER;
// It looks funny if we animate with a scrollbar (at what point is
// the scrollbar added?) so just skip that case
if (animate && needsScrollbar)
animate = false;
if (animate) {
let [minHeight, naturalHeight] = this.actor.get_preferred_height(-1);
this.actor.height = 0;
this.actor._arrow_rotation = this._arrow.rotation_angle_z;
Tweener.addTween(this.actor,
{ _arrow_rotation: 90,
height: naturalHeight,
time: 0.25,
onUpdateScope: this,
onUpdate: function() {
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
},
onCompleteScope: this,
onComplete: function() {
this.actor.set_height(-1);
this.emit('open-state-changed', true);
}
});
} else {
this._arrow.rotation_angle_z = 90;
this.emit('open-state-changed', true);
}
this.actor._arrow_rotation = this._arrow.rotation_angle_z;
Tweener.addTween(this.actor,
{ _arrow_rotation: 90,
height: naturalHeight,
time: 0.25,
onUpdateScope: this,
onUpdate: function() {
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
},
onCompleteScope: this,
onComplete: function() {
this.actor.set_height(-1);
this.emit('open-state-changed', true);
}
});
},
close: function(animate) {
@@ -1183,9 +1088,6 @@ PopupSubMenu.prototype = {
if (this._activeMenuItem)
this._activeMenuItem.setActive(false);
if (animate && this._needsScrollbar())
animate = false;
if (animate) {
this.actor._arrow_rotation = this._arrow.rotation_angle_z;
Tweener.addTween(this.actor,
@@ -1521,12 +1423,8 @@ PopupMenuManager.prototype = {
this._owner.menuEventFilter(event))
return true;
if (this._activeMenu != null && this._activeMenu.passEvents)
return false;
let activeMenuContains = this._eventIsOnActiveMenu(event);
let eventType = event.type();
if (eventType == Clutter.EventType.BUTTON_RELEASE) {
if (activeMenuContains) {
return false;

View File

@@ -8,6 +8,8 @@ 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;
@@ -23,10 +25,6 @@ const HISTORY_KEY = 'command-history';
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
const DISABLE_COMMAND_LINE_KEY = 'disable-command-line';
const TERMINAL_SCHEMA = 'org.gnome.desktop.default-applications.terminal';
const EXEC_KEY = 'exec';
const EXEC_ARG_KEY = 'exec-arg';
const DIALOG_GROW_TIME = 0.1;
function CommandCompleter() {
@@ -173,7 +171,6 @@ __proto__: ModalDialog.ModalDialog.prototype,
ModalDialog.ModalDialog.prototype._init.call(this, { styleClass: 'run-dialog' });
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
this._terminalSettings = new Gio.Settings({ schema: TERMINAL_SCHEMA });
global.settings.connect('changed::development-tools', Lang.bind(this, function () {
this._enableInternalCommands = global.settings.get_boolean('development-tools');
}));
@@ -194,7 +191,7 @@ __proto__: ModalDialog.ModalDialog.prototype,
}),
'debugexit': Lang.bind(this, function() {
Meta.quit(Meta.ExitCode.ERROR);
Meta.exit(Meta.ExitCode.ERROR);
}),
// rt is short for "reload theme"
@@ -314,11 +311,8 @@ __proto__: ModalDialog.ModalDialog.prototype,
f();
} else if (input) {
try {
if (inTerminal) {
let exec = this._terminalSettings.get_string(EXEC_KEY);
let exec_arg = this._terminalSettings.get_string(EXEC_ARG_KEY);
command = exec + ' ' + exec_arg + ' ' + input;
}
if (inTerminal)
command = 'gnome-terminal -x ' + input;
Util.trySpawnCommandLine(command);
} catch (e) {
// Mmmh, that failed - see if @input matches an existing file

View File

@@ -7,6 +7,9 @@ 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;
@@ -112,6 +115,43 @@ function SearchProvider(title) {
SearchProvider.prototype = {
_init: function(title) {
this.title = title;
this.searchSystem = null;
this.searchAsync = false;
},
_asyncCancelled: function() {
},
startAsync: function() {
this.searchAsync = true;
},
tryCancelAsync: function() {
if (!this.searchAsync)
return;
this._asyncCancelled();
this.searchAsync = false;
},
/**
* addItems:
* @items: an array of result identifier strings representing
* items which match the last given search terms.
*
* This should be used for something that requires a bit more
* logic; it's designed to be an asyncronous way to add a result
* to the current search.
*/
addItems: function( items) {
if (!this.searchSystem)
throw new Error('Search provider not registered');
if (!items.length)
return;
this.tryCancelAsync();
this.searchSystem.addProviderItems(this, items);
},
/**
@@ -157,7 +197,7 @@ SearchProvider.prototype = {
},
/**
* getResultMeta:
* getResultInfo:
* @id: Result identifier string
*
* Return an object with 'id', 'name', (both strings) and 'createIcon'
@@ -209,6 +249,7 @@ SearchProvider.prototype = {
};
Signals.addSignalMethods(SearchProvider.prototype);
function OpenSearchSystem() {
this._init();
}
@@ -271,18 +312,24 @@ 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] = Shell.parse_search_provider(source);
let provider ={ name: name,
url: url,
id: this._providers.length,
icon_uri: icon_uri,
langs: langs };
if (this._checkSupportedProviderLanguage(provider)) {
this._providers.push(provider);
this.emit('changed');
}
let file = Gio.file_new_for_path(global.datadir + '/search_providers/' + fileName);
let source = '';
file.load_contents_async(null, Lang.bind(this, function (obj, res) {
let [success, source] = file.load_contents_finish(res);
if (source) {
let [success, name, url, langs, icon_uri] = global.parse_search_provider(source);
let provider ={ name: name,
url: url,
id: this._providers.length,
icon_uri: icon_uri,
langs: langs };
if (this._checkSupportedProviderLanguage(provider)) {
this._providers.push(provider);
this.emit('changed');
}
}
}));
},
_refresh: function() {
@@ -315,6 +362,7 @@ SearchSystem.prototype = {
},
registerProvider: function (provider) {
provider.searchSystem = this;
this._providers.push(provider);
},
@@ -331,30 +379,50 @@ SearchSystem.prototype = {
this._previousResults = [];
},
addProviderItems: function(provider, items) {
let index = this._providers.indexOf(provider);
let [provider2, results] = this._previousResults[index];
if (provider !== provider2)
return;
results.push.apply(results, items);
this.emit('results-updated', this._previousResults);
},
updateSearch: function(searchString) {
searchString = searchString.replace(/^\s+/g, '').replace(/\s+$/g, '');
if (searchString == '')
return [];
return;
let terms = searchString.split(/\s+/);
let isSubSearch = terms.length == this._previousTerms.length;
if (isSubSearch) {
for (let i = 0; i < terms.length; i++) {
if (terms[i].indexOf(this._previousTerms[i]) != 0) {
isSubSearch = false;
break;
this.updateSearchResults(terms);
},
updateSearchResults: function(terms) {
let isSubSearch = false;
if (terms) {
isSubSearch = terms.length == this._previousTerms.length;
if (isSubSearch) {
for (let i = 0; i < terms.length; i++) {
if (terms[i].indexOf(this._previousTerms[i]) != 0) {
isSubSearch = false;
break;
}
}
}
} else {
terms = this._previousTerms;
}
let results = [];
if (isSubSearch) {
for (let i = 0; i < this._previousResults.length; i++) {
for (let i = 0; i < this._providers.length; i++) {
let [provider, previousResults] = this._previousResults[i];
provider.tryCancelAsync();
try {
let providerResults = provider.getSubsearchResultSet(previousResults, terms);
if (providerResults.length > 0)
results.push([provider, providerResults]);
results.push([provider, providerResults]);
} catch (error) {
global.log ('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
}
@@ -362,10 +430,10 @@ SearchSystem.prototype = {
} else {
for (let i = 0; i < this._providers.length; i++) {
let provider = this._providers[i];
provider.tryCancelAsync();
try {
let providerResults = provider.getInitialResultSet(terms);
if (providerResults.length > 0)
results.push([provider, providerResults]);
results.push([provider, providerResults]);
} catch (error) {
global.log ('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
}
@@ -374,8 +442,7 @@ SearchSystem.prototype = {
this._previousTerms = terms;
this._previousResults = results;
return results;
}
this.emit('results-updated', results);
},
};
Signals.addSignalMethods(SearchSystem.prototype);

View File

@@ -2,6 +2,8 @@
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;
@@ -28,7 +30,6 @@ SearchResult.prototype = {
x_align: St.Align.START,
y_fill: true });
this.actor._delegate = this;
this._dragActorSource = null;
let content = provider.createResultActor(metaInfo, terms);
if (content == null) {
@@ -38,11 +39,6 @@ SearchResult.prototype = {
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
{ createIcon: this.metaInfo['createIcon'] });
content.set_child(icon.actor);
this._dragActorSource = icon.icon;
this.actor.label_actor = icon.label;
} else {
if (content._delegate && content._delegate.getDragActorSource)
this._dragActorSource = content._delegate.getDragActorSource();
}
this._content = content;
this.actor.set_child(content);
@@ -81,14 +77,11 @@ SearchResult.prototype = {
},
getDragActorSource: function() {
if (this._dragActorSource)
return this._dragActorSource;
// not exactly right, but alignment problems are hard to notice
return this._content;
return this.metaInfo['icon'];
},
getDragActor: function(stageX, stageY) {
return this.metaInfo['createIcon'](Main.overview.dash.iconSize);
return new Clutter.Clone({ source: this.metaInfo['icon'] });
},
shellWorkspaceLaunch: function(params) {
@@ -189,6 +182,7 @@ function SearchResults(searchSystem, openSearchSystem) {
SearchResults.prototype = {
_init: function(searchSystem, openSearchSystem) {
this._searchSystem = searchSystem;
this._searchSystem.connect('results-updated', Lang.bind(this, this._updateResults));
this._openSearchSystem = openSearchSystem;
this.actor = new St.BoxLayout({ name: 'searchResults',
@@ -199,7 +193,7 @@ SearchResults.prototype = {
let scrollView = new St.ScrollView({ x_fill: true,
y_fill: false,
style_class: 'vfade' });
vfade: true });
scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
scrollView.add_actor(this._content);
@@ -223,9 +217,11 @@ SearchResults.prototype = {
this._selectedProvider = -1;
this._providers = this._searchSystem.getProviders();
this._providerMeta = [];
for (let i = 0; i < this._providers.length; i++)
this._providerMetaResults = {};
for (let i = 0; i < this._providers.length; i++) {
this.createProviderMeta(this._providers[i]);
this._providerMetaResults[this.providers[i].title] = [];
}
this._searchProvidersBox = new St.BoxLayout({ style_class: 'search-providers-box' });
this.actor.add(this._searchProvidersBox);
@@ -265,7 +261,6 @@ 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;
@@ -304,6 +299,12 @@ SearchResults.prototype = {
meta.actor.hide();
}
},
_clearDisplayForProvider: function(index) {
let meta = this._providerMeta[index];
meta.resultDisplay.clear();
meta.actor.hide();
},
reset: function() {
this._searchSystem.reset();
@@ -319,15 +320,15 @@ SearchResults.prototype = {
this._statusText.show();
},
doSearch: function (searchString) {
this._searchSystem.updateSearch(searchString);
},
_metaForProvider: function(provider) {
return this._providerMeta[this._providers.indexOf(provider)];
},
updateSearch: function (searchString) {
let results = this._searchSystem.updateSearch(searchString);
this._clearDisplay();
_updateResults: function(searchSystem, results) {
if (results.length == 0) {
this._statusText.set_text(_("No matching results."));
this._statusText.show();
@@ -337,28 +338,27 @@ SearchResults.prototype = {
this._statusText.hide();
}
let terms = this._searchSystem.getTerms();
let terms = searchSystem.getTerms();
this._openSearchSystem.setSearchTerms(terms);
// To avoid CSS transitions causing flickering
// of the selection when the first search result
// stays the same, we hide the content while
// filling in the results and setting the initial
// selection.
this._content.hide();
for (let i = 0; i < results.length; i++) {
let [provider, providerResults] = results[i];
let meta = this._metaForProvider(provider);
meta.actor.show();
meta.resultDisplay.renderResults(providerResults, terms);
if (providerResults.length == 0)
this._clearDisplayForProvider(i)
else {
if (this._providerMetaResults[provider.title] != providerResults) {
this._providerMetaResults[provider.title] = providerResults;
this._clearDisplayForProvider(i);
let meta = this._metaForProvider(provider);
meta.actor.show();
meta.resultDisplay.renderResults(providerResults, terms);
}
}
}
if (this._selectedOpenSearchButton == -1)
this.selectDown(false);
this._content.show();
return true;
},

View File

@@ -10,11 +10,13 @@ const Shell = imports.gi.Shell;
const Signals = imports.signals;
const St = imports.gi.St;
const Main = imports.ui.main;
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';
@@ -89,7 +91,6 @@ ATIndicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Universal Access Settings"), function() {
Main.overview.hide();
let app = Shell.AppSystem.get_default().get_app('gnome-universal-access-panel.desktop');
app.activate(-1);
});

View File

@@ -16,6 +16,9 @@ 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,
@@ -64,7 +67,7 @@ Indicator.prototype = {
this._fullMenuItems = [new PopupMenu.PopupSeparatorMenuItem(),
new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
new PopupMenu.PopupMenuItem(_("Set up a New Device...")),
new PopupMenu.PopupMenuItem(_("Setup a New Device...")),
new PopupMenu.PopupSeparatorMenuItem()];
this._hasDevices = false;
this._deviceSep = this._fullMenuItems[0]; // hidden if no device exists
@@ -90,7 +93,6 @@ Indicator.prototype = {
this._updateFullMenu();
this.menu.addAction(_("Bluetooth Settings"), function() {
Main.overview.hide()
let app = Shell.AppSystem.get_default().get_app('bluetooth-properties.desktop');
app.activate(-1);
});
@@ -109,11 +111,7 @@ Indicator.prototype = {
current_state != GnomeBluetoothApplet.KillswitchState.HARD_BLOCKED;
this._killswitch.setToggleState(on);
if (can_toggle)
this._killswitch.setStatus(null);
else
/* TRANSLATORS: this means that bluetooth was disabled by hardware rfkill */
this._killswitch.setStatus(_("hardware disabled"));
this._killswitch.actor.reactive = can_toggle;
if (has_adapter)
this.actor.show();
@@ -129,6 +127,13 @@ 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();
@@ -137,8 +142,12 @@ Indicator.prototype = {
let item = this._deviceItems[i];
let destroy = true;
for (let j = 0; j < devices.length; j++) {
if (item._device.device_path == devices[j].device_path) {
this._updateDeviceItem(item, devices[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;
destroy = false;
break;
}
@@ -153,7 +162,7 @@ Indicator.prototype = {
this._hasDevices = newlist.length > 0;
for (let i = 0; i < devices.length; i++) {
let d = devices[i];
if (d._item)
if (d._skip)
continue;
let item = this._createDeviceItem(d);
if (item) {
@@ -168,62 +177,23 @@ 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);
// 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;
item._connectedMenuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
item._connectedMenuitem.connect('toggled', Lang.bind(this, function() {
let menuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
menuitem.connect('toggled', Lang.bind(this, function() {
if (item._connected > ConnectionState.CONNECTED) {
// operation already in progress, revert
// (should not happen anyway)
menuitem.setToggleState(menuitem.state);
}
if (item._connected) {
item._connected = ConnectionState.DISCONNECTING;
menuitem.setStatus(_("disconnecting..."));
this._applet.disconnect_device(item._device.device_path, function(applet, success) {
if (success) { // apply
item._connected = ConnectionState.DISCONNECTED;
@@ -232,11 +202,9 @@ Indicator.prototype = {
item._connected = ConnectionState.CONNECTED;
menuitem.setToggleState(true);
}
menuitem.setStatus(null);
});
} else {
item._connected = ConnectionState.CONNECTING;
menuitem.setStatus(_("connecting..."));
this._applet.connect_device(item._device.device_path, function(applet, success) {
if (success) { // apply
item._connected = ConnectionState.CONNECTED;
@@ -245,12 +213,11 @@ Indicator.prototype = {
item._connected = ConnectionState.DISCONNECTED;
menuitem.setToggleState(false);
}
menuitem.setStatus(null);
});
}
}));
item.menu.addMenuItem(item._connectedMenuitem);
item.menu.addMenuItem(menuitem);
}
if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_PUSH) {
@@ -296,6 +263,8 @@ Indicator.prototype = {
default:
break;
}
return item;
},
_updateFullMenu: function() {

View File

@@ -9,11 +9,13 @@ const Lang = imports.lang;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Main = imports.ui.main;
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);
}
@@ -69,11 +71,9 @@ XKBIndicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Show Keyboard Layout..."), Lang.bind(this, function() {
Main.overview.hide();
Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
}));
this.menu.addAction(_("Localization Settings"), function() {
Main.overview.hide();
let app = Shell.AppSystem.get_default().get_app('gnome-region-panel.desktop');
app.activate(-1);
});

File diff suppressed because it is too large Load Diff

View File

@@ -7,11 +7,13 @@ const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Main = imports.ui.main;
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';
@@ -81,7 +83,6 @@ Indicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Power Settings"),function() {
Main.overview.hide();
let app = Shell.AppSystem.get_default().get_app('gnome-power-panel.desktop');
app.activate(-1);
});
@@ -114,15 +115,15 @@ Indicator.prototype = {
let timestring;
if (time > 60) {
if (minutes == 0) {
timestring = ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
timestring = Gettext.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, ngettext("hour", "hours", hours), minutes, ngettext("minute", "minutes", minutes));
timestring = template.format (hours, Gettext.ngettext("hour", "hours", hours), minutes, Gettext.ngettext("minute", "minutes", minutes));
}
} else
timestring = ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
timestring = Gettext.ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
this._batteryItem.label.text = timestring;
}
this._primaryPercentage.text = Math.round(percentage) + '%';

View File

@@ -9,11 +9,13 @@ const Gvc = imports.gi.Gvc;
const Signals = imports.signals;
const St = imports.gi.St;
const Main = imports.ui.main;
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;
@@ -62,7 +64,6 @@ Indicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Sound Settings"), function() {
Main.overview.hide();
let app = Shell.AppSystem.get_default().get_app('gnome-sound-panel.desktop');
app.activate(-1);
});

View File

@@ -9,6 +9,8 @@ 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;
@@ -26,8 +28,7 @@ const DISABLE_LOG_OUT_KEY = 'disable-log-out';
const ScreenSaverInterface = {
name: BUS_NAME,
methods: [ { name: 'Lock', inSignature: '' },
{ name: 'SetActive', inSignature: 'b' }]
methods: [ { name: 'Lock', inSignature: '' } ]
};
let ScreenSaverProxy = DBus.makeProxyClass(ScreenSaverInterface);
@@ -58,7 +59,6 @@ StatusMenuButton.prototype = {
this._presence = new GnomeSession.Presence();
this._presenceItems = {};
this._session = new GnomeSession.SessionManager();
this._haveShutdown = true;
this._account_mgr = Tp.AccountManager.dup()
@@ -91,25 +91,12 @@ StatusMenuButton.prototype = {
Lang.bind(this, this._updateSwitchUser));
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
Lang.bind(this, this._updateLogout));
this._lockdownSettings.connect('changed::' + DISABLE_LOCK_SCREEN_KEY,
Lang.bind(this, this._updateLockScreen));
this._updateSwitchUser();
this._updateLogout();
this._updateLockScreen();
// Whether shutdown is available or not depends on both lockdown
// settings (disable-log-out) and Polkit policy - the latter doesn't
// notify, so we update the menu item each time the menu opens or
// the lockdown setting changes, which should be close enough.
this.menu.connect('open-state-changed', Lang.bind(this,
function(menu, open) {
if (open)
this._updateHaveShutdown();
}));
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
Lang.bind(this, this._updateHaveShutdown));
this._upClient.connect('notify::can-suspend', Lang.bind(this, this._updateSuspendOrPowerOff));
},
@@ -126,25 +113,13 @@ StatusMenuButton.prototype = {
},
_updateSessionSeparator: function() {
let sessionItemsVisible = this._loginScreenItem.actor.visible ||
this._logoutItem.actor.visible ||
this._lockScreenItem.actor.visible;
let showSessionSeparator = sessionItemsVisible &&
this._suspendOrPowerOffItem.actor.visible;
let showSettingsSeparator = sessionItemsVisible ||
this._suspendOrPowerOffItem.actor.visible;
if (showSessionSeparator)
let showSeparator = this._loginScreenItem.actor.visible ||
this._logoutItem.actor.visible ||
this._lockScreenItem.actor.visible;
if (showSeparator)
this._sessionSeparator.actor.show();
else
this._sessionSeparator.actor.hide();
if (showSettingsSeparator)
this._settingsSeparator.actor.show();
else
this._settingsSeparator.actor.hide();
},
_updateSwitchUser: function() {
@@ -174,34 +149,16 @@ StatusMenuButton.prototype = {
this._updateSessionSeparator();
},
_updateHaveShutdown: function() {
this._session.CanShutdownRemote(Lang.bind(this,
function(result, error) {
if (!error) {
this._haveShutdown = result;
this._updateSuspendOrPowerOff();
}
}));
},
_updateSuspendOrPowerOff: function() {
this._haveSuspend = this._upClient.get_can_suspend();
if (!this._suspendOrPowerOffItem)
return;
if (!this._haveShutdown && !this._haveSuspend)
this._suspendOrPowerOffItem.actor.hide();
else
this._suspendOrPowerOffItem.actor.show();
this._updateSessionSeparator();
// If we can't suspend show Power Off... instead
// and disable the alt key
if (!this._haveSuspend) {
this._suspendOrPowerOffItem.updateText(_("Power Off..."), null);
} else if (!this._haveShutdown) {
this._suspendOrPowerOffItem.updateText(_("Suspend"), null);
} else {
this._suspendOrPowerOffItem.updateText(_("Suspend"), _("Power Off..."));
}
@@ -247,7 +204,6 @@ StatusMenuButton.prototype = {
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
this._settingsSeparator = item;
item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
@@ -315,7 +271,7 @@ StatusMenuButton.prototype = {
if (this._haveSuspend &&
this._suspendOrPowerOffItem.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
this._screenSaverProxy.SetActiveRemote(true, Lang.bind(this, function() {
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.suspend_sync(null);
}));
} else {

View File

@@ -9,6 +9,9 @@ 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;
@@ -77,20 +80,19 @@ Client.prototype = {
// The second argument, recover, means _observeChannels will be run
// for any existing channel as well.
let dbus = Tp.DBusDaemon.dup();
this._tpClient = new Shell.TpClient({ 'dbus_daemon': dbus,
'name': 'GnomeShell',
'uniquify-name': true })
this._tpClient.set_observe_channels_func(
Lang.bind(this, this._observeChannels));
this._tpClient.set_approve_channels_func(
Lang.bind(this, this._approveChannels));
this._tpClient.set_handle_channels_func(
Lang.bind(this, this._handleChannels));
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);
try {
this._tpClient.register();
this._observer.register();
} catch (e) {
throw new Error('Couldn\'t register Telepathy client. Error: \n' + e);
throw new Error('Couldn\'t register SimpleObserver. Error: \n' + e);
}
},
@@ -103,7 +105,7 @@ Client.prototype = {
this._finishObserveChannels(account, conn, channels, context);
} else {
Shell.get_self_contact_features(conn,
contactFeatures,
contactFeatures.length, contactFeatures,
Lang.bind(this, function() {
this._finishObserveChannels(account, conn, channels, context);
}));
@@ -123,8 +125,8 @@ Client.prototype = {
continue;
/* Request a TpContact */
Shell.get_tp_contacts(conn, [targetHandle],
contactFeatures,
Shell.get_tp_contacts(conn, 1, [targetHandle],
contactFeatures.length, contactFeatures,
Lang.bind(this, function (connection, contacts, failed) {
if (contacts.length < 1)
return;
@@ -141,82 +143,30 @@ Client.prototype = {
if (this._sources[channel.get_object_path()])
return;
let source = new Source(account, conn, channel, contact, this._tpClient);
let source = new Source(account, conn, channel, contact);
this._sources[channel.get_object_path()] = source;
source.connect('destroy', Lang.bind(this,
function() {
if (this._tpClient.is_handling_channel(channel)) {
// The chat box has been destroyed so it can't
// handle the channel any more.
channel.close_async(function(src, result) {
channel.close_finish(result);
});
}
delete this._sources[channel.get_object_path()];
}));
},
_handlingChannels: function(account, conn, channels) {
let len = channels.length;
for (let i = 0; i < len; i++) {
let channel = channels[i];
// We can only handle text channel, so close any other channel
if (!(channel instanceof Tp.TextChannel)) {
channel.close_async(null);
continue;
}
if (this._tpClient.is_handling_channel(channel)) {
// We are already handling the channel, display the source
let source = this._sources[channel.get_object_path()];
if (source)
source.notify();
}
}
},
_approveChannels: function(approver, account, conn, channels,
dispatchOp, context) {
// Approve the channels right away as we are going to handle it
dispatchOp.claim_with_async(this._tpClient,
Lang.bind (this, function(dispatchOp, result) {
try {
dispatchOp.claim_with_finish(result);
this._handlingChannels(account, conn, channels);
} catch (err) {
global.logError('Failed to Claim channel: ' + err);
}}));
context.accept();
},
_handleChannels: function(handler, account, conn, channels,
requests, user_action_time, context) {
this._handlingChannels(account, conn, channels);
context.accept();
}
};
function Source(account, conn, channel, contact, client) {
this._init(account, conn, channel, contact, client);
function Source(account, conn, channel, contact) {
this._init(account, conn, channel, contact);
}
Source.prototype = {
__proto__: MessageTray.Source.prototype,
_init: function(account, conn, channel, contact, client) {
_init: function(account, conn, channel, contact) {
MessageTray.Source.prototype._init.call(this, contact.get_alias());
this.isChat = true;
this._account = account;
this._contact = contact;
this._client = client;
this._pendingMessages = [];
this._conn = conn;
this._channel = channel;
@@ -225,21 +175,10 @@ Source.prototype = {
this._notification = new Notification(this);
this._notification.setUrgency(MessageTray.Urgency.HIGH);
// We ack messages when the message box is collapsed if user has
// interacted with it before and so read the messages:
// - user clicked on it the tray
// - user expanded the notification by hovering over the toaster notification
this._shouldAck = false;
this.connect('summary-item-clicked', Lang.bind(this, this._summaryItemClicked));
this._notification.connect('expanded', Lang.bind(this, this._notificationExpanded));
this._notification.connect('collapsed', Lang.bind(this, this._notificationCollapsed));
this._presence = contact.get_presence_type();
this._sentId = this._channel.connect('message-sent', Lang.bind(this, this._messageSent));
this._receivedId = this._channel.connect('message-received', Lang.bind(this, this._messageReceived));
this._pendingId = this._channel.connect('pending-message-removed', Lang.bind(this, this._pendingRemoved));
this._setSummaryIcon(this.createNotificationIcon());
@@ -256,7 +195,7 @@ Source.prototype = {
_updateAlias: function() {
let oldAlias = this.title;
this.setTitle(this._contact.get_alias());
this.title = this._contact.get_alias();
this._notification.appendAliasChange(oldAlias, this.title);
this.pushNotification(this._notification);
},
@@ -285,17 +224,13 @@ Source.prototype = {
},
open: function(notification) {
if (this._client.is_handling_channel(this._channel)) {
// We are handling the channel, try to pass it to Empathy
this._client.delegate_channels_async([this._channel], global.get_current_time(), "", null);
}
else {
// We are not the handler, just ask to present the channel
let dbus = Tp.DBusDaemon.dup();
let cd = Tp.ChannelDispatcher.new(dbus);
let props = {};
props[Tp.PROP_CHANNEL_CHANNEL_TYPE] = Tp.IFACE_CHANNEL_TYPE_TEXT;
[props[Tp.PROP_CHANNEL_TARGET_HANDLE], props[Tp.PROP_CHANNEL_TARGET_HANDLE_TYPE]] = this._channel.get_handle();
cd.present_channel_async(this._channel, global.get_current_time(), null);
}
let req = Tp.AccountChannelRequest.new(this._account, props, global.get_current_time());
req.ensure_channel_async('', null, null);
},
_getLogMessages: function() {
@@ -313,18 +248,7 @@ Source.prototype = {
let logMessages = events.map(makeMessageFromTplEvent);
let pendingTpMessages = this._channel.get_pending_messages();
let pendingMessages = [];
for (let i = 0; i < pendingTpMessages.length; i++) {
let message = pendingTpMessages[i];
if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT)
continue;
pendingMessages.push(makeMessageFromTpMessage(message, NotificationDirection.RECEIVED));
this._pendingMessages.push(message);
}
let pendingMessages = pendingTpMessages.map(function (tpMessage) { return makeMessageFromTpMessage(tpMessage, NotificationDirection.RECEIVED); });
let showTimestamp = false;
@@ -360,7 +284,6 @@ Source.prototype = {
_channelClosed: function() {
this._channel.disconnect(this._closedId);
this._channel.disconnect(this._receivedId);
this._channel.disconnect(this._pendingId);
this._channel.disconnect(this._sentId);
this._contact.disconnect(this._notifyAliasId);
@@ -371,11 +294,6 @@ Source.prototype = {
},
_messageReceived: function(channel, message) {
if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT)
return;
this._pendingMessages.push(message);
message = makeMessageFromTpMessage(message, NotificationDirection.RECEIVED);
this._notification.appendMessage(message);
this.notify();
@@ -402,12 +320,10 @@ Source.prototype = {
}
let msg = Tp.ClientMessage.new_text(type, text);
this._channel.send_message_async(msg, 0, Lang.bind(this, function (src, result) {
this._channel.send_message_finish(result);
}));
this._channel.send_message_async(msg, 0, null);
},
_presenceChanged: function (contact, presence, status, message) {
_presenceChanged: function (contact, presence, type, status, message) {
let msg, shouldNotify, title;
if (this._presence == presence)
@@ -440,43 +356,6 @@ Source.prototype = {
this._notification.appendPresence(msg, shouldNotify);
if (shouldNotify)
this.notify();
},
_pendingRemoved: function(channel, message) {
let idx = this._pendingMessages.indexOf(message);
if (idx >= 0)
this._pendingMessages.splice(idx, 1);
else
throw new Error('Message not in our pending list: ' + message);
},
_ackMessages: function() {
if (this._pendingMessages.length == 0)
return;
// Don't clear our messages here, tp-glib will send a
// 'pending-message-removed' for each one.
this._channel.ack_messages_async(this._pendingMessages, Lang.bind(this, function(src, result) {
this._channel.ack_messages_finish(result);}));
},
_summaryItemClicked: function(source, button) {
if (button != 1)
return;
this._shouldAck = true;
},
_notificationExpanded: function() {
this._shouldAck = true;
},
_notificationCollapsed: function() {
if (this._shouldAck)
this._ackMessages();
this._shouldAck = false;
}
};
@@ -537,43 +416,17 @@ 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);
},
_filterMessages: function() {
if (this._history.length < 1)
return;
let lastMessageTime = this._history[0].time;
let currentTime = (Date.now() / 1000);
// Keep the scrollback from growing too long. If the most
// recent message (before the one we just added) is within
// SCROLLBACK_RECENT_TIME, we will keep
// SCROLLBACK_RECENT_LENGTH previous messages. Otherwise
// we'll keep SCROLLBACK_IDLE_LENGTH messages.
let maxLength = (lastMessageTime < currentTime - SCROLLBACK_RECENT_TIME) ?
SCROLLBACK_IDLE_LENGTH : SCROLLBACK_RECENT_LENGTH;
let filteredHistory = this._history.filter(function(item) { return item.realMessage });
if (filteredHistory.length > maxLength) {
let lastMessageToKeep = filteredHistory[maxLength];
let expired = this._history.splice(this._history.indexOf(lastMessageToKeep));
for (let i = 0; i < expired.length; i++)
expired[i].actor.destroy();
}
},
_append: function(text, styles, timestamp, noTimestamp) {
let currentTime = (Date.now() / 1000);
if (!timestamp)
timestamp = currentTime;
let lastMessageTime = -1;
if (this._history.length > 0)
lastMessageTime = this._history[0].time;
// Reset the old message timeout
if (this._timestampTimeoutId)
@@ -596,7 +449,23 @@ Notification.prototype = {
Lang.bind(this, this.appendTimestamp));
}
this._filterMessages();
if (this._history.length > 1) {
// Keep the scrollback from growing too long. If the most
// recent message (before the one we just added) is within
// SCROLLBACK_RECENT_TIME, we will keep
// SCROLLBACK_RECENT_LENGTH previous messages. Otherwise
// we'll keep SCROLLBACK_IDLE_LENGTH messages.
let maxLength = (lastMessageTime < currentTime - SCROLLBACK_RECENT_TIME) ?
SCROLLBACK_IDLE_LENGTH : SCROLLBACK_RECENT_LENGTH;
let filteredHistory = this._history.filter(function(item) { return item.realMessage });
if (filteredHistory.length > maxLength) {
let lastMessageToKeep = filteredHistory[maxLength];
let expired = this._history.splice(this._history.indexOf(lastMessageToKeep));
for (let i = 0; i < expired.length; i++)
expired[i].actor.destroy();
}
}
},
_formatTimestamp: function(date) {
@@ -604,8 +473,6 @@ Notification.prototype = {
var daysAgo = (now.getTime() - date.getTime()) / (24 * 60 * 60 * 1000);
let format;
// Show a week day and time if date is in the last week
if (daysAgo < 1 || (daysAgo < 7 && now.getDay() != date.getDay())) {
/* Translators: this is a time format string followed by a date.
@@ -638,9 +505,6 @@ Notification.prototype = {
this._history.unshift({ actor: timeLabel, time: lastMessageTime, realMessage: false });
this._timestampTimeoutId = 0;
this._filterMessages();
return false;
},
@@ -652,23 +516,21 @@ Notification.prototype = {
let label = this.addBody(text, true);
label.add_style_class_name('chat-meta-message');
this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false});
this._filterMessages();
},
appendAliasChange: function(oldAlias, newAlias) {
oldAlias = GLib.markup_escape_text(oldAlias, -1);
newAlias = GLib.markup_escape_text(newAlias, -1);
// FIXME: uncomment this after 3.0 string freeze ends
/* 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 });
// oldAlias = GLib.markup_escape_text(oldAlias, -1);
// newAlias = GLib.markup_escape_text(newAlias, -1);
this._filterMessages();
// /* 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,6 +8,8 @@ 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;
@@ -150,6 +152,10 @@ SearchTab.prototype = {
return true;
}));
this._entry.connect('secondary-icon-clicked', Lang.bind(this,
function() {
this._reset();
}));
this._entry.connect('notify::mapped', Lang.bind(this, this._onMapped));
global.stage.connect('notify::key-focus', Lang.bind(this, this._updateCursorVisibility));
@@ -160,14 +166,7 @@ SearchTab.prototype = {
hide: function() {
BaseTab.prototype.hide.call(this);
// Leave the entry focused when it doesn't have any text;
// when replacing a selected search term, Clutter emits
// two 'text-changed' signals, one for deleting the previous
// text and one for the new one - the second one is handled
// incorrectly when we remove focus
// (https://bugzilla.gnome.org/show_bug.cgi?id=636341) */
if (this._text.text != '')
this._reset();
this._reset();
},
_reset: function () {
@@ -227,7 +226,7 @@ SearchTab.prototype = {
if (this._iconClickedId == 0) {
this._iconClickedId = this._entry.connect('secondary-icon-clicked',
Lang.bind(this, function() {
this._reset();
this.reset();
}));
}
this._activate();
@@ -291,7 +290,7 @@ SearchTab.prototype = {
_doSearch: function () {
this._searchTimeoutId = 0;
let text = this._text.get_text().replace(/^\s+/g, '').replace(/\s+$/g, '');
this._searchResults.updateSearch(text);
this._searchResults.doSearch(text);
return false;
}

View File

@@ -2,6 +2,8 @@
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

@@ -6,7 +6,6 @@ const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const AltTab = imports.ui.altTab;
const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
@@ -23,7 +22,8 @@ function getDimShader() {
if (dimShader === null)
return null;
if (!dimShader) {
let source = Shell.get_file_contents_utf8_sync(global.datadir + '/shaders/dim-window.glsl');
let [success, source, length] = GLib.file_get_contents(global.datadir +
'/shaders/dim-window.glsl');
try {
let shader = new Clutter.Shader();
shader.set_fragment_source(source, -1);

View File

@@ -1,7 +1,6 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter;
const GConf = imports.gi.GConf;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
@@ -28,8 +27,6 @@ const CLOSE_BUTTON_FADE_TIME = 0.1;
const DRAGGING_WINDOW_OPACITY = 100;
const BUTTON_LAYOUT_KEY = '/desktop/gnome/shell/windows/button_layout';
// Define a layout scheme for small window counts. For larger
// counts we fall back to an algorithm. We need more schemes here
// unless we have a really good algorithm.
@@ -240,7 +237,7 @@ WindowClone.prototype = {
this.emit('zoom-start');
if (!this._zoomLightbox)
this._zoomLightbox = new Lightbox.Lightbox(Main.uiGroup,
this._zoomLightbox = new Lightbox.Lightbox(global.stage,
{ fadeTime: LIGHTBOX_FADE_TIME });
this._zoomLightbox.show();
@@ -251,7 +248,7 @@ WindowClone.prototype = {
this._zoomGlobalOrig.setPosition.apply(this._zoomGlobalOrig, this.actor.get_transformed_position());
this._zoomGlobalOrig.setScale(width / this.actor.width, height / this.actor.height);
this.actor.reparent(Main.uiGroup);
this.actor.reparent(global.stage);
this._zoomLightbox.highlight(this.actor);
[this.actor.x, this.actor.y] = this._zoomGlobalOrig.getPosition();
@@ -299,30 +296,12 @@ WindowClone.prototype = {
},
_onDragBegin : function (draggable, time) {
if (this._zooming)
this._zoomEnd();
[this.dragOrigX, this.dragOrigY] = this.actor.get_position();
this.dragOrigScale = this.actor.scale_x;
this.inDrag = true;
this.emit('drag-begin');
},
_getWorkspaceActor : function() {
let index = this.metaWindow.get_workspace().index();
return Main.overview.workspaces.getWorkspaceByIndex(index);
},
handleDragOver : function(source, actor, x, y, time) {
let workspace = this._getWorkspaceActor();
return workspace.handleDragOver(source, actor, x, y, time);
},
acceptDrop : function(source, actor, x, y, time) {
let workspace = this._getWorkspaceActor();
workspace.acceptDrop(source, actor, x, y, time);
},
_onDragCancelled : function (draggable, time) {
this.emit('drag-cancelled');
},
@@ -415,8 +394,6 @@ WindowOverlay.prototype = {
show: function() {
this._hidden = false;
if (this._windowClone.actor.has_pointer)
this.closeButton.show();
this.title.show();
},
@@ -453,20 +430,9 @@ WindowOverlay.prototype = {
let button = this.closeButton;
let title = this.title;
let gconf = GConf.Client.get_default();
let layout = gconf.get_string(BUTTON_LAYOUT_KEY);
let rtl = St.Widget.get_default_direction() == St.TextDirection.RTL;
let split = layout.split(":");
let side;
if (split[0].indexOf("close") > -1)
side = rtl ? St.Side.RIGHT : St.Side.LEFT;
else
side = rtl ? St.Side.LEFT : St.Side.RIGHT;
let buttonX;
let buttonY = cloneY - (button.height - button._overlap);
if (side == St.Side.LEFT)
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
buttonX = cloneX - (button.width - button._overlap);
else
buttonX = cloneX + (cloneWidth - button._overlap);
@@ -648,7 +614,6 @@ Workspace.prototype = {
function () {
this._dropRect.set_position(x, y);
this._dropRect.set_size(width, height);
this.positionWindows(WindowPositionFlags.ANIMATE);
return false;
}));
@@ -671,6 +636,16 @@ Workspace.prototype = {
return this._windows.length == 0;
},
/**
* setReactive:
* @reactive: %true iff the workspace should be reactive
*
* Set the workspace (desktop) reactive
**/
setReactive: function(reactive) {
this.actor.reactive = reactive;
},
// Only use this for n <= 20 say
_factorial: function(n) {
let result = 1;
@@ -1138,9 +1113,7 @@ Workspace.prototype = {
// the compositor finds out about them...
Mainloop.idle_add(Lang.bind(this,
function () {
if (this.actor &&
metaWin.get_compositor_private() &&
metaWin.get_workspace() == this.metaWorkspace)
if (this.actor && metaWin.get_compositor_private())
this._doAddWindow(metaWin);
return false;
}));

View File

@@ -178,11 +178,6 @@ WorkspaceThumbnail.prototype = {
// Create clones for windows that should be visible in the Overview
this._windows = [];
for (let i = 0; i < windows.length; i++) {
windows[i].meta_window._minimizedChangedId =
windows[i].meta_window.connect('notify::minimized',
Lang.bind(this,
this._updateMinimized));
if (this._isOverviewWindow(windows[i])) {
this._addWindowClone(windows[i]);
}
@@ -262,18 +257,11 @@ WorkspaceThumbnail.prototype = {
return;
// Check if window still should be here
if (win && this._isMyWindow(win) && this._isOverviewWindow(win))
if (win && this._isMyWindow(win))
return;
let clone = this._windows[index];
this._windows.splice(index, 1);
if (win && this._isOverviewWindow(win)) {
if (metaWin._minimizedChangedId) {
metaWin.disconnect(metaWin._minimizedChangedId);
delete metaWin._minimizedChangedId;
}
}
clone.destroy();
},
@@ -288,9 +276,7 @@ WorkspaceThumbnail.prototype = {
// the compositor finds out about them...
Mainloop.idle_add(Lang.bind(this,
function () {
if (this.actor &&
metaWin.get_compositor_private() &&
metaWin.get_workspace() == this.metaWorkspace)
if (this.actor && metaWin.get_compositor_private())
this._doAddWindow(metaWin);
return false;
}));
@@ -302,11 +288,6 @@ WorkspaceThumbnail.prototype = {
if (this._lookupIndex (metaWin) != -1)
return;
if (!metaWin._minimizedChangedId)
metaWin._minimizedChangedId = metaWin.connect('notify::minimized',
Lang.bind(this,
this._updateMinimized));
if (!this._isMyWindow(win) || !this._isOverviewWindow(win))
return;
@@ -333,13 +314,6 @@ WorkspaceThumbnail.prototype = {
}
},
_updateMinimized: function(metaWin) {
if (metaWin.minimized)
this._doRemoveWindow(metaWin);
else
this._doAddWindow(metaWin);
},
destroy : function() {
this.actor.destroy();
},
@@ -350,14 +324,6 @@ WorkspaceThumbnail.prototype = {
global.screen.disconnect(this._windowEnteredMonitorId);
global.screen.disconnect(this._windowLeftMonitorId);
for (let i = 0; i < this._windows.length; i++) {
let metaWin = this._windows[i].metaWindow;
if (metaWin._minimizedChangedId) {
metaWin.disconnect(metaWin._minimizedChangedId);
delete metaWin._minimizedChangedId;
}
}
this._windows = [];
this.actor = null;
},
@@ -371,8 +337,7 @@ WorkspaceThumbnail.prototype = {
// Tests if @win should be shown in the Overview
_isOverviewWindow : function (win) {
let tracker = Shell.WindowTracker.get_default();
return tracker.is_window_interesting(win.get_meta_window()) &&
win.get_meta_window().showing_on_its_workspace();
return tracker.is_window_interesting(win.get_meta_window());
},
// Create a clone of a (non-desktop) window and add it to the window list

View File

@@ -7,6 +7,8 @@ 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;
@@ -49,12 +51,9 @@ WorkspacesView.prototype = {
this._height = 0;
this._x = 0;
this._y = 0;
this._clipX = 0;
this._clipY = 0;
this._clipWidth = 0;
this._clipHeight = 0;
this._workspaceRatioSpacing = 0;
this._spacing = 0;
this._lostWorkspaces = [];
this._animating = false; // tweening
this._scrolling = false; // swipe-scrolling
this._animatingScroll = false; // programatically updating the adjustment
@@ -96,8 +95,7 @@ WorkspacesView.prototype = {
this._overviewShownId =
Main.overview.connect('shown',
Lang.bind(this, function() {
this.actor.set_clip(this._clipX, this._clipY,
this._clipWidth, this._clipHeight);
this.actor.set_clip(this._x, this._y, this._width, this._height);
}));
this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
@@ -141,13 +139,6 @@ WorkspacesView.prototype = {
this._workspaces[i].setGeometry(x, y, width, height);
},
setClipRect: function(x, y, width, height) {
this._clipX = x;
this._clipY = y;
this._clipWidth = width;
this._clipHeight = height;
},
_lookupWorkspaceForMetaWindow: function (metaWindow) {
for (let i = 0; i < this._workspaces.length; i++) {
if (this._workspaces[i].containsMetaWindow(metaWindow))
@@ -161,10 +152,6 @@ WorkspacesView.prototype = {
return this._workspaces[active];
},
getWorkspaceByIndex: function(index) {
return this._workspaces[index];
},
hide: function() {
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let activeWorkspace = this._workspaces[activeWorkspaceIndex];
@@ -214,10 +201,12 @@ WorkspacesView.prototype = {
Tweener.removeTweens(workspace.actor);
let opacity = (this._inDrag && w != active) ? 200 : 255;
let y = (w - active) * (this._height + this._spacing + this._workspaceRatioSpacing);
if (showAnimation) {
let params = { y: y,
opacity: opacity,
time: WORKSPACE_SWITCH_TIME,
transition: 'easeOutQuad'
};
@@ -235,10 +224,32 @@ WorkspacesView.prototype = {
Tweener.addTween(workspace.actor, params);
} else {
workspace.actor.set_position(0, y);
workspace.actor.opacity = opacity;
if (w == 0)
this._updateVisibility();
}
}
for (let l = 0; l < this._lostWorkspaces.length; l++) {
let workspace = this._lostWorkspaces[l];
Tweener.removeTweens(workspace.actor);
workspace.actor.show();
workspace.hideWindowsOverlays();
if (showAnimation) {
Tweener.addTween(workspace.actor,
{ y: workspace.x,
time: WORKSPACE_SWITCH_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this,
this._cleanWorkspaces)
});
} else {
this._cleanWorkspaces();
}
}
},
_updateVisibility: function() {
@@ -259,6 +270,17 @@ WorkspacesView.prototype = {
}
},
_cleanWorkspaces: function() {
if (this._lostWorkspaces.length == 0)
return;
for (let l = 0; l < this._lostWorkspaces.length; l++)
this._lostWorkspaces[l].destroy();
this._lostWorkspaces = [];
this._updateWorkspaceActors(false);
},
_updateScrollAdjustment: function(index, showAnimation) {
if (this._scrolling)
return;
@@ -281,9 +303,12 @@ WorkspacesView.prototype = {
}
},
updateWorkspaces: function(oldNumWorkspaces, newNumWorkspaces) {
updateWorkspaces: function(oldNumWorkspaces, newNumWorkspaces, lostWorkspaces) {
let active = global.screen.get_active_workspace_index();
for (let l = 0; l < lostWorkspaces.length; l++)
lostWorkspaces[l].disconnectAll();
Tweener.addTween(this._scrollAdjustment,
{ upper: newNumWorkspaces,
time: WORKSPACE_SWITCH_TIME,
@@ -291,13 +316,12 @@ WorkspacesView.prototype = {
});
if (newNumWorkspaces > oldNumWorkspaces) {
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++) {
this._workspaces[w].setGeometry(this._x, this._y,
this._width, this._height);
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++)
this.actor.add_actor(this._workspaces[w].actor);
}
this._updateWorkspaceActors(false);
} else {
this._lostWorkspaces = lostWorkspaces;
}
this._scrollToActive(true);
@@ -415,14 +439,20 @@ WorkspacesView.prototype = {
if (topWorkspace) {
if (topWorkspace.actor.contains(dragEvent.targetActor)) {
hoverWorkspace = topWorkspace;
topWorkspace.opacity = topWorkspace.actor.opacity = 255;
result = topWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
} else {
topWorkspace.opacity = topWorkspace.actor.opacity = 200;
}
}
if (bottomWorkspace) {
if (bottomWorkspace.actor.contains(dragEvent.targetActor)) {
hoverWorkspace = bottomWorkspace;
bottomWorkspace.opacity = bottomWorkspace.actor.opacity = 255;
result = bottomWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
} else {
bottomWorkspace.opacity = bottomWorkspace.actor.opacity = 200;
}
}
@@ -449,7 +479,7 @@ WorkspacesView.prototype = {
Mainloop.source_remove(this._timeoutId);
this._timeoutId = 0;
}
DND.removeDragMonitor(this._dragMonitor);
DND.removeMonitor(this._dragMonitor);
this._inDrag = false;
for (let i = 0; i < this._workspaces.length; i++)
@@ -568,9 +598,6 @@ WorkspacesDisplay.prototype = {
this._updateAlwaysZoom();
global.screen.connect('monitors-changed', Lang.bind(this, this._updateAlwaysZoom));
global.screen.connect('notify::n-workspaces',
Lang.bind(this, this._workspacesChanged));
Main.xdndHandler.connect('drag-begin', Lang.bind(this, function(){
this._alwaysZoomOut = true;
}));
@@ -580,6 +607,7 @@ WorkspacesDisplay.prototype = {
this._updateAlwaysZoom();
}));
this._nWorkspacesNotifyId = 0;
this._switchWorkspaceNotifyId = 0;
this._itemDragBeginId = 0;
@@ -609,6 +637,10 @@ WorkspacesDisplay.prototype = {
this.workspacesView = new WorkspacesView(this._workspaces);
this._updateWorkspacesGeometry();
this._nWorkspacesNotifyId =
global.screen.connect('notify::n-workspaces',
Lang.bind(this, this._workspacesChanged));
this._restackedNotifyId =
global.screen.connect('restacked',
Lang.bind(this, this._onRestacked));
@@ -639,6 +671,10 @@ WorkspacesDisplay.prototype = {
this._controls.hide();
this._thumbnailsBox.hide();
if (this._nWorkspacesNotifyId > 0) {
global.screen.disconnect(this._nWorkspacesNotifyId);
this._nWorkspacesNotifyId = 0;
}
if (this._restackedNotifyId > 0){
global.screen.disconnect(this._restackedNotifyId);
this._restackedNotifyId = 0;
@@ -687,12 +723,7 @@ WorkspacesDisplay.prototype = {
},
_updateAlwaysZoom: function() {
// Always show the pager if workspaces are actually used,
// e.g. there are windows on more than one
this._alwaysZoomOut = global.screen.n_workspaces > 2;
if (this._alwaysZoomOut)
return;
this._alwaysZoomOut = false;
let monitors = global.get_monitors();
let primary = global.get_primary_monitor();
@@ -763,13 +794,6 @@ WorkspacesDisplay.prototype = {
let rtl = (St.Widget.get_default_direction () == St.TextDirection.RTL);
let clipWidth = width - controlsVisible;
let clipHeight = (fullHeight / fullWidth) * clipWidth;
let clipX = rtl ? x + controlsVisible : x;
let clipY = y + (fullHeight - clipHeight) / 2;
this.workspacesView.setClipRect(clipX, clipY, clipWidth, clipHeight);
if (this._zoomOut) {
width -= controlsNatural;
if (rtl)
@@ -808,12 +832,6 @@ WorkspacesDisplay.prototype = {
if (oldNumWorkspaces == newNumWorkspaces)
return;
this._updateAlwaysZoom();
this._updateZoom();
if (this.workspacesView == null)
return;
let lostWorkspaces = [];
if (newNumWorkspaces > oldNumWorkspaces) {
// Assume workspaces are only added at the end
@@ -839,23 +857,24 @@ WorkspacesDisplay.prototype = {
lostWorkspaces = this._workspaces.splice(removedIndex,
removedNum);
for (let l = 0; l < lostWorkspaces.length; l++) {
lostWorkspaces[l].disconnectAll();
lostWorkspaces[l].destroy();
}
// Don't let the user try to select this workspace as it's
// making its exit.
for (let l = 0; l < lostWorkspaces.length; l++)
lostWorkspaces[l].setReactive(false);
this._thumbnailsBox.removeThumbmails(removedIndex, removedNum);
}
this.workspacesView.updateWorkspaces(oldNumWorkspaces,
newNumWorkspaces);
newNumWorkspaces,
lostWorkspaces);
},
_updateZoom : function() {
if (Main.overview.animationInProgress)
return;
let shouldZoom = this._alwaysZoomOut || this._controls.hover;
let shouldZoom = this._alwaysZoomOut || this._controls.hover || (this._inDrag && !this._cancelledDrag);
if (shouldZoom != this._zoomOut) {
this._zoomOut = shouldZoom;
this._updateWorkspacesGeometry();
@@ -879,22 +898,12 @@ WorkspacesDisplay.prototype = {
_dragBegin: function() {
this._inDrag = true;
this._cancelledDrag = false;
this._dragMonitor = {
dragMotion: Lang.bind(this, this._onDragMotion)
};
DND.addDragMonitor(this._dragMonitor);
this._updateZoom();
},
_dragCancelled: function() {
this._cancelledDrag = true;
DND.removeDragMonitor(this._dragMonitor);
},
_onDragMotion: function(dragEvent) {
let controlsHovered = this._controls.contains(dragEvent.targetActor);
this._controls.set_hover(controlsHovered);
return DND.DragMotionResult.CONTINUE;
this._updateZoom();
},
_dragEnd: function() {

202
js/ui/zeitgeistSearch.js Normal file
View File

@@ -0,0 +1,202 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
*
* Copyright (C) 2010 Seif Lotfy <seif@lotfy.com>
* Copyright (C) 2011 Siegfried-Angel Gevatter Pujals <siegfried@gevatter.com>
* Copyright (C) 2010-2011 Collabora Ltd.
* Authored by: Seif Lotfy <seif@lotfy.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
const Lang = imports.lang;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio
const Semantic = imports.misc.semantic;
const Zeitgeist = imports.misc.zeitgeist;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const DocInfo = imports.misc.docInfo;
const Search = imports.ui.search;
// FIXME: The subject cache is never being emptied.
let ZeitgeistSubjectCache = {};
function ZeitgeistAsyncSearchProvider(title, interpretations) {
this._init(title, interpretations);
}
ZeitgeistAsyncSearchProvider.prototype = {
__proto__: Search.SearchProvider.prototype,
_init: function(title, interpretations) {
Search.SearchProvider.prototype._init.call(this, title);
this._buildTemplates(interpretations);
},
_buildTemplates: function(interpretations) {
this.templates = [];
for (let i = 0; i < interpretations.length; i++) {
let subject = new Zeitgeist.Subject('', interpretations[i], '', '', '', '', '');
let event = new Zeitgeist.Event('', '', '', [subject], []);
this.templates.push(event);
}
},
_search: function(terms) {
this._search_terms = terms;
Zeitgeist.fullTextSearch(terms[0]+'*',
this.templates,
Lang.bind(this, function(events) {
if (terms == this._search_terms)
this._asyncCallback(events);
}));
},
_asyncCancelled: function() {
this._search_terms = null;
},
getInitialResultSet: function(terms) {
this._search(terms);
return [];
},
getSubsearchResultSet: function(previousResults, terms) {
this.tryCancelAsync();
return this.getInitialResultSet(terms);
},
getResultMeta: function(resultId) {
return { 'id': ZeitgeistSubjectCache[resultId].uri,
'name': ZeitgeistSubjectCache[resultId].name,
'createIcon': function (size) {
return ZeitgeistSubjectCache[resultId].createIcon(size);
},
};
},
activateResult: function(resultId) {
Gio.app_info_launch_default_for_uri(resultId,
global.create_app_launch_context());
},
_asyncCallback: function(events) {
let items = [];
for (let i = 0; i < events.length; i++) {
let event = events[i];
let subject = event.subjects[0];
let uri = subject.uri.replace('file://', '');
uri = GLib.uri_unescape_string(uri, '');
if (GLib.file_test(uri, GLib.FileTest.EXISTS)) {
if (!ZeitgeistSubjectCache.hasOwnProperty(subject.uri)) {
let info = new DocInfo.ZeitgeistItemInfo(event);
ZeitgeistSubjectCache[info.uri] = info;
}
items.push(subject.uri);
}
}
this.addItems(items);
}
};
function DocumentsAsyncSearchProvider() {
this._init();
}
DocumentsAsyncSearchProvider.prototype = {
__proto__: ZeitgeistAsyncSearchProvider.prototype,
_init: function() {
let interpretations = [Semantic.NFO_DOCUMENT];
ZeitgeistAsyncSearchProvider.prototype._init.call(this, _("DOCUMENTS"), interpretations);
}
};
function VideosAsyncSearchProvider() {
this._init();
}
VideosAsyncSearchProvider.prototype = {
__proto__: ZeitgeistAsyncSearchProvider.prototype,
_init: function() {
let interpretations = [Semantic.NFO_VIDEO];
ZeitgeistAsyncSearchProvider.prototype._init.call(this, _("VIDEOS"), interpretations);
}
};
function MusicAsyncSearchProvider() {
this._init();
}
MusicAsyncSearchProvider.prototype = {
__proto__: ZeitgeistAsyncSearchProvider.prototype,
_init: function() {
let interpretations = [
Semantic.NFO_AUDIO,
Semantic.NMM_MUSIC_PIECE];
ZeitgeistAsyncSearchProvider.prototype._init.call(this, _("MUSIC"), interpretations);
}
};
function PicturesAsyncSearchProvider() {
this._init();
}
PicturesAsyncSearchProvider.prototype = {
__proto__: ZeitgeistAsyncSearchProvider.prototype,
_init: function() {
let interpretations = [Semantic.NFO_IMAGE];
ZeitgeistAsyncSearchProvider.prototype._init.call(this, _("PICTURES"), interpretations);
}
};
function OtherAsyncSearchProvider() {
this._init();
}
OtherAsyncSearchProvider.prototype = {
__proto__: ZeitgeistAsyncSearchProvider.prototype,
_init: function() {
let interpretations = [
'!' + Semantic.NFO_IMAGE,
'!' + Semantic.NFO_DOCUMENT,
'!' + Semantic.NFO_VIDEO,
'!' + Semantic.NFO_AUDIO,
'!' + Semantic.NMM_MUSIC_PIECE];
ZeitgeistAsyncSearchProvider.prototype._init.call(this, _("OTHER"), interpretations);
},
_buildTemplates: function(interpretations) {
// Here we want to get everything matching all of the templates, and
// not just any of them. Therefore we need to AND the interpretations
// instead of OR'ing them; this is done by having an Event with
// different Subjects.
this.templates = [];
let subjects = [];
for (let i = 0; i < interpretations.length; i++) {
let subject = new Zeitgeist.Subject('', interpretations[i], '', '', '', '', '');
subjects.push(subject);
}
let event = new Zeitgeist.Event('', '', '', subjects, []);
this.templates.push(event);
}
};

View File

@@ -36,48 +36,53 @@ visually attractive and easy to use experience.
.SH OPTIONS
.TP
.B \-\-replace
Replace the running window manager
.B \-r, \-\-replace
Replace the running metacity/gnome-panel
.br
.TP
.B \-\-sm-disable
Disable connection to the session manager
.B \-v, \-\-verbose
Shows details about the results of running `gnome-shell'.
.br
.TP
.B \-\-sm-client-id=ID
Specify session management ID
.B \-g, \-\-debug
Run under a debugger
.br
.TP
.B \-\-sm-save-file=FILE
Initialize session from savefile
.br
.TP
.B \-\-screen=SCREEN
X screen to use
.br
.TP
.B \-d, \-\-display=DISPLAY
X display to use
.B \-\-debug\-command
Command to use for debugging (defaults to 'gdb \-\-args')
.br
.TP
.B \-\-sync
Make X calls synchronous
.br
Make X calls synchronously, useful when debugging down X errors
.br
.TP
.B \-\-version
Print version and exit
.B \-\-xephyr
Run a debugging instance inside Xephyr
.br
.TP
.B \-\-help
Display help and exit
.B \-\-geometry
Specify Xephyr screen geometry
.br
.TP
.B \-w, \-\-wide
Use widescreen (1280x800) with Xephyr
.br
.TP
.B \-\-create\-extension
Create a new GNOME Shell extension
.TP
.B \-\-eval\-file
Evaluate the contents of the given JavaScript file
.br
.SH BUGS

View File

@@ -1,21 +1,15 @@
af
an
ar
be
bg
bn
bn_IN
ca
ca@valencia
cs
da
de
el
en_GB
eo
es
et
eu
fa
fi
fr
@@ -42,13 +36,11 @@ pt
pt_BR
ro
ru
sk
sl
sr
sr@latin
sv
ta
te
th
tr
ug

610
po/af.po

File diff suppressed because it is too large Load Diff

1161
po/an.po

File diff suppressed because it is too large Load Diff

1217
po/be.po

File diff suppressed because it is too large Load Diff

1202
po/bn.po

File diff suppressed because it is too large Load Diff

561
po/ca.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

683
po/cs.po

File diff suppressed because it is too large Load Diff

133
po/da.po
View File

@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-30 22:40+0200\n"
"PO-Revision-Date: 2011-03-30 19:55+0000\n"
"POT-Creation-Date: 2011-03-28 23:40+0200\n"
"PO-Revision-Date: 2011-03-28 20:00+0000\n"
"Last-Translator: Kris Thomsen <lakristho@gmail.com>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
@@ -345,13 +345,13 @@ msgid "Nothing Scheduled"
msgstr "Intet planlagt"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
#: ../js/ui/calendar.js:720
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:493
#: ../js/ui/calendar.js:723
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d. %B %Y"
@@ -372,7 +372,7 @@ msgstr "Denne uge"
msgid "Next week"
msgstr "Næste uge"
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1000
msgid "Remove"
msgstr "Fjern"
@@ -463,21 +463,24 @@ msgid "Logging out of the system."
msgstr "Logger ud af systemet."
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
#, fuzzy
msgid "Power Off"
msgstr "Sluk"
msgstr "Sluk..."
#: ../js/ui/endSessionDialog.js:76
#, fuzzy
msgid "Click Power Off to quit these applications and power off the system."
msgstr "Tryk Sluk for at afslutte disse programmer og lukke systemet ned."
msgstr "Tryk Log ud for at afslutte disse programmer og logge ud af systemet."
#: ../js/ui/endSessionDialog.js:77
#, c-format
#, fuzzy, c-format
msgid "The system will power off automatically in %d seconds."
msgstr "Systemet vil lukke ned automatisk om %d sekunder."
msgstr "Systemet vil genstarte automatisk om %d sekunder."
#: ../js/ui/endSessionDialog.js:78
#, fuzzy
msgid "Powering off the system."
msgstr "Lukker systemet ned."
msgstr "Logger ud af systemet."
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
#: ../js/ui/endSessionDialog.js:93
@@ -532,11 +535,11 @@ msgstr "Vis kilde"
msgid "Web Page"
msgstr "Webside"
#: ../js/ui/messageTray.js:1000
#: ../js/ui/messageTray.js:993
msgid "Open"
msgstr "Åbn"
#: ../js/ui/messageTray.js:2164
#: ../js/ui/messageTray.js:2151
msgid "System Information"
msgstr "Systeminformation"
@@ -559,20 +562,20 @@ msgid "Dash"
msgstr "Favoritområde"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:524
#: ../js/ui/panel.js:515
#, c-format
msgid "Quit %s"
msgstr "Afslut %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:902
#: ../js/ui/panel.js:893
msgid "Activities"
msgstr "Aktiviteter"
#: ../js/ui/panel.js:1003
#: ../js/ui/panel.js:994
msgid "Top Bar"
msgstr "Toppanel"
msgstr ""
#: ../js/ui/placeDisplay.js:122
#, c-format
@@ -593,15 +596,15 @@ msgstr "STEDER & ENHEDER"
#: ../js/ui/polkitAuthenticationAgent.js:74
msgid "Authentication Required"
msgstr "Godkendelse er påkrævet"
msgstr ""
#: ../js/ui/polkitAuthenticationAgent.js:108
msgid "Administrator"
msgstr "Administrator"
msgstr ""
#: ../js/ui/polkitAuthenticationAgent.js:176
msgid "Authenticate"
msgstr "Godkend"
msgstr ""
#. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen
@@ -609,11 +612,11 @@ msgstr "Godkend"
#. * for instance.
#: ../js/ui/polkitAuthenticationAgent.js:264
msgid "Sorry, that didn't work. Please try again."
msgstr "Beklager, godkendelse mislykkedes. Prøv igen."
msgstr ""
#: ../js/ui/polkitAuthenticationAgent.js:276
msgid "Password:"
msgstr "Adgangskode:"
msgstr ""
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
@@ -837,140 +840,150 @@ msgid "Localization Settings"
msgstr "Indstillinger for sprog"
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1454
#, fuzzy
msgid "<unknown>"
msgstr "<ukendt>"
msgstr "Ukendt"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:311
#, fuzzy
msgid "disabled"
msgstr "deaktiveret"
msgstr "Deaktiveret"
#: ../js/ui/status/network.js:494
#, fuzzy
msgid "connecting..."
msgstr "forbinder..."
msgstr "Forbindelse"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:497
msgid "authentication required"
msgstr "godkendelse påkrævet"
msgstr ""
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:507
msgid "firmware missing"
msgstr "firmware mangler"
msgstr ""
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:514
msgid "cable unplugged"
msgstr "kabel er ikke sat i"
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
#, fuzzy
msgid "unavailable"
msgstr "utilgængelig"
msgstr "Tilgængelig"
#: ../js/ui/status/network.js:521
#, fuzzy
msgid "connection failed"
msgstr "forbindelse mislykkedes"
msgstr "Forbindelse"
#. 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
msgid "Connected (private)"
msgstr "Forbundet (privat)"
msgstr ""
#: ../js/ui/status/network.js:683
msgid "Auto Ethernet"
msgstr "Auto ethernet"
msgstr ""
#: ../js/ui/status/network.js:758
msgid "Auto broadband"
msgstr "Auto bredbånd"
msgstr ""
#: ../js/ui/status/network.js:761
msgid "Auto dial-up"
msgstr "Auto opringning"
msgstr ""
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:904 ../js/ui/status/network.js:1414
#, c-format
msgid "Auto %s"
msgstr "Auto %s"
msgstr ""
#: ../js/ui/status/network.js:906
#, fuzzy
msgid "Auto bluetooth"
msgstr "Auto bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/network.js:1416
msgid "Auto wireless"
msgstr "Auto trådløs"
msgstr ""
#: ../js/ui/status/network.js:1474
msgid "More..."
msgstr "Mere..."
msgstr ""
#: ../js/ui/status/network.js:1497
msgid "Enable networking"
msgstr "Aktivér netværk"
msgstr ""
#: ../js/ui/status/network.js:1509
msgid "Wired"
msgstr "Trådet"
msgstr ""
#: ../js/ui/status/network.js:1520
msgid "Wireless"
msgstr "Trådløs"
msgstr ""
#: ../js/ui/status/network.js:1530
msgid "Mobile broadband"
msgstr "Mobilt bredbånd"
msgstr ""
#: ../js/ui/status/network.js:1540
#, fuzzy
msgid "VPN Connections"
msgstr "VPN-forbindelser"
msgstr "Forbindelse"
#: ../js/ui/status/network.js:1549
#, fuzzy
msgid "Network Settings"
msgstr "Indstillinger for netværk"
msgstr "Indstillinger for strømstyring"
#: ../js/ui/status/network.js:1844
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Du er nu forbundet til den mobile bredbåndsforbindelse \"%s\""
msgstr ""
#: ../js/ui/status/network.js:1848
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Du er nu forbundet til det trådløse netværk \"%s\""
msgstr ""
#: ../js/ui/status/network.js:1852
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Du er nu forbundet til det trådede netværk \"%s\""
msgstr ""
#: ../js/ui/status/network.js:1856
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Du er nu forbundet til VPN-netværket \"%s\""
msgstr ""
#: ../js/ui/status/network.js:1861
#, c-format
msgid "You're now connected to '%s'"
msgstr "Du er nu forbundet til \"%s\""
msgstr ""
#: ../js/ui/status/network.js:1869
#, fuzzy
msgid "Connection established"
msgstr "Forbindelse oprettet"
msgstr "Forbindelse"
#: ../js/ui/status/network.js:1991
msgid "Networking is disabled"
msgstr "Netværk er deaktiveret"
msgstr ""
#: ../js/ui/status/network.js:2116
#, fuzzy
msgid "Network Manager"
msgstr "Netværkshåndtering"
msgstr "Håndtering"
#: ../js/ui/status/power.js:85
msgid "Power Settings"
@@ -1070,22 +1083,22 @@ msgstr "Lydstyrke"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/telepathyClient.js:335
#: ../js/ui/telepathyClient.js:331
#, c-format
msgid "%s is online."
msgstr "%s er online."
#: ../js/ui/telepathyClient.js:340
#: ../js/ui/telepathyClient.js:336
#, c-format
msgid "%s is offline."
msgstr "%s er offline."
#: ../js/ui/telepathyClient.js:343
#: ../js/ui/telepathyClient.js:339
#, c-format
msgid "%s is away."
msgstr "%s er ikke til stede."
#: ../js/ui/telepathyClient.js:346
#: ../js/ui/telepathyClient.js:342
#, c-format
msgid "%s is busy."
msgstr "%s er optaget."
@@ -1093,7 +1106,7 @@ msgstr "%s er optaget."
#. 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:482
#: ../js/ui/telepathyClient.js:473
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Sendt kl. %X i %As"
@@ -1147,9 +1160,9 @@ msgid "Print version"
msgstr "Udskriv version"
#: ../src/shell-app.c:454
#, c-format
#, fuzzy, c-format
msgid "Failed to launch '%s'"
msgstr "Kunne ikke re \"%s\""
msgstr "Kunne ikke afmontere \"%s\""
#: ../src/shell-global.c:1395
msgid "Less than a minute ago"
@@ -1185,11 +1198,11 @@ msgstr[1] "%d uger siden"
#: ../src/shell-mobile-providers.c:80
msgid "United Kingdom"
msgstr "Storbritannien"
msgstr ""
#: ../src/shell-mobile-providers.c:526
msgid "Default"
msgstr "Standard"
msgstr ""
#: ../src/shell-polkit-authentication-agent.c:334
msgid "Authentication dialog was dismissed by the user"

View File

@@ -5,7 +5,7 @@
# workspace - Arbeitsfläche
#
# Hendrik Brandt <heb@gnome-de.org>, 2009.
# Hendrik Richter <hendrikr@gnome.org>, 2009, 2010, 2011.
# Hendrik Richter <hendrikr@gnome.org>, 2009.
# Mario Blättermann <mariobl@gnome.org>, 2009, 2010, 2011.
# Mario Klug <mario@klug.me>, 2010.
# Jakob Kramer <jakob.kramer@gmx.de>, 2010.
@@ -17,9 +17,9 @@ 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-27 14:43+0000\n"
"PO-Revision-Date: 2011-04-22 14:23+0200\n"
"Last-Translator: Hendrik Richter <hendrikr@gnome.org>\n"
"POT-Creation-Date: 2011-03-27 05:13+0000\n"
"PO-Revision-Date: 2011-03-27 15:45+0200\n"
"Last-Translator: Christian Kirbach <Christian.Kirbach@googlemail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -241,7 +241,7 @@ msgstr "%s wurde aus Ihren Favoriten entfernt"
#: ../js/ui/calendar.js:66
msgctxt "event list time"
msgid "All Day"
msgstr "Ganztägig"
msgstr "Ganztgig"
#. Translators: Shown in calendar event list, if 24h format
#: ../js/ui/calendar.js:71
@@ -249,15 +249,11 @@ msgctxt "event list time"
msgid "%H:%M"
msgstr "%H:%M"
#
# Da wir keine AM/PM-Suffixe haben, die Zeit von Terminen aber eindeutig
# angezeigt werden soll, wird im Kalender stets das 24h-Format verwendet.
#
#. Transators: Shown in calendar event list, if 12h format
#: ../js/ui/calendar.js:78
msgctxt "event list time"
msgid "%l:%M %p"
msgstr "%H:%M"
msgstr "%l:%M"
#. Translators: Calendar grid abbreviation for Sunday.
#. *
@@ -383,7 +379,7 @@ msgstr "Diese Woche"
#: ../js/ui/calendar.js:754
msgid "Next week"
msgstr "Nächste Woche"
msgstr "Nchste Woche"
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1000
msgid "Remove"
@@ -395,7 +391,7 @@ msgstr "Einstellungen für Datum und Uhrzeit"
#: ../js/ui/dateMenu.js:111
msgid "Open Calendar"
msgstr "Kalender öffnen"
msgstr "Kalender ffnen"
#. Translators: This is the time format with date used
#. in 24-hour mode.
@@ -421,21 +417,21 @@ msgstr "%a %R"
#. for AM/PM.
#: ../js/ui/dateMenu.js:177
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a, %e. %b, %l:%M:%S"
msgstr "%a, %e. %b, %H:%M:%S"
#: ../js/ui/dateMenu.js:178
msgid "%a %b %e, %l:%M %p"
msgstr "%a, %e. %b, %l:%M"
msgstr "%a, %e. %b, %H:%M"
#. 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"
msgstr "%a %H:%M:%S"
#: ../js/ui/dateMenu.js:183
msgid "%a %l:%M %p"
msgstr "%a %l:%M"
msgstr "%a %H:%M"
#. 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").
@@ -799,7 +795,7 @@ msgstr "Legitimierungsanfrage von %s"
#: ../js/ui/status/bluetooth.js:374
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "Gerät »%s« bittet um Zugriff auf den Dienst »%s«"
msgstr "Gert »%s« bittet um Zugriff auf den Dienst »%s«"
#: ../js/ui/status/bluetooth.js:376
msgid "Always grant access"
@@ -821,7 +817,7 @@ msgstr "Koppelungsbestätigung für %s"
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Gerät »%s« möchte mit diesem Rechner gekoppelt werden"
msgstr "Gert »%s« mchte mit diesem Rechner gekoppelt werden"
#: ../js/ui/status/bluetooth.js:415
#, c-format
@@ -840,11 +836,11 @@ msgstr "Stimmt nicht überein"
#: ../js/ui/status/bluetooth.js:441
#, c-format
msgid "Pairing request for %s"
msgstr "Koppelungsanfrage für %s"
msgstr "Koppelungsanfrage fr %s"
#: ../js/ui/status/bluetooth.js:449
msgid "Please enter the PIN mentioned on the device."
msgstr "Bitte geben Sie die auf dem Gerät angezeigte PIN ein."
msgstr "Bitte geben Sie die auf dem Gert angezeigte PIN ein."
#: ../js/ui/status/bluetooth.js:465
msgid "OK"
@@ -1070,7 +1066,7 @@ msgstr "Mobiltelefon"
#: ../js/ui/status/power.js:244
msgid "Media player"
msgstr "Medienwiedergabegerät"
msgstr "Medienwiedergabegert"
#: ../js/ui/status/power.js:246
msgid "Tablet"
@@ -1086,7 +1082,7 @@ msgstr "Unbekannt"
#: ../js/ui/status/volume.js:45
msgid "Volume"
msgstr "Lautstärke"
msgstr "Lautstrke"
#: ../js/ui/status/volume.js:58
msgid "Microphone"
@@ -1252,7 +1248,7 @@ msgstr "%1$s: %2$s"
#~ msgstr "Ausschalten des Systems."
#~ msgid "Confirm"
#~ msgstr "Bestätigen"
#~ msgstr "Besttigen"
#~| msgid "Cancel"
#~ msgid "Panel"

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-30 14:52+0100\n"
"PO-Revision-Date: 2011-03-30 14:55+0100\n"
"POT-Creation-Date: 2011-03-08 19:51+0000\n"
"PO-Revision-Date: 2011-03-08 19:50+0100\n"
"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
"Language-Team: British English <en@li.org>\n"
"Language: en_GB\n"
@@ -169,43 +169,47 @@ msgstr "Whether to collect statistics about application usage"
msgid "disabled OpenSearch providers"
msgstr "disabled OpenSearch providers"
#: ../js/misc/util.js:71
#: ../js/misc/util.js:86
msgid "Command not found"
msgstr "Command not found"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:98
#: ../js/misc/util.js:113
msgid "Could not parse command:"
msgstr "Could not parse command:"
#: ../js/misc/util.js:106
#: ../js/misc/util.js:135
msgid "No such application"
msgstr "No such application"
#: ../js/misc/util.js:148
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Execution of '%s' failed:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:230
#: ../js/ui/appDisplay.js:226
msgid "All"
msgstr "All"
#: ../js/ui/appDisplay.js:328
#: ../js/ui/appDisplay.js:324
msgid "APPLICATIONS"
msgstr "APPLICATIONS"
#: ../js/ui/appDisplay.js:354
#: ../js/ui/appDisplay.js:350
msgid "SETTINGS"
msgstr "SETTINGS"
#: ../js/ui/appDisplay.js:625
#: ../js/ui/appDisplay.js:612
msgid "New Window"
msgstr "New Window"
#: ../js/ui/appDisplay.js:628
#: ../js/ui/appDisplay.js:615
msgid "Remove from Favorites"
msgstr "Remove from Favourites"
#: ../js/ui/appDisplay.js:629
#: ../js/ui/appDisplay.js:616
msgid "Add to Favorites"
msgstr "Add to Favourites"
@@ -338,13 +342,13 @@ msgid "Nothing Scheduled"
msgstr "Nothing Scheduled"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
#: ../js/ui/calendar.js:720
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:493
#: ../js/ui/calendar.js:723
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d %B, %Y"
@@ -365,7 +369,7 @@ msgstr "This week"
msgid "Next week"
msgstr "Next week"
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
msgid "Remove"
msgstr "Remove"
@@ -420,7 +424,7 @@ msgstr "%a %l:%M %p"
#. 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
#: ../js/ui/dateMenu.js:209
msgid "%A %B %e, %Y"
msgstr "%A %e %B, %Y"
@@ -433,7 +437,7 @@ msgstr "RECENT ITEMS"
msgid "Log Out %s"
msgstr "Log Out %s"
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
msgid "Log Out"
msgstr "Log Out"
@@ -455,43 +459,45 @@ msgstr "You will be logged out automatically in %d seconds."
msgid "Logging out of the system."
msgstr "Logging out of the system."
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
msgid "Power Off"
msgstr "Power Off"
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
msgid "Shut Down"
msgstr "Shut Down"
#: ../js/ui/endSessionDialog.js:75
msgid "Click Shut Down to quit these applications and shut down the system."
msgstr "Click Shut Down to quit these applications and shut down the system."
#: ../js/ui/endSessionDialog.js:76
msgid "Click Power Off to quit these applications and power off the system."
msgstr "Click Power Off to quit these applications and power off the system."
#, c-format
msgid "The system will shut down automatically in %d seconds."
msgstr "The system will shut down automatically in %d seconds."
#: ../js/ui/endSessionDialog.js:77
#, c-format
msgid "The system will power off automatically in %d seconds."
msgstr "The system will power off automatically in %d seconds."
msgid "Shutting down the system."
msgstr "Shutting down the system."
#: ../js/ui/endSessionDialog.js:78
msgid "Powering off the system."
msgstr "Powering off the system."
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
#: ../js/ui/endSessionDialog.js:93
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
msgid "Restart"
msgstr "Restart"
#: ../js/ui/endSessionDialog.js:89
#: ../js/ui/endSessionDialog.js:85
msgid "Click Restart to quit these applications and restart the system."
msgstr "Click Restart to quit these applications and restart the system."
#: ../js/ui/endSessionDialog.js:90
#: ../js/ui/endSessionDialog.js:86
#, c-format
msgid "The system will restart automatically in %d seconds."
msgstr "The system will restart automatically in %d seconds."
#: ../js/ui/endSessionDialog.js:91
#: ../js/ui/endSessionDialog.js:87
msgid "Restarting the system."
msgstr "Restarting the system."
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
#: ../js/ui/endSessionDialog.js:395
msgid "Confirm"
msgstr "Confirm"
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
msgid "Cancel"
msgstr "Cancel"
@@ -505,7 +511,7 @@ msgstr "Enabled"
#. 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:1087
msgid "Disabled"
msgstr "Disabled"
@@ -525,47 +531,47 @@ msgstr "View Source"
msgid "Web Page"
msgstr "Web Page"
#: ../js/ui/messageTray.js:1000
#: ../js/ui/messageTray.js:926
msgid "Open"
msgstr "Open"
#: ../js/ui/messageTray.js:2164
#: ../js/ui/messageTray.js:1963
msgid "System Information"
msgstr "System Information"
#: ../js/ui/overview.js:91
#: ../js/ui/overview.js:88
msgid "Undo"
msgstr "Undo"
#: ../js/ui/overview.js:186
#: ../js/ui/overview.js:183
msgid "Windows"
msgstr "Windows"
#: ../js/ui/overview.js:189
#: ../js/ui/overview.js:186
msgid "Applications"
msgstr "Applications"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/overview.js:205
#: ../js/ui/overview.js:202
msgid "Dash"
msgstr "Dash"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:524
#: ../js/ui/panel.js:532
#, c-format
msgid "Quit %s"
msgstr "Quit %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:902
#: ../js/ui/panel.js:893
msgid "Activities"
msgstr "Activities"
#: ../js/ui/panel.js:1003
msgid "Top Bar"
msgstr "Top Bar"
#: ../js/ui/panel.js:994
msgid "Panel"
msgstr "Panel"
#: ../js/ui/placeDisplay.js:122
#, c-format
@@ -580,89 +586,64 @@ msgstr "Retry"
msgid "Connect to..."
msgstr "Connect to…"
#: ../js/ui/placeDisplay.js:380
#: ../js/ui/placeDisplay.js:409
msgid "PLACES & DEVICES"
msgstr "PLACES & DEVICES"
#: ../js/ui/polkitAuthenticationAgent.js:74
msgid "Authentication Required"
msgstr "Authentication Required"
#: ../js/ui/polkitAuthenticationAgent.js:108
msgid "Administrator"
msgstr "Administrator"
#: ../js/ui/polkitAuthenticationAgent.js:176
msgid "Authenticate"
msgstr "Authenticate"
#. 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 "Sorry, that didn't work. Please try again."
#: ../js/ui/polkitAuthenticationAgent.js:276
msgid "Password:"
msgstr "Password:"
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:679
#: ../js/ui/popupMenu.js:618
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
#: ../js/ui/runDialog.js:205
#: ../js/ui/runDialog.js:201
msgid "Please enter a command:"
msgstr "Please enter a command:"
#: ../js/ui/searchDisplay.js:310
#: ../js/ui/searchDisplay.js:283
msgid "Searching..."
msgstr "Searching…"
#: ../js/ui/searchDisplay.js:324
#: ../js/ui/searchDisplay.js:297
msgid "No matching results."
msgstr "No matching results."
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
#: ../js/ui/statusMenu.js:228
#: ../js/ui/statusMenu.js:102 ../js/ui/statusMenu.js:166
msgid "Power Off..."
msgstr "Power Off…"
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
#: ../js/ui/statusMenu.js:104 ../js/ui/statusMenu.js:165
msgid "Suspend"
msgstr "Suspend"
#: ../js/ui/statusMenu.js:184
#: ../js/ui/statusMenu.js:125
msgid "Available"
msgstr "Available"
#: ../js/ui/statusMenu.js:189
#: ../js/ui/statusMenu.js:130
msgid "Busy"
msgstr "Busy"
#: ../js/ui/statusMenu.js:197
#: ../js/ui/statusMenu.js:138
msgid "My Account"
msgstr "My Account"
#: ../js/ui/statusMenu.js:201
#: ../js/ui/statusMenu.js:142
msgid "System Settings"
msgstr "System Settings"
#: ../js/ui/statusMenu.js:208
#: ../js/ui/statusMenu.js:149
msgid "Lock Screen"
msgstr "Lock Screen"
#: ../js/ui/statusMenu.js:213
#: ../js/ui/statusMenu.js:153
msgid "Switch User"
msgstr "Switch User"
#: ../js/ui/statusMenu.js:218
#: ../js/ui/statusMenu.js:158
msgid "Log Out..."
msgstr "Log Out…"
@@ -670,12 +651,14 @@ msgstr "Log Out…"
msgid "Zoom"
msgstr "Zoom"
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
#. 'screen-reader-enabled');
#. this.menu.addMenuItem(screenReader);
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
#. 'screen-keyboard-enabled');
#. this.menu.addMenuItem(screenKeyboard);
#: ../js/ui/status/accessibility.js:69
msgid "Screen Reader"
msgstr "Screen Reader"
#: ../js/ui/status/accessibility.js:73
msgid "Screen Keyboard"
msgstr "Screen Keyboard"
#: ../js/ui/status/accessibility.js:77
msgid "Visual Alerts"
msgstr "Visual Alerts"
@@ -700,17 +683,17 @@ msgstr "Mouse Keys"
msgid "Universal Access Settings"
msgstr "Universal Access Settings"
#: ../js/ui/status/accessibility.js:146
#: ../js/ui/status/accessibility.js:145
msgid "High Contrast"
msgstr "High Contrast"
#: ../js/ui/status/accessibility.js:183
#: ../js/ui/status/accessibility.js:182
msgid "Large Text"
msgstr "Large 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:42 ../js/ui/status/bluetooth.js:241
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -730,94 +713,94 @@ msgstr "Setup a New Device…"
msgid "Bluetooth Settings"
msgstr "Bluetooth Settings"
#: ../js/ui/status/bluetooth.js:188
#: ../js/ui/status/bluetooth.js:192
msgid "Connection"
msgstr "Connection"
#: ../js/ui/status/bluetooth.js:224
#: ../js/ui/status/bluetooth.js:228
msgid "Send Files..."
msgstr "Send Files…"
#: ../js/ui/status/bluetooth.js:229
#: ../js/ui/status/bluetooth.js:233
msgid "Browse Files..."
msgstr "Browse Files…"
#: ../js/ui/status/bluetooth.js:238
#: ../js/ui/status/bluetooth.js:242
msgid "Error browsing device"
msgstr "Error browsing device"
#: ../js/ui/status/bluetooth.js:239
#: ../js/ui/status/bluetooth.js:243
#, c-format
msgid "The requested device cannot be browsed, error is '%s'"
msgstr "The requested device cannot be browsed, error is '%s'"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:251
msgid "Keyboard Settings"
msgstr "Keyboard Settings"
#: ../js/ui/status/bluetooth.js:252
#: ../js/ui/status/bluetooth.js:256
msgid "Mouse Settings"
msgstr "Mouse Settings"
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:65
msgid "Sound Settings"
msgstr "Sound Settings"
#: ../js/ui/status/bluetooth.js:368
#: ../js/ui/status/bluetooth.js:372
#, c-format
msgid "Authorization request from %s"
msgstr "Authorisation request from %s"
#: ../js/ui/status/bluetooth.js:374
#: ../js/ui/status/bluetooth.js:378
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "Device %s wants access to the service '%s'"
#: ../js/ui/status/bluetooth.js:376
#: ../js/ui/status/bluetooth.js:380
msgid "Always grant access"
msgstr "Always grant access"
#: ../js/ui/status/bluetooth.js:377
#: ../js/ui/status/bluetooth.js:381
msgid "Grant this time only"
msgstr "Grant this time only"
#: ../js/ui/status/bluetooth.js:378
#: ../js/ui/status/bluetooth.js:382
msgid "Reject"
msgstr "Reject"
#: ../js/ui/status/bluetooth.js:408
#: ../js/ui/status/bluetooth.js:412
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Pairing confirmation for %s"
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Device %s wants to pair with this computer"
#: ../js/ui/status/bluetooth.js:415
#: ../js/ui/status/bluetooth.js:419
#, c-format
msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgstr "Please confirm whether the PIN '%s' matches the one on the device."
#: ../js/ui/status/bluetooth.js:417
#: ../js/ui/status/bluetooth.js:421
msgid "Matches"
msgstr "Matches"
#: ../js/ui/status/bluetooth.js:418
#: ../js/ui/status/bluetooth.js:422
msgid "Does not match"
msgstr "Does not match"
#: ../js/ui/status/bluetooth.js:441
#: ../js/ui/status/bluetooth.js:445
#, c-format
msgid "Pairing request for %s"
msgstr "Pairing request for %s"
#: ../js/ui/status/bluetooth.js:449
#: ../js/ui/status/bluetooth.js:453
msgid "Please enter the PIN mentioned on the device."
msgstr "Please enter the PIN mentioned on the device."
#: ../js/ui/status/bluetooth.js:465
#: ../js/ui/status/bluetooth.js:469
msgid "OK"
msgstr "OK"
@@ -829,153 +812,17 @@ msgstr "Show Keyboard Layout…"
msgid "Localization Settings"
msgstr "Localisation Settings"
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1454
msgid "<unknown>"
msgstr "<unknown>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:311
msgid "disabled"
msgstr "disabled"
#: ../js/ui/status/network.js:494
msgid "connecting..."
msgstr "connecting…"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:497
msgid "authentication required"
msgstr "authentication required"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:507
msgid "firmware missing"
msgstr "firmware missing"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:514
msgid "cable unplugged"
msgstr "cable unplugged"
#. 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
msgid "unavailable"
msgstr "unavailable"
#: ../js/ui/status/network.js:521
msgid "connection failed"
msgstr "connection failed"
#. 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
msgid "Connected (private)"
msgstr "Connected (private)"
#: ../js/ui/status/network.js:683
msgid "Auto Ethernet"
msgstr "Auto Ethernet"
#: ../js/ui/status/network.js:758
msgid "Auto broadband"
msgstr "Auto broadband"
#: ../js/ui/status/network.js:761
msgid "Auto dial-up"
msgstr "Auto dial-up"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:904 ../js/ui/status/network.js:1414
#, c-format
msgid "Auto %s"
msgstr "Auto %s"
#: ../js/ui/status/network.js:906
msgid "Auto bluetooth"
msgstr "Auto bluetooth"
#: ../js/ui/status/network.js:1416
msgid "Auto wireless"
msgstr "Auto wireless"
#: ../js/ui/status/network.js:1474
msgid "More..."
msgstr "More…"
#: ../js/ui/status/network.js:1497
msgid "Enable networking"
msgstr "Enable networking"
#: ../js/ui/status/network.js:1509
msgid "Wired"
msgstr "Wired"
#: ../js/ui/status/network.js:1520
msgid "Wireless"
msgstr "Wireless"
#: ../js/ui/status/network.js:1530
msgid "Mobile broadband"
msgstr "Mobile broadband"
#: ../js/ui/status/network.js:1540
msgid "VPN Connections"
msgstr "VPN Connections"
#: ../js/ui/status/network.js:1549
msgid "Network Settings"
msgstr "Network Settings"
#: ../js/ui/status/network.js:1844
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "You're now connected to mobile broadband connection '%s'"
#: ../js/ui/status/network.js:1848
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "You're now connected to wireless network '%s'"
#: ../js/ui/status/network.js:1852
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "You're now connected to wired network '%s'"
#: ../js/ui/status/network.js:1856
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "You're now connected to VPN network '%s'"
#: ../js/ui/status/network.js:1861
#, c-format
msgid "You're now connected to '%s'"
msgstr "You're now connected to '%s'"
#: ../js/ui/status/network.js:1869
msgid "Connection established"
msgstr "Connection established"
#: ../js/ui/status/network.js:1991
msgid "Networking is disabled"
msgstr "Networking is disabled"
#: ../js/ui/status/network.js:2116
msgid "Network Manager"
msgstr "Network Manager"
#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "Power Settings"
#. 0 is reported when UPower does not have enough data
#. to estimate battery life
#: ../js/ui/status/power.js:111
#: ../js/ui/status/power.js:110
msgid "Estimating..."
msgstr "Estimating…"
#: ../js/ui/status/power.js:118
#: ../js/ui/status/power.js:117
#, c-format
msgid "%d hour remaining"
msgid_plural "%d hours remaining"
@@ -983,102 +830,102 @@ msgstr[0] "%d hour remaining"
msgstr[1] "%d hours remaining"
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
#: ../js/ui/status/power.js:121
#: ../js/ui/status/power.js:120
#, c-format
msgid "%d %s %d %s remaining"
msgstr "%d %s %d %s remaining"
#: ../js/ui/status/power.js:123
#: ../js/ui/status/power.js:122
msgid "hour"
msgid_plural "hours"
msgstr[0] "hour"
msgstr[1] "hours"
#: ../js/ui/status/power.js:123
#: ../js/ui/status/power.js:122
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minute"
msgstr[1] "minutes"
#: ../js/ui/status/power.js:126
#: ../js/ui/status/power.js:125
#, c-format
msgid "%d minute remaining"
msgid_plural "%d minutes remaining"
msgstr[0] "%d minute remaining"
msgstr[1] "%d minutes remaining"
#: ../js/ui/status/power.js:228
#: ../js/ui/status/power.js:227
msgid "AC adapter"
msgstr "AC adapter"
#: ../js/ui/status/power.js:230
#: ../js/ui/status/power.js:229
msgid "Laptop battery"
msgstr "Laptop battery"
#: ../js/ui/status/power.js:232
#: ../js/ui/status/power.js:231
msgid "UPS"
msgstr "UPS"
#: ../js/ui/status/power.js:234
#: ../js/ui/status/power.js:233
msgid "Monitor"
msgstr "Monitor"
#: ../js/ui/status/power.js:236
#: ../js/ui/status/power.js:235
msgid "Mouse"
msgstr "Mouse"
#: ../js/ui/status/power.js:238
#: ../js/ui/status/power.js:237
msgid "Keyboard"
msgstr "Keyboard"
#: ../js/ui/status/power.js:240
#: ../js/ui/status/power.js:239
msgid "PDA"
msgstr "PDA"
#: ../js/ui/status/power.js:242
#: ../js/ui/status/power.js:241
msgid "Cell phone"
msgstr "Mobile phone"
#: ../js/ui/status/power.js:244
#: ../js/ui/status/power.js:243
msgid "Media player"
msgstr "Media player"
#: ../js/ui/status/power.js:246
#: ../js/ui/status/power.js:245
msgid "Tablet"
msgstr "Tablet"
#: ../js/ui/status/power.js:248
#: ../js/ui/status/power.js:247
msgid "Computer"
msgstr "Computer"
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
#: ../js/ui/status/power.js:249 ../src/shell-app-system.c:1013
msgid "Unknown"
msgstr "Unknown"
#: ../js/ui/status/volume.js:45
#: ../js/ui/status/volume.js:44
msgid "Volume"
msgstr "Volume"
#: ../js/ui/status/volume.js:58
#: ../js/ui/status/volume.js:57
msgid "Microphone"
msgstr "Microphone"
#: ../js/ui/telepathyClient.js:335
#: ../js/ui/telepathyClient.js:239
#, c-format
msgid "%s is online."
msgstr "%s is online."
#: ../js/ui/telepathyClient.js:340
#: ../js/ui/telepathyClient.js:244
#, c-format
msgid "%s is offline."
msgstr "%s is offline."
#: ../js/ui/telepathyClient.js:343
#: ../js/ui/telepathyClient.js:247
#, c-format
msgid "%s is away."
msgstr "%s is away."
#: ../js/ui/telepathyClient.js:346
#: ../js/ui/telepathyClient.js:250
#, c-format
msgid "%s is busy."
msgstr "%s is busy."
@@ -1086,7 +933,7 @@ msgstr "%s is busy."
#. 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:482
#: ../js/ui/telepathyClient.js:348
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Sent at %X on %A"
@@ -1095,11 +942,11 @@ msgstr "Sent at %X on %A"
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters.
#: ../js/ui/viewSelector.js:122
#: ../js/ui/viewSelector.js:117
msgid "Type to search..."
msgstr "Type to search…"
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
#: ../js/ui/viewSelector.js:137 ../src/shell-util.c:250
msgid "Search"
msgstr "Search"
@@ -1115,7 +962,7 @@ msgstr "'%s' is ready"
#. translators:
#. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1098
#: ../src/gvc/gvc-mixer-control.c:1094
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@@ -1124,66 +971,53 @@ msgstr[1] "%u Outputs"
#. translators:
#. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1108
#: ../src/gvc/gvc-mixer-control.c:1104
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u Input"
msgstr[1] "%u Inputs"
#: ../src/gvc/gvc-mixer-control.c:1406
#: ../src/gvc/gvc-mixer-control.c:1402
msgid "System Sounds"
msgstr "System Sounds"
#: ../src/main.c:446
#: ../src/main.c:395
msgid "Print version"
msgstr "Print version"
#: ../src/shell-app.c:454
#, c-format
msgid "Failed to launch '%s'"
msgstr "Failed to launch '%s'"
#: ../src/shell-global.c:1395
#: ../src/shell-global.c:1308
msgid "Less than a minute ago"
msgstr "Less than a minute ago"
#: ../src/shell-global.c:1399
#: ../src/shell-global.c:1312
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d minute ago"
msgstr[1] "%d minutes ago"
#: ../src/shell-global.c:1404
#: ../src/shell-global.c:1317
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d hour ago"
msgstr[1] "%d hours ago"
#: ../src/shell-global.c:1409
#: ../src/shell-global.c:1322
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d day ago"
msgstr[1] "%d days ago"
#: ../src/shell-global.c:1414
#: ../src/shell-global.c:1327
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d week ago"
msgstr[1] "%d weeks ago"
#: ../src/shell-mobile-providers.c:80
msgid "United Kingdom"
msgstr "United Kingdom"
#: ../src/shell-mobile-providers.c:526
msgid "Default"
msgstr "Default"
#: ../src/shell-polkit-authentication-agent.c:334
msgid "Authentication dialog was dismissed by the user"
msgstr "Authentication dialogue was dismissed by the user"
@@ -1208,34 +1042,6 @@ msgstr "File System"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "No such application"
#~ msgstr "No such application"
#~ msgid "Shut Down"
#~ msgstr "Shut Down"
#~ msgid "Click Shut Down to quit these applications and shut down the system."
#~ msgstr ""
#~ "Click Shut Down to quit these applications and shut down the system."
#~ msgid "The system will shut down automatically in %d seconds."
#~ msgstr "The system will shut down automatically in %d seconds."
#~ msgid "Shutting down the system."
#~ msgstr "Shutting down the system."
#~ msgid "Confirm"
#~ msgstr "Confirm"
#~ msgid "Panel"
#~ msgstr "Panel"
#~ msgid "Screen Reader"
#~ msgstr "Screen Reader"
#~ msgid "Screen Keyboard"
#~ msgstr "Screen Keyboard"
#~ msgid "Clock"
#~ msgstr "Clock"

1222
po/eo.po

File diff suppressed because it is too large Load Diff

624
po/es.po

File diff suppressed because it is too large Load Diff

View File

@@ -13,8 +13,8 @@ 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-30 17:13+0000\n"
"PO-Revision-Date: 2011-03-30 23:56+0300\n"
"POT-Creation-Date: 2011-03-18 10:35+0000\n"
"PO-Revision-Date: 2011-03-18 21:33+0300\n"
"Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n"
"Language-Team: Estonian <gnome-et@linux.ee>\n"
"Language: et\n"
@@ -385,19 +385,19 @@ msgstr "Sind logitakse %d sekundi pärast automaatselt välja."
msgid "Logging out of the system."
msgstr "Süsteemist väljalogimine"
msgid "Power Off"
msgid "Shut Down"
msgstr "Lülita välja"
msgid "Click Power Off to quit these applications and power off the system."
msgid "Click Shut Down to quit these applications and shut down the system."
msgstr ""
"Nende rakenduste sulgemiseks ja süsteemi väljalülitamiseks klõpsa nupule "
"Lülita välja."
"Logi välja."
#, c-format
msgid "The system will power off automatically in %d seconds."
msgid "The system will shut down automatically in %d seconds."
msgstr "%d sekundi pärast lülitub süsteem automaatselt välja."
msgid "Powering off the system."
msgid "Shutting down the system."
msgstr "Süsteemi väljalülitamine."
msgid "Restart"
@@ -415,6 +415,9 @@ msgstr "Süsteem taaskäivitatakse automaatselt %d sekundi pärast."
msgid "Restarting the system."
msgstr "Süsteemi taaskäivitamine."
msgid "Confirm"
msgstr "Kinnita"
msgid "Cancel"
msgstr "Katkesta"
@@ -471,8 +474,8 @@ msgstr "Lõpeta %s"
msgid "Activities"
msgstr "Tegevused"
msgid "Top Bar"
msgstr "Ülemine riba"
msgid "Panel"
msgstr "Paneel"
#, c-format
msgid "Failed to unmount '%s'"
@@ -487,25 +490,6 @@ msgstr "Ühendumine..."
msgid "PLACES & DEVICES"
msgstr "Asukohad ja seadmed"
msgid "Authentication Required"
msgstr "Vajalik on autentimine"
msgid "Administrator"
msgstr "Administraator"
msgid "Authenticate"
msgstr "Autendi"
#. 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.
msgid "Sorry, that didn't work. Please try again."
msgstr "Kahjuks see ei sobinud. Palun proovi uuesti."
msgid "Password:"
msgstr "Parool:"
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
@@ -688,11 +672,6 @@ msgstr "ühendumine..."
msgid "authentication required"
msgstr "vajalik on autentimine"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
msgid "firmware missing"
msgstr "püsivara puudub"
#. Translators: this is for wired network devices that are physically disconnected
msgid "cable unplugged"
msgstr "juhe eemaldatud"
@@ -771,7 +750,7 @@ msgstr "Loodi ühendus VPN-võrguga '%s'"
msgid "You're now connected to '%s'"
msgstr "Loodi võrguühendus '%s' kaudu"
msgid "Connection established"
msgid "Connection estabilished"
msgstr "Ühendus loodud"
msgid "Networking is disabled"
@@ -977,26 +956,6 @@ msgstr "Failisüsteem"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "Shut Down"
#~ msgstr "Lülita välja"
#~ msgid "Click Shut Down to quit these applications and shut down the system."
#~ msgstr ""
#~ "Nende rakenduste sulgemiseks ja süsteemi väljalülitamiseks klõpsa nupule "
#~ "Logi välja."
#~ msgid "The system will shut down automatically in %d seconds."
#~ msgstr "%d sekundi pärast lülitub süsteem automaatselt välja."
#~ msgid "Shutting down the system."
#~ msgstr "Süsteemi väljalülitamine."
#~ msgid "Confirm"
#~ msgstr "Kinnita"
#~ msgid "Panel"
#~ msgstr "Paneel"
#~ msgid "No such application"
#~ msgstr "Sellist rakendust ei ole"

1232
po/eu.po

File diff suppressed because it is too large Load Diff

1230
po/fa.po

File diff suppressed because it is too large Load Diff

1259
po/fi.po

File diff suppressed because it is too large Load Diff

1248
po/ga.po

File diff suppressed because it is too large Load Diff

563
po/gl.po

File diff suppressed because it is too large Load Diff

801
po/gu.po

File diff suppressed because it is too large Load Diff

605
po/he.po

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
# translation of gnome-shell.master.hi.po to Hindi
# translation of gnome-shell.po.master.hi.po to Hindi
# Hindi translation for gnome-shell.
# Copyright (C) 2011 gnome-shell's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
@@ -6,10 +6,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell.master.hi\n"
"Project-Id-Version: gnome-shell.po.master.hi\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-28 08:48+0000\n"
"PO-Revision-Date: 2011-04-01 13:59+0530\n"
"POT-Creation-Date: 2011-03-28 05:30+0000\n"
"PO-Revision-Date: 2011-03-28 13:39+0530\n"
"Last-Translator: Rajesh Ranjan\n"
"Language-Team: Hindi <Indlinux>\n"
"MIME-Version: 1.0\n"
@@ -20,7 +20,7 @@ msgstr ""
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "GNOME शेल"
msgstr ""
#: ../data/gnome-shell.desktop.in.in.h:2
msgid "Window management and application launching"
@@ -316,7 +316,7 @@ msgstr ""
#: ../js/ui/calendar.js:720
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %B %d"
msgstr ""
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:723
@@ -334,11 +334,11 @@ msgstr "कल"
#: ../js/ui/calendar.js:746
msgid "This week"
msgstr "इस सप्ताह"
msgstr ""
#: ../js/ui/calendar.js:754
msgid "Next week"
msgstr "अगला सप्ताह"
msgstr ""
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1000
msgid "Remove"
@@ -346,47 +346,47 @@ msgstr "हटाएँ"
#: ../js/ui/dateMenu.js:91
msgid "Date and Time Settings"
msgstr "तिथि व समय सेटिंग्स"
msgstr ""
#: ../js/ui/dateMenu.js:111
msgid "Open Calendar"
msgstr "पंचांग खोलें"
msgstr ""
#. Translators: This is the time format with date used
#. in 24-hour mode.
#: ../js/ui/dateMenu.js:164
msgid "%a %b %e, %R:%S"
msgstr "%a %b %e, %R:%S"
msgstr ""
#: ../js/ui/dateMenu.js:165
msgid "%a %b %e, %R"
msgstr "%a %b %e, %R"
msgstr ""
#. 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 ""
#: ../js/ui/dateMenu.js:170
msgid "%a %R"
msgstr "%a %R"
msgstr ""
#. 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 ""
#: ../js/ui/dateMenu.js:178
msgid "%a %b %e, %l:%M %p"
msgstr "%a %b %e, %l:%M %p"
msgstr ""
#. 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 ""
#: ../js/ui/dateMenu.js:183
msgid "%a %l:%M %p"
@@ -397,16 +397,16 @@ msgstr "%a %l:%M %p"
#.
#: ../js/ui/dateMenu.js:194
msgid "%A %B %e, %Y"
msgstr "%A %B %e, %Y"
msgstr ""
#: ../js/ui/docDisplay.js:19
msgid "RECENT ITEMS"
msgstr "हालिया मद"
msgstr ""
#: ../js/ui/endSessionDialog.js:63
#, c-format
msgid "Log Out %s"
msgstr "लॉगआउट %s"
msgstr ""
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
msgid "Log Out"
@@ -432,7 +432,7 @@ msgstr ""
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
msgid "Power Off"
msgstr "बिजली बंद"
msgstr ""
#: ../js/ui/endSessionDialog.js:76
msgid "Click Power Off to quit these applications and power off the system."
@@ -490,7 +490,7 @@ msgstr "त्रुटि"
#: ../js/ui/lookingGlass.js:631
msgid "Out of date"
msgstr "समयातीत"
msgstr ""
#: ../js/ui/lookingGlass.js:656
msgid "View Source"
@@ -530,7 +530,7 @@ msgstr "डैश"
#: ../js/ui/panel.js:515
#, c-format
msgid "Quit %s"
msgstr "छोड़ें %s"
msgstr ""
#. 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".
@@ -540,7 +540,7 @@ msgstr "क्रियाएँ"
#: ../js/ui/panel.js:979
msgid "Top Bar"
msgstr "शीर्ष पट्टी"
msgstr ""
#: ../js/ui/placeDisplay.js:122
#, c-format
@@ -623,7 +623,7 @@ msgstr "व्यस्त"
#: ../js/ui/statusMenu.js:197
msgid "My Account"
msgstr "मेरा खाता"
msgstr ""
#: ../js/ui/statusMenu.js:201
msgid "System Settings"
@@ -653,7 +653,7 @@ msgstr "ज़ूम"
#. this.menu.addMenuItem(screenKeyboard);
#: ../js/ui/status/accessibility.js:77
msgid "Visual Alerts"
msgstr "दृष्टि चेतावनी"
msgstr ""
#: ../js/ui/status/accessibility.js:80
msgid "Sticky Keys"
@@ -732,7 +732,7 @@ msgstr "कुंजीपट विन्यास"
#: ../js/ui/status/bluetooth.js:252
msgid "Mouse Settings"
msgstr "माउस सेटिंग"
msgstr ""
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
msgid "Sound Settings"
@@ -851,7 +851,7 @@ msgstr ""
#: ../js/ui/status/network.js:683
msgid "Auto Ethernet"
msgstr "स्वतः इथरनेट"
msgstr ""
#: ../js/ui/status/network.js:758
msgid "Auto broadband"
@@ -893,7 +893,7 @@ msgstr "बेतार"
#: ../js/ui/status/network.js:1530
msgid "Mobile broadband"
msgstr "मोबाइल ब्रॉडबैंड"
msgstr ""
#: ../js/ui/status/network.js:1540
msgid "VPN Connections"
@@ -938,11 +938,11 @@ msgstr ""
#: ../js/ui/status/network.js:2116
msgid "Network Manager"
msgstr "संजाल प्रबंधक"
msgstr ""
#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "बिजली सेटिंग्स"
msgstr ""
#. 0 is reported when UPower does not have enough data
#. to estimate battery life
@@ -1141,8 +1141,8 @@ msgstr[1] "%d घंटा पहले"
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d दिन पहले"
msgstr[1] "%d दिन पहले"
msgstr[0] ""
msgstr[1] ""
#: ../src/shell-global.c:1414
#, c-format

231
po/hu.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-04-01 13:34+0200\n"
"PO-Revision-Date: 2011-04-01 13:36+0200\n"
"POT-Creation-Date: 2011-03-19 02:47+0100\n"
"PO-Revision-Date: 2011-03-19 02:47+0100\n"
"Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
"Language-Team: Hungarian <gnome at fsf dot hu>\n"
"Language: \n"
@@ -189,27 +189,27 @@ msgid "Execution of '%s' failed:"
msgstr "„%s” végrehajtása meghiúsult:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:230
#: ../js/ui/appDisplay.js:226
msgid "All"
msgstr "Összes"
#: ../js/ui/appDisplay.js:328
#: ../js/ui/appDisplay.js:324
msgid "APPLICATIONS"
msgstr "ALKALMAZÁSOK"
#: ../js/ui/appDisplay.js:354
#: ../js/ui/appDisplay.js:350
msgid "SETTINGS"
msgstr "BEÁLLÍTÁSOK"
#: ../js/ui/appDisplay.js:625
#: ../js/ui/appDisplay.js:612
msgid "New Window"
msgstr "Új ablak"
#: ../js/ui/appDisplay.js:628
#: ../js/ui/appDisplay.js:615
msgid "Remove from Favorites"
msgstr "Eltávolítás a Kedvencek közül"
#: ../js/ui/appDisplay.js:629
#: ../js/ui/appDisplay.js:616
msgid "Add to Favorites"
msgstr "Hozzáadás a Kedvencekhez"
@@ -342,13 +342,13 @@ msgid "Nothing Scheduled"
msgstr "Semmi sincs ütemezve"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
#: ../js/ui/calendar.js:720
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:493
#: ../js/ui/calendar.js:723
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %Y %B %d"
@@ -369,7 +369,7 @@ msgstr "Ezen a héten"
msgid "Next week"
msgstr "Jövő héten"
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
msgid "Remove"
msgstr "Eltávolítás"
@@ -437,7 +437,7 @@ msgstr "LEGUTÓBBI ELEMEK"
msgid "Log Out %s"
msgstr "%s kijelentkeztetése"
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
msgid "Log Out"
msgstr "Kijelentkezés"
@@ -461,45 +461,49 @@ msgstr "Automatikusan ki fog jelentkezni %d másodperc múlva."
msgid "Logging out of the system."
msgstr "Kijelentkezés a rendszerből."
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
msgid "Power Off"
msgstr "Kikapcsolás"
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
msgid "Shut Down"
msgstr "Leállítás"
#: ../js/ui/endSessionDialog.js:75
msgid "Click Shut Down to quit these applications and shut down the system."
msgstr ""
"Nyomja meg a Kijelentkezés gombot az alkalmazások bezárásához és a rendszer "
"leállításához."
#: ../js/ui/endSessionDialog.js:76
msgid "Click Power Off to quit these applications and power off the system."
msgstr "Nyomja meg a Kikapcsolás gombot az alkalmazások bezárásához és a rendszer kikapcsolásához."
#, c-format
msgid "The system will shut down automatically in %d seconds."
msgstr "A rendszer automatikusan leáll %d másodperc múlva."
#: ../js/ui/endSessionDialog.js:77
#, c-format
msgid "The system will power off automatically in %d seconds."
msgstr "A rendszer automatikusan kikapcsol %d másodperc múlva."
msgid "Shutting down the system."
msgstr "A rendszer leállítása"
#: ../js/ui/endSessionDialog.js:78
msgid "Powering off the system."
msgstr "A rendszer kikapcsolása."
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
#: ../js/ui/endSessionDialog.js:93
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
msgid "Restart"
msgstr "Újraindítás"
#: ../js/ui/endSessionDialog.js:89
#: ../js/ui/endSessionDialog.js:85
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
"Nyomja meg az Újraindítás gombot az alkalmazások bezárásához és a rendszer "
"újraindításához."
#: ../js/ui/endSessionDialog.js:90
#: ../js/ui/endSessionDialog.js:86
#, c-format
msgid "The system will restart automatically in %d seconds."
msgstr "A rendszer automatikusan újraindul %d másodperc múlva."
#: ../js/ui/endSessionDialog.js:91
#: ../js/ui/endSessionDialog.js:87
msgid "Restarting the system."
msgstr "A rendszer újraindítása."
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
#: ../js/ui/endSessionDialog.js:395
msgid "Confirm"
msgstr "Megerősítés"
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:466
msgid "Cancel"
msgstr "Mégse"
@@ -533,48 +537,48 @@ msgstr "Forrás megtekintése"
msgid "Web Page"
msgstr "Weblap"
#: ../js/ui/messageTray.js:1000
#: ../js/ui/messageTray.js:926
msgid "Open"
msgstr "Megnyitás"
#: ../js/ui/messageTray.js:2164
#: ../js/ui/messageTray.js:1986
msgid "System Information"
msgstr "Rendszerinformációk"
#: ../js/ui/overview.js:91
#: ../js/ui/overview.js:88
msgid "Undo"
msgstr "Visszavonás"
#: ../js/ui/overview.js:186
#: ../js/ui/overview.js:183
msgid "Windows"
msgstr "Ablakok"
#: ../js/ui/overview.js:189
#: ../js/ui/overview.js:186
msgid "Applications"
msgstr "Alkalmazások"
# FIXME - valami jobbat
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/overview.js:205
#: ../js/ui/overview.js:202
msgid "Dash"
msgstr "Dash"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:524
#: ../js/ui/panel.js:515
#, c-format
msgid "Quit %s"
msgstr "%s bezárása"
#. 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:902
#: ../js/ui/panel.js:874
msgid "Activities"
msgstr "Tevékenységek"
#: ../js/ui/panel.js:1003
msgid "Top Bar"
msgstr "Felső sáv"
#: ../js/ui/panel.js:975
msgid "Panel"
msgstr "Panel"
#: ../js/ui/placeDisplay.js:122
#, c-format
@@ -593,85 +597,60 @@ msgstr "Kapcsolódás…"
msgid "PLACES & DEVICES"
msgstr "HELYEK ÉS ESZKÖZÖK"
#: ../js/ui/polkitAuthenticationAgent.js:74
msgid "Authentication Required"
msgstr "Hitelesítés szükséges"
#: ../js/ui/polkitAuthenticationAgent.js:108
msgid "Administrator"
msgstr "Rendszergazda"
#: ../js/ui/polkitAuthenticationAgent.js:176
msgid "Authenticate"
msgstr "Hitelesítés"
#. 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 "A hitelesítés sikertelen. Próbálja újra."
#: ../js/ui/polkitAuthenticationAgent.js:276
msgid "Password:"
msgstr "Jelszó:"
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:679
#: ../js/ui/popupMenu.js:636
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:205
#: ../js/ui/runDialog.js:201
msgid "Please enter a command:"
msgstr "Adjon meg egy parancsot:"
#: ../js/ui/searchDisplay.js:310
#: ../js/ui/searchDisplay.js:283
msgid "Searching..."
msgstr "Keresés…"
#: ../js/ui/searchDisplay.js:324
#: ../js/ui/searchDisplay.js:297
msgid "No matching results."
msgstr "Nincs találat."
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
#: ../js/ui/statusMenu.js:228
#: ../js/ui/statusMenu.js:114 ../js/ui/statusMenu.js:178
msgid "Power Off..."
msgstr "Kikapcsolás…"
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
#: ../js/ui/statusMenu.js:116 ../js/ui/statusMenu.js:177
msgid "Suspend"
msgstr "Felfüggesztés"
#: ../js/ui/statusMenu.js:184
#: ../js/ui/statusMenu.js:137
msgid "Available"
msgstr "Elérhető"
#: ../js/ui/statusMenu.js:189
#: ../js/ui/statusMenu.js:142
msgid "Busy"
msgstr "Elfoglalt"
#: ../js/ui/statusMenu.js:197
#: ../js/ui/statusMenu.js:150
msgid "My Account"
msgstr "Saját fiók"
#: ../js/ui/statusMenu.js:201
#: ../js/ui/statusMenu.js:154
msgid "System Settings"
msgstr "Rendszerbeállítások"
#: ../js/ui/statusMenu.js:208
#: ../js/ui/statusMenu.js:161
msgid "Lock Screen"
msgstr "Képernyő zárolása"
#: ../js/ui/statusMenu.js:213
#: ../js/ui/statusMenu.js:165
msgid "Switch User"
msgstr "Felhasználóváltás"
#: ../js/ui/statusMenu.js:218
#: ../js/ui/statusMenu.js:170
msgid "Log Out..."
msgstr "Kijelentkezés…"
@@ -838,139 +817,133 @@ msgstr "Billentyűzetkiosztás megjelenítése…"
msgid "Localization Settings"
msgstr "Lokalizációs beállítások"
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1454
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
msgid "<unknown>"
msgstr "<ismeretlen>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:311
#: ../js/ui/status/network.js:295
msgid "disabled"
msgstr "tiltva"
#: ../js/ui/status/network.js:494
#: ../js/ui/status/network.js:476
msgid "connecting..."
msgstr "kapcsolódás…"
#. 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:479
msgid "authentication required"
msgstr "hitelesítés szükséges"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:507
msgid "firmware missing"
msgstr "hiányzó firmware"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:514
#: ../js/ui/status/network.js:485
msgid "cable unplugged"
msgstr "vezeték kihúzva"
#. 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:489
msgid "unavailable"
msgstr "nem érhető el"
#: ../js/ui/status/network.js:521
#: ../js/ui/status/network.js:491
msgid "connection failed"
msgstr "a kapcsolódás meghiúsult"
#. 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:571 ../js/ui/status/network.js:1341
msgid "Connected (private)"
msgstr "Kapcsolódva (privát)"
#: ../js/ui/status/network.js:683
#: ../js/ui/status/network.js:636
msgid "Auto Ethernet"
msgstr "Auto Ethernet"
#: ../js/ui/status/network.js:758
#: ../js/ui/status/network.js:697
msgid "Auto broadband"
msgstr "Auto széles sáv"
#: ../js/ui/status/network.js:761
#: ../js/ui/status/network.js:700
msgid "Auto dial-up"
msgstr "Auto betárcsázós"
#. 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:843 ../js/ui/status/network.js:1353
#, c-format
msgid "Auto %s"
msgstr "Auto %s"
#: ../js/ui/status/network.js:906
#: ../js/ui/status/network.js:845
msgid "Auto bluetooth"
msgstr "Auto Bluetooth"
#: ../js/ui/status/network.js:1416
#: ../js/ui/status/network.js:1355
msgid "Auto wireless"
msgstr "Auto vezeték nélküli"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1413
msgid "More..."
msgstr "Több…"
#: ../js/ui/status/network.js:1497
#: ../js/ui/status/network.js:1436
msgid "Enable networking"
msgstr "Hálózat engedélyezése"
#: ../js/ui/status/network.js:1509
#: ../js/ui/status/network.js:1448
msgid "Wired"
msgstr "Vezetékes"
#: ../js/ui/status/network.js:1520
#: ../js/ui/status/network.js:1459
msgid "Wireless"
msgstr "Vezeték nélküli"
#: ../js/ui/status/network.js:1530
#: ../js/ui/status/network.js:1469
msgid "Mobile broadband"
msgstr "Mobil széles sáv"
#: ../js/ui/status/network.js:1540
#: ../js/ui/status/network.js:1479
msgid "VPN Connections"
msgstr "VPN kapcsolatok"
#: ../js/ui/status/network.js:1549
#: ../js/ui/status/network.js:1488
msgid "Network Settings"
msgstr "Hálózati beállítások"
#: ../js/ui/status/network.js:1844
#: ../js/ui/status/network.js:1783
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Csatlakozott a(z) „%s” mobil széles sávú kapcsolathoz"
#: ../js/ui/status/network.js:1848
#: ../js/ui/status/network.js:1787
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Csatlakozott a(z) „%s” vezeték nélküli hálózathoz"
#: ../js/ui/status/network.js:1852
#: ../js/ui/status/network.js:1791
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Csatlakozott a(z) „%s” vezetékes hálózathoz"
#: ../js/ui/status/network.js:1856
#: ../js/ui/status/network.js:1795
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Csatlakozott a(z) „%s” VPN hálózathoz"
#: ../js/ui/status/network.js:1861
#: ../js/ui/status/network.js:1800
#, c-format
msgid "You're now connected to '%s'"
msgstr "Csatlakozott ehhez: „%s”"
#: ../js/ui/status/network.js:1869
#: ../js/ui/status/network.js:1808
msgid "Connection established"
msgstr "Kapcsolat létrejött"
#: ../js/ui/status/network.js:1991
#: ../js/ui/status/network.js:1930
msgid "Networking is disabled"
msgstr "Hálózat letiltva"
#: ../js/ui/status/network.js:2116
#: ../js/ui/status/network.js:2055
msgid "Network Manager"
msgstr "Hálózatkezelő"
@@ -1060,7 +1033,7 @@ msgstr "Táblagép"
msgid "Computer"
msgstr "Számítógép"
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:1088
#: ../js/ui/status/power.js:250 ../src/shell-app-system.c:961
msgid "Unknown"
msgstr "Ismeretlen"
@@ -1072,22 +1045,22 @@ msgstr "Hangerő"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/telepathyClient.js:335
#: ../js/ui/telepathyClient.js:332
#, c-format
msgid "%s is online."
msgstr "%s elérhető."
#: ../js/ui/telepathyClient.js:340
#: ../js/ui/telepathyClient.js:337
#, c-format
msgid "%s is offline."
msgstr "%s kilépett."
#: ../js/ui/telepathyClient.js:343
#: ../js/ui/telepathyClient.js:340
#, c-format
msgid "%s is away."
msgstr "%s távol van."
#: ../js/ui/telepathyClient.js:346
#: ../js/ui/telepathyClient.js:343
#, c-format
msgid "%s is busy."
msgstr "%s elfoglalt."
@@ -1095,7 +1068,7 @@ msgstr "%s elfoglalt."
#. 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:482
#: ../js/ui/telepathyClient.js:474
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Elküldve: %A, %X"
@@ -1104,11 +1077,11 @@ msgstr "Elküldve: %A, %X"
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters.
#: ../js/ui/viewSelector.js:122
#: ../js/ui/viewSelector.js:119
msgid "Type to search..."
msgstr "Gépeljen a kereséshez…"
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
#: ../js/ui/viewSelector.js:139 ../src/shell-util.c:250
msgid "Search"
msgstr "Oldalsáv"
@@ -1144,7 +1117,7 @@ msgstr[1] "%u bemenet"
msgid "System Sounds"
msgstr "Rendszerhangok"
#: ../src/main.c:446
#: ../src/main.c:397
msgid "Print version"
msgstr "Verzió kiírása"
@@ -1153,32 +1126,32 @@ msgstr "Verzió kiírása"
msgid "Failed to launch '%s'"
msgstr "„%s” indítása meghiúsult"
#: ../src/shell-global.c:1395
#: ../src/shell-global.c:1340
msgid "Less than a minute ago"
msgstr "Kevesebb, mint egy perce"
#: ../src/shell-global.c:1399
#: ../src/shell-global.c:1344
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d perce"
msgstr[1] "%d perce"
#: ../src/shell-global.c:1404
#: ../src/shell-global.c:1349
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d órája"
msgstr[1] "%d órája"
#: ../src/shell-global.c:1409
#: ../src/shell-global.c:1354
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d napja"
msgstr[1] "%d napja"
#: ../src/shell-global.c:1414
#: ../src/shell-global.c:1359
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"

111
po/it.po
View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-03 10:34+0200\n"
"PO-Revision-Date: 2011-04-03 10:35+0200\n"
"POT-Creation-Date: 2011-03-24 22:46+0100\n"
"PO-Revision-Date: 2011-03-24 22:58+0100\n"
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n"
@@ -345,13 +345,13 @@ msgid "Nothing Scheduled"
msgstr "Nessun evento"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
#: ../js/ui/calendar.js:720
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/telepathyClient.js:493
#: ../js/ui/calendar.js:723
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %e %B %Y"
@@ -372,7 +372,7 @@ msgstr "Questa settimana"
msgid "Next week"
msgstr "Prossima settimana"
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
msgid "Remove"
msgstr "Rimuovi"
@@ -471,8 +471,7 @@ msgstr "Spegni"
#: ../js/ui/endSessionDialog.js:76
msgid "Click Power Off to quit these applications and power off the system."
msgstr ""
"Fare clic su «Spegni» per chiudere queste applicazioni e spegnere il sistema."
msgstr "Fare clic su «Spegni» per chiudere queste applicazioni e spegnere il sistema."
#: ../js/ui/endSessionDialog.js:77
#, c-format
@@ -540,11 +539,11 @@ msgstr "Visualizza sorgente"
msgid "Web Page"
msgstr "Pagina web"
#: ../js/ui/messageTray.js:1000
#: ../js/ui/messageTray.js:987
msgid "Open"
msgstr "Apri"
#: ../js/ui/messageTray.js:2164
#: ../js/ui/messageTray.js:2145
msgid "System Information"
msgstr "Informazione di sistema"
@@ -568,18 +567,18 @@ msgid "Dash"
msgstr "Dash"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:524
#: ../js/ui/panel.js:515
#, c-format
msgid "Quit %s"
msgstr "Chiudi %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:902
#: ../js/ui/panel.js:878
msgid "Activities"
msgstr "Attività"
#: ../js/ui/panel.js:1003
#: ../js/ui/panel.js:979
msgid "Top Bar"
msgstr "Barra superiore"
@@ -613,15 +612,11 @@ msgstr "Amministratore"
msgid "Authenticate"
msgstr "Autentica"
#. 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
#: ../js/ui/polkitAuthenticationAgent.js:260
msgid "Sorry, that didn't work. Please try again."
msgstr "Errore nell'autenticazione. Provare di nuovo."
msgstr ""
#: ../js/ui/polkitAuthenticationAgent.js:276
#: ../js/ui/polkitAuthenticationAgent.js:272
msgid "Password:"
msgstr "Password:"
@@ -638,11 +633,11 @@ msgstr "toggle-switch-us"
msgid "Please enter a command:"
msgstr "Inserire un comando:"
#: ../js/ui/searchDisplay.js:311
#: ../js/ui/searchDisplay.js:310
msgid "Searching..."
msgstr "Ricerca..."
#: ../js/ui/searchDisplay.js:325
#: ../js/ui/searchDisplay.js:324
msgid "No matching results."
msgstr "Nessun risultato corrispondente."
@@ -849,139 +844,133 @@ msgstr "Mostra disposizione tastiera..."
msgid "Localization Settings"
msgstr "Impostazioni localizzazione"
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1467
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
msgid "<unknown>"
msgstr "<sconosciuto>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:318
#: ../js/ui/status/network.js:295
msgid "disabled"
msgstr "disabilitata"
#: ../js/ui/status/network.js:501
#: ../js/ui/status/network.js:476
msgid "connecting..."
msgstr "connessione..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:504
#: ../js/ui/status/network.js:479
msgid "authentication required"
msgstr "richiesta autenticazione"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:514
msgid "firmware missing"
msgstr "firmware mancante"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:521
#: ../js/ui/status/network.js:485
msgid "cable unplugged"
msgstr "cavo scollegato"
#. 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:526
#: ../js/ui/status/network.js:489
msgid "unavailable"
msgstr "non disponibile"
#: ../js/ui/status/network.js:528
#: ../js/ui/status/network.js:491
msgid "connection failed"
msgstr "connessione non riuscita"
#. 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:609 ../js/ui/status/network.js:1415
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
msgid "Connected (private)"
msgstr "Connessa (privata)"
#: ../js/ui/status/network.js:690
#: ../js/ui/status/network.js:636
msgid "Auto Ethernet"
msgstr "Ethernet automatica"
#: ../js/ui/status/network.js:765
#: ../js/ui/status/network.js:697
msgid "Auto broadband"
msgstr "Banda larga automatica"
#: ../js/ui/status/network.js:768
#: ../js/ui/status/network.js:700
msgid "Auto dial-up"
msgstr "Dial-up automatica"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:911 ../js/ui/status/network.js:1427
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
#, c-format
msgid "Auto %s"
msgstr "%s automatica"
#: ../js/ui/status/network.js:913
#: ../js/ui/status/network.js:845
msgid "Auto bluetooth"
msgstr "Bluetooth automatica"
#: ../js/ui/status/network.js:1429
#: ../js/ui/status/network.js:1355
msgid "Auto wireless"
msgstr "Wireless automatica"
#: ../js/ui/status/network.js:1487
#: ../js/ui/status/network.js:1413
msgid "More..."
msgstr "Altro..."
#: ../js/ui/status/network.js:1510
#: ../js/ui/status/network.js:1436
msgid "Enable networking"
msgstr "Abilita rete"
#: ../js/ui/status/network.js:1522
#: ../js/ui/status/network.js:1448
msgid "Wired"
msgstr "Via cavo"
#: ../js/ui/status/network.js:1533
#: ../js/ui/status/network.js:1459
msgid "Wireless"
msgstr "Wireless"
#: ../js/ui/status/network.js:1543
#: ../js/ui/status/network.js:1469
msgid "Mobile broadband"
msgstr "Banda larga mobile"
#: ../js/ui/status/network.js:1553
#: ../js/ui/status/network.js:1479
msgid "VPN Connections"
msgstr "Connessioni VPN"
#: ../js/ui/status/network.js:1565
#: ../js/ui/status/network.js:1488
msgid "Network Settings"
msgstr "Impostazioni rete"
#: ../js/ui/status/network.js:1860
#: ../js/ui/status/network.js:1783
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Connessi alla rete mobile «%s»"
#: ../js/ui/status/network.js:1864
#: ../js/ui/status/network.js:1787
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Connessi alla rete wireless «%s»"
#: ../js/ui/status/network.js:1868
#: ../js/ui/status/network.js:1791
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Connessi alla rete via cavo «%s»"
#: ../js/ui/status/network.js:1872
#: ../js/ui/status/network.js:1795
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Connessi alla rete VPN «%s»"
#: ../js/ui/status/network.js:1877
#: ../js/ui/status/network.js:1800
#, c-format
msgid "You're now connected to '%s'"
msgstr "Connessi a «%s»"
#: ../js/ui/status/network.js:1885
#: ../js/ui/status/network.js:1808
msgid "Connection established"
msgstr "Connessione stabilita"
#: ../js/ui/status/network.js:2007
#: ../js/ui/status/network.js:1930
msgid "Networking is disabled"
msgstr "Rete disabilitata"
#: ../js/ui/status/network.js:2132
#: ../js/ui/status/network.js:2055
msgid "Network Manager"
msgstr "Gestore reti"
@@ -1084,22 +1073,22 @@ msgstr "Volume"
msgid "Microphone"
msgstr "Microfono"
#: ../js/ui/telepathyClient.js:335
#: ../js/ui/telepathyClient.js:332
#, c-format
msgid "%s is online."
msgstr "%s è disponibile."
#: ../js/ui/telepathyClient.js:340
#: ../js/ui/telepathyClient.js:337
#, c-format
msgid "%s is offline."
msgstr "%s è fuori rete."
#: ../js/ui/telepathyClient.js:343
#: ../js/ui/telepathyClient.js:340
#, c-format
msgid "%s is away."
msgstr "%s è assente."
#: ../js/ui/telepathyClient.js:346
#: ../js/ui/telepathyClient.js:343
#, c-format
msgid "%s is busy."
msgstr "%s non è disponibile."
@@ -1107,7 +1096,7 @@ msgstr "%s non è disponibile."
#. 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:482
#: ../js/ui/telepathyClient.js:474
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Inviato alle %-H.%M di %A"

1350
po/ja.po

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@ 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-03-25 20:20+0000\n"
"PO-Revision-Date: 2011-04-02 19:58+0900\n"
"POT-Creation-Date: 2011-03-24 08:03+0000\n"
"PO-Revision-Date: 2011-03-25 21:56+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
"MIME-Version: 1.0\n"
@@ -617,8 +617,7 @@ msgstr "검색하는 중..."
msgid "No matching results."
msgstr "일치하는 결과가 없습니다."
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
#: ../js/ui/statusMenu.js:228
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:228
msgid "Power Off..."
msgstr "컴퓨터 끄기..."
@@ -817,7 +816,7 @@ msgstr "키보드 배치 보기..."
msgid "Localization Settings"
msgstr "지역화 설정"
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1437
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
msgid "<unknown>"
msgstr "<알 수 없음>"
@@ -826,130 +825,124 @@ msgstr "<알 수 없음>"
msgid "disabled"
msgstr "사용 않음"
#: ../js/ui/status/network.js:478
#: ../js/ui/status/network.js:476
msgid "connecting..."
msgstr "연결하는 중..."
#. 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:479
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:491
msgid "firmware missing"
msgstr "펌웨어 없음"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:498
#: ../js/ui/status/network.js:485
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:503
#: ../js/ui/status/network.js:489
msgid "unavailable"
msgstr "사용 불가"
#: ../js/ui/status/network.js:505
#: ../js/ui/status/network.js:491
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:585 ../js/ui/status/network.js:1385
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
msgid "Connected (private)"
msgstr "연결됨 (개인)"
#: ../js/ui/status/network.js:666
#: ../js/ui/status/network.js:636
msgid "Auto Ethernet"
msgstr "자동 이더넷"
#: ../js/ui/status/network.js:741
#: ../js/ui/status/network.js:697
msgid "Auto broadband"
msgstr "자동 고속 통신망"
#: ../js/ui/status/network.js:744
#: ../js/ui/status/network.js:700
msgid "Auto dial-up"
msgstr "자동 전화접속"
#. 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:843 ../js/ui/status/network.js:1353
#, c-format
msgid "Auto %s"
msgstr "자동 %s"
#: ../js/ui/status/network.js:889
#: ../js/ui/status/network.js:845
msgid "Auto bluetooth"
msgstr "자동 블루투스"
#: ../js/ui/status/network.js:1399
#: ../js/ui/status/network.js:1355
msgid "Auto wireless"
msgstr "자동 무선"
#: ../js/ui/status/network.js:1457
#: ../js/ui/status/network.js:1413
msgid "More..."
msgstr "더 보기..."
#: ../js/ui/status/network.js:1480
#: ../js/ui/status/network.js:1436
msgid "Enable networking"
msgstr "네트워크 사용"
#: ../js/ui/status/network.js:1492
#: ../js/ui/status/network.js:1448
msgid "Wired"
msgstr "유선"
#: ../js/ui/status/network.js:1503
#: ../js/ui/status/network.js:1459
msgid "Wireless"
msgstr "무선"
#: ../js/ui/status/network.js:1513
#: ../js/ui/status/network.js:1469
msgid "Mobile broadband"
msgstr "휴대전화 네트워크"
#: ../js/ui/status/network.js:1523
#: ../js/ui/status/network.js:1479
msgid "VPN Connections"
msgstr "VPN 연결"
#: ../js/ui/status/network.js:1532
#: ../js/ui/status/network.js:1488
msgid "Network Settings"
msgstr "네트워크 설정"
#: ../js/ui/status/network.js:1827
#: ../js/ui/status/network.js:1783
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "'%s' 휴대전화 네트워크에 연결되었습니다"
#: ../js/ui/status/network.js:1831
#: ../js/ui/status/network.js:1787
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "'%s' 무선 네트워크에 연결되었습니다"
#: ../js/ui/status/network.js:1835
#: ../js/ui/status/network.js:1791
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "'%s' 유선 네트워크에 연결되었습니다"
#: ../js/ui/status/network.js:1839
#: ../js/ui/status/network.js:1795
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "'%s' VPN 네트워크에 연결되었습니다"
#: ../js/ui/status/network.js:1844
#: ../js/ui/status/network.js:1800
#, c-format
msgid "You're now connected to '%s'"
msgstr "이제 '%s'에 연결되었습니다"
#: ../js/ui/status/network.js:1852
#: ../js/ui/status/network.js:1808
msgid "Connection established"
msgstr "연결이 되었습니다"
#: ../js/ui/status/network.js:1974
#: ../js/ui/status/network.js:1930
msgid "Networking is disabled"
msgstr "네트워크를 사용하지 않습니다"
#: ../js/ui/status/network.js:2099
#: ../js/ui/status/network.js:2055
msgid "Network Manager"
msgstr "네트워크 관리"

243
po/lt.po
View File

@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-01 22:30+0200\n"
"PO-Revision-Date: 2011-04-01 22:27+0100\n"
"Last-Translator: Gintautas Miliauskas <gintautas@miliauskas.lt>\n"
"POT-Creation-Date: 2011-03-21 14:25+0100\n"
"PO-Revision-Date: 2011-03-19 14:56+0300\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
"Language-Team: Lithuanian <gnome-lt@lists.akl.lt>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
@@ -188,27 +188,27 @@ msgid "Execution of '%s' failed:"
msgstr "Nepavyko paleisti „%s“:"
#. Translators: Filter to display all applications
#: ../js/ui/appDisplay.js:230
#: ../js/ui/appDisplay.js:226
msgid "All"
msgstr "Visi"
#: ../js/ui/appDisplay.js:328
#: ../js/ui/appDisplay.js:324
msgid "APPLICATIONS"
msgstr "PROGRAMOS"
#: ../js/ui/appDisplay.js:354
#: ../js/ui/appDisplay.js:350
msgid "SETTINGS"
msgstr "NUSTATYMAI"
#: ../js/ui/appDisplay.js:625
#: ../js/ui/appDisplay.js:616
msgid "New Window"
msgstr "Naujas langas"
#: ../js/ui/appDisplay.js:628
#: ../js/ui/appDisplay.js:619
msgid "Remove from Favorites"
msgstr "Pašalinti iš mėgstamų"
#: ../js/ui/appDisplay.js:629
#: ../js/ui/appDisplay.js:620
msgid "Add to Favorites"
msgstr "Pridėti prie mėgstamų"
@@ -341,13 +341,13 @@ msgid "Nothing Scheduled"
msgstr "Niekas nesuplanuota"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
#: ../js/ui/calendar.js:720
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:493
#: ../js/ui/calendar.js:723
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %Y %B %d"
@@ -368,7 +368,7 @@ msgstr "Šią savaitę"
msgid "Next week"
msgstr "Kitą savaitę"
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:933
msgid "Remove"
msgstr "Pašalinti"
@@ -436,7 +436,7 @@ msgstr "PASKUTINIEJI ELEMENTAI"
msgid "Log Out %s"
msgstr "Atjungti %s"
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:70
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
msgid "Log Out"
msgstr "Atsijungti"
@@ -460,46 +460,48 @@ msgstr "Jūs būsite automatiškai atjungtas po %d sekundžių."
msgid "Logging out of the system."
msgstr "Atsijungiama nuo sistemos."
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
msgid "Power Off"
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
msgid "Shut Down"
msgstr "Išjungti"
#: ../js/ui/endSessionDialog.js:76
msgid "Click Power Off to quit these applications and power off the system."
#: ../js/ui/endSessionDialog.js:75
msgid "Click Shut Down to quit these applications and shut down the system."
msgstr ""
"Spauskite „Išjungti“, jei norite užverti šias programas ir išjungti sistemą."
"Spauskite „išjungti“, jei norite užverti šias programas ir išjungti sistemą."
#: ../js/ui/endSessionDialog.js:77
#: ../js/ui/endSessionDialog.js:76
#, c-format
msgid "The system will power off automatically in %d seconds."
msgid "The system will shut down automatically in %d seconds."
msgstr "Sistema automatiškai išsijungs po %d sekundžių."
#: ../js/ui/endSessionDialog.js:78
msgid "Powering off the system."
msgstr "Sistema išjungiama."
#: ../js/ui/endSessionDialog.js:77
msgid "Shutting down the system."
msgstr "Sistemos išjungimas."
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
#: ../js/ui/endSessionDialog.js:93
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
msgid "Restart"
msgstr "Įkelti iš naujo"
#: ../js/ui/endSessionDialog.js:89
#: ../js/ui/endSessionDialog.js:85
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
"Spauskite „įkelti iš naujo“, jei norite užverti šias programas ir įkelti "
"sistemą iš naujo."
#: ../js/ui/endSessionDialog.js:90
#: ../js/ui/endSessionDialog.js:86
#, c-format
msgid "The system will restart automatically in %d seconds."
msgstr "Sistema bus įkelta iš naujo po %d sekundžių."
#: ../js/ui/endSessionDialog.js:91
#: ../js/ui/endSessionDialog.js:87
msgid "Restarting the system."
msgstr "Sistemos įkėlimas iš naujo"
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
#: ../js/ui/status/bluetooth.js:466
#: ../js/ui/endSessionDialog.js:395
msgid "Confirm"
msgstr "Patvirtinti"
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:466
msgid "Cancel"
msgstr "Atšaukti"
@@ -533,47 +535,47 @@ msgstr "Žiūrėti šaltinį"
msgid "Web Page"
msgstr "Tinklalapis"
#: ../js/ui/messageTray.js:1000
#: ../js/ui/messageTray.js:926
msgid "Open"
msgstr "Atverti"
#: ../js/ui/messageTray.js:2164
#: ../js/ui/messageTray.js:1986
msgid "System Information"
msgstr "Sistemos informacija"
#: ../js/ui/overview.js:91
#: ../js/ui/overview.js:88
msgid "Undo"
msgstr "Atšaukti"
#: ../js/ui/overview.js:186
#: ../js/ui/overview.js:183
msgid "Windows"
msgstr "Langai"
#: ../js/ui/overview.js:189
#: ../js/ui/overview.js:186
msgid "Applications"
msgstr "Programos"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/overview.js:205
#: ../js/ui/overview.js:202
msgid "Dash"
msgstr "Paleidimo sritis"
msgstr ""
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:524
#: ../js/ui/panel.js:515
#, c-format
msgid "Quit %s"
msgstr "Užverti %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:902
#: ../js/ui/panel.js:874
msgid "Activities"
msgstr "Apžvalga"
#: ../js/ui/panel.js:1003
msgid "Top Bar"
msgstr "Viršutinė juosta"
#: ../js/ui/panel.js:975
msgid "Panel"
msgstr "Skydelis"
#: ../js/ui/placeDisplay.js:122
#, c-format
@@ -592,85 +594,60 @@ msgstr "Prisijungti prie..."
msgid "PLACES & DEVICES"
msgstr "VIETOS ir ĮRENGINIAI"
#: ../js/ui/polkitAuthenticationAgent.js:74
msgid "Authentication Required"
msgstr "Reikia patvirtinti tapatybę"
#: ../js/ui/polkitAuthenticationAgent.js:108
msgid "Administrator"
msgstr "Administratorius"
#: ../js/ui/polkitAuthenticationAgent.js:176
msgid "Authenticate"
msgstr "Patvirtinti tapatybę"
#. 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 "Atsiprašome, tai nesuveikė. Pabandykite dar kartą."
#: ../js/ui/polkitAuthenticationAgent.js:276
msgid "Password:"
msgstr "Slaptažodis:"
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:679
#: ../js/ui/popupMenu.js:636
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
#: ../js/ui/runDialog.js:205
#: ../js/ui/runDialog.js:201
msgid "Please enter a command:"
msgstr "Įveskite komandą:"
#: ../js/ui/searchDisplay.js:310
#: ../js/ui/searchDisplay.js:287
msgid "Searching..."
msgstr "Ieškoma..."
#: ../js/ui/searchDisplay.js:324
#: ../js/ui/searchDisplay.js:301
msgid "No matching results."
msgstr "Nerasta atitikmenų."
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
#: ../js/ui/statusMenu.js:228
#: ../js/ui/statusMenu.js:114 ../js/ui/statusMenu.js:178
msgid "Power Off..."
msgstr "Išjungti..."
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
#: ../js/ui/statusMenu.js:116 ../js/ui/statusMenu.js:177
msgid "Suspend"
msgstr "Užmigdyti"
#: ../js/ui/statusMenu.js:184
#: ../js/ui/statusMenu.js:137
msgid "Available"
msgstr "Esu"
#: ../js/ui/statusMenu.js:189
#: ../js/ui/statusMenu.js:142
msgid "Busy"
msgstr "Užsiėmęs (-usi)"
#: ../js/ui/statusMenu.js:197
#: ../js/ui/statusMenu.js:150
msgid "My Account"
msgstr "Mano paskyra"
#: ../js/ui/statusMenu.js:201
#: ../js/ui/statusMenu.js:154
msgid "System Settings"
msgstr "Sistemos nustatymai"
#: ../js/ui/statusMenu.js:208
#: ../js/ui/statusMenu.js:161
msgid "Lock Screen"
msgstr "Užrakinti ekraną"
#: ../js/ui/statusMenu.js:213
#: ../js/ui/statusMenu.js:165
msgid "Switch User"
msgstr "Keisti naudotoją"
#: ../js/ui/statusMenu.js:218
#: ../js/ui/statusMenu.js:170
msgid "Log Out..."
msgstr "Atsijungti ..."
@@ -837,139 +814,133 @@ msgstr "Rodyti klaviatūros išdėstymą..."
msgid "Localization Settings"
msgstr "Lokalizacijos nustatymai"
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1454
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
msgid "<unknown>"
msgstr "<nežinoma>"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:311
#: ../js/ui/status/network.js:295
msgid "disabled"
msgstr "išjungta"
#: ../js/ui/status/network.js:494
#: ../js/ui/status/network.js:476
msgid "connecting..."
msgstr "jungiamasi..."
#. 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:479
msgid "authentication required"
msgstr "reikia patvirtinti tapatybę"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:507
msgid "firmware missing"
msgstr "Trūksta integruotos programinės įrangos (firmware)"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:514
#: ../js/ui/status/network.js:485
msgid "cable unplugged"
msgstr "kabelis neįjungtas"
#. 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:489
msgid "unavailable"
msgstr "nepasiekiamas"
#: ../js/ui/status/network.js:521
#: ../js/ui/status/network.js:491
msgid "connection failed"
msgstr "nepavyko prisijungti"
#. 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:571 ../js/ui/status/network.js:1341
msgid "Connected (private)"
msgstr "Prisijungta (privatus)"
#: ../js/ui/status/network.js:683
#: ../js/ui/status/network.js:636
msgid "Auto Ethernet"
msgstr "Automatinis vietinis"
#: ../js/ui/status/network.js:758
#: ../js/ui/status/network.js:697
msgid "Auto broadband"
msgstr "Automatinis plačiajuostis"
#: ../js/ui/status/network.js:761
#: ../js/ui/status/network.js:700
msgid "Auto dial-up"
msgstr "Automatinis telefoninis"
#. 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:843 ../js/ui/status/network.js:1353
#, c-format
msgid "Auto %s"
msgstr "Automatinis %s"
#: ../js/ui/status/network.js:906
#: ../js/ui/status/network.js:845
msgid "Auto bluetooth"
msgstr "Automatinis bluetooth"
#: ../js/ui/status/network.js:1416
#: ../js/ui/status/network.js:1355
msgid "Auto wireless"
msgstr "Automatinis belaidis"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1413
msgid "More..."
msgstr "Daugiau..."
#: ../js/ui/status/network.js:1497
#: ../js/ui/status/network.js:1436
msgid "Enable networking"
msgstr "Įjungti tinklą"
#: ../js/ui/status/network.js:1509
#: ../js/ui/status/network.js:1448
msgid "Wired"
msgstr "Laidinis"
#: ../js/ui/status/network.js:1520
#: ../js/ui/status/network.js:1459
msgid "Wireless"
msgstr "Belaidis"
#: ../js/ui/status/network.js:1530
#: ../js/ui/status/network.js:1469
msgid "Mobile broadband"
msgstr "Mobilus plačiajuostis"
#: ../js/ui/status/network.js:1540
#: ../js/ui/status/network.js:1479
msgid "VPN Connections"
msgstr "VPN ryšiai"
#: ../js/ui/status/network.js:1549
#: ../js/ui/status/network.js:1488
msgid "Network Settings"
msgstr "Tinklo nustatymai"
#: ../js/ui/status/network.js:1844
#: ../js/ui/status/network.js:1783
#, c-format
msgid "You're now connected to mobile broadband connection '%s'"
msgstr "Dabar esate prisijungęs prie mobilaus plačiajuosčio ryšio „%s“"
#: ../js/ui/status/network.js:1848
#: ../js/ui/status/network.js:1787
#, c-format
msgid "You're now connected to wireless network '%s'"
msgstr "Dabar esate prisijungęs prie belaidžio tinklo „%s“"
#: ../js/ui/status/network.js:1852
#: ../js/ui/status/network.js:1791
#, c-format
msgid "You're now connected to wired network '%s'"
msgstr "Dabar esate prisijungęs prie laidinio tinklo „%s“"
#: ../js/ui/status/network.js:1856
#: ../js/ui/status/network.js:1795
#, c-format
msgid "You're now connected to VPN network '%s'"
msgstr "Dabar esate prisijungęs prie VPN tinklo „%s“"
#: ../js/ui/status/network.js:1861
#: ../js/ui/status/network.js:1800
#, c-format
msgid "You're now connected to '%s'"
msgstr "Dabar esate prisijungęs prie „%s“"
#: ../js/ui/status/network.js:1869
#: ../js/ui/status/network.js:1808
msgid "Connection established"
msgstr "Ryšys užmegstas"
#: ../js/ui/status/network.js:1991
#: ../js/ui/status/network.js:1930
msgid "Networking is disabled"
msgstr "Tinklas išjungtas"
#: ../js/ui/status/network.js:2116
#: ../js/ui/status/network.js:2055
msgid "Network Manager"
msgstr "Tinklo valdymas"
@@ -1075,22 +1046,22 @@ msgstr "Garsumas"
msgid "Microphone"
msgstr "Mikrofonas"
#: ../js/ui/telepathyClient.js:335
#: ../js/ui/telepathyClient.js:332
#, c-format
msgid "%s is online."
msgstr "%s yra prisijungęs"
#: ../js/ui/telepathyClient.js:340
#: ../js/ui/telepathyClient.js:337
#, c-format
msgid "%s is offline."
msgstr "%s yra atsijungęs"
#: ../js/ui/telepathyClient.js:343
#: ../js/ui/telepathyClient.js:340
#, c-format
msgid "%s is away."
msgstr "%s yra nepasiekiamas"
#: ../js/ui/telepathyClient.js:346
#: ../js/ui/telepathyClient.js:343
#, c-format
msgid "%s is busy."
msgstr "%s yra užsiėmęs."
@@ -1098,7 +1069,7 @@ msgstr "%s yra užsiėmę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:482
#: ../js/ui/telepathyClient.js:474
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Išsiųsta %A %H:%M:%S"
@@ -1149,7 +1120,7 @@ msgstr[2] "%u įvestys"
msgid "System Sounds"
msgstr "Sistemos garsai"
#: ../src/main.c:446
#: ../src/main.c:397
msgid "Print version"
msgstr "Atspausdinti versiją"
@@ -1158,11 +1129,11 @@ msgstr "Atspausdinti versiją"
msgid "Failed to launch '%s'"
msgstr "Nepavyko paleisti „%s“"
#: ../src/shell-global.c:1395
#: ../src/shell-global.c:1340
msgid "Less than a minute ago"
msgstr "Mažiau nei prieš minutę"
#: ../src/shell-global.c:1399
#: ../src/shell-global.c:1344
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
@@ -1170,7 +1141,7 @@ msgstr[0] "prieš %d minutę"
msgstr[1] "prieš %d minutes"
msgstr[2] "prieš %d minučių"
#: ../src/shell-global.c:1404
#: ../src/shell-global.c:1349
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
@@ -1178,7 +1149,7 @@ msgstr[0] "prieš %d valandą"
msgstr[1] "prieš %d valandas"
msgstr[2] "prieš %d valandų"
#: ../src/shell-global.c:1409
#: ../src/shell-global.c:1354
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
@@ -1186,7 +1157,7 @@ msgstr[0] "prieš %d dieną"
msgstr[1] "prieš %d dienas"
msgstr[2] "prieš %d dienų"
#: ../src/shell-global.c:1414
#: ../src/shell-global.c:1359
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@@ -1226,26 +1197,6 @@ msgstr "Failų sistema"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "Shut Down"
#~ msgstr "Išjungti"
#~ msgid "Click Shut Down to quit these applications and shut down the system."
#~ msgstr ""
#~ "Spauskite „išjungti“, jei norite užverti šias programas ir išjungti "
#~ "sistemą."
#~ msgid "The system will shut down automatically in %d seconds."
#~ msgstr "Sistema automatiškai išsijungs po %d sekundžių."
#~ msgid "Shutting down the system."
#~ msgstr "Sistemos išjungimas."
#~ msgid "Confirm"
#~ msgstr "Patvirtinti"
#~ msgid "Panel"
#~ msgstr "Skydelis"
#~ msgid "Clock"
#~ msgstr "Laikrodis"

Some files were not shown because too many files have changed in this diff Show More