Compare commits

..

2 Commits

Author SHA1 Message Date
Carlos Garnacho
708a198abf windowManager: Add TouchpadWorkspaceSwitchAction
This object (not really a Clutter.GestureAction) sets up a captured-event
handler, which exclusively looks for 4 finger touchpad swipes, emitting
an ::activated signal under the same terms than WorkspaceSwitchAction.
2015-07-09 12:42:38 +02:00
Carlos Garnacho
8270d84b80 windowManager: refactor WorkspaceSwitchAction callback into separate function
This will be used too by the touchpad-specific "action", so put it in a
shared place.
2015-07-09 12:42:38 +02:00
120 changed files with 14778 additions and 21285 deletions

148
NEWS
View File

@@ -1,151 +1,3 @@
3.18.5
======
* Fix deleting chat notifications in calendar [Florian; #747991]
* Fix recount issue in network agent component [Christophe; #759708]
* Plug a memory leak [Aaron; #735705]
* Do not assert on non-fatal runtime errors [Florian; #765061]
Contributors:
Christophe Fergeau, Florian Müllner, Aaron Plattner
Translations:
Matej Urbančič [sl], Marek Černocký [cs]
3.18.4
======
* Fix thumbnail scaling in window switcher on HiDPI [Florian; #758676]
* loginDialog: Update user list on user changes [Michael; #758568]
* gdm: Do not allow bypassing disabled Sign In button [Michael; #746180]
* Correctly identify VPN secret requests [Lubomir; #760999]
Contributors:
Michael Catanzaro, Florian Müllner, Lubomir Rintel
Translations:
Kristjan SCHMIDT [eo], Daniel Korostil [uk], Andika Triwidada [id]
3.18.3
======
* Fix browser plugin crash in Firefox [Carlos; #737932, #757940]
Contributors:
Carlos Garcia Campos
3.18.2
======
* Fix fullscreen animation glitches [Florian, Cosimo; #756697, #756714]
* Fix window menu being closed immediately in top orientation [Rui; #756605]
* Respect text-scaling factor under wayland [Owen; #756447]
* Fix login screen getting stuck after authentification [Ray; #754814]
* Fix overview being toggled while still animating [Rui; #756925]
* Improve robustness of browser plugin [Carlos; #737932, #757940]
* Misc. bug fixes [Owen, Florian; #756983, #757150, #757779]
Contributors:
Cosimo Cecchi, Carlos Garcia Campos, Rui Matos, Florian Müllner, Ray Strode,
Owen W. Taylor
Translations:
Kjartan Maraas [nb], Khaled Hosny [ar], Sveinn í Felli [is],
Balázs Meskó [hu], Daniel Șerbănescu [ro], Aron Xu [zh_CN],
Anthony Fok [zh_TW]
3.18.1
======
* Fix screen freezes when a notification is pushed [Carlos; #755425]
* Fix overzealous ellipsization in system status menu [Adel, Florian; #708472]
* Hide app menu when disabled by setting [Florian; #745919]
* Fix lightbox effect when animations are disabled [Rui; #755827]
* Do not mark hotplug notifications as critical [Florian; #657923]
* Fix icons getting cut off in dash [Florian; #745649]
* Animate fullscreen/unfullscreen operations [Cosimo; #707248]
* Misc. bug fixes [Florian, Owen; #748919, #674799, #754581]
Contributors:
Emmanuele Bassi, Michael Catanzaro, Cosimo Cecchi, Matthias Clasen,
Adel Gadllah, Carlos Garnacho, Ekaterina Gerasimova, Rui Matos,
Florian Müllner, Owen W. Taylor
Translations:
Марко Костић [sr], Милош Поповић [sr@latin], Khaled Hosny [ar],
Trần Ngọc Quân [vi], Petr Kovar [cs], Alexandre Franke [fr],
Fran Dieguez [gl], Anders Jonsson [sv], Piotr Drąg [pl], Dušan Kazik [sk],
Milo Casagrande [it], Changwoo Ryu [ko], Stas Solovey [ru],
Rafael Fontenelle [pt_BR], Tom Tryfonidis [el], Aurimas Černius [lt],
Seán de Búrca [ga], Christian Kirbach [de], Jiri Grönroos [fi],
Pedro Albuquerque [pt], Baurzhan Muftakhidinov [kk], Daniel Mustieles [es],
Marek Černocký [cs], Ask Hjorth Larsen [da], Inaki Larranaga Murgoitio [eu]
3.18.0
======
Translations:
Sendy Aditya Suryana [id], Kris Thomsen [da], Seán de Búrca [ga],
Andika Triwidada [id], Enrico Nicoletto [pt_BR], Anders Jonsson [sv],
Rūdolfs Mazurs [lv]
3.17.92
=======
* Fix race when loading multiple background animations [Josselin; #741453]
Contributors:
Michael Biebl, Josselin Mouette, Florian Müllner
Translations:
Baurzhan Muftakhidinov [kk], Changwoo Ryu [ko], Christian Kirbach [de],
Kjartan Maraas [nb], Jiri Grönroos [fi], Arash Mousavi [fa],
Jiro Matsuzawa [ja], Marek Černocký [cs], Milo Casagrande [it]
3.17.91
=======
* Fix login screen spinner causing wakeups while VT-switched away
[Ray, Rui; #753891]
* Fix scrolling of user list on login screen [Florian; #754525]
Contributors:
Piotr Drąg, Rui Matos, Florian Müllner, Ray Strode
Translations:
Dušan Kazik [sk], Jordi Mas [ca], Aurimas Černius [lt], Stas Solovey [ru],
Piotr Drąg [pl], Pedro Albuquerque [pt], Daniel Mustieles [es],
Chao-Hsiung Liao [zh_TW], Muhammet Kara [tr], Fran Dieguez [gl],
Hannie Dumoleyn [nl], Yosef Or Boczko [he], Tom Tryfonidis [el],
A S Alam [pa], Balázs Úr [hu], Alexandre Franke [fr], Frédéric Péters [fr]
3.17.90
=======
* Avoid caret/focus viewport changes during pointer movement [Rui; #752138]
* Match GTK+'s modal dialogs for system modal dialogs [Carlos; #746108]
* Refine message list style [Florian; #749958]
* Fix type-ahead behavior for backspace and compose key [Rui; #753319, #753320]
* Refine the system status menu [Florian; #751377]
* Misc. bug fixes and cleanups [Bastien, Ray, Florian, Jakub; #752779, #752739,
#741366, #651503, #753064, #753181, #752881]
Contributors:
Rui Matos, Florian Müllner, Bastien Nocera, Carlos Soriano, Jakub Steiner,
Ray Strode, Rico Tzschichholz
Translations:
Marek Černocký [cs], Kjartan Maraas [nb], Jordi Mas [ca], Muhammet Kara [tr],
Enrico Nicoletto [pt_BR]
3.17.4
======
* Fix fuzziness of app menu icon [Jakub; #747932]
* Implement 4 finger swipe gesture for touchpads [Carlos; #752250]
* Misc. bug fixes [Florian, Alexandre, Piotr, Ray, Mario; #751921, #659969,
#752438, #752675]
Contributors:
Piotr Drąg, Alexandre Franke, Carlos Garnacho, Florian Müllner,
Mario Sanchez Prada, Jakub Steiner, Jasper St. Pierre, Ray Strode
Translations:
Benjamin Steinwender [de], Pedro Albuquerque [pt], Fabio Tomat [fur],
Matej Urbančič [sl], Daniel Mustieles [es], Yosef Or Boczko [he],
Daniel Martinez [an]
3.17.3 3.17.3
====== ======
* Handle touch events in OSK on wayland [Rui; #750287] * Handle touch events in OSK on wayland [Rui; #750287]

View File

@@ -3,10 +3,7 @@ mozillalibdir = $(BROWSER_PLUGIN_DIR)
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
# Browsers can unload and reload the module while browsing, which is not supported by GObject. libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined
# We pass -Wl,-z,nodelete to the linker to ensure the module is never unloaded.
# https://bugzilla.gnome.org/show_bug.cgi?id=737932
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,-z,nodelete
libgnome_shell_browser_plugin_la_LIBADD = \ libgnome_shell_browser_plugin_la_LIBADD = \
$(BROWSER_PLUGIN_LIBS) $(BROWSER_PLUGIN_LIBS)

View File

@@ -43,6 +43,10 @@
#define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation" #define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation"
typedef struct {
GDBusProxy *proxy;
} PluginData;
static NPNetscapeFuncs funcs; static NPNetscapeFuncs funcs;
static inline gchar * static inline gchar *
@@ -141,6 +145,121 @@ check_origin_and_protocol (NPP instance)
return ret; return ret;
} }
/* =============== public entry points =================== */
NPError
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
{
/* global initialization routine, called once when plugin
is loaded */
g_debug ("plugin loaded");
memcpy (&funcs, pfuncs, sizeof (funcs));
plugin->size = sizeof(NPPluginFuncs);
plugin->newp = NPP_New;
plugin->destroy = NPP_Destroy;
plugin->getvalue = NPP_GetValue;
plugin->setwindow = NPP_SetWindow;
return NPERR_NO_ERROR;
}
NPError
NP_Shutdown(void)
{
return NPERR_NO_ERROR;
}
const char*
NP_GetMIMEDescription(void)
{
return PLUGIN_MIME_STRING;
}
NPError
NP_GetValue(void *instance,
NPPVariable variable,
void *value)
{
switch (variable) {
case NPPVpluginNameString:
*(char**)value = PLUGIN_NAME;
break;
case NPPVpluginDescriptionString:
*(char**)value = PLUGIN_DESCRIPTION;
break;
default:
;
}
return NPERR_NO_ERROR;
}
NPError
NPP_New(NPMIMEType mimetype,
NPP instance,
uint16_t mode,
int16_t argc,
char **argn,
char **argv,
NPSavedData *saved)
{
/* instance initialization function */
PluginData *data;
GError *error = NULL;
g_debug ("plugin created");
if (!check_origin_and_protocol (instance))
return NPERR_GENERIC_ERROR;
data = g_slice_new (PluginData);
instance->pdata = data;
data->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
NULL, /* interface info */
"org.gnome.Shell",
"/org/gnome/Shell",
"org.gnome.Shell.Extensions",
NULL, /* GCancellable */
&error);
if (!data->proxy)
{
/* ignore error if the shell is not running, otherwise warn */
if (error->domain != G_DBUS_ERROR ||
error->code != G_DBUS_ERROR_NAME_HAS_NO_OWNER)
{
g_warning ("Failed to set up Shell proxy: %s", error->message);
}
g_clear_error (&error);
return NPERR_GENERIC_ERROR;
}
g_debug ("plugin created successfully");
return NPERR_NO_ERROR;
}
NPError
NPP_Destroy(NPP instance,
NPSavedData **saved)
{
/* instance finalization function */
PluginData *data = instance->pdata;
g_debug ("plugin destroyed");
g_object_unref (data->proxy);
g_slice_free (PluginData, data);
return NPERR_NO_ERROR;
}
/* =================== scripting interface =================== */ /* =================== scripting interface =================== */
typedef struct { typedef struct {
@@ -163,14 +282,6 @@ on_shell_signal (GDBusProxy *proxy,
{ {
PluginObject *obj = user_data; PluginObject *obj = user_data;
/* FIXME: We have half a dozen bug reports in which this function crashes in
* WebKit due to a null NPObject. This should never happen, but since it is
* happening, let's turn the crash into a critical.
*
* https://bugzilla.gnome.org/show_bug.cgi?id=737932
*/
g_return_if_fail (obj->instance);
if (strcmp (signal_name, "ExtensionStatusChanged") == 0) if (strcmp (signal_name, "ExtensionStatusChanged") == 0)
{ {
gchar *uuid; gchar *uuid;
@@ -201,12 +312,6 @@ on_shell_appeared (GDBusConnection *connection,
{ {
PluginObject *obj = (PluginObject*) user_data; PluginObject *obj = (PluginObject*) user_data;
/* FIXME: Not sure if this is ever hit or not, but let's play it safe.
*
* https://bugzilla.gnome.org/show_bug.cgi?id=737932
*/
g_return_if_fail (obj->instance);
if (obj->restart_listener) if (obj->restart_listener)
{ {
NPVariant result = { NPVariantType_Void }; NPVariant result = { NPVariantType_Void };
@@ -225,10 +330,24 @@ static NPObject *
plugin_object_allocate (NPP instance, plugin_object_allocate (NPP instance,
NPClass *klass) NPClass *klass)
{ {
PluginObject *obj = (PluginObject *) funcs.memalloc (sizeof (PluginObject)); PluginData *data = instance->pdata;
PluginObject *obj = g_slice_new0 (PluginObject);
memset (obj, 0, sizeof (PluginObject));
obj->instance = instance; obj->instance = instance;
obj->proxy = g_object_ref (data->proxy);
obj->settings = g_settings_new (SHELL_SCHEMA);
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
G_CALLBACK (on_shell_signal), obj);
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
"org.gnome.Shell",
G_BUS_NAME_WATCHER_FLAGS_NONE,
on_shell_appeared,
NULL,
obj,
NULL);
g_debug ("plugin object created");
return (NPObject*)obj; return (NPObject*)obj;
} }
@@ -236,7 +355,20 @@ plugin_object_allocate (NPP instance,
static void static void
plugin_object_deallocate (NPObject *npobj) plugin_object_deallocate (NPObject *npobj)
{ {
funcs.memfree (npobj); PluginObject *obj = (PluginObject*)npobj;
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
g_object_unref (obj->proxy);
if (obj->listener)
funcs.releaseobject (obj->listener);
if (obj->watch_name_id)
g_bus_unwatch_name (obj->watch_name_id);
g_debug ("plugin object destroyed");
g_slice_free (PluginObject, obj);
} }
static inline gboolean static inline gboolean
@@ -887,149 +1019,6 @@ init_methods_and_properties (void)
onextension_changed_id = funcs.getstringidentifier ("onchange"); onextension_changed_id = funcs.getstringidentifier ("onchange");
} }
/* =============== public entry points =================== */
NPError
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
{
/* global initialization routine, called once when plugin
is loaded */
g_debug ("plugin loaded");
memcpy (&funcs, pfuncs, sizeof (funcs));
plugin->size = sizeof(NPPluginFuncs);
plugin->newp = NPP_New;
plugin->destroy = NPP_Destroy;
plugin->getvalue = NPP_GetValue;
plugin->setwindow = NPP_SetWindow;
plugin->event = NPP_HandleEvent;
return NPERR_NO_ERROR;
}
NPError
NP_Shutdown(void)
{
return NPERR_NO_ERROR;
}
const char*
NP_GetMIMEDescription(void)
{
return PLUGIN_MIME_STRING;
}
NPError
NP_GetValue(void *instance,
NPPVariable variable,
void *value)
{
switch (variable) {
case NPPVpluginNameString:
*(char**)value = PLUGIN_NAME;
break;
case NPPVpluginDescriptionString:
*(char**)value = PLUGIN_DESCRIPTION;
break;
default:
;
}
return NPERR_NO_ERROR;
}
NPError
NPP_New(NPMIMEType mimetype,
NPP instance,
uint16_t mode,
int16_t argc,
char **argn,
char **argv,
NPSavedData *saved)
{
/* instance initialization function */
PluginObject *obj;
GError *error = NULL;
g_debug ("plugin created");
if (!check_origin_and_protocol (instance))
return NPERR_GENERIC_ERROR;
/* set windowless mode */
funcs.setvalue(instance, NPPVpluginWindowBool, NULL);
g_debug ("creating scriptable object");
init_methods_and_properties ();
obj = (PluginObject *) funcs.createobject (instance, &plugin_class);
instance->pdata = obj;
obj->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
NULL, /* interface info */
"org.gnome.Shell",
"/org/gnome/Shell",
"org.gnome.Shell.Extensions",
NULL, /* GCancellable */
&error);
if (!obj->proxy)
{
/* ignore error if the shell is not running, otherwise warn */
if (!g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_NAME_HAS_NO_OWNER))
{
g_warning ("Failed to set up Shell proxy: %s", error->message);
}
g_clear_error (&error);
return NPERR_GENERIC_ERROR;
}
obj->settings = g_settings_new (SHELL_SCHEMA);
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
G_CALLBACK (on_shell_signal), obj);
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
"org.gnome.Shell",
G_BUS_NAME_WATCHER_FLAGS_NONE,
on_shell_appeared,
NULL,
obj,
NULL);
g_debug ("plugin created successfully");
return NPERR_NO_ERROR;
}
NPError
NPP_Destroy(NPP instance,
NPSavedData **saved)
{
/* instance finalization function */
PluginObject *obj = (PluginObject *) instance->pdata;
if (!obj)
return NPERR_INVALID_INSTANCE_ERROR;
g_debug ("plugin destroyed");
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
g_object_unref (obj->proxy);
if (obj->listener)
funcs.releaseobject (obj->listener);
if (obj->restart_listener)
funcs.releaseobject (obj->restart_listener);
if (obj->watch_name_id)
g_bus_unwatch_name (obj->watch_name_id);
funcs.releaseobject((NPObject *)obj);
return NPERR_NO_ERROR;
}
NPError NPError
NPP_GetValue(NPP instance, NPP_GetValue(NPP instance,
NPPVariable variable, NPPVariable variable,
@@ -1040,10 +1029,13 @@ NPP_GetValue(NPP instance,
switch (variable) { switch (variable) {
case NPPVpluginScriptableNPObject: case NPPVpluginScriptableNPObject:
g_debug ("creating scriptable object"); g_debug ("creating scriptable object");
if (!instance->pdata) init_methods_and_properties ();
return NPERR_INVALID_INSTANCE_ERROR;
*(NPObject**)value = instance->pdata; *(NPObject**)value = funcs.createobject (instance, &plugin_class);
break;
case NPPVpluginNeedsXEmbed:
*(bool *)value = TRUE;
break; break;
default: default:
@@ -1061,11 +1053,3 @@ NPP_SetWindow(NPP instance,
{ {
return NPERR_NO_ERROR; return NPERR_NO_ERROR;
} }
int16_t
NPP_HandleEvent(NPP instance,
void *event)
{
/* Ignore the event */
return FALSE;
}

View File

@@ -1,6 +1,5 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.18.5],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) AC_INIT([gnome-shell],[3.17.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AX_IS_RELEASE([git-directory])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c]) AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -75,13 +74,13 @@ AS_IF([test x$enable_systemd != xno], [
AC_MSG_RESULT($enable_systemd) AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.21.5 CLUTTER_MIN_VERSION=1.21.5
GOBJECT_INTROSPECTION_MIN_VERSION=1.45.4 GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0 GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.18.1 MUTTER_MIN_VERSION=3.17.3
GTK_MIN_VERSION=3.15.0 GTK_MIN_VERSION=3.15.0
GIO_MIN_VERSION=2.45.3 GIO_MIN_VERSION=2.45.3
LIBECAL_MIN_VERSION=3.5.3 LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.17.2 LIBEDATASERVER_MIN_VERSION=3.13.90
TELEPATHY_GLIB_MIN_VERSION=0.17.5 TELEPATHY_GLIB_MIN_VERSION=0.17.5
POLKIT_MIN_VERSION=0.100 POLKIT_MIN_VERSION=0.100
STARTUP_NOTIFICATION_MIN_VERSION=0.11 STARTUP_NOTIFICATION_MIN_VERSION=0.11
@@ -221,7 +220,7 @@ if test "$enable_man" != no; then
fi fi
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no) AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
AX_COMPILER_FLAGS() GNOME_COMPILE_WARNINGS([error])
case "$WARN_CFLAGS" in case "$WARN_CFLAGS" in
*-Werror*) *-Werror*)
WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations" WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
@@ -270,7 +269,7 @@ Build configuration:
Prefix: ${prefix} Prefix: ${prefix}
Source code location: ${srcdir} Source code location: ${srcdir}
Compiler: ${CC} Compiler: ${CC}
Compiler Warnings: $ax_enable_compile_warnings Compiler Warnings: $enable_compile_warnings
Support for NetworkManager: $have_networkmanager Support for NetworkManager: $have_networkmanager
Support for GStreamer recording: $build_recorder Support for GStreamer recording: $build_recorder

View File

@@ -51,7 +51,6 @@
</key> </key>
<key name="looking-glass-history" type="as"> <key name="looking-glass-history" type="as">
<default>[]</default> <default>[]</default>
<!-- Translators: looking glass is a debugger and inspector tool, see https://live.gnome.org/GnomeShell/LookingGlass -->
<_summary>History for the looking glass dialog</_summary> <_summary>History for the looking glass dialog</_summary>
</key> </key>
<key name="always-show-log-out" type="b"> <key name="always-show-log-out" type="b">

View File

@@ -37,9 +37,10 @@ stage {
icon-shadow: 0 1px black; } icon-shadow: 0 1px black; }
.button:focus { .button:focus {
color: #eeeeec; color: #eeeeec;
border-color: #215d9c;
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black; text-shadow: 0 1px black;
icon-shadow: 0 1px black; icon-shadow: 0 1px black; }
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.button:insensitive { .button:insensitive {
color: #7f7f7f; color: #7f7f7f;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
@@ -51,46 +52,9 @@ stage {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: inset 0 0 black;
text-shadow: none;
icon-shadow: none; }
.modal-dialog-linked-button {
border-right-width: 1px;
color: #eeeeec;
background-color: #2e3436;
border-color: rgba(0, 0, 0, 0.7);
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
padding: 12px; }
.modal-dialog-linked-button:insensitive {
color: #7f7f7f;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(62, 67, 68, 0.7);
box-shadow: none; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.modal-dialog-linked-button:active {
color: white;
border-color: rgba(0, 0, 0, 0.7);
background-color: #222728;
box-shadow: inset 0 0 black;
text-shadow: none;
icon-shadow: none; }
.modal-dialog-linked-button:focus {
color: #eeeeec;
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.modal-dialog-linked-button:first-child {
border-radius: 0px 0px 0px 6px; }
.modal-dialog-linked-button:last-child {
border-right-width: 0px;
border-radius: 0px 0px 6px 0px; }
.modal-dialog-linked-button:first-child:last-child {
border-right-width: 0px;
border-radius: 0px 0px 6px 6px; }
/* Entries */ /* Entries */
StEntry { StEntry {
@@ -196,11 +160,10 @@ StScrollBar {
background-color: white; } background-color: white; }
.modal-dialog { .modal-dialog {
border-radius: 9px; border-radius: 5px;
color: #eeeeec; color: #eeeeec;
background-color: rgba(23, 25, 26, 0.95); background-color: rgba(23, 25, 26, 0.95);
border: 3px solid rgba(238, 238, 236, 0.5); } border: 3px solid rgba(238, 238, 236, 0.5);
.modal-dialog .modal-dialog-content-box {
padding: 24px; } padding: 24px; }
.modal-dialog .run-dialog-entry { .modal-dialog .run-dialog-entry {
width: 20em; width: 20em;
@@ -216,6 +179,10 @@ StScrollBar {
color: #d6d6d1; color: #d6d6d1;
padding-bottom: .4em; } padding-bottom: .4em; }
.button-dialog-button-box {
spacing: 18px;
padding-top: 48px; }
.show-processes-dialog-subject, .show-processes-dialog-subject,
.mount-question-dialog-subject, .mount-question-dialog-subject,
.end-session-dialog-subject { .end-session-dialog-subject {
@@ -408,9 +375,9 @@ StScrollBar {
spacing-rows: 15px; spacing-rows: 15px;
spacing-columns: 1em; } spacing-columns: 1em; }
/* Popovers/Menus */ /* Popvers/Menus */
.popup-menu { .popup-menu {
min-width: 15em; } min-width: 200px; }
.popup-menu .popup-sub-menu { .popup-menu .popup-sub-menu {
background-color: black; background-color: black;
box-shadow: inset 0 -1px 0px #0d0d0d; } box-shadow: inset 0 -1px 0px #0d0d0d; }
@@ -444,7 +411,7 @@ StScrollBar {
.popup-menu-ornament { .popup-menu-ornament {
text-align: right; text-align: right;
width: 1.2em; } width: 1em; }
.popup-menu-boxpointer, .popup-menu-boxpointer,
.candidate-popup-boxpointer { .candidate-popup-boxpointer {
@@ -752,7 +719,7 @@ StScrollBar {
/* Message list */ /* Message list */
.message-list { .message-list {
width: 31.5em; } width: 420px; }
.message-list-sections { .message-list-sections {
spacing: 1.5em; } spacing: 1.5em; }
@@ -787,12 +754,7 @@ StScrollBar {
padding: 8px 8px 8px 0px; } padding: 8px 8px 8px 0px; }
.message-icon-bin > StIcon { .message-icon-bin > StIcon {
icon-size: 32px; } icon-size: 48px; }
.message-secondary-bin:ltr {
padding-left: 8px; }
.message-secondary-bin:rtl {
padding-right: 8px; }
.message-secondary-bin { .message-secondary-bin {
color: #999999; } color: #999999; }
@@ -801,20 +763,14 @@ StScrollBar {
icon-size: 16px; } icon-size: 16px; }
.message-title { .message-title {
font-weight: bold; font-weight: bold; }
font-size: 1.1em; }
.message-content { .message-content {
padding: 8px; padding: 8px; }
font-size: .9em; }
.system-switch-user-submenu-icon.user-icon { .system-switch-user-submenu-icon {
icon-size: 20px; icon-size: 24px;
padding: 0 2px; } border: 1px solid rgba(255, 255, 255, 0.4); }
.system-switch-user-submenu-icon.default-icon {
icon-size: 16px;
padding: 0 4px; }
#appMenu { #appMenu {
spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg"); spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
@@ -823,7 +779,7 @@ StScrollBar {
color: transparent; } color: transparent; }
.aggregate-menu { .aggregate-menu {
min-width: 21em; } width: 360px; }
.aggregate-menu .popup-menu-icon { .aggregate-menu .popup-menu-icon {
padding: 0 4px; } padding: 0 4px; }
@@ -878,8 +834,7 @@ StScrollBar {
min-width: 470px; } min-width: 470px; }
.nm-dialog-content { .nm-dialog-content {
spacing: 20px; spacing: 20px; }
padding: 24px; }
.nm-dialog-header-hbox { .nm-dialog-header-hbox {
spacing: 10px; } spacing: 10px; }
@@ -1061,7 +1016,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.app-view-control:first-child { .app-view-control:first-child {
@@ -1380,9 +1335,10 @@ StScrollBar {
color: white; } color: white; }
.keyboard-key:focus { .keyboard-key:focus {
color: #eeeeec; color: #eeeeec;
border-color: #215d9c;
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black; text-shadow: 0 1px black;
icon-shadow: 0 1px black; icon-shadow: 0 1px black; }
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.keyboard-key:hover, .keyboard-key:checked { .keyboard-key:hover, .keyboard-key:checked {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
@@ -1394,7 +1350,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.keyboard-key:grayed { .keyboard-key:grayed {
@@ -1487,7 +1443,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #1c5187; background-color: #1c5187;
box-shadow: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.login-dialog .modal-dialog-button:default:insensitive { .login-dialog .modal-dialog-button:default:insensitive {

View File

@@ -37,9 +37,10 @@ stage {
icon-shadow: 0 1px black; } icon-shadow: 0 1px black; }
.button:focus { .button:focus {
color: #eeeeec; color: #eeeeec;
border-color: #215d9c;
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black; text-shadow: 0 1px black;
icon-shadow: 0 1px black; icon-shadow: 0 1px black; }
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.button:insensitive { .button:insensitive {
color: #939695; color: #939695;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
@@ -51,46 +52,9 @@ stage {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: inset 0 0 black;
text-shadow: none;
icon-shadow: none; }
.modal-dialog-linked-button {
border-right-width: 1px;
color: #eeeeec;
background-color: #2e3436;
border-color: rgba(0, 0, 0, 0.7);
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
padding: 12px; }
.modal-dialog-linked-button:insensitive {
color: #939695;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(66, 71, 73, 0.7);
box-shadow: none; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.modal-dialog-linked-button:active {
color: white;
border-color: rgba(0, 0, 0, 0.7);
background-color: #222728;
box-shadow: inset 0 0 black;
text-shadow: none;
icon-shadow: none; }
.modal-dialog-linked-button:focus {
color: #eeeeec;
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.modal-dialog-linked-button:first-child {
border-radius: 0px 0px 0px 6px; }
.modal-dialog-linked-button:last-child {
border-right-width: 0px;
border-radius: 0px 0px 6px 0px; }
.modal-dialog-linked-button:first-child:last-child {
border-right-width: 0px;
border-radius: 0px 0px 6px 6px; }
/* Entries */ /* Entries */
StEntry { StEntry {
@@ -196,11 +160,10 @@ StScrollBar {
background-color: white; } background-color: white; }
.modal-dialog { .modal-dialog {
border-radius: 9px; border-radius: 5px;
color: #eeeeec; color: #eeeeec;
background-color: rgba(23, 25, 26, 0.95); background-color: rgba(23, 25, 26, 0.95);
border: 3px solid rgba(238, 238, 236, 0.5); } border: 3px solid rgba(238, 238, 236, 0.5);
.modal-dialog .modal-dialog-content-box {
padding: 24px; } padding: 24px; }
.modal-dialog .run-dialog-entry { .modal-dialog .run-dialog-entry {
width: 20em; width: 20em;
@@ -216,6 +179,10 @@ StScrollBar {
color: #d6d6d1; color: #d6d6d1;
padding-bottom: .4em; } padding-bottom: .4em; }
.button-dialog-button-box {
spacing: 18px;
padding-top: 48px; }
.show-processes-dialog-subject, .show-processes-dialog-subject,
.mount-question-dialog-subject, .mount-question-dialog-subject,
.end-session-dialog-subject { .end-session-dialog-subject {
@@ -408,9 +375,9 @@ StScrollBar {
spacing-rows: 15px; spacing-rows: 15px;
spacing-columns: 1em; } spacing-columns: 1em; }
/* Popovers/Menus */ /* Popvers/Menus */
.popup-menu { .popup-menu {
min-width: 15em; } min-width: 200px; }
.popup-menu .popup-sub-menu { .popup-menu .popup-sub-menu {
background-color: #343a3a; background-color: #343a3a;
box-shadow: inset 0 -1px 0px #282c2c; } box-shadow: inset 0 -1px 0px #282c2c; }
@@ -444,7 +411,7 @@ StScrollBar {
.popup-menu-ornament { .popup-menu-ornament {
text-align: right; text-align: right;
width: 1.2em; } width: 1em; }
.popup-menu-boxpointer, .popup-menu-boxpointer,
.candidate-popup-boxpointer { .candidate-popup-boxpointer {
@@ -752,7 +719,7 @@ StScrollBar {
/* Message list */ /* Message list */
.message-list { .message-list {
width: 31.5em; } width: 420px; }
.message-list-sections { .message-list-sections {
spacing: 1.5em; } spacing: 1.5em; }
@@ -787,12 +754,7 @@ StScrollBar {
padding: 8px 8px 8px 0px; } padding: 8px 8px 8px 0px; }
.message-icon-bin > StIcon { .message-icon-bin > StIcon {
icon-size: 32px; } icon-size: 48px; }
.message-secondary-bin:ltr {
padding-left: 8px; }
.message-secondary-bin:rtl {
padding-right: 8px; }
.message-secondary-bin { .message-secondary-bin {
color: #8e8e80; } color: #8e8e80; }
@@ -801,20 +763,14 @@ StScrollBar {
icon-size: 16px; } icon-size: 16px; }
.message-title { .message-title {
font-weight: bold; font-weight: bold; }
font-size: 1.1em; }
.message-content { .message-content {
padding: 8px; padding: 8px; }
font-size: .9em; }
.system-switch-user-submenu-icon.user-icon { .system-switch-user-submenu-icon {
icon-size: 20px; icon-size: 24px;
padding: 0 2px; } border: 1px solid rgba(238, 238, 236, 0.4); }
.system-switch-user-submenu-icon.default-icon {
icon-size: 16px;
padding: 0 4px; }
#appMenu { #appMenu {
spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg"); spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
@@ -823,7 +779,7 @@ StScrollBar {
color: transparent; } color: transparent; }
.aggregate-menu { .aggregate-menu {
min-width: 21em; } width: 360px; }
.aggregate-menu .popup-menu-icon { .aggregate-menu .popup-menu-icon {
padding: 0 4px; } padding: 0 4px; }
@@ -878,8 +834,7 @@ StScrollBar {
min-width: 470px; } min-width: 470px; }
.nm-dialog-content { .nm-dialog-content {
spacing: 20px; spacing: 20px; }
padding: 24px; }
.nm-dialog-header-hbox { .nm-dialog-header-hbox {
spacing: 10px; } spacing: 10px; }
@@ -1061,7 +1016,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.app-view-control:first-child { .app-view-control:first-child {
@@ -1380,9 +1335,10 @@ StScrollBar {
color: white; } color: white; }
.keyboard-key:focus { .keyboard-key:focus {
color: #eeeeec; color: #eeeeec;
border-color: #215d9c;
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black; text-shadow: 0 1px black;
icon-shadow: 0 1px black; icon-shadow: 0 1px black; }
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.keyboard-key:hover, .keyboard-key:checked { .keyboard-key:hover, .keyboard-key:checked {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
@@ -1394,7 +1350,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.keyboard-key:grayed { .keyboard-key:grayed {
@@ -1487,7 +1443,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #1c5187; background-color: #1c5187;
box-shadow: inset 0 0 black; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.login-dialog .modal-dialog-button:default:insensitive { .login-dialog .modal-dialog-button:default:insensitive {

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -14,7 +14,7 @@ const ShellEntry = imports.ui.shellEntry;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const UserWidget = imports.ui.userWidget; const UserWidget = imports.ui.userWidget;
const DEFAULT_BUTTON_WELL_ICON_SIZE = 16; const DEFAULT_BUTTON_WELL_ICON_SIZE = 24;
const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0; const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
const DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3; const DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3;
@@ -189,7 +189,6 @@ const AuthPrompt = new Lang.Class({
this._updateNextButtonSensitivity(this._entry.text.length > 0); this._updateNextButtonSensitivity(this._entry.text.length > 0);
})); }));
this._entry.clutter_text.connect('activate', Lang.bind(this, function() { this._entry.clutter_text.connect('activate', Lang.bind(this, function() {
if (this.nextButton.reactive)
this.emit('next'); this.emit('next');
})); }));
}, },
@@ -259,7 +258,6 @@ const AuthPrompt = new Lang.Class({
}, },
_onVerificationComplete: function() { _onVerificationComplete: function() {
this.setActorInDefaultButtonWell(null);
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED; this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
this.cancelButton.reactive = false; this.cancelButton.reactive = false;
}, },
@@ -283,12 +281,6 @@ const AuthPrompt = new Lang.Class({
if (oldActor) if (oldActor)
Tweener.removeTweens(oldActor); Tweener.removeTweens(oldActor);
let wasSpinner;
if (oldActor == this._spinner.actor)
wasSpinner = true;
else
wasSpinner = false;
let isSpinner; let isSpinner;
if (actor == this._spinner.actor) if (actor == this._spinner.actor)
isSpinner = true; isSpinner = true;
@@ -298,11 +290,6 @@ const AuthPrompt = new Lang.Class({
if (this._defaultButtonWellActor != actor && oldActor) { if (this._defaultButtonWellActor != actor && oldActor) {
if (!animate) { if (!animate) {
oldActor.opacity = 0; oldActor.opacity = 0;
if (wasSpinner) {
if (this._spinner)
this._spinner.stop();
}
} else { } else {
Tweener.addTween(oldActor, Tweener.addTween(oldActor,
{ opacity: 0, { opacity: 0,
@@ -311,7 +298,7 @@ const AuthPrompt = new Lang.Class({
transition: 'linear', transition: 'linear',
onCompleteScope: this, onCompleteScope: this,
onComplete: function() { onComplete: function() {
if (wasSpinner) { if (isSpinner) {
if (this._spinner) if (this._spinner)
this._spinner.stop(); this._spinner.stop();
} }
@@ -414,7 +401,7 @@ const AuthPrompt = new Lang.Class({
}, },
updateSensitivity: function(sensitive) { updateSensitivity: function(sensitive) {
this._updateNextButtonSensitivity(sensitive && this._entry.text.length > 0); this._updateNextButtonSensitivity(sensitive);
this._entry.reactive = sensitive; this._entry.reactive = sensitive;
this._entry.clutter_text.editable = sensitive; this._entry.clutter_text.editable = sensitive;
}, },
@@ -445,9 +432,8 @@ const AuthPrompt = new Lang.Class({
let oldStatus = this.verificationStatus; let oldStatus = this.verificationStatus;
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
this.cancelButton.reactive = true; this.cancelButton.reactive = true;
this.nextButton.label = _("Next");
if (this._userVerifier) if (oldStatus == AuthPromptStatus.VERIFYING)
this._userVerifier.cancel(); this._userVerifier.cancel();
this._queryingService = null; this._queryingService = null;
@@ -502,7 +488,6 @@ const AuthPrompt = new Lang.Class({
finish: function(onComplete) { finish: function(onComplete) {
if (!this._userVerifier.hasPendingMessages) { if (!this._userVerifier.hasPendingMessages) {
this._userVerifier.clear();
onComplete(); onComplete();
return; return;
} }
@@ -510,13 +495,12 @@ const AuthPrompt = new Lang.Class({
let signalId = this._userVerifier.connect('no-more-messages', let signalId = this._userVerifier.connect('no-more-messages',
Lang.bind(this, function() { Lang.bind(this, function() {
this._userVerifier.disconnect(signalId); this._userVerifier.disconnect(signalId);
this._userVerifier.clear();
onComplete(); onComplete();
})); }));
}, },
cancel: function() { cancel: function() {
if (this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) { if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
return; return;
} }
this.reset(); this.reset();

View File

@@ -16,34 +16,6 @@
* along with this program; if not, see <http://www.gnu.org/licenses/>. * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/ */
/*
* In order for transformation animations to look good, they need to be
* incremental and have some order to them (e.g., fade out hidden items,
* then shrink to close the void left over). Chaining animations in this way can
* be error-prone and wordy using just Tweener callbacks.
*
* The classes in this file help with this:
*
* - Task. encapsulates schedulable work to be run in a specific scope.
*
* - ConsecutiveBatch. runs a series of tasks in order and completes
* when the last in the series finishes.
*
* - ConcurrentBatch. runs a set of tasks at the same time and completes
* when the last to finish completes.
*
* - Hold. prevents a batch from completing the pending task until
* the hold is released.
*
* The tasks associated with a batch are specified in a list at batch
* construction time as either task objects or plain functions.
* Batches are task objects, themselves, so they can be nested.
*
* These classes aren't specific to GDM, but were found to be unintuitive and so
* are not used elsewhere. These APIs may ultimately get dropped entirely and
* replaced by something else.
*/
const Lang = imports.lang; const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;

View File

@@ -96,7 +96,7 @@ const UserListItem = new Lang.Class({
}, },
_onDestroy: function() { _onDestroy: function() {
this.user.disconnect(this._userChangedId); this._user.disconnect(this._userChangedId);
}, },
_onClicked: function() { _onClicked: function() {
@@ -212,10 +212,6 @@ const UserList = new Lang.Class({
return item; return item;
}, },
containsUser: function(user) {
return this._items[user.get_user_name()] != null;
},
addUser: function(user) { addUser: function(user) {
if (!user.is_loaded) if (!user.is_loaded)
return; return;
@@ -539,9 +535,6 @@ const LoginDialog = new Lang.Class({
let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2; let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
let centerY = dialogBox.y1 + (dialogBox.y2 - dialogBox.y1) / 2; let centerY = dialogBox.y1 + (dialogBox.y2 - dialogBox.y1) / 2;
natWidth = Math.min(natWidth, dialogBox.x2 - dialogBox.x1);
natHeight = Math.min(natHeight, dialogBox.y2 - dialogBox.y1);
actorBox.x1 = Math.floor(centerX - natWidth / 2); actorBox.x1 = Math.floor(centerX - natWidth / 2);
actorBox.y1 = Math.floor(centerY - natHeight / 2); actorBox.y1 = Math.floor(centerY - natHeight / 2);
actorBox.x2 = actorBox.x1 + natWidth; actorBox.x2 = actorBox.x1 + natWidth;
@@ -881,7 +874,7 @@ const LoginDialog = new Lang.Class({
}, },
_loginScreenSessionActivated: function() { _loginScreenSessionActivated: function() {
if (this.actor.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING) if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFICATION_SUCCEEDED)
return; return;
Tweener.addTween(this.actor, Tweener.addTween(this.actor,
@@ -898,7 +891,6 @@ const LoginDialog = new Lang.Class({
}, },
onUpdateScope: this, onUpdateScope: this,
onComplete: function() { onComplete: function() {
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
this._authPrompt.reset(); this._authPrompt.reset();
}, },
onCompleteScope: this }); onCompleteScope: this });
@@ -928,7 +920,11 @@ const LoginDialog = new Lang.Class({
}, },
onUpdateScope: this, onUpdateScope: this,
onComplete: function() { onComplete: function() {
let id = Mainloop.idle_add(Lang.bind(this, function() {
this._greeter.call_start_session_when_ready_sync(serviceName, true, null); this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
return GLib.SOURCE_REMOVE;
}));
GLib.Source.set_name_by_id(id, '[gnome-shell] this._greeter.call_start_session_when_ready_sync');
}, },
onCompleteScope: this }); onCompleteScope: this });
}, },
@@ -1130,10 +1126,6 @@ const LoginDialog = new Lang.Class({
this._userManager.disconnect(this._userRemovedId); this._userManager.disconnect(this._userRemovedId);
this._userRemovedId = 0; this._userRemovedId = 0;
} }
if (this._userChangedId) {
this._userManager.disconnect(this._userChangedId);
this._userChangedId = 0;
}
this._textureCache.disconnect(this._updateLogoTextureId); this._textureCache.disconnect(this._updateLogoTextureId);
Main.layoutManager.disconnect(this._startupCompleteId); Main.layoutManager.disconnect(this._startupCompleteId);
if (this._settings) { if (this._settings) {
@@ -1180,14 +1172,6 @@ const LoginDialog = new Lang.Class({
this._userList.removeUser(user); this._userList.removeUser(user);
})); }));
this._userChangedId = this._userManager.connect('user-changed',
Lang.bind(this, function(userManager, user) {
if (this._userList.containsUser(user) && user.locked)
this._userList.removeUser(user);
else if (!this._userList.containsUser(user) && !user.locked)
this._userList.addUser(user);
}));
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, },

View File

@@ -448,6 +448,8 @@ const AppSwitcher = new Lang.Class({
}); });
if (appIcon.cachedWindows.length > 0) if (appIcon.cachedWindows.length > 0)
this._addIcon(appIcon); this._addIcon(appIcon);
else if (workspace == null)
throw new Error('%s appears to be running, but doesn\'t have any windows'.format(appIcon.app.get_name()));
} }
this._curApp = -1; this._curApp = -1;
@@ -685,17 +687,15 @@ const WindowIcon = new Lang.Class({
this._icon.destroy_all_children(); this._icon.destroy_all_children();
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
switch (mode) { switch (mode) {
case AppIconMode.THUMBNAIL_ONLY: case AppIconMode.THUMBNAIL_ONLY:
size = WINDOW_PREVIEW_SIZE; size = WINDOW_PREVIEW_SIZE;
this._icon.add_actor(_createWindowClone(mutterWindow, size * scaleFactor)); this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
break; break;
case AppIconMode.BOTH: case AppIconMode.BOTH:
size = WINDOW_PREVIEW_SIZE; size = WINDOW_PREVIEW_SIZE;
this._icon.add_actor(_createWindowClone(mutterWindow, size * scaleFactor)); this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
if (this.app) if (this.app)
this._icon.add_actor(this._createAppIcon(this.app, this._icon.add_actor(this._createAppIcon(this.app,
@@ -707,7 +707,7 @@ const WindowIcon = new Lang.Class({
this._icon.add_actor(this._createAppIcon(this.app, size)); this._icon.add_actor(this._createAppIcon(this.app, size));
} }
this._icon.set_size(size * scaleFactor, size * scaleFactor); this._icon.set_size(size, size);
}, },
_createAppIcon: function(app, size) { _createAppIcon: function(app, size) {

View File

@@ -7,7 +7,7 @@ const St = imports.gi.St;
const Signals = imports.signals; const Signals = imports.signals;
const Atk = imports.gi.Atk; const Atk = imports.gi.Atk;
const ANIMATED_ICON_UPDATE_TIMEOUT = 16; const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const Animation = new Lang.Class({ const Animation = new Lang.Class({
Name: 'Animation', Name: 'Animation',
@@ -33,7 +33,7 @@ const Animation = new Lang.Class({
if (this._frame == 0) if (this._frame == 0)
this._showFrame(0); this._showFrame(0);
this._timeoutId = GLib.timeout_add(GLib.PRIORITY_LOW, this._speed, Lang.bind(this, this._update)); this._timeoutId = Mainloop.timeout_add(this._speed, Lang.bind(this, this._update));
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._update'); GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._update');
} }

View File

@@ -500,11 +500,6 @@ const AllView = new Lang.Class({
_loadApps: function() { _loadApps: function() {
let apps = Gio.AppInfo.get_all().filter(function(appInfo) { let apps = Gio.AppInfo.get_all().filter(function(appInfo) {
try {
let id = appInfo.get_id(); // catch invalid file encodings
} catch(e) {
return false;
}
return appInfo.should_show(); return appInfo.should_show();
}).map(function(app) { }).map(function(app) {
return app.get_id(); return app.get_id();
@@ -1066,7 +1061,7 @@ const AppSearchProvider = new Lang.Class({
getInitialResultSet: function(terms, callback, cancellable) { getInitialResultSet: function(terms, callback, cancellable) {
let query = terms.join(' '); let query = terms.join(' ');
let groups = Shell.AppSystem.search(query); let groups = Gio.DesktopAppInfo.search(query);
let usage = Shell.AppUsage.get_default(); let usage = Shell.AppUsage.get_default();
let results = []; let results = [];
groups.forEach(function(group) { groups.forEach(function(group) {
@@ -1295,10 +1290,7 @@ const FolderIcon = new Lang.Class({
if (!_listsIntersect(folderCategories, appCategories)) if (!_listsIntersect(folderCategories, appCategories))
return; return;
try { addAppId(appInfo.get_id());
addAppId(appInfo.get_id()); // catch invalid file encodings
} catch(e) {
}
}); });
this.actor.visible = this.view.getAllItems().length > 0; this.actor.visible = this.view.getAllItems().length > 0;

View File

@@ -144,7 +144,6 @@ const BackgroundCache = new Lang.Class({
this._pendingFileLoads = []; this._pendingFileLoads = [];
this._fileMonitors = {}; this._fileMonitors = {};
this._backgroundSources = {}; this._backgroundSources = {};
this._animations = {};
}, },
monitorFile: function(file) { monitorFile: function(file) {
@@ -163,13 +162,12 @@ const BackgroundCache = new Lang.Class({
getAnimation: function(params) { getAnimation: function(params) {
params = Params.parse(params, { file: null, params = Params.parse(params, { file: null,
settingsSchema: null,
onLoaded: null }); onLoaded: null });
if (this._animations[params.settingsSchema] && _fileEqual0(this._animationFile, params.file)) { if (_fileEqual0(this._animationFile, params.file)) {
if (params.onLoaded) { if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
params.onLoaded(this._animations[params.settingsSchema]); params.onLoaded(this._animation);
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
})); }));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
@@ -180,11 +178,12 @@ const BackgroundCache = new Lang.Class({
let animation = new Animation({ file: params.file }); let animation = new Animation({ file: params.file });
animation.load(Lang.bind(this, function() { animation.load(Lang.bind(this, function() {
this._animations[params.settingsSchema] = animation; this._animationFile = params.file;
this._animation = animation;
if (params.onLoaded) { if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
params.onLoaded(this._animations[params.settingsSchema]); params.onLoaded(this._animation);
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
})); }));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
@@ -404,7 +403,6 @@ const Background = new Lang.Class({
_loadAnimation: function(file) { _loadAnimation: function(file) {
this._cache.getAnimation({ file: file, this._cache.getAnimation({ file: file,
settingsSchema: this._settings.schema_id,
onLoaded: Lang.bind(this, function(animation) { onLoaded: Lang.bind(this, function(animation) {
this._animation = animation; this._animation = animation;

View File

@@ -24,8 +24,6 @@ const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
const SHOW_WEEKDATE_KEY = 'show-weekdate'; const SHOW_WEEKDATE_KEY = 'show-weekdate';
const ELLIPSIS_CHAR = '\u2026'; const ELLIPSIS_CHAR = '\u2026';
const MESSAGE_ICON_SIZE = 32;
const MESSAGE_ANIMATION_TIME = 0.1; const MESSAGE_ANIMATION_TIME = 0.1;
const DEFAULT_EXPAND_LINES = 6; const DEFAULT_EXPAND_LINES = 6;
@@ -978,6 +976,7 @@ const Message = new Lang.Class({
this._iconBin = new St.Bin({ style_class: 'message-icon-bin', this._iconBin = new St.Bin({ style_class: 'message-icon-bin',
y_expand: true, y_expand: true,
visible: false }); visible: false });
this._iconBin.set_y_align(Clutter.ActorAlign.START);
hbox.add_actor(this._iconBin); hbox.add_actor(this._iconBin);
let contentBox = new St.BoxLayout({ style_class: 'message-content', let contentBox = new St.BoxLayout({ style_class: 'message-content',
@@ -1230,7 +1229,7 @@ const NotificationMessage = new Lang.Class({
this._closed = true; this._closed = true;
this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED); this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED);
})); }));
this._destroyId = notification.connect('destroy', Lang.bind(this, notification.connect('destroy', Lang.bind(this,
function() { function() {
if (!this._closed) if (!this._closed)
this.close(); this.close();
@@ -1241,10 +1240,9 @@ const NotificationMessage = new Lang.Class({
_getIcon: function() { _getIcon: function() {
if (this.notification.gicon) if (this.notification.gicon)
return new St.Icon({ gicon: this.notification.gicon, return new St.Icon({ gicon: this.notification.gicon, icon_size: 48 });
icon_size: MESSAGE_ICON_SIZE });
else else
return this.notification.source.createIcon(MESSAGE_ICON_SIZE); return this.notification.source.createIcon(48);
}, },
_onUpdated: function(n, clear) { _onUpdated: function(n, clear) {
@@ -1262,10 +1260,6 @@ const NotificationMessage = new Lang.Class({
if (this._updatedId) if (this._updatedId)
this.notification.disconnect(this._updatedId); this.notification.disconnect(this._updatedId);
this._updatedId = 0; this._updatedId = 0;
if (this._destroyId)
this.notification.disconnect(this._destroyId);
this._destroyId = 0;
} }
}); });

View File

@@ -325,6 +325,9 @@ const AutorunNotification = new Lang.Class({
this._manager = manager; this._manager = manager;
this._mount = source.mount; this._mount = source.mount;
// set the notification to urgent, so that it expands out
this.setUrgency(MessageTray.Urgency.CRITICAL);
}, },
createBanner: function() { createBanner: function() {

View File

@@ -9,15 +9,9 @@ const Gio = imports.gi.Gio;
const GObject = imports.gi.GObject; const GObject = imports.gi.GObject;
const Gcr = imports.gi.Gcr; const Gcr = imports.gi.Gcr;
const Animation = imports.ui.animation;
const ModalDialog = imports.ui.modalDialog; const ModalDialog = imports.ui.modalDialog;
const ShellEntry = imports.ui.shellEntry; const ShellEntry = imports.ui.shellEntry;
const CheckBox = imports.ui.checkBox; const CheckBox = imports.ui.checkBox;
const Tweener = imports.ui.tweener;
const WORK_SPINNER_ICON_SIZE = 16;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
const KeyringDialog = new Lang.Class({ const KeyringDialog = new Lang.Class({
Name: 'KeyringDialog', Name: 'KeyringDialog',
@@ -64,47 +58,27 @@ const KeyringDialog = new Lang.Class({
{ y_fill: true, { y_fill: true,
y_align: St.Align.START }); y_align: St.Align.START });
this._workSpinner = null;
this._controlTable = null; this._controlTable = null;
this._cancelButton = this.addButton({ label: '', this._cancelButton = this.addButton({ label: '',
action: Lang.bind(this, this._onCancelButton), action: Lang.bind(this, this._onCancelButton),
key: Clutter.Escape }); key: Clutter.Escape },
{ expand: true, x_fill: false, x_align: St.Align.START });
this.placeSpinner({ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._continueButton = this.addButton({ label: '', this._continueButton = this.addButton({ label: '',
action: Lang.bind(this, this._onContinueButton), action: Lang.bind(this, this._onContinueButton),
default: true }); default: true },
{ expand: false, x_fill: false, x_align: St.Align.END });
this.prompt.bind_property('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE); this.prompt.bind_property('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE);
this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE); this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE);
}, },
_setWorking: function(working) {
if (!this._workSpinner)
return;
Tweener.removeTweens(this._workSpinner.actor);
if (working) {
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
delay: WORK_SPINNER_ANIMATION_DELAY,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
} else {
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
if (this._workSpinner)
this._workSpinner.stop();
}
});
}
},
_buildControlTable: function() { _buildControlTable: function() {
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL }); let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
let table = new St.Widget({ style_class: 'keyring-dialog-control-table', let table = new St.Widget({ style_class: 'keyring-dialog-control-table',
@@ -127,22 +101,15 @@ const KeyringDialog = new Lang.Class({
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true }); ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate)); this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate));
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
if (rtl) { if (rtl) {
layout.attach(this._workSpinner.actor, 0, row, 1, 1); layout.attach(this._passwordEntry, 0, row, 1, 1);
layout.attach(this._passwordEntry, 1, row, 1, 1); layout.attach(label, 1, row, 1, 1);
layout.attach(label, 2, row, 1, 1);
} else { } else {
layout.attach(label, 0, row, 1, 1); layout.attach(label, 0, row, 1, 1);
layout.attach(this._passwordEntry, 1, row, 1, 1); layout.attach(this._passwordEntry, 1, row, 1, 1);
layout.attach(this._workSpinner.actor, 2, row, 1, 1);
} }
row++; row++;
} else { } else {
this._workSpinner = null;
this._passwordEntry = null; this._passwordEntry = null;
} }
@@ -211,7 +178,7 @@ const KeyringDialog = new Lang.Class({
this._continueButton.can_focus = sensitive; this._continueButton.can_focus = sensitive;
this._continueButton.reactive = sensitive; this._continueButton.reactive = sensitive;
this._setWorking(!sensitive); this.setWorking(!sensitive);
}, },
_ensureOpen: function() { _ensureOpen: function() {

View File

@@ -13,19 +13,13 @@ const Mainloop = imports.mainloop;
const Polkit = imports.gi.Polkit; const Polkit = imports.gi.Polkit;
const PolkitAgent = imports.gi.PolkitAgent; const PolkitAgent = imports.gi.PolkitAgent;
const Animation = imports.ui.animation;
const Components = imports.ui.components; const Components = imports.ui.components;
const ModalDialog = imports.ui.modalDialog; const ModalDialog = imports.ui.modalDialog;
const ShellEntry = imports.ui.shellEntry; const ShellEntry = imports.ui.shellEntry;
const UserWidget = imports.ui.userWidget; const UserWidget = imports.ui.userWidget;
const Tweener = imports.ui.tweener;
const DIALOG_ICON_SIZE = 48; const DIALOG_ICON_SIZE = 48;
const WORK_SPINNER_ICON_SIZE = 16;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
const AuthenticationDialog = new Lang.Class({ const AuthenticationDialog = new Lang.Class({
Name: 'AuthenticationDialog', Name: 'AuthenticationDialog',
Extends: ModalDialog.ModalDialog, Extends: ModalDialog.ModalDialog,
@@ -142,13 +136,6 @@ const AuthenticationDialog = new Lang.Class({
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate)); this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
this._passwordBox.add(this._passwordEntry, this._passwordBox.add(this._passwordEntry,
{ expand: true }); { expand: true });
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._passwordBox.add(this._workSpinner.actor);
this.setInitialKeyFocus(this._passwordEntry); this.setInitialKeyFocus(this._passwordEntry);
this._passwordBox.hide(); this._passwordBox.hide();
@@ -178,10 +165,17 @@ const AuthenticationDialog = new Lang.Class({
this._cancelButton = this.addButton({ label: _("Cancel"), this._cancelButton = this.addButton({ label: _("Cancel"),
action: Lang.bind(this, this.cancel), action: Lang.bind(this, this.cancel),
key: Clutter.Escape }); key: Clutter.Escape },
{ expand: true, x_fill: false, x_align: St.Align.START });
this.placeSpinner({ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._okButton = this.addButton({ label: _("Authenticate"), this._okButton = this.addButton({ label: _("Authenticate"),
action: Lang.bind(this, this._onAuthenticateButtonPressed), action: Lang.bind(this, this._onAuthenticateButtonPressed),
default: true }); default: true },
{ expand: false, x_fill: false, x_align: St.Align.END });
this._doneEmitted = false; this._doneEmitted = false;
@@ -189,30 +183,6 @@ const AuthenticationDialog = new Lang.Class({
this._cookie = cookie; this._cookie = cookie;
}, },
_setWorking: function(working) {
Tweener.removeTweens(this._workSpinner.actor);
if (working) {
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
delay: WORK_SPINNER_ANIMATION_DELAY,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
} else {
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
if (this._workSpinner)
this._workSpinner.stop();
}
});
}
},
performAuthentication: function() { performAuthentication: function() {
this.destroySession(); this.destroySession();
this._session = new PolkitAgent.Session({ identity: this._identityToAuth, this._session = new PolkitAgent.Session({ identity: this._identityToAuth,
@@ -259,7 +229,7 @@ const AuthenticationDialog = new Lang.Class({
this._okButton.can_focus = sensitive; this._okButton.can_focus = sensitive;
this._okButton.reactive = sensitive; this._okButton.reactive = sensitive;
this._setWorking(!sensitive); this.setWorking(!sensitive);
}, },
_onEntryActivate: function() { _onEntryActivate: function() {

View File

@@ -303,8 +303,6 @@ const ChatSource = new Lang.Class({
}, },
_createPolicy: function() { _createPolicy: function() {
if (this._account.protocol_name == 'irc')
return new MessageTray.NotificationApplicationPolicy('org.gnome.Polari');
return new MessageTray.NotificationApplicationPolicy('empathy'); return new MessageTray.NotificationApplicationPolicy('empathy');
}, },
@@ -469,7 +467,6 @@ const ChatSource = new Lang.Class({
destroy: function(reason) { destroy: function(reason) {
if (this._client.is_handling_channel(this._channel)) { if (this._client.is_handling_channel(this._channel)) {
this._ackMessages();
// The chat box has been destroyed so it can't // The chat box has been destroyed so it can't
// handle the channel any more. // handle the channel any more.
this._channel.close_async(function(channel, result) { this._channel.close_async(function(channel, result) {

View File

@@ -644,14 +644,15 @@ const Dash = new Lang.Class({
let firstIcon = firstButton._delegate.icon; let firstIcon = firstButton._delegate.icon;
let minHeight, natHeight; let minHeight, natHeight;
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
// Enforce the current icon size during the size request // Enforce the current icon size during the size request
firstIcon.icon.ensure_style(); firstIcon.setIconSize(this.iconSize);
let [currentWidth, currentHeight] = firstIcon.icon.get_size();
firstIcon.icon.set_size(this.iconSize * scaleFactor, this.iconSize * scaleFactor);
[minHeight, natHeight] = firstButton.get_preferred_height(-1); [minHeight, natHeight] = firstButton.get_preferred_height(-1);
firstIcon.icon.set_size(currentWidth, currentHeight);
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
let iconSizes = baseIconSizes.map(function(s) {
return s * scaleFactor;
});
// Subtract icon padding and box spacing from the available height // Subtract icon padding and box spacing from the available height
availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) + availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
@@ -659,10 +660,6 @@ const Dash = new Lang.Class({
let availSize = availHeight / iconChildren.length; let availSize = availHeight / iconChildren.length;
let iconSizes = baseIconSizes.map(function(s) {
return s * scaleFactor;
});
let newIconSize = baseIconSizes[0]; let newIconSize = baseIconSizes[0];
for (let i = 0; i < iconSizes.length; i++) { for (let i = 0; i < iconSizes.length; i++) {
if (iconSizes[i] < availSize) if (iconSizes[i] < availSize)

View File

@@ -24,6 +24,9 @@ const KEYBOARD_TYPE = 'keyboard-type';
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications'; const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
const SHOW_KEYBOARD = 'screen-keyboard-enabled'; const SHOW_KEYBOARD = 'screen-keyboard-enabled';
const CURSOR_BUS_NAME = 'org.gnome.SettingsDaemon.Cursor';
const CURSOR_OBJECT_PATH = '/org/gnome/SettingsDaemon/Cursor';
const CARIBOU_BUS_NAME = 'org.gnome.Caribou.Daemon'; const CARIBOU_BUS_NAME = 'org.gnome.Caribou.Daemon';
const CARIBOU_OBJECT_PATH = '/org/gnome/Caribou/Daemon'; const CARIBOU_OBJECT_PATH = '/org/gnome/Caribou/Daemon';
@@ -204,6 +207,9 @@ const Keyboard = new Lang.Class({
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync)); this._keyboardSettings.connect('changed', Lang.bind(this, this._sync));
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA }); this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._sync)); this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._sync));
this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0,
Lang.bind(this, this._sync),
Lang.bind(this, this._sync));
this._daemonProxy = null; this._daemonProxy = null;
this._lastDeviceId = null; this._lastDeviceId = null;

View File

@@ -4,7 +4,6 @@ const Atspi = imports.gi.Atspi;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const GDesktopEnums = imports.gi.GDesktopEnums; const GDesktopEnums = imports.gi.GDesktopEnums;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
const Lang = imports.lang; const Lang = imports.lang;
@@ -23,8 +22,6 @@ const MOUSE_POLL_FREQUENCY = 50;
const CROSSHAIRS_CLIP_SIZE = [100, 100]; const CROSSHAIRS_CLIP_SIZE = [100, 100];
const NO_CHANGE = 0.0; const NO_CHANGE = 0.0;
const POINTER_REST_TIME = 1000; // milliseconds
// Settings // Settings
const APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications'; const APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
const SHOW_KEY = 'screen-magnifier-enabled'; const SHOW_KEY = 'screen-magnifier-enabled';
@@ -712,9 +709,6 @@ const ZoomRegion = new Lang.Class({
this._xCaret = 0; this._xCaret = 0;
this._yCaret = 0; this._yCaret = 0;
this._pointerIdleMonitor = Meta.IdleMonitor.get_for_device(Meta.VIRTUAL_CORE_POINTER_ID);
this._scrollContentsTimerId = 0;
Main.layoutManager.connect('monitors-changed', Main.layoutManager.connect('monitors-changed',
Lang.bind(this, this._monitorsChanged)); Lang.bind(this, this._monitorsChanged));
this._focusCaretTracker.connect('caret-moved', this._focusCaretTracker.connect('caret-moved',
@@ -1074,26 +1068,6 @@ const ZoomRegion = new Lang.Class({
return this._isMouseOverRegion(); return this._isMouseOverRegion();
}, },
_clearScrollContentsTimer: function() {
if (this._scrollContentsTimerId != 0) {
Mainloop.source_remove(this._scrollContentsTimerId);
this._scrollContentsTimerId = 0;
}
},
_scrollContentsToDelayed: function(x, y) {
if (this._pointerIdleMonitor.get_idletime() >= POINTER_REST_TIME) {
this.scrollContentsTo(x, y);
return;
}
this._clearScrollContentsTimer();
this._scrollContentsTimerId = Mainloop.timeout_add(POINTER_REST_TIME, Lang.bind(this, function() {
this._scrollContentsToDelayed(x, y);
return GLib.SOURCE_REMOVE;
}));
},
/** /**
* scrollContentsTo: * scrollContentsTo:
* Shift the contents of the magnified view such it is centered on the given * Shift the contents of the magnified view such it is centered on the given
@@ -1102,8 +1076,6 @@ const ZoomRegion = new Lang.Class({
* @y: The y-coord of the point to center on. * @y: The y-coord of the point to center on.
*/ */
scrollContentsTo: function(x, y) { scrollContentsTo: function(x, y) {
this._clearScrollContentsTimer();
this._followingCursor = false; this._followingCursor = false;
this._changeROI({ xCenter: x, this._changeROI({ xCenter: x,
yCenter: y }); yCenter: y });
@@ -1409,7 +1381,7 @@ const ZoomRegion = new Lang.Class({
else if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.CENTERED) else if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.CENTERED)
[xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret); [xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret);
this._scrollContentsToDelayed(xCaret, yCaret); this.scrollContentsTo(xCaret, yCaret);
}, },
_centerFromFocusPosition: function() { _centerFromFocusPosition: function() {
@@ -1423,7 +1395,7 @@ const ZoomRegion = new Lang.Class({
else if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.CENTERED) else if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.CENTERED)
[xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus); [xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus);
this._scrollContentsToDelayed(xFocus, yFocus); this.scrollContentsTo(xFocus, yFocus);
}, },
_centerFromPointPush: function(xPoint, yPoint) { _centerFromPointPush: function(xPoint, yPoint) {

View File

@@ -14,6 +14,7 @@ const Atk = imports.gi.Atk;
const Params = imports.misc.params; const Params = imports.misc.params;
const Animation = imports.ui.animation;
const Layout = imports.ui.layout; const Layout = imports.ui.layout;
const Lightbox = imports.ui.lightbox; const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main; const Main = imports.ui.main;
@@ -22,6 +23,10 @@ const Tweener = imports.ui.tweener;
const OPEN_AND_CLOSE_TIME = 0.1; const OPEN_AND_CLOSE_TIME = 0.1;
const FADE_OUT_DIALOG_TIME = 1.0; const FADE_OUT_DIALOG_TIME = 1.0;
const WORK_SPINNER_ICON_SIZE = 24;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
const State = { const State = {
OPENED: 0, OPENED: 0,
CLOSED: 1, CLOSED: 1,
@@ -74,8 +79,6 @@ const ModalDialog = new Lang.Class({
this._group.add_actor(this._backgroundBin); this._group.add_actor(this._backgroundBin);
this.dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog', this.dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog',
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
vertical: true }); vertical: true });
// modal dialogs are fixed width and grow vertically; set the request // modal dialogs are fixed width and grow vertically; set the request
// mode accordingly so wrapped labels are handled correctly during // mode accordingly so wrapped labels are handled correctly during
@@ -97,8 +100,7 @@ const ModalDialog = new Lang.Class({
this.backgroundStack.add_actor(this.dialogLayout); this.backgroundStack.add_actor(this.dialogLayout);
this.contentLayout = new St.BoxLayout({ vertical: true, this.contentLayout = new St.BoxLayout({ vertical: true });
style_class: "modal-dialog-content-box" });
this.dialogLayout.add(this.contentLayout, this.dialogLayout.add(this.contentLayout,
{ expand: true, { expand: true,
x_fill: true, x_fill: true,
@@ -106,7 +108,8 @@ const ModalDialog = new Lang.Class({
x_align: St.Align.MIDDLE, x_align: St.Align.MIDDLE,
y_align: St.Align.START }); y_align: St.Align.START });
this.buttonLayout = new St.Widget ({ layout_manager: new Clutter.BoxLayout ({ homogeneous:true }) }); this.buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box',
vertical: false });
this.dialogLayout.add(this.buttonLayout, this.dialogLayout.add(this.buttonLayout,
{ x_align: St.Align.MIDDLE, { x_align: St.Align.MIDDLE,
y_align: St.Align.END }); y_align: St.Align.END });
@@ -115,6 +118,8 @@ const ModalDialog = new Lang.Class({
this._initialKeyFocus = this.dialogLayout; this._initialKeyFocus = this.dialogLayout;
this._initialKeyFocusDestroyId = 0; this._initialKeyFocusDestroyId = 0;
this._savedKeyFocus = null; this._savedKeyFocus = null;
this._workSpinner = null;
}, },
destroy: function() { destroy: function() {
@@ -142,12 +147,16 @@ const ModalDialog = new Lang.Class({
else else
x_alignment = St.Align.MIDDLE; x_alignment = St.Align.MIDDLE;
this.addButton(buttonInfo); this.addButton(buttonInfo, { expand: true,
x_fill: false,
y_fill: false,
x_align: x_alignment,
y_align: St.Align.MIDDLE });
} }
}, },
addButton: function(buttonInfo) { addButton: function(buttonInfo, layoutInfo) {
let label = buttonInfo['label'] let label = buttonInfo['label'];
let action = buttonInfo['action']; let action = buttonInfo['action'];
let key = buttonInfo['key']; let key = buttonInfo['key'];
let isDefault = buttonInfo['default']; let isDefault = buttonInfo['default'];
@@ -161,12 +170,10 @@ const ModalDialog = new Lang.Class({
else else
keys = []; keys = [];
let button = new St.Button({ style_class: 'modal-dialog-linked-button', let button = new St.Button({ style_class: 'modal-dialog-button button',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE, button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
reactive: true, reactive: true,
can_focus: true, can_focus: true,
x_expand: true,
y_expand: true,
label: label }); label: label });
button.connect('clicked', action); button.connect('clicked', action);
@@ -181,11 +188,47 @@ const ModalDialog = new Lang.Class({
for (let i in keys) for (let i in keys)
this._buttonKeys[keys[i]] = buttonInfo; this._buttonKeys[keys[i]] = buttonInfo;
this.buttonLayout.add_actor(button); this.buttonLayout.add(button, layoutInfo);
return button; return button;
}, },
placeSpinner: function(layoutInfo) {
let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show();
this.buttonLayout.add(this._workSpinner.actor, layoutInfo);
},
setWorking: function(working) {
if (!this._workSpinner)
return;
Tweener.removeTweens(this._workSpinner.actor);
if (working) {
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
delay: WORK_SPINNER_ANIMATION_DELAY,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
} else {
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
if (this._workSpinner)
this._workSpinner.stop();
}
});
}
},
_onKeyPressEvent: function(object, event) { _onKeyPressEvent: function(object, event) {
this._pressedKey = event.get_key_symbol(); this._pressedKey = event.get_key_symbol();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;

View File

@@ -107,6 +107,13 @@ const Overview = new Lang.Class({
this._overviewCreated = true; this._overviewCreated = true;
// The main Background actors are inside global.window_group which are
// hidden when displaying the overview, so we create a new
// one. Instances of this class share a single CoglTexture behind the
// scenes which allows us to show the background with different
// rendering options without duplicating the texture data.
let monitor = Main.layoutManager.primaryMonitor;
let layout = new Clutter.BinLayout(); let layout = new Clutter.BinLayout();
this._stack = new Clutter.Actor({ layout_manager: layout }); this._stack = new Clutter.Actor({ layout_manager: layout });
this._stack.add_constraint(new LayoutManager.MonitorConstraint({ primary: true })); this._stack.add_constraint(new LayoutManager.MonitorConstraint({ primary: true }));
@@ -121,11 +128,6 @@ const Overview = new Lang.Class({
y_expand: true }); y_expand: true });
this._overview._delegate = this; this._overview._delegate = this;
// The main Background actors are inside global.window_group which are
// hidden when displaying the overview, so we create a new
// one. Instances of this class share a single CoglTexture behind the
// scenes which allows us to show the background with different
// rendering options without duplicating the texture data.
this._backgroundGroup = new Meta.BackgroundGroup(); this._backgroundGroup = new Meta.BackgroundGroup();
Main.layoutManager.overviewGroup.add_child(this._backgroundGroup); Main.layoutManager.overviewGroup.add_child(this._backgroundGroup);
this._bgManagers = []; this._bgManagers = [];

View File

@@ -30,7 +30,7 @@ const APP_MENU_ICON_MARGIN = 0;
const BUTTON_DND_ACTIVATION_TIMEOUT = 250; const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
const SPINNER_ANIMATION_TIME = 1.0; const SPINNER_ANIMATION_TIME = 0.2;
// To make sure the panel corners blend nicely with the panel, // To make sure the panel corners blend nicely with the panel,
// we draw background and borders the same way, e.g. drawing // we draw background and borders the same way, e.g. drawing
@@ -95,7 +95,6 @@ const AppMenuButton = new Lang.Class({
this._startingApps = []; this._startingApps = [];
this._menuManager = panel.menuManager; this._menuManager = panel.menuManager;
this._gtkSettings = Gtk.Settings.get_default();
this._targetApp = null; this._targetApp = null;
this._appMenuNotifyId = 0; this._appMenuNotifyId = 0;
this._actionGroupNotifyId = 0; this._actionGroupNotifyId = 0;
@@ -124,14 +123,11 @@ const AppMenuButton = new Lang.Class({
this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM); this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM);
this._container.add_actor(this._arrow); this._container.add_actor(this._arrow);
this._visible = this._gtkSettings.gtk_shell_shows_app_menu && this._visible = !Main.overview.visible;
!Main.overview.visible;
if (!this._visible) if (!this._visible)
this.actor.hide(); this.actor.hide();
this._overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, this._sync)); this._overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, this._sync));
this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, this._sync)); this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, this._sync));
this._showsAppMenuId = this._gtkSettings.connect('notify::gtk-shell-shows-app-menu',
Lang.bind(this, this._sync));
this._stop = true; this._stop = true;
@@ -309,9 +305,7 @@ const AppMenuButton = new Lang.Class({
} }
} }
let visible = (this._targetApp != null && let visible = (this._targetApp != null && !Main.overview.visibleTarget);
this._gtkSettings.gtk_shell_shows_app_menu &&
!Main.overview.visibleTarget);
if (visible) if (visible)
this.show(); this.show();
else else
@@ -384,10 +378,6 @@ const AppMenuButton = new Lang.Class({
Main.overview.disconnect(this._overviewShowingId); Main.overview.disconnect(this._overviewShowingId);
this._overviewShowingId = 0; this._overviewShowingId = 0;
} }
if (this._showsAppMenuId > 0) {
this._gtkSettings.disconnect(this._showsAppMenuId);
this._showsAppMenuId = 0;
}
if (this._switchWorkspaceNotifyId > 0) { if (this._switchWorkspaceNotifyId > 0) {
global.window_manager.disconnect(this._switchWorkspaceNotifyId); global.window_manager.disconnect(this._switchWorkspaceNotifyId);
this._switchWorkspaceNotifyId = 0; this._switchWorkspaceNotifyId = 0;
@@ -459,7 +449,6 @@ const ActivitiesButton = new Lang.Class({
if (event.type() == Clutter.EventType.TOUCH_END || if (event.type() == Clutter.EventType.TOUCH_END ||
event.type() == Clutter.EventType.BUTTON_RELEASE) event.type() == Clutter.EventType.BUTTON_RELEASE)
if (Main.overview.shouldToggleByCornerOrButton())
Main.overview.toggle(); Main.overview.toggle();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
@@ -468,7 +457,6 @@ const ActivitiesButton = new Lang.Class({
_onKeyRelease: function(actor, event) { _onKeyRelease: function(actor, event) {
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) { if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) {
if (Main.overview.shouldToggleByCornerOrButton())
Main.overview.toggle(); Main.overview.toggle();
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
@@ -654,50 +642,14 @@ const PanelCorner = new Lang.Class({
} }
}); });
const AggregateLayout = new Lang.Class({
Name: 'AggregateLayout',
Extends: Clutter.BoxLayout,
_init: function(params) {
if (!params)
params = {};
params['orientation'] = Clutter.Orientation.VERTICAL;
this.parent(params);
this._sizeChildren = [];
},
addSizeChild: function(actor) {
this._sizeChildren.push(actor);
this.layout_changed();
},
vfunc_get_preferred_width: function(container, forHeight) {
let themeNode = container.get_theme_node();
let minWidth = themeNode.get_min_width();
let natWidth = minWidth;
for (let i = 0; i < this._sizeChildren.length; i++) {
let child = this._sizeChildren[i];
let [childMin, childNat] = child.get_preferred_width(forHeight);
minWidth = Math.max(minWidth, childMin);
natWidth = Math.max(minWidth, childNat);
}
return [minWidth, natWidth];
}
});
const AggregateMenu = new Lang.Class({ const AggregateMenu = new Lang.Class({
Name: 'AggregateMenu', Name: 'AggregateMenu',
Extends: PanelMenu.Button, Extends: PanelMenu.Button,
_init: function() { _init: function() {
this.parent(0.0, C_("System menu in the top bar", "System"), false); this.parent(0.0, _("Settings"), false);
this.menu.actor.add_style_class_name('aggregate-menu'); this.menu.actor.add_style_class_name('aggregate-menu');
let menuLayout = new AggregateLayout();
this.menu.box.set_layout_manager(menuLayout);
this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' }); this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
this.actor.add_child(this._indicators); this.actor.add_child(this._indicators);
@@ -745,12 +697,8 @@ const AggregateMenu = new Lang.Class({
this.menu.addMenuItem(this._location.menu); this.menu.addMenuItem(this._location.menu);
this.menu.addMenuItem(this._rfkill.menu); this.menu.addMenuItem(this._rfkill.menu);
this.menu.addMenuItem(this._power.menu); this.menu.addMenuItem(this._power.menu);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addMenuItem(this._system.menu); this.menu.addMenuItem(this._system.menu);
menuLayout.addSizeChild(this._location.menu.actor);
menuLayout.addSizeChild(this._rfkill.menu.actor);
menuLayout.addSizeChild(this._power.menu.actor);
menuLayout.addSizeChild(this._system.menu.actor);
}, },
}); });

View File

@@ -396,7 +396,6 @@ const PopupImageMenuItem = new Lang.Class({
this.actor.add_child(this.label); this.actor.add_child(this.label);
this._icon = new St.Icon({ style_class: 'popup-menu-icon' }); this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
this.actor.add_child(this._icon, { align: St.Align.END }); this.actor.add_child(this._icon, { align: St.Align.END });
this.actor.label_actor = this.label;
this.setIcon(iconName); this.setIcon(iconName);
}, },
@@ -1060,6 +1059,11 @@ const PopupSubMenuMenuItem = new Lang.Class({
let expander = new St.Bin({ style_class: 'popup-menu-item-expander' }); let expander = new St.Bin({ style_class: 'popup-menu-item-expander' });
this.actor.add(expander, { expand: true }); this.actor.add(expander, { expand: true });
this.status = new St.Label({ style_class: 'popup-status-menu-item',
y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
this.actor.add_child(this.status);
this._triangle = arrowIcon(St.Side.RIGHT); this._triangle = arrowIcon(St.Side.RIGHT);
this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 }); this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 });

View File

@@ -46,7 +46,7 @@ const Indicator = new Lang.Class({
// The Bluetooth menu only appears when Bluetooth is in use, // The Bluetooth menu only appears when Bluetooth is in use,
// so just statically build it with a "Turn Off" menu item. // so just statically build it with a "Turn Off" menu item.
this._item = new PopupMenu.PopupSubMenuMenuItem('', true); this._item = new PopupMenu.PopupSubMenuMenuItem(_("Bluetooth"), true);
this._item.icon.icon_name = 'bluetooth-active-symbolic'; this._item.icon.icon_name = 'bluetooth-active-symbolic';
this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() { this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
this._proxy.BluetoothAirplaneMode = true; this._proxy.BluetoothAirplaneMode = true;
@@ -101,9 +101,8 @@ const Indicator = new Lang.Class({
this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode; this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
if (nDevices > 0) if (nDevices > 0)
/* Translators: this is the number of connected bluetooth devices */ this._item.status.text = ngettext("%d Connected Device", "%d Connected Devices", nDevices).format(nDevices);
this._item.label.text = ngettext("%d Connected", "%d Connected", nDevices).format(nDevices);
else else
this._item.label.text = _("Not In Use"); this._item.status.text = _("Not Connected");
}, },
}); });

View File

@@ -62,13 +62,13 @@ const Indicator = new Lang.Class({
this._indicator = this._addIndicator(); this._indicator = this._addIndicator();
this._indicator.icon_name = 'find-location-symbolic'; this._indicator.icon_name = 'find-location-symbolic';
this._item = new PopupMenu.PopupSubMenuMenuItem('', true); this._item = new PopupMenu.PopupSubMenuMenuItem(_("Location"), true);
this._item.icon.icon_name = 'find-location-symbolic'; this._item.icon.icon_name = 'find-location-symbolic';
this._agent = Gio.DBusExportedObject.wrapJSObject(AgentIface, this); this._agent = Gio.DBusExportedObject.wrapJSObject(AgentIface, this);
this._agent.export(Gio.DBus.system, '/org/freedesktop/GeoClue2/Agent'); this._agent.export(Gio.DBus.system, '/org/freedesktop/GeoClue2/Agent');
this._item.label.text = _("Location Enabled"); this._item.status.text = _("Enabled");
this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction)); this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction));
this._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop'); this._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop');
@@ -173,11 +173,10 @@ const Indicator = new Lang.Class({
_updateMenuLabels: function() { _updateMenuLabels: function() {
if (this._settings.get_boolean(ENABLED)) { if (this._settings.get_boolean(ENABLED)) {
this._item.label.text = this._indicator.visible ? _("Location In Use") this._item.status.text = this._indicator.visible ? _("In Use") : _("Enabled");
: _("Location Enabled");
this._onOffAction.label.text = _("Disable"); this._onOffAction.label.text = _("Disable");
} else { } else {
this._item.label.text = _("Location Disabled"); this._item.status.text = _("Disabled");
this._onOffAction.label.text = _("Enable"); this._onOffAction.label.text = _("Enable");
} }
}, },

View File

@@ -257,8 +257,16 @@ const NMConnectionSection = new Lang.Class({
this._radioSection.actor.visible = (nItems > 1); this._radioSection.actor.visible = (nItems > 1);
this._labelSection.actor.visible = (nItems == 1); this._labelSection.actor.visible = (nItems == 1);
this.item.label.text = this._getStatus(); this.item.status.text = this._getStatus();
this.item.icon.icon_name = this._getMenuIcon(); this.item.icon.icon_name = this._getMenuIcon();
// desc can be undefined at cold-plug, before we called
// NMGtk.disambiguate_device_names() at least once
let desc = this._getDescription();
if (desc)
this.item.label.text = desc;
else
this.item.label.text = '';
}, },
_getMenuIcon: function() { _getMenuIcon: function() {
@@ -347,7 +355,6 @@ const NMConnectionDevice = new Lang.Class({
this.parent(client); this.parent(client);
this._device = device; this._device = device;
this._settings = settings; this._settings = settings;
this._description = '';
this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect)); this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect));
this._deactivateItem = this._radioSection.addAction(_("Turn Off"), Lang.bind(this, this.deactivateConnection)); this._deactivateItem = this._radioSection.addAction(_("Turn Off"), Lang.bind(this, this.deactivateConnection));
@@ -447,44 +454,38 @@ const NMConnectionDevice = new Lang.Class({
switch(this._device.state) { switch(this._device.state) {
case NetworkManager.DeviceState.DISCONNECTED: case NetworkManager.DeviceState.DISCONNECTED:
/* Translators: %s is a network identifier */ return _("Off");
return _("%s Off").format(this._getDescription());
case NetworkManager.DeviceState.ACTIVATED: case NetworkManager.DeviceState.ACTIVATED:
/* Translators: %s is a network identifier */ return _("Connected");
return _("%s Connected").format(this._getDescription());
case NetworkManager.DeviceState.UNMANAGED: case NetworkManager.DeviceState.UNMANAGED:
/* Translators: this is for network devices that are physically present but are not /* Translators: this is for network devices that are physically present but are not
under NetworkManager's control (and thus cannot be used in the menu); under NetworkManager's control (and thus cannot be used in the menu) */
%s is a network identifier */ return _("Unmanaged");
return _("%s Unmanaged").format(this._getDescription());
case NetworkManager.DeviceState.DEACTIVATING: case NetworkManager.DeviceState.DEACTIVATING:
/* Translators: %s is a network identifier */ return _("Disconnecting");
return _("%s Disconnecting").format(this._getDescription());
case NetworkManager.DeviceState.PREPARE: case NetworkManager.DeviceState.PREPARE:
case NetworkManager.DeviceState.CONFIG: case NetworkManager.DeviceState.CONFIG:
case NetworkManager.DeviceState.IP_CONFIG: case NetworkManager.DeviceState.IP_CONFIG:
case NetworkManager.DeviceState.IP_CHECK: case NetworkManager.DeviceState.IP_CHECK:
case NetworkManager.DeviceState.SECONDARIES: case NetworkManager.DeviceState.SECONDARIES:
/* Translators: %s is a network identifier */ return _("Connecting");
return _("%s Connecting").format(this._getDescription());
case NetworkManager.DeviceState.NEED_AUTH: case NetworkManager.DeviceState.NEED_AUTH:
/* Translators: this is for network connections that require some kind of key or password; %s is a network identifier */ /* Translators: this is for network connections that require some kind of key or password */
return _("%s Requires Authentication").format(this._getDescription()); return _("Authentication required");
case NetworkManager.DeviceState.UNAVAILABLE: case NetworkManager.DeviceState.UNAVAILABLE:
// This state is actually a compound of various states (generically unavailable, // This state is actually a compound of various states (generically unavailable,
// firmware missing), that are exposed by different properties (whose state may // firmware missing), that are exposed by different properties (whose state may
// or may not updated when we receive state-changed). // or may not updated when we receive state-changed).
if (this._device.firmware_missing) { if (this._device.firmware_missing) {
/* Translators: this is for devices that require some kind of firmware or kernel /* Translators: this is for devices that require some kind of firmware or kernel
module, which is missing; %s is a network identifier */ module, which is missing */
return _("Firmware Missing For %s").format(this._getDescription()); return _("Firmware missing");
} }
/* Translators: this is for a network device that cannot be activated (for example it /* Translators: this is for a network device that cannot be activated (for example it
is disabled by rfkill, or it has no coverage; %s is a network identifier */ is disabled by rfkill, or it has no coverage */
return _("%s Unavailable").format(this._getDescription()); return _("Unavailable");
case NetworkManager.DeviceState.FAILED: case NetworkManager.DeviceState.FAILED:
/* Translators: %s is a network identifier */ return _("Connection failed");
return _("%s Connection Failed").format(this._getDescription());
default: default:
log('Device state invalid, is %d'.format(this._device.state)); log('Device state invalid, is %d'.format(this._device.state));
return 'invalid'; return 'invalid';
@@ -584,12 +585,11 @@ const NMDeviceModem = new Lang.Class({
_getStatus: function() { _getStatus: function() {
if (!this._client.wwan_hardware_enabled) if (!this._client.wwan_hardware_enabled)
/* Translators: %s is a network identifier */ return _("Hardware Disabled");
return _("%s Hardware Disabled").format(this._getDescription());
else if (!this._client.wwan_enabled) else if (!this._client.wwan_enabled)
/* Translators: this is for a network device that cannot be activated /* Translators: this is for a network device that cannot be activated
because it's disabled by rfkill (airplane mode); %s is a network identifier */ because it's disabled by rfkill (airplane mode) */
return _("%s Disabled").format(this._getDescription()); return _("Disabled");
else if (this._device.state == NetworkManager.DeviceState.ACTIVATED && else if (this._device.state == NetworkManager.DeviceState.ACTIVATED &&
this._mobileDevice && this._mobileDevice.operator_name) this._mobileDevice && this._mobileDevice.operator_name)
return this._mobileDevice.operator_name; return this._mobileDevice.operator_name;
@@ -877,7 +877,7 @@ const NMWirelessDialog = new Lang.Class({
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg'); let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._noNetworksSpinner = new Animation.AnimatedIcon(file, 16, 16); this._noNetworksSpinner = new Animation.AnimatedIcon(file, 24, 24);
this._noNetworksBox.add_actor(this._noNetworksSpinner.actor); this._noNetworksBox.add_actor(this._noNetworksSpinner.actor);
this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label', this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label',
text: _("No Networks") })); text: _("No Networks") }));
@@ -917,7 +917,10 @@ const NMWirelessDialog = new Lang.Class({
key: Clutter.Escape }); key: Clutter.Escape });
this._connectButton = this.addButton({ action: Lang.bind(this, this._connect), this._connectButton = this.addButton({ action: Lang.bind(this, this._connect),
label: _("Connect"), label: _("Connect"),
key: Clutter.Return }); key: Clutter.Return },
{ expand: true,
x_fill: false,
x_align: St.Align.END });
}, },
_connect: function() { _connect: function() {
@@ -1279,8 +1282,9 @@ const NMDeviceWireless = new Lang.Class({
this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On"); this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On");
this._toggleItem.actor.visible = this._client.wireless_hardware_enabled; this._toggleItem.actor.visible = this._client.wireless_hardware_enabled;
this.item.status.text = this._getStatus();
this.item.icon.icon_name = this._getMenuIcon(); this.item.icon.icon_name = this._getMenuIcon();
this.item.label.text = this._getStatus(); this.item.label.text = this._description;
}, },
setDeviceDescription: function(desc) { setDeviceDescription: function(desc) {
@@ -1292,23 +1296,18 @@ const NMDeviceWireless = new Lang.Class({
let ap = this._device.active_access_point; let ap = this._device.active_access_point;
if (this._isHotSpotMaster()) if (this._isHotSpotMaster())
/* Translators: %s is a network identifier */ return _("Hotspot Active");
return _("%s Hotspot Active").format(this._description);
else if (this._device.state >= NetworkManager.DeviceState.PREPARE && else if (this._device.state >= NetworkManager.DeviceState.PREPARE &&
this._device.state < NetworkManager.DeviceState.ACTIVATED) this._device.state < NetworkManager.DeviceState.ACTIVATED)
/* Translators: %s is a network identifier */ return _("Connecting");
return _("%s Connecting").format(this._description);
else if (ap) else if (ap)
return ssidToLabel(ap.get_ssid()); return ssidToLabel(ap.get_ssid());
else if (!this._client.wireless_hardware_enabled) else if (!this._client.wireless_hardware_enabled)
/* Translators: %s is a network identifier */ return _("Hardware Disabled");
return _("%s Hardware Disabled").format(this._description);
else if (!this._client.wireless_enabled) else if (!this._client.wireless_enabled)
/* Translators: %s is a network identifier */ return _("Off");
return _("%s Off").format(this._description);
else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED) else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED)
/* Translators: %s is a network identifier */ return _("Not Connected");
return _("%s Not Connected").format(this._description);
else else
return ''; return '';
}, },
@@ -1510,7 +1509,7 @@ const NMVPNSection = new Lang.Class({
return item.getName(); return item.getName();
} }
return _("VPN Off"); return _("Off");
}, },
_getMenuIcon: function() { _getMenuIcon: function() {

View File

@@ -112,6 +112,12 @@ const Indicator = new Lang.Class({
this._item.icon.icon_name = icon; this._item.icon.icon_name = icon;
// The status label // The status label
this._item.label.text = this._getStatus(); this._item.status.text = this._getStatus();
// The sub-menu heading
if (this._proxy.Type == UPower.DeviceKind.UPS)
this._item.label.text = _("UPS");
else
this._item.label.text = _("Battery");
}, },
}); });

View File

@@ -85,8 +85,9 @@ const Indicator = new Lang.Class({
// The menu only appears when airplane mode is on, so just // The menu only appears when airplane mode is on, so just
// statically build it as if it was on, rather than dynamically // statically build it as if it was on, rather than dynamically
// changing the menu contents. // changing the menu contents.
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode On"), true); this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode"), true);
this._item.icon.icon_name = 'airplane-mode-symbolic'; this._item.icon.icon_name = 'airplane-mode-symbolic';
this._item.status.text = _("On");
this._offItem = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() { this._offItem = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
this._manager.airplaneMode = false; this._manager.airplaneMode = false;
})); }));

View File

@@ -251,14 +251,8 @@ const Indicator = new Lang.Class({
let file = Gio.File.new_for_path(iconFile); let file = Gio.File.new_for_path(iconFile);
let gicon = new Gio.FileIcon({ file: file }); let gicon = new Gio.FileIcon({ file: file });
this._switchUserSubMenu.icon.gicon = gicon; this._switchUserSubMenu.icon.gicon = gicon;
this._switchUserSubMenu.icon.add_style_class_name('user-icon');
this._switchUserSubMenu.icon.remove_style_class_name('default-icon');
} else { } else {
this._switchUserSubMenu.icon.icon_name = 'avatar-default-symbolic'; this._switchUserSubMenu.icon.icon_name = 'avatar-default-symbolic';
this._switchUserSubMenu.icon.add_style_class_name('default-icon');
this._switchUserSubMenu.icon.remove_style_class_name('user-icon');
} }
}, },
@@ -350,9 +344,6 @@ const Indicator = new Lang.Class({
this._switchUserSubMenu.menu.addMenuItem(item); this._switchUserSubMenu.menu.addMenuItem(item);
this._logoutItem = item; this._logoutItem = item;
this._switchUserSubMenu.menu.addSettingsAction(_("Account Settings"),
'gnome-user-accounts-panel.desktop');
this._user.connect('notify::is-loaded', Lang.bind(this, this._updateSwitchUserSubMenu)); this._user.connect('notify::is-loaded', Lang.bind(this, this._updateSwitchUserSubMenu));
this._user.connect('changed', Lang.bind(this, this._updateSwitchUserSubMenu)); this._user.connect('changed', Lang.bind(this, this._updateSwitchUserSubMenu));

View File

@@ -465,12 +465,6 @@ const ViewSelector = new Lang.Class({
}, },
_shouldTriggerSearch: function(symbol) { _shouldTriggerSearch: function(symbol) {
if (symbol == Clutter.Multi_key)
return true;
if (symbol == Clutter.BackSpace && this._searchActive)
return true;
let unicode = Clutter.keysym_to_unicode(symbol); let unicode = Clutter.keysym_to_unicode(symbol);
if (unicode == 0) if (unicode == 0)
return false; return false;
@@ -478,7 +472,7 @@ const ViewSelector = new Lang.Class({
if (getTermsForSearchString(String.fromCharCode(unicode)).length > 0) if (getTermsForSearchString(String.fromCharCode(unicode)).length > 0)
return true; return true;
return false; return symbol == Clutter.BackSpace && this._searchActive;
}, },
startSearch: function(event) { startSearch: function(event) {

View File

@@ -81,10 +81,12 @@ const DisplayChangeDialog = new Lang.Class({
*/ */
this._cancelButton = this.addButton({ label: _("Revert Settings"), this._cancelButton = this.addButton({ label: _("Revert Settings"),
action: Lang.bind(this, this._onFailure), action: Lang.bind(this, this._onFailure),
key: Clutter.Escape }); key: Clutter.Escape },
{ expand: true, x_fill: false, x_align: St.Align.START });
this._okButton = this.addButton({ label: _("Keep Changes"), this._okButton = this.addButton({ label: _("Keep Changes"),
action: Lang.bind(this, this._onSuccess), action: Lang.bind(this, this._onSuccess),
default: true }); default: true },
{ expand: false, x_fill: false, x_align: St.Align.END });
this._timeoutId = Mainloop.timeout_add(ONE_SECOND, Lang.bind(this, this._tick)); this._timeoutId = Mainloop.timeout_add(ONE_SECOND, Lang.bind(this, this._tick));
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._tick'); GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._tick');
@@ -478,12 +480,6 @@ const TilePreview = new Lang.Class({
const TouchpadWorkspaceSwitchAction = new Lang.Class({ const TouchpadWorkspaceSwitchAction = new Lang.Class({
Name: 'TouchpadWorkspaceSwitchAction', Name: 'TouchpadWorkspaceSwitchAction',
_init: function(actor) {
this._dx = 0;
this._dy = 0;
actor.connect('captured-event', Lang.bind(this, this._handleEvent));
},
_checkActivated: function() { _checkActivated: function() {
const MOTION_THRESHOLD = 50; const MOTION_THRESHOLD = 50;
let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW; let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
@@ -492,11 +488,11 @@ const TouchpadWorkspaceSwitchAction = new Lang.Class({
if ((allowedModes & Main.actionMode) == 0) if ((allowedModes & Main.actionMode) == 0)
return; return;
if (this._dy < -MOTION_THRESHOLD) if (this._dy < MOTION_THRESHOLD)
dir = Meta.MotionDirection.DOWN; dir = Meta.MotionDirection.DOWN;
else if (this._dy > MOTION_THRESHOLD) else if (this._dy > MOTION_THRESHOLD)
dir = Meta.MotionDirection.UP; dir = Meta.MotionDirection.UP;
else if (this._dx < -MOTION_THRESHOLD) else if (this._dx < MOTION_THRESHOLD)
dir = Meta.MotionDirection.RIGHT; dir = Meta.MotionDirection.RIGHT;
else if (this._dx > MOTION_THRESHOLD) else if (this._dx > MOTION_THRESHOLD)
dir = Meta.MotionDirection.LEFT; dir = Meta.MotionDirection.LEFT;
@@ -507,19 +503,21 @@ const TouchpadWorkspaceSwitchAction = new Lang.Class({
}, },
_handleEvent: function(actor, event) { _handleEvent: function(actor, event) {
if (event.type() != Clutter.EventType.TOUCHPAD_SWIPE) if (event.type() != Clutter.EventType.TOUCHPAD_SWIPE_BEGIN &&
event.type() != Clutter.EventType.TOUCHPAD_SWIPE_UPDATE &&
event.type() != Clutter.EventType.TOUCHPAD_SWIPE_END)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
if (event.get_gesture_swipe_finger_count() != 4) if (event.get_gesture_swipe_finger_count() != 4)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) { if (event.type() == Clutter.EventType.TOUCHPAD_SWIPE_UPDATE) {
let [dx, dy] = event.get_gesture_motion_delta(event); let [dx, dy] = event.get_gesture_motion_delta(event);
this._dx += dx; this._dx += dx;
this._dy += dy; this._dy += dy;
} else { } else {
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.END) if (event.type() == Clutter.EventType.TOUCHPAD_SWIPE_END)
this._checkActivated(); this._checkActivated();
this._dx = 0; this._dx = 0;
@@ -527,7 +525,13 @@ const TouchpadWorkspaceSwitchAction = new Lang.Class({
} }
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} },
_init: function(actor) {
this._dx = 0;
this._dy = 0;
actor.connect('captured-event', Lang.bind(this, this._handleEvent));
},
}); });
Signals.addSignalMethods(TouchpadWorkspaceSwitchAction.prototype); Signals.addSignalMethods(TouchpadWorkspaceSwitchAction.prototype);
@@ -677,7 +681,6 @@ const WindowManager = new Lang.Class({
this._minimizing = []; this._minimizing = [];
this._unminimizing = []; this._unminimizing = [];
this._mapping = []; this._mapping = [];
this._resizing = [];
this._destroying = []; this._destroying = [];
this._movingWindow = null; this._movingWindow = null;
@@ -693,7 +696,6 @@ const WindowManager = new Lang.Class({
this._minimizeWindowDone(shellwm, actor); this._minimizeWindowDone(shellwm, actor);
this._mapWindowDone(shellwm, actor); this._mapWindowDone(shellwm, actor);
this._destroyWindowDone(shellwm, actor); this._destroyWindowDone(shellwm, actor);
this._sizeChangeWindowDone(shellwm, actor);
})); }));
this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace)); this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
@@ -1220,118 +1222,7 @@ const WindowManager = new Lang.Class({
}, },
_sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) { _sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) {
let types = [Meta.WindowType.NORMAL];
if (!this._shouldAnimateActor(actor, types)) {
shellwm.completed_size_change(actor); shellwm.completed_size_change(actor);
return;
}
if (whichChange == Meta.SizeChange.FULLSCREEN)
this._fullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
else if (whichChange == Meta.SizeChange.UNFULLSCREEN)
this._unfullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
else
shellwm.completed_size_change(actor);
},
_fullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
actor.translation_x = oldFrameRect.x - monitor.x;
actor.translation_y = oldFrameRect.y - monitor.y;
this._fullscreenAnimation(shellwm, actor, oldFrameRect);
},
_unfullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
let targetRect = actor.meta_window.get_frame_rect();
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
actor.translation_x = -(targetRect.x - monitor.x);
actor.translation_y = -(targetRect.y - monitor.y);
this._fullscreenAnimation(shellwm, actor, oldFrameRect);
},
_fullscreenAnimation: function(shellwm, actor, oldFrameRect) {
this._resizing.push(actor);
// Position a clone of the window on top of the old position,
// while actor updates are frozen.
// Note that the MetaWindow has up to date sizing information for
// the new geometry already.
let targetRect = actor.meta_window.get_frame_rect();
let actorContent = Shell.util_get_content_for_window_actor(actor, oldFrameRect);
let actorClone = new St.Widget({ content: actorContent });
actorClone.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
actorClone.set_position(oldFrameRect.x, oldFrameRect.y);
actorClone.set_size(oldFrameRect.width, oldFrameRect.height);
Main.uiGroup.add_actor(actorClone);
actor.__fullscreenClone = actorClone;
let scaleX = targetRect.width / oldFrameRect.width;
let scaleY = targetRect.height / oldFrameRect.height;
// Now scale and fade out the clone
Tweener.addTween(actorClone,
{ x: targetRect.x,
y: targetRect.y,
scale_x: scaleX,
scale_y: scaleY,
opacity: 0,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad'
});
// Now set scale the actor to size it as the clone.
// Note that the caller of this function already set a translation
// on the actor.
actor.scale_x = 1 / scaleX;
actor.scale_y = 1 / scaleY;
// Scale it to its actual new size
Tweener.addTween(actor,
{ scale_x: 1.0,
scale_y: 1.0,
translation_x: 0,
translation_y: 0,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._sizeChangeWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._sizeChangeWindowOverwritten,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
// Now unfreeze actor updates, to get it to the new size.
// It's important that we don't wait until the animation is completed to
// do this, otherwise our scale will be applied to the old texture size.
shellwm.completed_size_change(actor);
},
_sizeChangeWindowDone: function(shellwm, actor) {
if (this._removeEffect(this._resizing, actor)) {
Tweener.removeTweens(actor);
actor.scale_x = 1.0;
actor.scale_y = 1.0;
actor.translation_x = 0;
actor.translation_y = 0;
let actorClone = actor.__fullscreenClone;
if (actorClone) {
actorClone.destroy();
delete actor.__fullscreenClone;
}
}
},
_sizeChangeWindowOverwritten: function(shellwm, actor) {
if (this._removeEffect(this._resizing, actor)) {
let actorClone = actor.__fullscreenClone;
if (actorClone) {
actorClone.destroy();
delete actor.__fullscreenClone;
}
}
}, },
_hasAttachedDialogs: function(window, ignoreWindow) { _hasAttachedDialogs: function(window, ignoreWindow) {

View File

@@ -74,7 +74,7 @@ const WindowMenu = new Lang.Class({
window.make_above(); window.make_above();
})); }));
if (window.is_above()) if (window.is_above())
item.setOrnament(PopupMenu.Ornament.CHECK); item.setOrnament(PopupMenu.Ornament.DOT);
if (window.get_maximized() == Meta.MaximizeFlags.BOTH || if (window.get_maximized() == Meta.MaximizeFlags.BOTH ||
type == Meta.WindowType.DOCK || type == Meta.WindowType.DOCK ||
type == Meta.WindowType.DESKTOP || type == Meta.WindowType.DESKTOP ||
@@ -93,7 +93,7 @@ const WindowMenu = new Lang.Class({
window.stick(); window.stick();
})); }));
if (isSticky) if (isSticky)
item.setOrnament(PopupMenu.Ornament.CHECK); item.setOrnament(PopupMenu.Ornament.DOT);
if (window.is_always_on_all_workspaces()) if (window.is_always_on_all_workspaces())
item.setSensitive(false); item.setSensitive(false);
@@ -214,7 +214,7 @@ const WindowMenuManager = new Lang.Class({
menu.close(); menu.close();
}); });
this._sourceActor.set_size(Math.max(1, rect.width), Math.max(1, rect.height)); this._sourceActor.set_size(rect.width, rect.height);
this._sourceActor.set_position(rect.x, rect.y); this._sourceActor.set_position(rect.x, rect.y);
this._sourceActor.show(); this._sourceActor.show();

281
po/an.po
View File

@@ -9,23 +9,24 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-07-23 08:08+0000\n" "POT-Creation-Date: 2015-03-17 12:39+0000\n"
"PO-Revision-Date: 2015-04-28 08:40+0200\n" "PO-Revision-Date: 2015-03-17 19:50+0100\n"
"Last-Translator: Daniel <entaltoaragon@gmail.com>\n" "Last-Translator: Daniel Martinez <entaltoaragon@gmail.com>\n"
"Language-Team: Aragonés <softaragones@googlegroups.com>\n" "Language-Team: Aragonés <softaragones@googlegroups.com>\n"
"Language: an\n" "Language: an\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.5.1.1\n" "X-Generator: Gtranslator 2.91.6\n"
"X-POOTLE-MTIME: 1430206804.000000\n"
#: ../data/50-gnome-shell-system.xml.in.h:1 #: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: ../data/50-gnome-shell-system.xml.in.h:2 #: ../data/50-gnome-shell-system.xml.in.h:2
#| msgid "%d new notification"
#| msgid_plural "%d new notifications"
msgid "Show the notification list" msgid "Show the notification list"
msgstr "Amostrar a lista de notificacions" msgstr "Amostrar a lista de notificacions"
@@ -135,18 +136,17 @@ msgstr "Indiz de l'anvista seleccionada actual en o selector d'aplicacion."
msgid "History for command (Alt-F2) dialog" msgid "History for command (Alt-F2) dialog"
msgstr "Historico d'o dialogo de comandos (Alt+F2)" msgstr "Historico d'o dialogo de comandos (Alt+F2)"
#. Translators: looking glass is a debugger and inspector tool, see https://live.gnome.org/GnomeShell/LookingGlass #: ../data/org.gnome.shell.gschema.xml.in.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "History for the looking glass dialog" msgid "History for the looking glass dialog"
msgstr "Historico d'o dialogo de \"looking glass\"" msgstr "Historico d'o dialogo de \"looking glass\""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14 #: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menu item in the user menu." msgid "Always show the 'Log out' menu item in the user menu."
msgstr "" msgstr ""
"Amostrar siempre l'elemento de menú \"Trancar sesión\" en o menú de " "Amostrar siempre l'elemento de menú \"Trancar sesión\" en o menú de "
"l'usuario." "l'usuario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15 #: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "" msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-" "This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations." "user, single-session situations."
@@ -154,14 +154,14 @@ msgstr ""
"Ista clau sobrescribe a ocultación automatica de l'elemento de menú " "Ista clau sobrescribe a ocultación automatica de l'elemento de menú "
"\"Trancar sesión\" en situacions d'un solo usuario u d'una sola sesión." "\"Trancar sesión\" en situacions d'un solo usuario u d'una sola sesión."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16 #: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "" msgid ""
"Whether to remember password for mounting encrypted or remote filesystems" "Whether to remember password for mounting encrypted or remote filesystems"
msgstr "" msgstr ""
"Indica si se debe recordar a clau ta amontar sistemas de fichers remotos u " "Indica si se debe recordar a clau ta amontar sistemas de fichers remotos u "
"zifraus" "zifraus"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17 #: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "" msgid ""
"The shell will request a password when an encrypted device or a remote " "The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a " "filesystem is mounted. If the password can be saved for future use a "
@@ -173,79 +173,81 @@ msgstr ""
"s'amostrará a caixeta \"Remerar clau\". Ista clau estableix a valor " "s'amostrará a caixeta \"Remerar clau\". Ista clau estableix a valor "
"predeterminada d'a caixeta." "predeterminada d'a caixeta."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18 #: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Show the week date in the calendar" msgid "Show the week date in the calendar"
msgstr "Amostrar a calendata d'a semana en o calendario" msgstr "Amostrar a calendata d'a semana en o calendario"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19 #: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "If true, display the ISO week date in the calendar." msgid "If true, display the ISO week date in the calendar."
msgstr "Si ye cierta, amuestra a calendata de semana ISO en o calandario." msgstr "Si ye cierta, amuestra a calendata de semana ISO en o calandario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20 #: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the application menu" msgid "Keybinding to open the application menu"
msgstr "Asociación de teclas ta ubrir o menú de l'aplicación" msgstr "Asociación de teclas ta ubrir o menú de l'aplicación"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21 #: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "Keybinding to open the application menu." msgid "Keybinding to open the application menu."
msgstr "Asociación de teclas ta ubrir o menú de l'aplicación." msgstr "Asociación de teclas ta ubrir o menú de l'aplicación."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22 #: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the \"Show Applications\" view" msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Asociación de teclas ta la vista \"Amostrar aplicacions\"" msgstr "Asociación de teclas ta la vista \"Amostrar aplicacions\""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23 #: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "" msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview." "Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr "" msgstr ""
"Asociación de teclas ta ubrir la vista \"Amostrar aplicacions\" de la vista " "Asociación de teclas ta ubrir la vista \"Amostrar aplicacions\" de la vista "
"d'actividatz." "d'actividatz."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24 #: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to open the overview" msgid "Keybinding to open the overview"
msgstr "Asociación de teclas ta l'anvista cheneral" msgstr "Asociación de teclas ta l'anvista cheneral"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to open the Activities Overview." msgid "Keybinding to open the Activities Overview."
msgstr "Asociación de teclas ta ubrir l'anvista d'actividatz" msgstr "Asociación de teclas ta ubrir l'anvista d'actividatz"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26 #: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#| msgid "Keybinding to toggle the visibility of the message tray"
msgid "Keybinding to toggle the visibility of the notification list" msgid "Keybinding to toggle the visibility of the notification list"
msgstr "" msgstr ""
"Asociación de teclas ta cambiar a visibilidat d'a lista de notificacions" "Asociación de teclas ta cambiar a visibilidat d'a lista de notificacions"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27 #: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#| msgid "Keybinding to toggle the visibility of the message tray."
msgid "Keybinding to toggle the visibility of the notification list." msgid "Keybinding to toggle the visibility of the notification list."
msgstr "" msgstr ""
"Asociación de teclas ta cambiar a visibilidat d'a lista de notificacions." "Asociación de teclas ta cambiar a visibilidat d'a lista de notificacions."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28 #: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Keybinding to focus the active notification" msgid "Keybinding to focus the active notification"
msgstr "Asociación de teclas ta dar o foco a la notificación activa" msgstr "Asociación de teclas ta dar o foco a la notificación activa"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29 #: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "Keybinding to focus the active notification." msgid "Keybinding to focus the active notification."
msgstr "Asociación de teclas ta dar o foco a la notificación activa." msgstr "Asociación de teclas ta dar o foco a la notificación activa."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30 #: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "" msgid ""
"Keybinding that pauses and resumes all running tweens, for debugging purposes" "Keybinding that pauses and resumes all running tweens, for debugging purposes"
msgstr "" msgstr ""
"Asociación de teclas que pausan y continan todas as execucions de «tweens», " "Asociación de teclas que pausan y continan todas as execucions de «tweens», "
"ta propositos de depuraci'on" "ta propositos de depuraci'on"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31 #: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Which keyboard to use" msgid "Which keyboard to use"
msgstr "Que teclau usar" msgstr "Que teclau usar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32 #: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "The type of keyboard to use." msgid "The type of keyboard to use."
msgstr "O tipo de teclau que usar." msgstr "O tipo de teclau que usar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33 #: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid "Limit switcher to current workspace." msgid "Limit switcher to current workspace."
msgstr "Selector de limite ta l'aria de treballo actual." msgstr "Selector de limite ta l'aria de treballo actual."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34 #: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "" msgid ""
"If true, only applications that have windows on the current workspace are " "If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included." "shown in the switcher. Otherwise, all applications are included."
@@ -254,21 +256,21 @@ msgstr ""
"finestras en l'aria de treballo actual. D'atra man, s'incluirán todas as " "finestras en l'aria de treballo actual. D'atra man, s'incluirán todas as "
"aplicacions." "aplicacions."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35 #: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "The application icon mode." msgid "The application icon mode."
msgstr "O modo d'icono de l'aplicación." msgstr "O modo d'icono de l'aplicación."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36 #: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "" msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities " "Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only' " "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"(shows only the application icon) or 'both'." "only' (shows only the application icon) or 'both'."
msgstr "" msgstr ""
"Configura cómo s'amuestran as finestras en o selector. Os valore posibles " "Configura cómo s'amuestran as finestras en o selector. Os valore posibles "
"son \"thumbnail-only\" (amuestra una miniatura d'a finestra), \"app-icon-" "son \"thumbnail-only\" (amuestra una miniatura d'a finestra), \"app-icon-only"
"only\" (solament amuestra l'icono de l'aplicación) u \"both\"." "\" (solament amuestra l'icono de l'aplicación) u \"both\"."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37 #: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "" msgid ""
"If true, only windows from the current workspace are shown in the switcher. " "If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included." "Otherwise, all windows are included."
@@ -276,31 +278,31 @@ msgstr ""
"Si en ye verdadero, nomás s'amostrarán en o selector finestras de l'aria de " "Si en ye verdadero, nomás s'amostrarán en o selector finestras de l'aria de "
"treballo actual. D'atra man, s'incluirán todas as finestras." "treballo actual. D'atra man, s'incluirán todas as finestras."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38 #: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Attach modal dialog to the parent window" msgid "Attach modal dialog to the parent window"
msgstr "Acoplar un dialogo modal a la finestra pai" msgstr "Acoplar un dialogo modal a la finestra pai"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39 #: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "" msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell." "This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "" msgstr ""
"Ista clau sobrescribe a clau en org.gnome.mutter en executar GNOME Shell." "Ista clau sobrescribe a clau en org.gnome.mutter en executar GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40 #: ../data/org.gnome.shell.gschema.xml.in.in.h:39
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "" msgstr ""
"Activar o mosaico en os bordes en arrocegar finestras a os bordes d'a " "Activar o mosaico en os bordes en arrocegar finestras a os bordes d'a "
"finestra" "finestra"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41 #: ../data/org.gnome.shell.gschema.xml.in.in.h:40
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
msgstr "As arias de treballo se chestionan dinámicamente" msgstr "As arias de treballo se chestionan dinámicamente"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42 #: ../data/org.gnome.shell.gschema.xml.in.in.h:41
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "Arias de treballo solament en a pantalla prencipal" msgstr "Arias de treballo solament en a pantalla prencipal"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43 #: ../data/org.gnome.shell.gschema.xml.in.in.h:42
msgid "Delay focus changes in mouse mode until the pointer stops moving" msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "" msgstr ""
"Retardo en cambiar o foco d'o churi dica que o puntero deixa de mover-se" "Retardo en cambiar o foco d'o churi dica que o puntero deixa de mover-se"
@@ -309,12 +311,12 @@ msgstr ""
msgid "Network Login" msgid "Network Login"
msgstr "Encetar sesión en o rete" msgstr "Encetar sesión en o rete"
#: ../js/extensionPrefs/main.js:122 #: ../js/extensionPrefs/main.js:123
#, javascript-format #, javascript-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "I habió una error en lanzar o diálogo de preferencias ta %s:" msgstr "I habió una error en lanzar o diálogo de preferencias ta %s:"
#: ../js/extensionPrefs/main.js:154 #: ../js/extensionPrefs/main.js:155
msgid "GNOME Shell Extensions" msgid "GNOME Shell Extensions"
msgstr "Extensions de GNOME Shell" msgstr "Extensions de GNOME Shell"
@@ -325,39 +327,39 @@ msgstr "Extensions de GNOME Shell"
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215 #: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:217
msgid "Next" msgid "Next"
msgstr "Siguient" msgstr "Siguient"
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403 #: ../js/gdm/authPrompt.js:213 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59 #: ../js/ui/unlockDialog.js:59
msgid "Unlock" msgid "Unlock"
msgstr "Desbloquiar" msgstr "Desbloquiar"
#: ../js/gdm/authPrompt.js:213 #: ../js/gdm/authPrompt.js:215
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Encetar sesión" msgstr "Encetar sesión"
#: ../js/gdm/loginDialog.js:281 #: ../js/gdm/loginDialog.js:280
msgid "Choose Session" msgid "Choose Session"
msgstr "Esleyir a sesión" msgstr "Esleyir a sesión"
#: ../js/gdm/loginDialog.js:431 #: ../js/gdm/loginDialog.js:420
msgid "Not listed?" msgid "Not listed?"
msgstr "No ye en a lista?" msgstr "No ye en a lista?"
#: ../js/gdm/loginDialog.js:847 #: ../js/gdm/loginDialog.js:829
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(eix., usuario u %s)" msgstr "(eix., usuario u %s)"
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271 #: ../js/gdm/loginDialog.js:834 ../js/ui/components/networkAgent.js:271
#: ../js/ui/components/networkAgent.js:289 #: ../js/ui/components/networkAgent.js:289
msgid "Username: " msgid "Username: "
msgstr "Nombre d'usuario:" msgstr "Nombre d'usuario:"
#: ../js/gdm/loginDialog.js:1180 #: ../js/gdm/loginDialog.js:1169
msgid "Login Window" msgid "Login Window"
msgstr "Finestra d'inicio de sesión" msgstr "Finestra d'inicio de sesión"
@@ -450,31 +452,31 @@ msgstr "%d de %B de %Y, %l%M %"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Rendrecera ta autentiación web" msgstr "Rendrecera ta autentiación web"
#: ../js/ui/appDisplay.js:789 #: ../js/ui/appDisplay.js:792
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "As aplicaciones usadas freqüentment amaneixerán aquí" msgstr "As aplicaciones usadas freqüentment amaneixerán aquí"
#: ../js/ui/appDisplay.js:909 #: ../js/ui/appDisplay.js:912
msgid "Frequent" msgid "Frequent"
msgstr "Freqüent" msgstr "Freqüent"
#: ../js/ui/appDisplay.js:916 #: ../js/ui/appDisplay.js:919
msgid "All" msgid "All"
msgstr "Todas" msgstr "Todas"
#: ../js/ui/appDisplay.js:1845 #: ../js/ui/appDisplay.js:1850
msgid "New Window" msgid "New Window"
msgstr "Finestra nueva" msgstr "Finestra nueva"
#: ../js/ui/appDisplay.js:1873 ../js/ui/dash.js:289 #: ../js/ui/appDisplay.js:1878 ../js/ui/dash.js:291
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Sacar d'os favoritos" msgstr "Sacar d'os favoritos"
#: ../js/ui/appDisplay.js:1879 #: ../js/ui/appDisplay.js:1884
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Anyadir a os favoritos" msgstr "Anyadir a os favoritos"
#: ../js/ui/appDisplay.js:1889 #: ../js/ui/appDisplay.js:1894
msgid "Show Details" msgid "Show Details"
msgstr "Amostrar detalles" msgstr "Amostrar detalles"
@@ -488,19 +490,15 @@ msgstr "S'ha anyadiu %s a os suyos favoritos."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "S'ha sacau %s d'os suyos favoritos" msgstr "S'ha sacau %s d'os suyos favoritos"
#: ../js/ui/backgroundMenu.js:19 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:650
msgid "Change Background…" #: ../js/ui/status/system.js:337
msgstr "Cambiar o fondo…"
#: ../js/ui/backgroundMenu.js:21
msgid "Display Settings"
msgstr "Preferencias de pantalla"
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
#: ../js/ui/status/system.js:357
msgid "Settings" msgid "Settings"
msgstr "Configuración" msgstr "Configuración"
#: ../js/ui/backgroundMenu.js:21
msgid "Change Background…"
msgstr "Cambiar o fondo…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */ #. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:53 #: ../js/ui/calendar.js:53
msgctxt "calendar-no-work" msgctxt "calendar-no-work"
@@ -553,53 +551,54 @@ msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
#: ../js/ui/calendar.js:564 #: ../js/ui/calendar.js:563
msgid "Previous month" msgid "Previous month"
msgstr "Mes anterior" msgstr "Mes anterior"
#: ../js/ui/calendar.js:574 #: ../js/ui/calendar.js:573
msgid "Next month" msgid "Next month"
msgstr "Mes siguient" msgstr "Mes siguient"
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:780
msgid "Week %V" msgid "Week %V"
msgstr "Semana %V" msgstr "Semana %V"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. */ #. */
#: ../js/ui/calendar.js:1187 #: ../js/ui/calendar.js:1182
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Tot o diya" msgstr "Tot o diya"
#: ../js/ui/calendar.js:1289 #: ../js/ui/calendar.js:1288
msgid "Clear section" msgid "Clear section"
msgstr "Limpiar a sección" msgstr "Limpiar a sección"
#: ../js/ui/calendar.js:1516 #: ../js/ui/calendar.js:1515
msgid "Events" msgid "Events"
msgstr "Eventos" msgstr "Eventos"
#: ../js/ui/calendar.js:1525 #: ../js/ui/calendar.js:1524
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d de %B" msgstr "%A, %d de %B"
#: ../js/ui/calendar.js:1529 #: ../js/ui/calendar.js:1528
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y" msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:1614 #: ../js/ui/calendar.js:1613
msgid "Notifications" msgid "Notifications"
msgstr "Notificacions" msgstr "Notificacions"
#: ../js/ui/calendar.js:1765 #: ../js/ui/calendar.js:1764
#| msgid "Notifications"
msgid "No Notifications" msgid "No Notifications"
msgstr "No i hai notificacions" msgstr "No i hai notificacions"
#: ../js/ui/calendar.js:1768 #: ../js/ui/calendar.js:1767
msgid "No Events" msgid "No Events"
msgstr "No i hai eventos" msgstr "No i hai eventos"
@@ -662,8 +661,8 @@ msgstr "O ret sin cordón requiere autenticación"
#: ../js/ui/components/networkAgent.js:659 #: ../js/ui/components/networkAgent.js:659
#, javascript-format #, javascript-format
msgid "" msgid ""
"Passwords or encryption keys are required to access the wireless network " "Passwords or encryption keys are required to access the wireless network "
"%s”." "%s”."
msgstr "" msgstr ""
"S'amenesten claus u claus de zifrau ta accedir a o ret inalambrico\"%s\"." "S'amenesten claus u claus de zifrau ta accedir a o ret inalambrico\"%s\"."
@@ -734,7 +733,7 @@ msgstr "Prebe atra vegada."
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. */ #. IM name. */
#: ../js/ui/components/telepathyClient.js:757 #: ../js/ui/components/telepathyClient.js:768
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "Agora %s se dice %s" msgstr "Agora %s se dice %s"
@@ -743,11 +742,11 @@ msgstr "Agora %s se dice %s"
msgid "Windows" msgid "Windows"
msgstr "Finestras" msgstr "Finestras"
#: ../js/ui/dash.js:250 ../js/ui/dash.js:291 #: ../js/ui/dash.js:252 ../js/ui/dash.js:293
msgid "Show Applications" msgid "Show Applications"
msgstr "Amostrar aplicacions" msgstr "Amostrar aplicacions"
#: ../js/ui/dash.js:449 #: ../js/ui/dash.js:453
msgid "Dash" msgid "Dash"
msgstr "Tablero" msgstr "Tablero"
@@ -755,6 +754,7 @@ msgstr "Tablero"
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */ #. */
#: ../js/ui/dateMenu.js:73 #: ../js/ui/dateMenu.js:73
#| msgid "%A %B %e, %Y"
msgid "%B %e %Y" msgid "%B %e %Y"
msgstr "%B %e %Y" msgstr "%B %e %Y"
@@ -763,6 +763,7 @@ msgstr "%B %e %Y"
#. * date, e.g. "Tuesday February 17 2015". #. * date, e.g. "Tuesday February 17 2015".
#. */ #. */
#: ../js/ui/dateMenu.js:80 #: ../js/ui/dateMenu.js:80
#| msgid "%A %B %e, %Y"
msgid "%A %B %e %Y" msgid "%A %B %e %Y"
msgstr "%A %e de %B de %Y" msgstr "%A %e de %B de %Y"
@@ -771,6 +772,7 @@ msgid "Add world clocks…"
msgstr "Adhibir reloches d'o mundo…" msgstr "Adhibir reloches d'o mundo…"
#: ../js/ui/dateMenu.js:161 #: ../js/ui/dateMenu.js:161
#| msgid "Open Clocks"
msgid "World Clocks" msgid "World Clocks"
msgstr "Reloches d'o mundo" msgstr "Reloches d'o mundo"
@@ -914,16 +916,17 @@ msgstr "Instalar"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Descargar y instalar \"%s\" dende extensions.gnome.org?" msgstr "Descargar y instalar \"%s\" dende extensions.gnome.org?"
#: ../js/ui/keyboard.js:747 ../js/ui/status/keyboard.js:713 #: ../js/ui/keyboard.js:714 ../js/ui/status/keyboard.js:580
msgid "Keyboard" msgid "Keyboard"
msgstr "Teclau" msgstr "Teclau"
#. translators: 'Hide' is a verb */ #. translators: 'Hide' is a verb */
#: ../js/ui/legacyTray.js:66 #: ../js/ui/legacyTray.js:64
#| msgid "Hide Text"
msgid "Hide tray" msgid "Hide tray"
msgstr "Amagar servilla" msgstr "Amagar servilla"
#: ../js/ui/legacyTray.js:107 #: ../js/ui/legacyTray.js:104
msgid "Status Icons" msgid "Status Icons"
msgstr "Iconos d'estau" msgstr "Iconos d'estau"
@@ -979,7 +982,7 @@ msgstr "Veyer fuent"
msgid "Web Page" msgid "Web Page"
msgstr "Pachina web" msgstr "Pachina web"
#: ../js/ui/messageTray.js:1486 #: ../js/ui/messageTray.js:2133
msgid "System Information" msgid "System Information"
msgstr "Informacion d'o sistema" msgstr "Informacion d'o sistema"
@@ -1021,7 +1024,7 @@ msgstr "toggle-switch-intl"
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Introducir un comando" msgstr "Introducir un comando"
#: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:162 #: ../js/ui/runDialog.js:110 ../js/ui/windowMenu.js:120
msgid "Close" msgid "Close"
msgstr "Trancar" msgstr "Trancar"
@@ -1049,27 +1052,27 @@ msgid_plural "%d new notifications"
msgstr[0] "%d notificación nueva" msgstr[0] "%d notificación nueva"
msgstr[1] "%d notificacions nuevas" msgstr[1] "%d notificacions nuevas"
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:365 #: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Blocar" msgstr "Blocar"
#: ../js/ui/screenShield.js:684 #: ../js/ui/screenShield.js:668
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME ameneste blocar a pantalla" msgstr "GNOME ameneste blocar a pantalla"
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271 #: ../js/ui/screenShield.js:795 ../js/ui/screenShield.js:1271
msgid "Unable to lock" msgid "Unable to lock"
msgstr "No se podió blocar" msgstr "No se podió blocar"
#: ../js/ui/screenShield.js:806 ../js/ui/screenShield.js:1272 #: ../js/ui/screenShield.js:796 ../js/ui/screenShield.js:1272
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió o bloqueyo" msgstr "Una aplicación impidió o bloqueyo"
#: ../js/ui/search.js:617 #: ../js/ui/search.js:616
msgid "Searching…" msgid "Searching…"
msgstr "Mirando…" msgstr "Mirando…"
#: ../js/ui/search.js:619 #: ../js/ui/search.js:618
msgid "No results." msgid "No results."
msgstr "No se troboron resultaus." msgstr "No se troboron resultaus."
@@ -1133,11 +1136,11 @@ msgstr "Refuso de teclas"
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "Teclas d'o ratet" msgstr "Teclas d'o ratet"
#: ../js/ui/status/accessibility.js:167 #: ../js/ui/status/accessibility.js:144
msgid "High Contrast" msgid "High Contrast"
msgstr "Contraste alto" msgstr "Contraste alto"
#: ../js/ui/status/accessibility.js:202 #: ../js/ui/status/accessibility.js:193
msgid "Large Text" msgid "Large Text"
msgstr "Texto gran" msgstr "Texto gran"
@@ -1171,7 +1174,7 @@ msgstr "No connectau"
msgid "Brightness" msgid "Brightness"
msgstr "Brilo" msgstr "Brilo"
#: ../js/ui/status/keyboard.js:736 #: ../js/ui/status/keyboard.js:603
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Amostrar a distribución d'o teclau" msgstr "Amostrar a distribución d'o teclau"
@@ -1382,23 +1385,23 @@ msgstr "Modo avión"
msgid "On" msgid "On"
msgstr "Enchegau" msgstr "Enchegau"
#: ../js/ui/status/system.js:337 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"
msgstr "Cambear d'usuario" msgstr "Cambear d'usuario"
#: ../js/ui/status/system.js:342 #: ../js/ui/status/system.js:322
msgid "Log Out" msgid "Log Out"
msgstr "Trancar sesion" msgstr "Trancar sesion"
#: ../js/ui/status/system.js:361 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Bloqueyo d'Orientación" msgstr "Bloqueyo d'Orientación"
#: ../js/ui/status/system.js:369 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
msgstr "Suspender" msgstr "Suspender"
#: ../js/ui/status/system.js:372 #: ../js/ui/status/system.js:352
msgid "Power Off" msgid "Power Off"
msgstr "Amortar" msgstr "Amortar"
@@ -1430,27 +1433,27 @@ msgstr "Aplicacions"
msgid "Search" msgid "Search"
msgstr "Mirar" msgstr "Mirar"
#: ../js/ui/windowAttentionHandler.js:20 #: ../js/ui/windowAttentionHandler.js:19
#, javascript-format #, javascript-format
msgid "“%s” is ready" msgid "“%s” is ready"
msgstr "\"%s\" ye parau" msgstr "\"%s\" ye parau"
#: ../js/ui/windowManager.js:63 #: ../js/ui/windowManager.js:65
msgid "Do you want to keep these display settings?" msgid "Do you want to keep these display settings?"
msgstr "Quiers mantener istas opcions de pantalla?" msgstr "Quiers mantener istas opcions de pantalla?"
#. Translators: this and the following message should be limited in lenght, #. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. */ #. */
#: ../js/ui/windowManager.js:82 #: ../js/ui/windowManager.js:84
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Revertir as opcions" msgstr "Revertir as opcions"
#: ../js/ui/windowManager.js:86 #: ../js/ui/windowManager.js:88
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Mantener os cambeos" msgstr "Mantener os cambeos"
#: ../js/ui/windowManager.js:105 #: ../js/ui/windowManager.js:107
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
@@ -1459,7 +1462,7 @@ msgstr[1] "Os cambeos d'as opcions serán revertius en %d segundos"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. */ #. * the width of the window and the second is the height. */
#: ../js/ui/windowManager.js:660 #: ../js/ui/windowManager.js:599
#, javascript-format #, javascript-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
@@ -1496,48 +1499,14 @@ msgstr "Siempre veyible"
msgid "Always on Visible Workspace" msgid "Always on Visible Workspace"
msgstr "Siempre en l'aria de treballo veyible" msgstr "Siempre en l'aria de treballo veyible"
#: ../js/ui/windowMenu.js:105 #: ../js/ui/windowMenu.js:106
#, fuzzy
#| msgid "Move to Workspace Up"
msgid "Move to Workspace Left"
msgstr "Mover a l'aria de treballo d'a cucha"
#: ../js/ui/windowMenu.js:110
#, fuzzy
#| msgid "Move to Workspace Up"
msgid "Move to Workspace Right"
msgstr "Mover a l'aria de treballo d'a dreita"
#: ../js/ui/windowMenu.js:115
msgid "Move to Workspace Up" msgid "Move to Workspace Up"
msgstr "Mover ta l'aria de treballo d'alto" msgstr "Mover ta l'aria de treballo d'alto"
#: ../js/ui/windowMenu.js:120 #: ../js/ui/windowMenu.js:111
msgid "Move to Workspace Down" msgid "Move to Workspace Down"
msgstr "Mover ta l'aria de treballo d'abaixo" msgstr "Mover ta l'aria de treballo d'abaixo"
#: ../js/ui/windowMenu.js:136
#, fuzzy
#| msgid "Move to Workspace Up"
msgid "Move to Monitor Up"
msgstr "Mover a la pantalla d'alto"
#: ../js/ui/windowMenu.js:142
#, fuzzy
#| msgid "Move to Workspace Down"
msgid "Move to Monitor Down"
msgstr "Mover a la pantalla d'abaixo"
#: ../js/ui/windowMenu.js:148
#, fuzzy
msgid "Move to Monitor Left"
msgstr "Mover a la pantalla d'a cucha"
#: ../js/ui/windowMenu.js:154
#, fuzzy
msgid "Move to Monitor Right"
msgstr "Mover a la pantalla d'a dreita"
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1 #: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "Calandario d'Evolution" msgstr "Calandario d'Evolution"
@@ -1592,11 +1561,11 @@ msgstr "Desconoxiu"
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Ha fallau en aventar \"%s\"" msgstr "Ha fallau en aventar \"%s\""
#: ../src/shell-keyring-prompt.c:742 #: ../src/shell-keyring-prompt.c:714
msgid "Passwords do not match." msgid "Passwords do not match."
msgstr "As claus de paso no coinciden." msgstr "As claus de paso no coinciden."
#: ../src/shell-keyring-prompt.c:750 #: ../src/shell-keyring-prompt.c:722
msgid "Password cannot be blank" msgid "Password cannot be blank"
msgstr "A clau de paso no puede estar vueda" msgstr "A clau de paso no puede estar vueda"
@@ -1834,6 +1803,14 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
#~ msgid "The maximum accuracy level of location." #~ msgid "The maximum accuracy level of location."
#~ msgstr "O maximo libel de precisión d'ubicación." #~ msgstr "O maximo libel de precisión d'ubicación."
#~| msgid ""
#~| "Configures the maximum level of location accuracy applications are "
#~| "allowed to see. Valid options are 'off' (disable location tracking), "
#~| "'country', 'city', 'neighborhood', 'street', and 'exact' (typically "
#~| "requires GPS receiver). Please keep in mind that this only controls what "
#~| "Geoclue will allow applications to see and they can find user's location "
#~| "on their own using network resources (albeit with street-level accuracy "
#~| "at best)."
#~ msgid "" #~ msgid ""
#~ "Configures the maximum level of location accuracy applications are " #~ "Configures the maximum level of location accuracy applications are "
#~ "allowed to see. Valid options are 'off' (disable location tracking), " #~ "allowed to see. Valid options are 'off' (disable location tracking), "
@@ -1845,8 +1822,8 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
#~ msgstr "" #~ msgstr ""
#~ "Configura o ran maximo de precisión d'ubicación que as aplicacions " #~ "Configura o ran maximo de precisión d'ubicación que as aplicacions "
#~ "pueden veyer. As opcions validas son 'off' (seguimiento d'ubicación " #~ "pueden veyer. As opcions validas son 'off' (seguimiento d'ubicación "
#~ "desenchegau), 'country', 'city', 'neighborhood', 'street', and 'exact' " #~ "desenchegau), 'country', 'city', 'neighborhood', 'street', and "
#~ "(typicament requier GPS " #~ "'exact' (typicament requier GPS "
#~ msgid "Arrangement of buttons on the titlebar" #~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Orden d'os botons en a barra de titol" #~ msgstr "Orden d'os botons en a barra de titol"
@@ -1991,6 +1968,7 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
#~ msgid "Session…" #~ msgid "Session…"
#~ msgstr "Sesión…" #~ msgstr "Sesión…"
#~| msgid "Power Off"
#~ msgid "Power" #~ msgid "Power"
#~ msgstr "Enerchía" #~ msgstr "Enerchía"
@@ -2154,9 +2132,11 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
#~ msgid "%d%%" #~ msgid "%d%%"
#~ msgstr "%d%%" #~ msgstr "%d%%"
#~| msgid "AC adapter"
#~ msgid "AC Adapter" #~ msgid "AC Adapter"
#~ msgstr "Adaptador de corrient" #~ msgstr "Adaptador de corrient"
#~| msgid "Laptop battery"
#~ msgid "Laptop Battery" #~ msgid "Laptop Battery"
#~ msgstr "Bateria d'o portatil" #~ msgstr "Bateria d'o portatil"
@@ -2169,9 +2149,11 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
#~ msgid "PDA" #~ msgid "PDA"
#~ msgstr "PDA" #~ msgstr "PDA"
#~| msgid "Cell phone"
#~ msgid "Cell Phone" #~ msgid "Cell Phone"
#~ msgstr "Telefono movil" #~ msgstr "Telefono movil"
#~| msgid "Media player"
#~ msgid "Media Player" #~ msgid "Media Player"
#~ msgstr "Reproductor multimeya" #~ msgstr "Reproductor multimeya"
@@ -2181,6 +2163,7 @@ msgstr "L'usuario refusó o dialogo d'autenticación"
#~ msgid "Computer" #~ msgid "Computer"
#~ msgstr "Equipo" #~ msgstr "Equipo"
#~| msgid "Unknown"
#~ msgctxt "device" #~ msgctxt "device"
#~ msgid "Unknown" #~ msgid "Unknown"
#~ msgstr "Desconoxiu" #~ msgstr "Desconoxiu"

555
po/ar.po

File diff suppressed because it is too large Load Diff

524
po/ca.po

File diff suppressed because it is too large Load Diff

579
po/cs.po

File diff suppressed because it is too large Load Diff

541
po/da.po

File diff suppressed because it is too large Load Diff

582
po/de.po

File diff suppressed because it is too large Load Diff

592
po/el.po

File diff suppressed because it is too large Load Diff

1577
po/eo.po

File diff suppressed because it is too large Load Diff

592
po/es.po

File diff suppressed because it is too large Load Diff

666
po/eu.po

File diff suppressed because it is too large Load Diff

1644
po/fa.po

File diff suppressed because it is too large Load Diff

737
po/fi.po

File diff suppressed because it is too large Load Diff

1239
po/fr.po

File diff suppressed because it is too large Load Diff

1723
po/ga.po

File diff suppressed because it is too large Load Diff

538
po/gl.po

File diff suppressed because it is too large Load Diff

509
po/he.po

File diff suppressed because it is too large Load Diff

874
po/hu.po

File diff suppressed because it is too large Load Diff

850
po/id.po

File diff suppressed because it is too large Load Diff

633
po/is.po

File diff suppressed because it is too large Load Diff

650
po/it.po

File diff suppressed because it is too large Load Diff

505
po/ja.po

File diff suppressed because it is too large Load Diff

651
po/kk.po

File diff suppressed because it is too large Load Diff

641
po/ko.po

File diff suppressed because it is too large Load Diff

655
po/lt.po

File diff suppressed because it is too large Load Diff

612
po/lv.po

File diff suppressed because it is too large Load Diff

452
po/nb.po

File diff suppressed because it is too large Load Diff

511
po/nl.po

File diff suppressed because it is too large Load Diff

558
po/pa.po

File diff suppressed because it is too large Load Diff

546
po/pl.po

File diff suppressed because it is too large Load Diff

571
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2078
po/ro.po

File diff suppressed because it is too large Load Diff

562
po/ru.po

File diff suppressed because it is too large Load Diff

793
po/sk.po

File diff suppressed because it is too large Load Diff

611
po/sl.po

File diff suppressed because it is too large Load Diff

749
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

596
po/sv.po

File diff suppressed because it is too large Load Diff

468
po/tr.po

File diff suppressed because it is too large Load Diff

627
po/uk.po

File diff suppressed because it is too large Load Diff

689
po/vi.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -201,7 +201,7 @@ calendar_sources_init (CalendarSources *sources)
"/", "org.freedesktop.DBus", "/", "org.freedesktop.DBus",
"StartServiceByName", "StartServiceByName",
g_variant_new ("(su)", g_variant_new ("(su)",
"org.gnome.evolution.dataserver.Sources5", "org.gnome.evolution.dataserver.Sources4",
0), 0),
NULL, NULL,
G_DBUS_CALL_FLAGS_NONE, G_DBUS_CALL_FLAGS_NONE,

View File

@@ -45,8 +45,8 @@ static void gnome_shell_plugin_unminimize (MetaPlugin *plugin,
static void gnome_shell_plugin_size_change (MetaPlugin *plugin, static void gnome_shell_plugin_size_change (MetaPlugin *plugin,
MetaWindowActor *actor, MetaWindowActor *actor,
MetaSizeChange which_change, MetaSizeChange which_change,
MetaRectangle *old_frame_rect, MetaRectangle *old_rect,
MetaRectangle *old_buffer_rect); MetaRectangle *new_rect);
static void gnome_shell_plugin_map (MetaPlugin *plugin, static void gnome_shell_plugin_map (MetaPlugin *plugin,
MetaWindowActor *actor); MetaWindowActor *actor);
static void gnome_shell_plugin_destroy (MetaPlugin *plugin, static void gnome_shell_plugin_destroy (MetaPlugin *plugin,

View File

@@ -176,15 +176,15 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
if (subsection) if (subsection)
{ {
gboolean section_could_have_separator; gboolean could_have_separator;
section_could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label; could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label;
/* Only pass the parent_model and parent_index in case they may be used to create the separator. */ /* Only pass the parent_model and parent_index in case they may be used to create the separator. */
n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items, n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items,
section_could_have_separator, could_have_separator,
section_could_have_separator ? section->model : NULL, could_have_separator ? section->model : NULL,
section_could_have_separator ? i : 0); could_have_separator ? i : 0);
} }
else else
n_items++; n_items++;
@@ -197,11 +197,11 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
if (should_have_separator > section->has_separator) if (should_have_separator > section->has_separator)
{ {
/* Add a separator */ /* Add a separator */
GtkMenuTrackerItem *menuitem; GtkMenuTrackerItem *item;
menuitem = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE); item = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE);
(* tracker->insert_func) (menuitem, offset, tracker->user_data); (* tracker->insert_func) (item, offset, tracker->user_data);
g_object_unref (menuitem); g_object_unref (item);
section->has_separator = TRUE; section->has_separator = TRUE;
} }

Submodule src/gvc updated: 0a79019088...e14dbe8aa6

View File

@@ -54,7 +54,7 @@ static void
shell_dbus_acquire_name (GDBusProxy *bus, shell_dbus_acquire_name (GDBusProxy *bus,
guint32 request_name_flags, guint32 request_name_flags,
guint32 *request_name_result, guint32 *request_name_result,
const gchar *name, gchar *name,
gboolean fatal) gboolean fatal)
{ {
GError *error = NULL; GError *error = NULL;
@@ -69,25 +69,23 @@ shell_dbus_acquire_name (GDBusProxy *bus,
&error))) &error)))
{ {
g_printerr ("failed to acquire %s: %s\n", name, error->message); g_printerr ("failed to acquire %s: %s\n", name, error->message);
g_clear_error (&error);
if (!fatal) if (!fatal)
return; return;
exit (1); exit (1);
} }
g_variant_get (request_name_variant, "(u)", request_name_result); g_variant_get (request_name_variant, "(u)", request_name_result);
g_variant_unref (request_name_variant);
} }
static void static void
shell_dbus_acquire_names (GDBusProxy *bus, shell_dbus_acquire_names (GDBusProxy *bus,
guint32 request_name_flags, guint32 request_name_flags,
const gchar *name, gchar *name,
gboolean fatal, ...) G_GNUC_NULL_TERMINATED; gboolean fatal, ...) G_GNUC_NULL_TERMINATED;
static void static void
shell_dbus_acquire_names (GDBusProxy *bus, shell_dbus_acquire_names (GDBusProxy *bus,
guint32 request_name_flags, guint32 request_name_flags,
const gchar *name, gchar *name,
gboolean fatal, ...) gboolean fatal, ...)
{ {
va_list al; va_list al;
@@ -132,12 +130,6 @@ shell_dbus_init (gboolean replace)
NULL, /* cancellable */ NULL, /* cancellable */
&error); &error);
if (!bus)
{
g_printerr ("Failed to get a session bus proxy: %s", error->message);
exit (1);
}
request_name_flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT; request_name_flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT;
if (replace) if (replace)
request_name_flags |= DBUS_NAME_FLAG_REPLACE_EXISTING; request_name_flags |= DBUS_NAME_FLAG_REPLACE_EXISTING;
@@ -462,7 +454,7 @@ main (int argc, char **argv)
/* Initialize the global object */ /* Initialize the global object */
if (session_mode == NULL) if (session_mode == NULL)
session_mode = is_gdm_mode ? (char *)"gdm" : (char *)"user"; session_mode = is_gdm_mode ? "gdm" : "user";
_shell_global_init ("session-mode", session_mode, NULL); _shell_global_init ("session-mode", session_mode, NULL);

View File

@@ -182,7 +182,7 @@ shell_app_system_finalize (GObject *object)
* Return Value: (transfer none): The global #ShellAppSystem singleton * Return Value: (transfer none): The global #ShellAppSystem singleton
*/ */
ShellAppSystem * ShellAppSystem *
shell_app_system_get_default (void) shell_app_system_get_default ()
{ {
static ShellAppSystem *instance = NULL; static ShellAppSystem *instance = NULL;
@@ -348,9 +348,6 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self,
case SHELL_APP_STATE_STOPPED: case SHELL_APP_STATE_STOPPED:
g_hash_table_remove (self->priv->running_apps, app); g_hash_table_remove (self->priv->running_apps, app);
break; break;
default:
g_warn_if_reached();
break;
} }
g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app); g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app);
} }
@@ -386,28 +383,3 @@ shell_app_system_get_running (ShellAppSystem *self)
return ret; return ret;
} }
/**
* shell_app_system_search:
* @search_string: the search string to use
*
* Wrapper around g_desktop_app_info_search() that replaces results that
* don't validate as UTF-8 with the empty string.
*
* Returns: (array zero-terminated=1) (element-type GStrv) (transfer full): a
* list of strvs. Free each item with g_strfreev() and free the outer
* list with g_free().
*/
char ***
shell_app_system_search (const char *search_string)
{
char ***results = g_desktop_app_info_search (search_string);
char ***groups, **ids;
for (groups = results; *groups; groups++)
for (ids = *groups; *ids; ids++)
if (!g_utf8_validate (*ids, -1, NULL))
**ids = '\0';
return results;
}

View File

@@ -48,6 +48,5 @@ ShellApp *shell_app_system_lookup_desktop_wmclass (ShellAppSystem *s
const char *wmclass); const char *wmclass);
GSList *shell_app_system_get_running (ShellAppSystem *self); GSList *shell_app_system_get_running (ShellAppSystem *self);
char ***shell_app_system_search (const char *search_string);
#endif /* __SHELL_APP_SYSTEM_H__ */ #endif /* __SHELL_APP_SYSTEM_H__ */

View File

@@ -996,7 +996,7 @@ on_enable_monitoring_key_changed (GSettings *settings,
* Return Value: (transfer none): The global #ShellAppUsage instance * Return Value: (transfer none): The global #ShellAppUsage instance
*/ */
ShellAppUsage * ShellAppUsage *
shell_app_usage_get_default (void) shell_app_usage_get_default ()
{ {
static ShellAppUsage *instance; static ShellAppUsage *instance;

View File

@@ -156,20 +156,16 @@ static MetaWindow *
window_backed_app_get_window (ShellApp *app) window_backed_app_get_window (ShellApp *app)
{ {
g_assert (app->info == NULL); g_assert (app->info == NULL);
if (app->running_state) g_assert (app->running_state);
{
g_assert (app->running_state->windows); g_assert (app->running_state->windows);
return app->running_state->windows->data; return app->running_state->windows->data;
} }
else
return NULL;
}
static ClutterActor * static ClutterActor *
window_backed_app_get_icon (ShellApp *app, window_backed_app_get_icon (ShellApp *app,
int size) int size)
{ {
MetaWindow *window = NULL; MetaWindow *window;
ClutterActor *actor; ClutterActor *actor;
gint scale; gint scale;
ShellGlobal *global; ShellGlobal *global;
@@ -185,16 +181,14 @@ window_backed_app_get_icon (ShellApp *app,
* window-backend apps, it's possible we get a request for the icon. * window-backend apps, it's possible we get a request for the icon.
* Avoid asserting here and just return an empty image. * Avoid asserting here and just return an empty image.
*/ */
if (app->running_state != NULL) if (app->running_state == NULL)
window = window_backed_app_get_window (app);
if (window == NULL)
{ {
actor = clutter_texture_new (); actor = clutter_texture_new ();
g_object_set (actor, "opacity", 0, "width", (float) size, "height", (float) size, NULL); g_object_set (actor, "opacity", 0, "width", (float) size, "height", (float) size, NULL);
return actor; return actor;
} }
window = window_backed_app_get_window (app);
actor = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (), actor = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
G_OBJECT (window), G_OBJECT (window),
"icon"); "icon");
@@ -238,9 +232,8 @@ shell_app_get_name (ShellApp *app)
else else
{ {
MetaWindow *window = window_backed_app_get_window (app); MetaWindow *window = window_backed_app_get_window (app);
const char *name = NULL; const char *name;
if (window)
name = meta_window_get_wm_class (window); name = meta_window_get_wm_class (window);
if (!name) if (!name)
name = C_("program", "Unknown"); name = C_("program", "Unknown");
@@ -498,9 +491,6 @@ shell_app_activate_full (ShellApp *app,
case SHELL_APP_STATE_RUNNING: case SHELL_APP_STATE_RUNNING:
shell_app_activate_window (app, NULL, timestamp); shell_app_activate_window (app, NULL, timestamp);
break; break;
default:
g_assert_not_reached();
break;
} }
} }
@@ -709,7 +699,7 @@ static int
shell_app_get_last_user_time (ShellApp *app) shell_app_get_last_user_time (ShellApp *app)
{ {
GSList *iter; GSList *iter;
guint32 last_user_time; int last_user_time;
last_user_time = 0; last_user_time = 0;
@@ -719,7 +709,7 @@ shell_app_get_last_user_time (ShellApp *app)
last_user_time = MAX (last_user_time, meta_window_get_user_time (iter->data)); last_user_time = MAX (last_user_time, meta_window_get_user_time (iter->data));
} }
return (int)last_user_time; return last_user_time;
} }
/** /**
@@ -838,14 +828,11 @@ shell_app_sync_running_state (ShellApp *app)
{ {
g_return_if_fail (app->running_state != NULL); g_return_if_fail (app->running_state != NULL);
if (app->state != SHELL_APP_STATE_STARTING)
{
if (app->running_state->interesting_windows == 0) if (app->running_state->interesting_windows == 0)
shell_app_state_transition (app, SHELL_APP_STATE_STOPPED); shell_app_state_transition (app, SHELL_APP_STATE_STOPPED);
else else if (app->state != SHELL_APP_STATE_STARTING)
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING); shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
} }
}
static void static void
@@ -1013,16 +1000,10 @@ _shell_app_remove_window (ShellApp *app,
if (!meta_window_is_skip_taskbar (window)) if (!meta_window_is_skip_taskbar (window))
app->running_state->interesting_windows--; app->running_state->interesting_windows--;
if (app->running_state->windows == NULL)
{
g_clear_pointer (&app->running_state, unref_running_state);
shell_app_state_transition (app, SHELL_APP_STATE_STOPPED);
}
else
{
shell_app_sync_running_state (app); shell_app_sync_running_state (app);
}
if (app->running_state && app->running_state->windows == NULL)
g_clear_pointer (&app->running_state, unref_running_state);
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0); g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
} }
@@ -1161,12 +1142,6 @@ shell_app_launch (ShellApp *app,
if (app->info == NULL) if (app->info == NULL)
{ {
MetaWindow *window = window_backed_app_get_window (app); MetaWindow *window = window_backed_app_get_window (app);
/* We don't use an error return if there no longer any windows, because the
* user attempting to activate a stale window backed app isn't something
* we would expect the caller to meaningfully handle or display an error
* message to the user.
*/
if (window)
meta_window_activate (window, timestamp); meta_window_activate (window, timestamp);
return TRUE; return TRUE;
} }

View File

@@ -59,7 +59,7 @@ shell_embedded_window_show (GtkWidget *widget)
/* Size is 0x0 if the GtkWindow is not shown */ /* Size is 0x0 if the GtkWindow is not shown */
clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor)); clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
if (clutter_actor_is_realized (CLUTTER_ACTOR (window->priv->actor))) if (CLUTTER_ACTOR_IS_REALIZED (window->priv->actor))
gtk_widget_map (widget); gtk_widget_map (widget);
} }
} }
@@ -166,7 +166,7 @@ _shell_embedded_window_set_actor (ShellEmbeddedWindow *window,
window->priv->actor = actor; window->priv->actor = actor;
if (actor && if (actor &&
clutter_actor_is_mapped (CLUTTER_ACTOR (actor)) && CLUTTER_ACTOR_IS_MAPPED (actor) &&
gtk_widget_get_visible (GTK_WIDGET (window))) gtk_widget_get_visible (GTK_WIDGET (window)))
gtk_widget_map (GTK_WIDGET (window)); gtk_widget_map (GTK_WIDGET (window));
} }

View File

@@ -172,7 +172,7 @@ shell_generic_container_get_focus_chain (StWidget *widget)
child != NULL; child != NULL;
child = clutter_actor_get_next_sibling (child)) child = clutter_actor_get_next_sibling (child))
{ {
if (clutter_actor_is_visible (child) && if (CLUTTER_ACTOR_IS_VISIBLE (child) &&
!shell_generic_container_get_skip_paint (self, child)) !shell_generic_container_get_skip_paint (self, child))
focus_chain = g_list_prepend (focus_chain, child); focus_chain = g_list_prepend (focus_chain, child);
} }
@@ -273,7 +273,7 @@ shell_generic_container_get_paint_volume (ClutterActor *self,
{ {
const ClutterPaintVolume *child_volume; const ClutterPaintVolume *child_volume;
if (!clutter_actor_is_visible (child)) if (!CLUTTER_ACTOR_IS_VISIBLE (child))
continue; continue;
if (shell_generic_container_get_skip_paint (SHELL_GENERIC_CONTAINER (self), child)) if (shell_generic_container_get_skip_paint (SHELL_GENERIC_CONTAINER (self), child))

View File

@@ -867,12 +867,7 @@ update_scale_factor (GtkSettings *settings,
{ {
g_object_set (context, "scale-factor", g_value_get_int (&value), NULL); g_object_set (context, "scale-factor", g_value_get_int (&value), NULL);
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
{ g_object_set (clutter_settings_get_default (), "font-dpi", 96 * 1024 * g_value_get_int (&value), NULL);
int xft_dpi;
g_object_get (settings, "gtk-xft-dpi", &xft_dpi, NULL);
g_object_set (clutter_settings_get_default (), "font-dpi", xft_dpi, NULL);
}
} }
/* Make sure clutter and gdk scaling stays disabled */ /* Make sure clutter and gdk scaling stays disabled */

View File

@@ -139,7 +139,6 @@ shell_glsl_quad_constructed (GObject *object)
if (G_UNLIKELY (klass->base_pipeline == NULL)) if (G_UNLIKELY (klass->base_pipeline == NULL))
{ {
klass->base_pipeline = cogl_pipeline_new (ctx); klass->base_pipeline = cogl_pipeline_new (ctx);
cogl_pipeline_set_blend (klass->base_pipeline, "RGBA = ADD (SRC_COLOR * (SRC_COLOR[A]), DST_COLOR * (1-SRC_COLOR[A]))", NULL);
if (klass->build_pipeline != NULL) if (klass->build_pipeline != NULL)
klass->build_pipeline (self); klass->build_pipeline (self);

View File

@@ -68,6 +68,7 @@ shell_gtk_embed_window_created_cb (MetaDisplay *display,
{ {
ClutterActor *window_actor = ClutterActor *window_actor =
CLUTTER_ACTOR (meta_window_get_compositor_private (window)); CLUTTER_ACTOR (meta_window_get_compositor_private (window));
MetaDisplay *display = shell_global_get_display (shell_global_get ());
GCallback remove_cb = G_CALLBACK (shell_gtk_embed_remove_window_actor); GCallback remove_cb = G_CALLBACK (shell_gtk_embed_remove_window_actor);
cairo_region_t *empty_region; cairo_region_t *empty_region;

View File

@@ -315,6 +315,8 @@ get_secrets_keyring_cb (GObject *source,
secrets_found = TRUE; secrets_found = TRUE;
g_hash_table_unref (attributes);
secret_value_unref (secret);
break; break;
} }
} }
@@ -364,6 +366,8 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
{ {
ShellNetworkAgent *self = SHELL_NETWORK_AGENT (agent); ShellNetworkAgent *self = SHELL_NETWORK_AGENT (agent);
ShellAgentRequest *request; ShellAgentRequest *request;
NMSettingConnection *setting_connection;
const char *connection_type;
GHashTable *attributes; GHashTable *attributes;
char *request_id; char *request_id;
@@ -377,6 +381,9 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
shell_agent_request_cancel (request); shell_agent_request_cancel (request);
} }
setting_connection = nm_connection_get_setting_connection (connection);
connection_type = nm_setting_connection_get_connection_type (setting_connection);
request = g_slice_new (ShellAgentRequest); request = g_slice_new (ShellAgentRequest);
request->self = g_object_ref (self); request->self = g_object_ref (self);
request->cancellable = g_cancellable_new (); request->cancellable = g_cancellable_new ();
@@ -386,7 +393,7 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
request->flags = flags; request->flags = flags;
request->callback = callback; request->callback = callback;
request->callback_data = callback_data; request->callback_data = callback_data;
request->is_vpn = !strcmp(setting_name, NM_SETTING_VPN_SETTING_NAME); request->is_vpn = !strcmp(connection_type, NM_SETTING_VPN_SETTING_NAME);
request->entries = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, gvalue_destroy_notify); request->entries = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, gvalue_destroy_notify);
if (request->is_vpn) if (request->is_vpn)

View File

@@ -125,9 +125,8 @@ on_window_draw (GtkWidget *window,
WindowInfo *info) WindowInfo *info)
{ {
cairo_rectangle_int_t allocation; cairo_rectangle_int_t allocation;
double x_offset, y_offset;
gtk_widget_get_allocation (window, &allocation); gtk_widget_get_allocation (window, &allocation);
double x_offset, y_offset;
/* We draw an arbitrary pattern of red lines near the border of the /* We draw an arbitrary pattern of red lines near the border of the
* window to make it more clear than empty windows if something * window to make it more clear than empty windows if something

View File

@@ -626,7 +626,7 @@ shell_perf_log_collect_statistics (ShellPerfLog *perf_log)
{ {
gint64 event_time = get_time (); gint64 event_time = get_time ();
gint64 collection_time; gint64 collection_time;
guint i; int i;
if (!perf_log->enabled) if (!perf_log->enabled)
return; return;
@@ -672,9 +672,6 @@ shell_perf_log_collect_statistics (ShellPerfLog *perf_log)
statistic->recorded = TRUE; statistic->recorded = TRUE;
} }
break; break;
default:
g_warning ("Unsupported signature in event");
break;
} }
} }
@@ -822,7 +819,7 @@ shell_perf_log_dump_events (ShellPerfLog *perf_log,
GError **error) GError **error)
{ {
GString *output; GString *output;
guint i; int i;
output = g_string_new (NULL); output = g_string_new (NULL);
g_string_append (output, "[ "); g_string_append (output, "[ ");

View File

@@ -156,16 +156,16 @@ shell_recorder_src_send_event (GstElement * element, GstEvent * event)
ShellRecorderSrc *src = SHELL_RECORDER_SRC (element); ShellRecorderSrc *src = SHELL_RECORDER_SRC (element);
gboolean res; gboolean res;
if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) switch (GST_EVENT_TYPE (event)) {
{ case GST_EVENT_EOS:
shell_recorder_src_close (src); shell_recorder_src_close (src);
gst_event_unref (event); gst_event_unref (event);
res = TRUE; res = TRUE;
} break;
else default:
{
res = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, send_event, (element, res = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, send_event, (element,
event), FALSE); event), FALSE);
break;
} }
return res; return res;
} }

View File

@@ -1182,12 +1182,12 @@ recorder_pipeline_bus_watch (GstBus *bus,
{ {
RecorderPipeline *pipeline = data; RecorderPipeline *pipeline = data;
if (message->type == GST_MESSAGE_EOS) switch (message->type)
{ {
case GST_MESSAGE_EOS:
recorder_pipeline_closed (pipeline); recorder_pipeline_closed (pipeline);
return FALSE; /* remove watch */ return FALSE; /* remove watch */
} case GST_MESSAGE_ERROR:
else if (message->type == GST_MESSAGE_ERROR)
{ {
GError *error; GError *error;
@@ -1197,6 +1197,9 @@ recorder_pipeline_bus_watch (GstBus *bus,
recorder_pipeline_closed (pipeline); recorder_pipeline_closed (pipeline);
return FALSE; /* remove watch */ return FALSE; /* remove watch */
} }
default:
break;
}
/* Leave the watch in place */ /* Leave the watch in place */
return TRUE; return TRUE;

View File

@@ -155,7 +155,7 @@ shell_stack_navigate_focus (StWidget *widget,
if (from && clutter_actor_contains (CLUTTER_ACTOR (widget), from)) if (from && clutter_actor_contains (CLUTTER_ACTOR (widget), from))
return FALSE; return FALSE;
if (clutter_actor_is_mapped (CLUTTER_ACTOR (widget))) if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (widget)))
{ {
clutter_actor_grab_key_focus (CLUTTER_ACTOR (widget)); clutter_actor_grab_key_focus (CLUTTER_ACTOR (widget));
return TRUE; return TRUE;

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