Compare commits
	
		
			2 Commits
		
	
	
		
			3.19.2
			...
			wip/garnac
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 708a198abf | ||
|   | 8270d84b80 | 
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -17,8 +17,10 @@ config.status | ||||
| config | ||||
| configure | ||||
| data/50-gnome-shell-*.xml | ||||
| data/org.gnome.Shell.desktop | ||||
| data/org.gnome.Shell.desktop.in | ||||
| data/gnome-shell.desktop | ||||
| data/gnome-shell.desktop.in | ||||
| data/gnome-shell-wayland.desktop | ||||
| data/gnome-shell-wayland.desktop.in | ||||
| data/gnome-shell-extension-prefs.desktop | ||||
| data/gnome-shell-extension-prefs.desktop.in | ||||
| data/gnome-shell-theme.gresource | ||||
|   | ||||
							
								
								
									
										130
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										130
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,133 +1,3 @@ | ||||
| 3.19.2 | ||||
| ====== | ||||
| * Make gnome-shell DBus activatable [Ray; #741666] | ||||
| * Fix browser plugin crash in Firefox [Carlos; #737932, #757940] | ||||
| * Optionally show battery percentage in system status area [Bastien; #735771] | ||||
| * Misc. bug fixes [Kalev, Florian, Bastien; #757418, #757668, #757779, #757816, | ||||
|   #745626, #758220] | ||||
|  | ||||
| Contributors: | ||||
|   Michael Biebl, Michael Catanzaro, Piotr Drąg, Carlos Garcia Campos, | ||||
|   Kalev Lember, Florian Müllner, Bastien Nocera, Ray Strode | ||||
|  | ||||
| Translations: | ||||
|   Pedro Albuquerque [pt], liushuyu [zh_CN], Yosef Or Boczko [he], | ||||
|   Jiri Grönroos [fi], Kjartan Maraas [nb], GNOME Translation Robot [gd], | ||||
|   Daniel Mustieles [es], Marek Černocký [cs], Kristjan SCHMIDT [eo], | ||||
|   Stas Solovey [ru] | ||||
|  | ||||
| 3.19.1 | ||||
| ====== | ||||
| * Respect text-scaling factor under wayland [Owen; #756447] | ||||
| * Show the Bluetooth submenu when there were setup devices [Bastien; #723848] | ||||
| * Misc. bug fixes [Florian, Cosimo, Rui, Ray, Owen, Jakub, Bastien; | ||||
|   #756697, #756714, #756605, #754814, #738942, #756983, #756925, | ||||
|   #757011, #673235, #757150] | ||||
|  | ||||
| Contributors: | ||||
|   Cosimo Cecchi, Rui Matos, Florian Müllner, Bastien Nocera, Jakub Steiner, | ||||
|   Ray Strode, Owen W. Taylor | ||||
|  | ||||
| Translations: | ||||
|   Kjartan Maraas [nb], Khaled Hosny [ar], Balázs Meskó [hu], | ||||
|   Daniel Șerbănescu [ro], Marek Černocký [cs] | ||||
|  | ||||
| 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 | ||||
| ====== | ||||
| * Handle touch events in OSK on wayland [Rui; #750287] | ||||
|   | ||||
| @@ -3,10 +3,7 @@ mozillalibdir = $(BROWSER_PLUGIN_DIR) | ||||
|  | ||||
| mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la | ||||
|  | ||||
| # Browsers can unload and reload the module while browsing, which is not supported by GObject. | ||||
| # 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_LDFLAGS = -module -avoid-version -no-undefined | ||||
|  | ||||
| libgnome_shell_browser_plugin_la_LIBADD = 	\ | ||||
| 	$(BROWSER_PLUGIN_LIBS) | ||||
|   | ||||
| @@ -33,16 +33,20 @@ | ||||
| #include <json-glib/json-glib.h> | ||||
|  | ||||
| #define ORIGIN "extensions.gnome.org" | ||||
| #define PLUGIN_NAME "GNOME Shell Integration" | ||||
| #define PLUGIN_DESCRIPTION "This plugin provides integration with GNOME Shell " \ | ||||
| #define PLUGIN_NAME "Gnome Shell Integration" | ||||
| #define PLUGIN_DESCRIPTION "This plugin provides integration with Gnome Shell " \ | ||||
|       "for live extension enabling and disabling. " \ | ||||
|       "It can be used only by extensions.gnome.org" | ||||
| #define PLUGIN_MIME_STRING "application/x-gnome-shell-integration::GNOME Shell Integration Dummy Content-Type"; | ||||
| #define PLUGIN_MIME_STRING "application/x-gnome-shell-integration::Gnome Shell Integration Dummy Content-Type"; | ||||
|  | ||||
| #define PLUGIN_API_VERSION 5 | ||||
|  | ||||
| #define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation" | ||||
|  | ||||
| typedef struct { | ||||
|   GDBusProxy *proxy; | ||||
| } PluginData; | ||||
|  | ||||
| static NPNetscapeFuncs funcs; | ||||
|  | ||||
| static inline gchar * | ||||
| @@ -141,6 +145,121 @@ check_origin_and_protocol (NPP instance) | ||||
|   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 =================== */ | ||||
|  | ||||
| typedef struct { | ||||
| @@ -211,18 +330,45 @@ static NPObject * | ||||
| plugin_object_allocate (NPP      instance, | ||||
|                         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->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); | ||||
|  | ||||
|   return (NPObject*) obj; | ||||
|   obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION, | ||||
|                                          "org.gnome.Shell", | ||||
|                                          G_BUS_NAME_WATCHER_FLAGS_NONE, | ||||
|                                          on_shell_appeared, | ||||
|                                          NULL, | ||||
|                                          obj, | ||||
|                                          NULL); | ||||
|  | ||||
|   g_debug ("plugin object created"); | ||||
|  | ||||
|   return (NPObject*)obj; | ||||
| } | ||||
|  | ||||
| static void | ||||
| 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 | ||||
| @@ -873,149 +1019,6 @@ init_methods_and_properties (void) | ||||
|   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 | ||||
| NPP_GetValue(NPP          instance, | ||||
| 	     NPPVariable  variable, | ||||
| @@ -1026,10 +1029,13 @@ NPP_GetValue(NPP          instance, | ||||
|   switch (variable) { | ||||
|   case NPPVpluginScriptableNPObject: | ||||
|     g_debug ("creating scriptable object"); | ||||
|     if (!instance->pdata) | ||||
|       return NPERR_INVALID_INSTANCE_ERROR; | ||||
|     init_methods_and_properties (); | ||||
|  | ||||
|     *(NPObject**)value = instance->pdata; | ||||
|     *(NPObject**)value = funcs.createobject (instance, &plugin_class); | ||||
|     break; | ||||
|  | ||||
|   case NPPVpluginNeedsXEmbed: | ||||
|     *(bool *)value = TRUE; | ||||
|     break; | ||||
|  | ||||
|   default: | ||||
| @@ -1047,11 +1053,3 @@ NPP_SetWindow(NPP          instance, | ||||
| { | ||||
|   return NPERR_NO_ERROR; | ||||
| } | ||||
|  | ||||
| int16_t | ||||
| NPP_HandleEvent(NPP   instance, | ||||
|                 void *event) | ||||
| { | ||||
|   /* Ignore the event */ | ||||
|   return FALSE; | ||||
| } | ||||
|   | ||||
							
								
								
									
										15
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -1,6 +1,5 @@ | ||||
| AC_PREREQ(2.63) | ||||
| AC_INIT([gnome-shell],[3.19.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) | ||||
| AX_IS_RELEASE([git-directory]) | ||||
| AC_INIT([gnome-shell],[3.17.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) | ||||
|  | ||||
| AC_CONFIG_HEADERS([config.h]) | ||||
| AC_CONFIG_SRCDIR([src/shell-global.c]) | ||||
| @@ -75,13 +74,13 @@ AS_IF([test x$enable_systemd != xno], [ | ||||
| AC_MSG_RESULT($enable_systemd) | ||||
|  | ||||
| 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 | ||||
| MUTTER_MIN_VERSION=3.19.2 | ||||
| MUTTER_MIN_VERSION=3.17.3 | ||||
| GTK_MIN_VERSION=3.15.0 | ||||
| GIO_MIN_VERSION=2.45.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 | ||||
| POLKIT_MIN_VERSION=0.100 | ||||
| STARTUP_NOTIFICATION_MIN_VERSION=0.11 | ||||
| @@ -117,7 +116,7 @@ PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION) | ||||
| PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11) | ||||
| PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0) | ||||
| PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0) | ||||
| PKG_CHECK_MODULES(TRAY, clutter-1.0 gtk+-3.0) | ||||
| PKG_CHECK_MODULES(TRAY, gtk+-3.0) | ||||
| PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0) | ||||
| PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.13.1) | ||||
|  | ||||
| @@ -221,7 +220,7 @@ if test "$enable_man" != no; then | ||||
| fi | ||||
| AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no) | ||||
|  | ||||
| AX_COMPILER_FLAGS() | ||||
| GNOME_COMPILE_WARNINGS([error]) | ||||
| case "$WARN_CFLAGS" in | ||||
|     *-Werror*) | ||||
|         WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations" | ||||
| @@ -270,7 +269,7 @@ Build configuration: | ||||
|        Prefix:                                 ${prefix} | ||||
|        Source code location:                   ${srcdir} | ||||
|        Compiler:                               ${CC} | ||||
|        Compiler Warnings:                      $ax_enable_compile_warnings | ||||
|        Compiler Warnings:                      $enable_compile_warnings | ||||
|  | ||||
|        Support for NetworkManager:             $have_networkmanager | ||||
|        Support for GStreamer recording:        $build_recorder | ||||
|   | ||||
| @@ -2,7 +2,7 @@ CLEANFILES = | ||||
| NULL = | ||||
|  | ||||
| desktopdir=$(datadir)/applications | ||||
| desktop_DATA = org.gnome.Shell.desktop gnome-shell-extension-prefs.desktop | ||||
| desktop_DATA = gnome-shell.desktop gnome-shell-wayland.desktop  gnome-shell-extension-prefs.desktop | ||||
|  | ||||
| if HAVE_NETWORKMANAGER | ||||
| desktop_DATA += org.gnome.Shell.PortalHelper.desktop | ||||
| @@ -104,7 +104,8 @@ convertdir = $(datadir)/GConf/gsettings | ||||
| convert_DATA = gnome-shell-overrides.convert | ||||
|  | ||||
| EXTRA_DIST =						\ | ||||
| 	org.gnome.Shell.desktop.in.in			\ | ||||
| 	gnome-shell.desktop.in.in			\ | ||||
| 	gnome-shell-wayland.desktop.in.in		\ | ||||
| 	gnome-shell-extension-prefs.desktop.in.in	\ | ||||
| 	$(introspection_DATA)				\ | ||||
| 	$(menu_DATA)					\ | ||||
| @@ -120,7 +121,8 @@ EXTRA_DIST =						\ | ||||
| 	$(NULL) | ||||
|  | ||||
| CLEANFILES +=						\ | ||||
| 	org.gnome.Shell.desktop.in			\ | ||||
| 	gnome-shell.desktop.in				\ | ||||
| 	gnome-shell-wayland.desktop.in			\ | ||||
| 	gnome-shell-extension-prefs.in			\ | ||||
| 	$(desktop_DATA)					\ | ||||
| 	$(keys_DATA)					\ | ||||
|   | ||||
							
								
								
									
										15
									
								
								data/gnome-shell-wayland.desktop.in.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								data/gnome-shell-wayland.desktop.in.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| [Desktop Entry] | ||||
| Type=Application | ||||
| _Name=GNOME Shell (wayland compositor) | ||||
| _Comment=Window management and application launching | ||||
| Exec=@bindir@/gnome-shell --wayland --display-server | ||||
| X-GNOME-Bugzilla-Bugzilla=GNOME | ||||
| X-GNOME-Bugzilla-Product=gnome-shell | ||||
| X-GNOME-Bugzilla-Component=general | ||||
| X-GNOME-Bugzilla-Version=@VERSION@ | ||||
| Categories=GNOME;GTK;Core; | ||||
| OnlyShowIn=GNOME; | ||||
| NoDisplay=true | ||||
| X-GNOME-Autostart-Phase=DisplayServer | ||||
| X-GNOME-Autostart-Notify=true | ||||
| X-GNOME-AutoRestart=false | ||||
| @@ -10,7 +10,7 @@ X-GNOME-Bugzilla-Version=@VERSION@ | ||||
| Categories=GNOME;GTK;Core; | ||||
| OnlyShowIn=GNOME; | ||||
| NoDisplay=true | ||||
| X-GNOME-Autostart-Phase=DisplayServer | ||||
| X-GNOME-Autostart-Phase=WindowManager | ||||
| X-GNOME-Provides=panel;windowmanager; | ||||
| X-GNOME-Autostart-Notify=true | ||||
| X-GNOME-AutoRestart=false | ||||
| @@ -51,7 +51,6 @@ | ||||
|     </key> | ||||
|     <key name="looking-glass-history" type="as"> | ||||
|       <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> | ||||
|     </key> | ||||
|     <key name="always-show-log-out" type="b"> | ||||
| @@ -72,16 +71,6 @@ | ||||
|         This key sets the default state of the checkbox. | ||||
|       </_description> | ||||
|     </key> | ||||
|     <key name="had-bluetooth-devices-setup" type="b"> | ||||
|       <default>false</default> | ||||
|       <_summary>Whether the default Bluetooth adapter had set up devices associated to it</_summary> | ||||
|       <_description> | ||||
|         The shell will only show a Bluetooth menu item if a Bluetooth | ||||
|         adapter is powered, or if there were devices set up associated | ||||
|         with the default adapter. This will be reset if the default | ||||
|         adapter is ever seen not to have devices associated to it. | ||||
|       </_description> | ||||
|     </key> | ||||
|     <child name="calendar" schema="org.gnome.shell.calendar"/> | ||||
|     <child name="keybindings" schema="org.gnome.shell.keybindings"/> | ||||
|     <child name="keyboard" schema="org.gnome.shell.keyboard"/> | ||||
|   | ||||
| @@ -37,13 +37,14 @@ stage { | ||||
|   icon-shadow: 0 1px black; } | ||||
|   .button:focus { | ||||
|     color: #eeeeec; | ||||
|     border-color: #215d9c; | ||||
|     box-shadow: inset 0 1px #454f52; | ||||
|     text-shadow: 0 1px black; | ||||
|     icon-shadow: 0 1px black; | ||||
|     box-shadow: inset 0px 0px 0px 1px #215d9c; } | ||||
|     icon-shadow: 0 1px black; } | ||||
|   .button:insensitive { | ||||
|     color: gray; | ||||
|     color: #7f7f7f; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
|     background-color: rgba(62, 67, 69, 0.7); | ||||
|     background-color: rgba(62, 67, 68, 0.7); | ||||
|     box-shadow: none; | ||||
|     text-shadow: none; | ||||
|     icon-shadow: none; } | ||||
| @@ -51,46 +52,9 @@ stage { | ||||
|     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 { | ||||
|   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: gray; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
|     background-color: rgba(62, 67, 69, 0.7); | ||||
|     box-shadow: none; | ||||
|     text-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 */ | ||||
| StEntry { | ||||
| @@ -107,8 +71,8 @@ StEntry { | ||||
|     box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4); | ||||
|     border-color: rgba(166, 166, 166, 0.5); } | ||||
|   StEntry:insensitive { | ||||
|     color: gray; | ||||
|     border-color: #0e0e0e; | ||||
|     color: #7f7f7f; | ||||
|     border-color: #0d0d0d; | ||||
|     box-shadow: none; } | ||||
|   StEntry StIcon.capslock-warning { | ||||
|     icon-size: 16px; | ||||
| @@ -142,7 +106,7 @@ StScrollBar { | ||||
| .slider { | ||||
|   height: 1em; | ||||
|   -slider-height: 0.3em; | ||||
|   -slider-background-color: #0e0e0e; | ||||
|   -slider-background-color: #0d0d0d; | ||||
|   -slider-border-color: black; | ||||
|   -slider-active-background-color: #215d9c; | ||||
|   -slider-active-border-color: #184472; | ||||
| @@ -196,12 +160,11 @@ StScrollBar { | ||||
|   background-color: white; } | ||||
|  | ||||
| .modal-dialog { | ||||
|   border-radius: 9px; | ||||
|   border-radius: 5px; | ||||
|   color: #eeeeec; | ||||
|   background-color: rgba(23, 25, 26, 0.95); | ||||
|   border: 3px solid rgba(238, 238, 236, 0.5); } | ||||
|   .modal-dialog .modal-dialog-content-box { | ||||
|     padding: 24px; } | ||||
|   border: 3px solid rgba(238, 238, 236, 0.5); | ||||
|   padding: 24px; } | ||||
|   .modal-dialog .run-dialog-entry { | ||||
|     width: 20em; | ||||
|     margin-bottom: 6px; } | ||||
| @@ -216,6 +179,10 @@ StScrollBar { | ||||
|     color: #d6d6d1; | ||||
|     padding-bottom: .4em; } | ||||
|  | ||||
| .button-dialog-button-box { | ||||
|   spacing: 18px; | ||||
|   padding-top: 48px; } | ||||
|  | ||||
| .show-processes-dialog-subject, | ||||
| .mount-question-dialog-subject, | ||||
| .end-session-dialog-subject { | ||||
| @@ -408,9 +375,9 @@ StScrollBar { | ||||
|   spacing-rows: 15px; | ||||
|   spacing-columns: 1em; } | ||||
|  | ||||
| /* Popovers/Menus */ | ||||
| /* Popvers/Menus */ | ||||
| .popup-menu { | ||||
|   min-width: 15em; } | ||||
|   min-width: 200px; } | ||||
|   .popup-menu .popup-sub-menu { | ||||
|     background-color: black; | ||||
|     box-shadow: inset 0 -1px 0px #0d0d0d; } | ||||
| @@ -444,7 +411,7 @@ StScrollBar { | ||||
|  | ||||
| .popup-menu-ornament { | ||||
|   text-align: right; | ||||
|   width: 1.2em; } | ||||
|   width: 1em; } | ||||
|  | ||||
| .popup-menu-boxpointer, | ||||
| .candidate-popup-boxpointer { | ||||
| @@ -625,8 +592,6 @@ StScrollBar { | ||||
|   #panel .panel-status-indicators-box, | ||||
|   #panel .panel-status-menu-box { | ||||
|     spacing: 2px; } | ||||
|   #panel .power-status.panel-status-indicators-box { | ||||
|     spacing: 0; } | ||||
|   #panel .screencast-indicator { | ||||
|     color: #f57900; } | ||||
|  | ||||
| @@ -737,7 +702,7 @@ StScrollBar { | ||||
|   border-left-width: 1px; } | ||||
|  | ||||
| .calendar-nonwork-day { | ||||
|   color: gray; } | ||||
|   color: #7f7f7f; } | ||||
|  | ||||
| .calendar-today { | ||||
|   font-weight: bold; | ||||
| @@ -754,7 +719,7 @@ StScrollBar { | ||||
|  | ||||
| /* Message list */ | ||||
| .message-list { | ||||
|   width: 31.5em; } | ||||
|   width: 420px; } | ||||
|  | ||||
| .message-list-sections { | ||||
|   spacing: 1.5em; } | ||||
| @@ -789,12 +754,7 @@ StScrollBar { | ||||
|     padding: 8px 8px 8px 0px; } | ||||
|  | ||||
| .message-icon-bin > StIcon { | ||||
|   icon-size: 32px; } | ||||
|  | ||||
| .message-secondary-bin:ltr { | ||||
|   padding-left: 8px; } | ||||
| .message-secondary-bin:rtl { | ||||
|   padding-right: 8px; } | ||||
|   icon-size: 48px; } | ||||
|  | ||||
| .message-secondary-bin { | ||||
|   color: #999999; } | ||||
| @@ -803,20 +763,14 @@ StScrollBar { | ||||
|   icon-size: 16px; } | ||||
|  | ||||
| .message-title { | ||||
|   font-weight: bold; | ||||
|   font-size: 1.1em; } | ||||
|   font-weight: bold; } | ||||
|  | ||||
| .message-content { | ||||
|   padding: 8px; | ||||
|   font-size: .9em; } | ||||
|   padding: 8px; } | ||||
|  | ||||
| .system-switch-user-submenu-icon.user-icon { | ||||
|   icon-size: 20px; | ||||
|   padding: 0 2px; } | ||||
|  | ||||
| .system-switch-user-submenu-icon.default-icon { | ||||
|   icon-size: 16px; | ||||
|   padding: 0 4px; } | ||||
| .system-switch-user-submenu-icon { | ||||
|   icon-size: 24px; | ||||
|   border: 1px solid rgba(255, 255, 255, 0.4); } | ||||
|  | ||||
| #appMenu { | ||||
|   spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg"); | ||||
| @@ -825,7 +779,7 @@ StScrollBar { | ||||
|     color: transparent; } | ||||
|  | ||||
| .aggregate-menu { | ||||
|   min-width: 21em; } | ||||
|   width: 360px; } | ||||
|   .aggregate-menu .popup-menu-icon { | ||||
|     padding: 0 4px; } | ||||
|  | ||||
| @@ -880,8 +834,7 @@ StScrollBar { | ||||
|   min-width: 470px; } | ||||
|  | ||||
| .nm-dialog-content { | ||||
|   spacing: 20px; | ||||
|   padding: 24px; } | ||||
|   spacing: 20px; } | ||||
|  | ||||
| .nm-dialog-header-hbox { | ||||
|   spacing: 10px; } | ||||
| @@ -962,14 +915,10 @@ StScrollBar { | ||||
| .search-entry { | ||||
|   width: 320px; | ||||
|   padding: 7px 9px; | ||||
|   border-radius: 6px; | ||||
|   border-color: #747467; | ||||
|   color: #eeeeec; | ||||
|   background-color: #2e3436; } | ||||
|   border-radius: 6px; } | ||||
|   .search-entry:focus { | ||||
|     padding: 6px 8px; | ||||
|     border-width: 2px; | ||||
|     border-color: #215d9c; } | ||||
|     border-width: 2px; } | ||||
|   .search-entry .search-entry-icon { | ||||
|     icon-size: 1em; | ||||
|     padding: 0 4px; | ||||
| @@ -1067,7 +1016,7 @@ StScrollBar { | ||||
|     color: white; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
|     background-color: #222728; | ||||
|     box-shadow: inset 0 0 black; | ||||
|     box-shadow: none; | ||||
|     text-shadow: none; | ||||
|     icon-shadow: none; } | ||||
|   .app-view-control:first-child { | ||||
| @@ -1386,9 +1335,10 @@ StScrollBar { | ||||
|   color: white; } | ||||
|   .keyboard-key:focus { | ||||
|     color: #eeeeec; | ||||
|     border-color: #215d9c; | ||||
|     box-shadow: inset 0 1px #454f52; | ||||
|     text-shadow: 0 1px black; | ||||
|     icon-shadow: 0 1px black; | ||||
|     box-shadow: inset 0px 0px 0px 1px #215d9c; } | ||||
|     icon-shadow: 0 1px black; } | ||||
|   .keyboard-key:hover, .keyboard-key:checked { | ||||
|     color: white; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
| @@ -1400,7 +1350,7 @@ StScrollBar { | ||||
|     color: white; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
|     background-color: #222728; | ||||
|     box-shadow: inset 0 0 black; | ||||
|     box-shadow: none; | ||||
|     text-shadow: none; | ||||
|     icon-shadow: none; } | ||||
|   .keyboard-key:grayed { | ||||
| @@ -1493,13 +1443,13 @@ StScrollBar { | ||||
|         color: white; | ||||
|         border-color: rgba(0, 0, 0, 0.7); | ||||
|         background-color: #1c5187; | ||||
|         box-shadow: inset 0 0 black; | ||||
|         box-shadow: none; | ||||
|         text-shadow: none; | ||||
|         icon-shadow: none; } | ||||
|       .login-dialog .modal-dialog-button:default:insensitive { | ||||
|         color: gray; | ||||
|         color: #7f7f7f; | ||||
|         border-color: rgba(0, 0, 0, 0.7); | ||||
|         background-color: rgba(62, 67, 69, 0.7); | ||||
|         background-color: rgba(62, 67, 68, 0.7); | ||||
|         box-shadow: none; | ||||
|         text-shadow: none; | ||||
|         icon-shadow: none; } | ||||
|   | ||||
 Submodule data/theme/gnome-shell-sass updated: 63e059c923...f0a0d1d353
									
								
							| @@ -37,13 +37,14 @@ stage { | ||||
|   icon-shadow: 0 1px black; } | ||||
|   .button:focus { | ||||
|     color: #eeeeec; | ||||
|     border-color: #215d9c; | ||||
|     box-shadow: inset 0 1px #454f52; | ||||
|     text-shadow: 0 1px black; | ||||
|     icon-shadow: 0 1px black; | ||||
|     box-shadow: inset 0px 0px 0px 1px #215d9c; } | ||||
|     icon-shadow: 0 1px black; } | ||||
|   .button:insensitive { | ||||
|     color: #949796; | ||||
|     color: #939695; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
|     background-color: rgba(66, 72, 73, 0.7); | ||||
|     background-color: rgba(66, 71, 73, 0.7); | ||||
|     box-shadow: none; | ||||
|     text-shadow: none; | ||||
|     icon-shadow: none; } | ||||
| @@ -51,46 +52,9 @@ stage { | ||||
|     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 { | ||||
|   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: #949796; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
|     background-color: rgba(66, 72, 73, 0.7); | ||||
|     box-shadow: none; | ||||
|     text-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 */ | ||||
| StEntry { | ||||
| @@ -107,8 +71,8 @@ StEntry { | ||||
|     box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4); | ||||
|     border-color: rgba(154, 154, 142, 0.5); } | ||||
|   StEntry:insensitive { | ||||
|     color: #949796; | ||||
|     border-color: #333636; | ||||
|     color: #939695; | ||||
|     border-color: #323636; | ||||
|     box-shadow: none; } | ||||
|   StEntry StIcon.capslock-warning { | ||||
|     icon-size: 16px; | ||||
| @@ -131,10 +95,10 @@ StScrollBar { | ||||
|     background-color: transparent; } | ||||
|   StScrollBar StButton#vhandle, StScrollBar StButton#hhandle { | ||||
|     border-radius: 8px; | ||||
|     background-color: #a6a8a7; | ||||
|     background-color: #a5a8a6; | ||||
|     margin: 3px; } | ||||
|     StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover { | ||||
|       background-color: #cacbc9; } | ||||
|       background-color: #c9cbc9; } | ||||
|     StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active { | ||||
|       background-color: #215d9c; } | ||||
|  | ||||
| @@ -142,7 +106,7 @@ StScrollBar { | ||||
| .slider { | ||||
|   height: 1em; | ||||
|   -slider-height: 0.3em; | ||||
|   -slider-background-color: #333636; | ||||
|   -slider-background-color: #323636; | ||||
|   -slider-border-color: #1c1f1f; | ||||
|   -slider-active-background-color: #215d9c; | ||||
|   -slider-active-border-color: #184472; | ||||
| @@ -196,12 +160,11 @@ StScrollBar { | ||||
|   background-color: white; } | ||||
|  | ||||
| .modal-dialog { | ||||
|   border-radius: 9px; | ||||
|   border-radius: 5px; | ||||
|   color: #eeeeec; | ||||
|   background-color: rgba(23, 25, 26, 0.95); | ||||
|   border: 3px solid rgba(238, 238, 236, 0.5); } | ||||
|   .modal-dialog .modal-dialog-content-box { | ||||
|     padding: 24px; } | ||||
|   border: 3px solid rgba(238, 238, 236, 0.5); | ||||
|   padding: 24px; } | ||||
|   .modal-dialog .run-dialog-entry { | ||||
|     width: 20em; | ||||
|     margin-bottom: 6px; } | ||||
| @@ -216,6 +179,10 @@ StScrollBar { | ||||
|     color: #d6d6d1; | ||||
|     padding-bottom: .4em; } | ||||
|  | ||||
| .button-dialog-button-box { | ||||
|   spacing: 18px; | ||||
|   padding-top: 48px; } | ||||
|  | ||||
| .show-processes-dialog-subject, | ||||
| .mount-question-dialog-subject, | ||||
| .end-session-dialog-subject { | ||||
| @@ -408,9 +375,9 @@ StScrollBar { | ||||
|   spacing-rows: 15px; | ||||
|   spacing-columns: 1em; } | ||||
|  | ||||
| /* Popovers/Menus */ | ||||
| /* Popvers/Menus */ | ||||
| .popup-menu { | ||||
|   min-width: 15em; } | ||||
|   min-width: 200px; } | ||||
|   .popup-menu .popup-sub-menu { | ||||
|     background-color: #343a3a; | ||||
|     box-shadow: inset 0 -1px 0px #282c2c; } | ||||
| @@ -444,7 +411,7 @@ StScrollBar { | ||||
|  | ||||
| .popup-menu-ornament { | ||||
|   text-align: right; | ||||
|   width: 1.2em; } | ||||
|   width: 1em; } | ||||
|  | ||||
| .popup-menu-boxpointer, | ||||
| .candidate-popup-boxpointer { | ||||
| @@ -625,8 +592,6 @@ StScrollBar { | ||||
|   #panel .panel-status-indicators-box, | ||||
|   #panel .panel-status-menu-box { | ||||
|     spacing: 2px; } | ||||
|   #panel .power-status.panel-status-indicators-box { | ||||
|     spacing: 0; } | ||||
|   #panel .screencast-indicator { | ||||
|     color: #f57900; } | ||||
|  | ||||
| @@ -737,7 +702,7 @@ StScrollBar { | ||||
|   border-left-width: 1px; } | ||||
|  | ||||
| .calendar-nonwork-day { | ||||
|   color: #949796; } | ||||
|   color: #939695; } | ||||
|  | ||||
| .calendar-today { | ||||
|   font-weight: bold; | ||||
| @@ -754,7 +719,7 @@ StScrollBar { | ||||
|  | ||||
| /* Message list */ | ||||
| .message-list { | ||||
|   width: 31.5em; } | ||||
|   width: 420px; } | ||||
|  | ||||
| .message-list-sections { | ||||
|   spacing: 1.5em; } | ||||
| @@ -789,12 +754,7 @@ StScrollBar { | ||||
|     padding: 8px 8px 8px 0px; } | ||||
|  | ||||
| .message-icon-bin > StIcon { | ||||
|   icon-size: 32px; } | ||||
|  | ||||
| .message-secondary-bin:ltr { | ||||
|   padding-left: 8px; } | ||||
| .message-secondary-bin:rtl { | ||||
|   padding-right: 8px; } | ||||
|   icon-size: 48px; } | ||||
|  | ||||
| .message-secondary-bin { | ||||
|   color: #8e8e80; } | ||||
| @@ -803,20 +763,14 @@ StScrollBar { | ||||
|   icon-size: 16px; } | ||||
|  | ||||
| .message-title { | ||||
|   font-weight: bold; | ||||
|   font-size: 1.1em; } | ||||
|   font-weight: bold; } | ||||
|  | ||||
| .message-content { | ||||
|   padding: 8px; | ||||
|   font-size: .9em; } | ||||
|   padding: 8px; } | ||||
|  | ||||
| .system-switch-user-submenu-icon.user-icon { | ||||
|   icon-size: 20px; | ||||
|   padding: 0 2px; } | ||||
|  | ||||
| .system-switch-user-submenu-icon.default-icon { | ||||
|   icon-size: 16px; | ||||
|   padding: 0 4px; } | ||||
| .system-switch-user-submenu-icon { | ||||
|   icon-size: 24px; | ||||
|   border: 1px solid rgba(238, 238, 236, 0.4); } | ||||
|  | ||||
| #appMenu { | ||||
|   spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg"); | ||||
| @@ -825,7 +779,7 @@ StScrollBar { | ||||
|     color: transparent; } | ||||
|  | ||||
| .aggregate-menu { | ||||
|   min-width: 21em; } | ||||
|   width: 360px; } | ||||
|   .aggregate-menu .popup-menu-icon { | ||||
|     padding: 0 4px; } | ||||
|  | ||||
| @@ -880,8 +834,7 @@ StScrollBar { | ||||
|   min-width: 470px; } | ||||
|  | ||||
| .nm-dialog-content { | ||||
|   spacing: 20px; | ||||
|   padding: 24px; } | ||||
|   spacing: 20px; } | ||||
|  | ||||
| .nm-dialog-header-hbox { | ||||
|   spacing: 10px; } | ||||
| @@ -962,14 +915,10 @@ StScrollBar { | ||||
| .search-entry { | ||||
|   width: 320px; | ||||
|   padding: 7px 9px; | ||||
|   border-radius: 6px; | ||||
|   border-color: #747467; | ||||
|   color: #eeeeec; | ||||
|   background-color: #2e3436; } | ||||
|   border-radius: 6px; } | ||||
|   .search-entry:focus { | ||||
|     padding: 6px 8px; | ||||
|     border-width: 2px; | ||||
|     border-color: #215d9c; } | ||||
|     border-width: 2px; } | ||||
|   .search-entry .search-entry-icon { | ||||
|     icon-size: 1em; | ||||
|     padding: 0 4px; | ||||
| @@ -1067,7 +1016,7 @@ StScrollBar { | ||||
|     color: white; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
|     background-color: #222728; | ||||
|     box-shadow: inset 0 0 black; | ||||
|     box-shadow: none; | ||||
|     text-shadow: none; | ||||
|     icon-shadow: none; } | ||||
|   .app-view-control:first-child { | ||||
| @@ -1386,9 +1335,10 @@ StScrollBar { | ||||
|   color: white; } | ||||
|   .keyboard-key:focus { | ||||
|     color: #eeeeec; | ||||
|     border-color: #215d9c; | ||||
|     box-shadow: inset 0 1px #454f52; | ||||
|     text-shadow: 0 1px black; | ||||
|     icon-shadow: 0 1px black; | ||||
|     box-shadow: inset 0px 0px 0px 1px #215d9c; } | ||||
|     icon-shadow: 0 1px black; } | ||||
|   .keyboard-key:hover, .keyboard-key:checked { | ||||
|     color: white; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
| @@ -1400,7 +1350,7 @@ StScrollBar { | ||||
|     color: white; | ||||
|     border-color: rgba(0, 0, 0, 0.7); | ||||
|     background-color: #222728; | ||||
|     box-shadow: inset 0 0 black; | ||||
|     box-shadow: none; | ||||
|     text-shadow: none; | ||||
|     icon-shadow: none; } | ||||
|   .keyboard-key:grayed { | ||||
| @@ -1493,13 +1443,13 @@ StScrollBar { | ||||
|         color: white; | ||||
|         border-color: rgba(0, 0, 0, 0.7); | ||||
|         background-color: #1c5187; | ||||
|         box-shadow: inset 0 0 black; | ||||
|         box-shadow: none; | ||||
|         text-shadow: none; | ||||
|         icon-shadow: none; } | ||||
|       .login-dialog .modal-dialog-button:default:insensitive { | ||||
|         color: #949796; | ||||
|         color: #939695; | ||||
|         border-color: rgba(0, 0, 0, 0.7); | ||||
|         background-color: rgba(66, 72, 73, 0.7); | ||||
|         background-color: rgba(66, 71, 73, 0.7); | ||||
|         box-shadow: none; | ||||
|         text-shadow: none; | ||||
|         icon-shadow: none; } | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 26 KiB | 
| @@ -14,7 +14,7 @@ const ShellEntry = imports.ui.shellEntry; | ||||
| const Tweener = imports.ui.tweener; | ||||
| const UserWidget = imports.ui.userWidget; | ||||
|  | ||||
| const DEFAULT_BUTTON_WELL_ICON_SIZE = 16; | ||||
| const DEFAULT_BUTTON_WELL_ICON_SIZE = 24; | ||||
| const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0; | ||||
| const DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3; | ||||
|  | ||||
| @@ -258,7 +258,6 @@ const AuthPrompt = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _onVerificationComplete: function() { | ||||
|         this.setActorInDefaultButtonWell(null); | ||||
|         this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED; | ||||
| 	this.cancelButton.reactive = false; | ||||
|     }, | ||||
| @@ -282,12 +281,6 @@ const AuthPrompt = new Lang.Class({ | ||||
|         if (oldActor) | ||||
|             Tweener.removeTweens(oldActor); | ||||
|  | ||||
|         let wasSpinner; | ||||
|         if (oldActor == this._spinner.actor) | ||||
|             wasSpinner = true; | ||||
|         else | ||||
|             wasSpinner = false; | ||||
|  | ||||
|         let isSpinner; | ||||
|         if (actor == this._spinner.actor) | ||||
|             isSpinner = true; | ||||
| @@ -297,11 +290,6 @@ const AuthPrompt = new Lang.Class({ | ||||
|         if (this._defaultButtonWellActor != actor && oldActor) { | ||||
|             if (!animate) { | ||||
|                 oldActor.opacity = 0; | ||||
|  | ||||
|                 if (wasSpinner) { | ||||
|                     if (this._spinner) | ||||
|                         this._spinner.stop(); | ||||
|                 } | ||||
|             } else { | ||||
|                 Tweener.addTween(oldActor, | ||||
|                                  { opacity: 0, | ||||
| @@ -310,7 +298,7 @@ const AuthPrompt = new Lang.Class({ | ||||
|                                    transition: 'linear', | ||||
|                                    onCompleteScope: this, | ||||
|                                    onComplete: function() { | ||||
|                                       if (wasSpinner) { | ||||
|                                       if (isSpinner) { | ||||
|                                           if (this._spinner) | ||||
|                                               this._spinner.stop(); | ||||
|                                       } | ||||
| @@ -413,7 +401,7 @@ const AuthPrompt = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     updateSensitivity: function(sensitive) { | ||||
|         this._updateNextButtonSensitivity(sensitive && this._entry.text.length > 0); | ||||
|         this._updateNextButtonSensitivity(sensitive); | ||||
|         this._entry.reactive = sensitive; | ||||
|         this._entry.clutter_text.editable = sensitive; | ||||
|     }, | ||||
| @@ -444,9 +432,8 @@ const AuthPrompt = new Lang.Class({ | ||||
|         let oldStatus = this.verificationStatus; | ||||
|         this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; | ||||
|         this.cancelButton.reactive = true; | ||||
|         this.nextButton.label = _("Next"); | ||||
|  | ||||
|         if (this._userVerifier) | ||||
|         if (oldStatus == AuthPromptStatus.VERIFYING) | ||||
|             this._userVerifier.cancel(); | ||||
|  | ||||
|         this._queryingService = null; | ||||
| @@ -501,7 +488,6 @@ const AuthPrompt = new Lang.Class({ | ||||
|  | ||||
|     finish: function(onComplete) { | ||||
|         if (!this._userVerifier.hasPendingMessages) { | ||||
|             this._userVerifier.clear(); | ||||
|             onComplete(); | ||||
|             return; | ||||
|         } | ||||
| @@ -509,13 +495,12 @@ const AuthPrompt = new Lang.Class({ | ||||
|         let signalId = this._userVerifier.connect('no-more-messages', | ||||
|                                                   Lang.bind(this, function() { | ||||
|                                                       this._userVerifier.disconnect(signalId); | ||||
|                                                       this._userVerifier.clear(); | ||||
|                                                       onComplete(); | ||||
|                                                   })); | ||||
|     }, | ||||
|  | ||||
|     cancel: function() { | ||||
|         if (this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) { | ||||
|         if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) { | ||||
|             return; | ||||
|         } | ||||
|         this.reset(); | ||||
|   | ||||
| @@ -16,34 +16,6 @@ | ||||
|  * 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 Signals = imports.signals; | ||||
|  | ||||
|   | ||||
| @@ -96,7 +96,7 @@ const UserListItem = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _onDestroy: function() { | ||||
|         this.user.disconnect(this._userChangedId); | ||||
|         this._user.disconnect(this._userChangedId); | ||||
|     }, | ||||
|  | ||||
|     _onClicked: function() { | ||||
| @@ -535,9 +535,6 @@ const LoginDialog = new Lang.Class({ | ||||
|         let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 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.y1 = Math.floor(centerY - natHeight / 2); | ||||
|         actorBox.x2 = actorBox.x1 + natWidth; | ||||
| @@ -877,7 +874,7 @@ const LoginDialog = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _loginScreenSessionActivated: function() { | ||||
|         if (this.actor.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING) | ||||
|         if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFICATION_SUCCEEDED) | ||||
|             return; | ||||
|  | ||||
|         Tweener.addTween(this.actor, | ||||
| @@ -894,8 +891,7 @@ const LoginDialog = new Lang.Class({ | ||||
|                            }, | ||||
|                            onUpdateScope: this, | ||||
|                            onComplete: function() { | ||||
|                                if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING) | ||||
|                                    this._authPrompt.reset(); | ||||
|                                this._authPrompt.reset(); | ||||
|                            }, | ||||
|                            onCompleteScope: this }); | ||||
|     }, | ||||
| @@ -924,7 +920,11 @@ const LoginDialog = new Lang.Class({ | ||||
|                            }, | ||||
|                            onUpdateScope: this, | ||||
|                            onComplete: function() { | ||||
|                                this._greeter.call_start_session_when_ready_sync(serviceName, true, null); | ||||
|                                let id = Mainloop.idle_add(Lang.bind(this, function() { | ||||
|                                    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 }); | ||||
|     }, | ||||
|   | ||||
| @@ -448,6 +448,8 @@ const AppSwitcher = new Lang.Class({ | ||||
|             }); | ||||
|             if (appIcon.cachedWindows.length > 0) | ||||
|                 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; | ||||
|   | ||||
| @@ -7,7 +7,7 @@ const St = imports.gi.St; | ||||
| const Signals = imports.signals; | ||||
| const Atk = imports.gi.Atk; | ||||
|  | ||||
| const ANIMATED_ICON_UPDATE_TIMEOUT = 16; | ||||
| const ANIMATED_ICON_UPDATE_TIMEOUT = 100; | ||||
|  | ||||
| const Animation = new Lang.Class({ | ||||
|     Name: 'Animation', | ||||
| @@ -33,7 +33,7 @@ const Animation = new Lang.Class({ | ||||
|             if (this._frame == 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'); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -500,11 +500,6 @@ const AllView = new Lang.Class({ | ||||
|  | ||||
|     _loadApps: function() { | ||||
|         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(); | ||||
|         }).map(function(app) { | ||||
|             return app.get_id(); | ||||
| @@ -1066,7 +1061,7 @@ const AppSearchProvider = new Lang.Class({ | ||||
|  | ||||
|     getInitialResultSet: function(terms, callback, cancellable) { | ||||
|         let query = terms.join(' '); | ||||
|         let groups = Shell.AppSystem.search(query); | ||||
|         let groups = Gio.DesktopAppInfo.search(query); | ||||
|         let usage = Shell.AppUsage.get_default(); | ||||
|         let results = []; | ||||
|         groups.forEach(function(group) { | ||||
| @@ -1295,10 +1290,7 @@ const FolderIcon = new Lang.Class({ | ||||
|             if (!_listsIntersect(folderCategories, appCategories)) | ||||
|                 return; | ||||
|  | ||||
|             try { | ||||
|                 addAppId(appInfo.get_id()); // catch invalid file encodings | ||||
|             } catch(e) { | ||||
|             } | ||||
|             addAppId(appInfo.get_id()); | ||||
|         }); | ||||
|  | ||||
|         this.actor.visible = this.view.getAllItems().length > 0; | ||||
|   | ||||
| @@ -26,7 +26,6 @@ const RENAMED_DESKTOP_IDS = { | ||||
|     'gnome-photos.desktop': 'org.gnome.Photos.desktop', | ||||
|     'gnome-screenshot.desktop': 'org.gnome.Screenshot.desktop', | ||||
|     'gnome-software.desktop': 'org.gnome.Software.desktop', | ||||
|     'gnome-terminal.desktop': 'org.gnome.Terminal.desktop', | ||||
|     'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop', | ||||
|     'gnomine.desktop': 'gnome-mines.desktop', | ||||
|     'gnotravex.desktop': 'gnome-tetravex.desktop', | ||||
|   | ||||
| @@ -144,7 +144,6 @@ const BackgroundCache = new Lang.Class({ | ||||
|         this._pendingFileLoads = []; | ||||
|         this._fileMonitors = {}; | ||||
|         this._backgroundSources = {}; | ||||
|         this._animations = {}; | ||||
|     }, | ||||
|  | ||||
|     monitorFile: function(file) { | ||||
| @@ -163,13 +162,12 @@ const BackgroundCache = new Lang.Class({ | ||||
|  | ||||
|     getAnimation: function(params) { | ||||
|         params = Params.parse(params, { file: null, | ||||
|                                         settingsSchema: null, | ||||
|                                         onLoaded: null }); | ||||
|  | ||||
|         if (this._animations[params.settingsSchema] && _fileEqual0(this._animationFile, params.file)) { | ||||
|         if (_fileEqual0(this._animationFile, params.file)) { | ||||
|             if (params.onLoaded) { | ||||
|                 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; | ||||
|                 })); | ||||
|                 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 }); | ||||
|  | ||||
|         animation.load(Lang.bind(this, function() { | ||||
|                            this._animations[params.settingsSchema] = animation; | ||||
|                            this._animationFile = params.file; | ||||
|                            this._animation = animation; | ||||
|  | ||||
|                            if (params.onLoaded) { | ||||
|                                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; | ||||
|                                })); | ||||
|                                GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); | ||||
| @@ -404,18 +403,17 @@ const Background = new Lang.Class({ | ||||
|  | ||||
|     _loadAnimation: function(file) { | ||||
|         this._cache.getAnimation({ file: file, | ||||
|                                    settingsSchema: this._settings.schema_id, | ||||
|                                    onLoaded: Lang.bind(this, function(animation) { | ||||
|                                        this._animation = animation; | ||||
|                                          onLoaded: Lang.bind(this, function(animation) { | ||||
|                                              this._animation = animation; | ||||
|  | ||||
|                                        if (!this._animation || this._cancellable.is_cancelled()) { | ||||
|                                            this._setLoaded(); | ||||
|                                            return; | ||||
|                                        } | ||||
|                                              if (!this._animation || this._cancellable.is_cancelled()) { | ||||
|                                                  this._setLoaded(); | ||||
|                                                  return; | ||||
|                                              } | ||||
|  | ||||
|                                        this._updateAnimation(); | ||||
|                                        this._watchFile(file); | ||||
|                                    }) | ||||
|                                              this._updateAnimation(); | ||||
|                                              this._watchFile(file); | ||||
|                                          }) | ||||
|                                  }); | ||||
|     }, | ||||
|  | ||||
|   | ||||
| @@ -24,8 +24,6 @@ const MSECS_IN_DAY = 24 * 60 * 60 * 1000; | ||||
| const SHOW_WEEKDATE_KEY = 'show-weekdate'; | ||||
| const ELLIPSIS_CHAR = '\u2026'; | ||||
|  | ||||
| const MESSAGE_ICON_SIZE = 32; | ||||
|  | ||||
| const MESSAGE_ANIMATION_TIME = 0.1; | ||||
|  | ||||
| const DEFAULT_EXPAND_LINES = 6; | ||||
| @@ -725,7 +723,7 @@ const Calendar = new Lang.Class({ | ||||
|         // nRows here means 6 weeks + one header + one navbar | ||||
|         let nRows = 8; | ||||
|         while (row < 8) { | ||||
|             let button = new St.Button({ label: iter.toLocaleFormat(C_("date day number format", "%d")), | ||||
|             let button = new St.Button({ label: iter.getDate().toString(), | ||||
|                                          can_focus: true }); | ||||
|             let rtl = button.get_text_direction() == Clutter.TextDirection.RTL; | ||||
|  | ||||
| @@ -978,6 +976,7 @@ const Message = new Lang.Class({ | ||||
|         this._iconBin = new St.Bin({ style_class: 'message-icon-bin', | ||||
|                                      y_expand: true, | ||||
|                                      visible: false }); | ||||
|         this._iconBin.set_y_align(Clutter.ActorAlign.START); | ||||
|         hbox.add_actor(this._iconBin); | ||||
|  | ||||
|         let contentBox = new St.BoxLayout({ style_class: 'message-content', | ||||
| @@ -1230,7 +1229,7 @@ const NotificationMessage = new Lang.Class({ | ||||
|                 this._closed = true; | ||||
|                 this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED); | ||||
|             })); | ||||
|         this._destroyId = notification.connect('destroy', Lang.bind(this, | ||||
|         notification.connect('destroy', Lang.bind(this, | ||||
|             function() { | ||||
|                 if (!this._closed) | ||||
|                     this.close(); | ||||
| @@ -1241,10 +1240,9 @@ const NotificationMessage = new Lang.Class({ | ||||
|  | ||||
|     _getIcon: function() { | ||||
|         if (this.notification.gicon) | ||||
|             return new St.Icon({ gicon: this.notification.gicon, | ||||
|                                  icon_size: MESSAGE_ICON_SIZE }); | ||||
|             return new St.Icon({ gicon: this.notification.gicon, icon_size: 48 }); | ||||
|         else | ||||
|             return this.notification.source.createIcon(MESSAGE_ICON_SIZE); | ||||
|             return this.notification.source.createIcon(48); | ||||
|     }, | ||||
|  | ||||
|     _onUpdated: function(n, clear) { | ||||
| @@ -1262,10 +1260,6 @@ const NotificationMessage = new Lang.Class({ | ||||
|         if (this._updatedId) | ||||
|             this.notification.disconnect(this._updatedId); | ||||
|         this._updatedId = 0; | ||||
|  | ||||
|         if (this._destroyId) | ||||
|             this.notification.disconnect(this._destroyId); | ||||
|         this._destroyId = 0; | ||||
|     } | ||||
| }); | ||||
|  | ||||
|   | ||||
| @@ -313,10 +313,6 @@ const AutorunSource = new Lang.Class({ | ||||
|  | ||||
|     getIcon: function() { | ||||
|         return this.mount.get_icon(); | ||||
|     }, | ||||
|  | ||||
|     _createPolicy: function() { | ||||
|         return new MessageTray.NotificationApplicationPolicy('org.gnome.Nautilus'); | ||||
|     } | ||||
| }); | ||||
|  | ||||
| @@ -329,6 +325,9 @@ const AutorunNotification = new Lang.Class({ | ||||
|  | ||||
|         this._manager = manager; | ||||
|         this._mount = source.mount; | ||||
|  | ||||
|         // set the notification to urgent, so that it expands out | ||||
|         this.setUrgency(MessageTray.Urgency.CRITICAL); | ||||
|     }, | ||||
|  | ||||
|     createBanner: function() { | ||||
|   | ||||
| @@ -9,15 +9,9 @@ const Gio = imports.gi.Gio; | ||||
| const GObject = imports.gi.GObject; | ||||
| const Gcr = imports.gi.Gcr; | ||||
|  | ||||
| const Animation = imports.ui.animation; | ||||
| const ModalDialog = imports.ui.modalDialog; | ||||
| const ShellEntry = imports.ui.shellEntry; | ||||
| 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({ | ||||
|     Name: 'KeyringDialog', | ||||
| @@ -64,47 +58,27 @@ const KeyringDialog = new Lang.Class({ | ||||
|                             { y_fill:  true, | ||||
|                               y_align: St.Align.START }); | ||||
|  | ||||
|         this._workSpinner = null; | ||||
|         this._controlTable = null; | ||||
|  | ||||
|  | ||||
|         this._cancelButton = this.addButton({ label: '', | ||||
|                                               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: '', | ||||
|                                                 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('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() { | ||||
|         let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL }); | ||||
|         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 }); | ||||
|             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) { | ||||
|                 layout.attach(this._workSpinner.actor, 0, row, 1, 1); | ||||
|                 layout.attach(this._passwordEntry, 1, row, 1, 1); | ||||
|                 layout.attach(label, 2, row, 1, 1); | ||||
|                 layout.attach(this._passwordEntry, 0, row, 1, 1); | ||||
|                 layout.attach(label, 1, row, 1, 1); | ||||
|             } else { | ||||
|                 layout.attach(label, 0, row, 1, 1); | ||||
|                 layout.attach(this._passwordEntry, 1, row, 1, 1); | ||||
|                 layout.attach(this._workSpinner.actor, 2, row, 1, 1); | ||||
|             } | ||||
|             row++; | ||||
|         } else { | ||||
|             this._workSpinner = null; | ||||
|             this._passwordEntry = null; | ||||
|         } | ||||
|  | ||||
| @@ -211,7 +178,7 @@ const KeyringDialog = new Lang.Class({ | ||||
|  | ||||
|         this._continueButton.can_focus = sensitive; | ||||
|         this._continueButton.reactive = sensitive; | ||||
|         this._setWorking(!sensitive); | ||||
|         this.setWorking(!sensitive); | ||||
|     }, | ||||
|  | ||||
|     _ensureOpen: function() { | ||||
|   | ||||
| @@ -13,19 +13,13 @@ const Mainloop = imports.mainloop; | ||||
| const Polkit = imports.gi.Polkit; | ||||
| const PolkitAgent = imports.gi.PolkitAgent; | ||||
|  | ||||
| const Animation = imports.ui.animation; | ||||
| const Components = imports.ui.components; | ||||
| const ModalDialog = imports.ui.modalDialog; | ||||
| const ShellEntry = imports.ui.shellEntry; | ||||
| const UserWidget = imports.ui.userWidget; | ||||
| const Tweener = imports.ui.tweener; | ||||
|  | ||||
| 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({ | ||||
|     Name: 'AuthenticationDialog', | ||||
|     Extends: ModalDialog.ModalDialog, | ||||
| @@ -142,13 +136,6 @@ const AuthenticationDialog = new Lang.Class({ | ||||
|         this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate)); | ||||
|         this._passwordBox.add(this._passwordEntry, | ||||
|                               { 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._passwordBox.hide(); | ||||
|  | ||||
| @@ -178,10 +165,17 @@ const AuthenticationDialog = new Lang.Class({ | ||||
|  | ||||
|         this._cancelButton = this.addButton({ label: _("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"), | ||||
|                                           action: Lang.bind(this, this._onAuthenticateButtonPressed), | ||||
|                                           default: true }); | ||||
|                                           default: true }, | ||||
|                                         { expand: false, x_fill: false, x_align: St.Align.END }); | ||||
|  | ||||
|         this._doneEmitted = false; | ||||
|  | ||||
| @@ -189,30 +183,6 @@ const AuthenticationDialog = new Lang.Class({ | ||||
|         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() { | ||||
|         this.destroySession(); | ||||
|         this._session = new PolkitAgent.Session({ identity: this._identityToAuth, | ||||
| @@ -259,7 +229,7 @@ const AuthenticationDialog = new Lang.Class({ | ||||
|  | ||||
|         this._okButton.can_focus = sensitive; | ||||
|         this._okButton.reactive = sensitive; | ||||
|         this._setWorking(!sensitive); | ||||
|         this.setWorking(!sensitive); | ||||
|     }, | ||||
|  | ||||
|     _onEntryActivate: function() { | ||||
|   | ||||
| @@ -303,8 +303,6 @@ const ChatSource = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _createPolicy: function() { | ||||
|         if (this._account.protocol_name == 'irc') | ||||
|             return new MessageTray.NotificationApplicationPolicy('org.gnome.Polari'); | ||||
|         return new MessageTray.NotificationApplicationPolicy('empathy'); | ||||
|     }, | ||||
|  | ||||
|   | ||||
| @@ -644,14 +644,15 @@ const Dash = new Lang.Class({ | ||||
|         let firstIcon = firstButton._delegate.icon; | ||||
|  | ||||
|         let minHeight, natHeight; | ||||
|         let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; | ||||
|  | ||||
|         // Enforce the current icon size during the size request | ||||
|         firstIcon.icon.ensure_style(); | ||||
|         let [currentWidth, currentHeight] = firstIcon.icon.get_size(); | ||||
|         firstIcon.icon.set_size(this.iconSize * scaleFactor, this.iconSize * scaleFactor); | ||||
|         firstIcon.setIconSize(this.iconSize); | ||||
|         [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 | ||||
|         availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) + | ||||
| @@ -659,10 +660,6 @@ const Dash = new Lang.Class({ | ||||
|  | ||||
|         let availSize = availHeight / iconChildren.length; | ||||
|  | ||||
|         let iconSizes = baseIconSizes.map(function(s) { | ||||
|             return s * scaleFactor; | ||||
|         }); | ||||
|  | ||||
|         let newIconSize = baseIconSizes[0]; | ||||
|         for (let i = 0; i < iconSizes.length; i++) { | ||||
|             if (iconSizes[i] < availSize) | ||||
|   | ||||
| @@ -24,6 +24,9 @@ const KEYBOARD_TYPE = 'keyboard-type'; | ||||
| const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications'; | ||||
| 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_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._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA }); | ||||
|         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._lastDeviceId = null; | ||||
|  | ||||
|   | ||||
| @@ -4,7 +4,6 @@ const Atspi = imports.gi.Atspi; | ||||
| const Clutter = imports.gi.Clutter; | ||||
| const GDesktopEnums = imports.gi.GDesktopEnums; | ||||
| const Gio = imports.gi.Gio; | ||||
| const GLib = imports.gi.GLib; | ||||
| const Shell = imports.gi.Shell; | ||||
| const St = imports.gi.St; | ||||
| const Lang = imports.lang; | ||||
| @@ -23,8 +22,6 @@ const MOUSE_POLL_FREQUENCY = 50; | ||||
| const CROSSHAIRS_CLIP_SIZE = [100, 100]; | ||||
| const NO_CHANGE = 0.0; | ||||
|  | ||||
| const POINTER_REST_TIME = 1000; // milliseconds | ||||
|  | ||||
| // Settings | ||||
| const APPLICATIONS_SCHEMA       = 'org.gnome.desktop.a11y.applications'; | ||||
| const SHOW_KEY                  = 'screen-magnifier-enabled'; | ||||
| @@ -712,9 +709,6 @@ const ZoomRegion = new Lang.Class({ | ||||
|         this._xCaret = 0; | ||||
|         this._yCaret = 0; | ||||
|  | ||||
|         this._pointerIdleMonitor = Meta.IdleMonitor.get_for_device(Meta.VIRTUAL_CORE_POINTER_ID); | ||||
|         this._scrollContentsTimerId = 0; | ||||
|  | ||||
|         Main.layoutManager.connect('monitors-changed', | ||||
|                                    Lang.bind(this, this._monitorsChanged)); | ||||
|         this._focusCaretTracker.connect('caret-moved', | ||||
| @@ -1074,26 +1068,6 @@ const ZoomRegion = new Lang.Class({ | ||||
|         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: | ||||
|      * 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. | ||||
|      */ | ||||
|     scrollContentsTo: function(x, y) { | ||||
|         this._clearScrollContentsTimer(); | ||||
|  | ||||
|         this._followingCursor = false; | ||||
|         this._changeROI({ xCenter: x, | ||||
|                           yCenter: y }); | ||||
| @@ -1409,7 +1381,7 @@ const ZoomRegion = new Lang.Class({ | ||||
|         else if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.CENTERED) | ||||
|             [xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret); | ||||
|  | ||||
|         this._scrollContentsToDelayed(xCaret, yCaret); | ||||
|         this.scrollContentsTo(xCaret, yCaret); | ||||
|     }, | ||||
|  | ||||
|     _centerFromFocusPosition: function() { | ||||
| @@ -1423,7 +1395,7 @@ const ZoomRegion = new Lang.Class({ | ||||
|         else if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.CENTERED) | ||||
|             [xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus); | ||||
|  | ||||
|         this._scrollContentsToDelayed(xFocus, yFocus); | ||||
|         this.scrollContentsTo(xFocus, yFocus); | ||||
|     }, | ||||
|  | ||||
|     _centerFromPointPush: function(xPoint, yPoint) { | ||||
|   | ||||
| @@ -78,7 +78,6 @@ let _startDate; | ||||
| let _defaultCssStylesheet = null; | ||||
| let _cssStylesheet = null; | ||||
| let _a11ySettings = null; | ||||
| let _themeResource = null; | ||||
|  | ||||
| function _sessionUpdated() { | ||||
|     if (sessionMode.isPrimary) | ||||
| @@ -138,7 +137,9 @@ function _initializeUI() { | ||||
|     Shell.WindowTracker.get_default(); | ||||
|     Shell.AppUsage.get_default(); | ||||
|  | ||||
|     reloadThemeResource(); | ||||
|     let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource'); | ||||
|     resource._register(); | ||||
|  | ||||
|     _loadDefaultStylesheet(); | ||||
|  | ||||
|     // Setup the stage hierarchy early | ||||
| @@ -289,14 +290,6 @@ function setThemeStylesheet(cssStylesheet) { | ||||
|     _cssStylesheet = cssStylesheet ? Gio.File.new_for_path(cssStylesheet) : null; | ||||
| } | ||||
|  | ||||
| function reloadThemeResource() { | ||||
|     if (_themeResource) | ||||
|         _themeResource._unregister(); | ||||
|  | ||||
|     _themeResource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource'); | ||||
|     _themeResource._register(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * loadTheme: | ||||
|  * | ||||
|   | ||||
| @@ -14,6 +14,7 @@ const Atk = imports.gi.Atk; | ||||
|  | ||||
| const Params = imports.misc.params; | ||||
|  | ||||
| const Animation = imports.ui.animation; | ||||
| const Layout = imports.ui.layout; | ||||
| const Lightbox = imports.ui.lightbox; | ||||
| const Main = imports.ui.main; | ||||
| @@ -22,6 +23,10 @@ const Tweener = imports.ui.tweener; | ||||
| const OPEN_AND_CLOSE_TIME = 0.1; | ||||
| 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 = { | ||||
|     OPENED: 0, | ||||
|     CLOSED: 1, | ||||
| @@ -74,9 +79,7 @@ const ModalDialog = new Lang.Class({ | ||||
|         this._group.add_actor(this._backgroundBin); | ||||
|  | ||||
|         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 | ||||
|         // mode accordingly so wrapped labels are handled correctly during | ||||
|         // size requests. | ||||
| @@ -97,8 +100,7 @@ const ModalDialog = new Lang.Class({ | ||||
|         this.backgroundStack.add_actor(this.dialogLayout); | ||||
|  | ||||
|  | ||||
|         this.contentLayout = new St.BoxLayout({ vertical: true, | ||||
|                                                 style_class: "modal-dialog-content-box" }); | ||||
|         this.contentLayout = new St.BoxLayout({ vertical: true }); | ||||
|         this.dialogLayout.add(this.contentLayout, | ||||
|                               { expand:  true, | ||||
|                                 x_fill:  true, | ||||
| @@ -106,7 +108,8 @@ const ModalDialog = new Lang.Class({ | ||||
|                                 x_align: St.Align.MIDDLE, | ||||
|                                 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, | ||||
|                               { x_align: St.Align.MIDDLE, | ||||
|                                 y_align: St.Align.END }); | ||||
| @@ -115,6 +118,8 @@ const ModalDialog = new Lang.Class({ | ||||
|         this._initialKeyFocus = this.dialogLayout; | ||||
|         this._initialKeyFocusDestroyId = 0; | ||||
|         this._savedKeyFocus = null; | ||||
|  | ||||
|         this._workSpinner = null; | ||||
|     }, | ||||
|  | ||||
|     destroy: function() { | ||||
| @@ -142,12 +147,16 @@ const ModalDialog = new Lang.Class({ | ||||
|             else | ||||
|                 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) { | ||||
|         let label = buttonInfo['label'] | ||||
|     addButton: function(buttonInfo, layoutInfo) { | ||||
|         let label = buttonInfo['label']; | ||||
|         let action = buttonInfo['action']; | ||||
|         let key = buttonInfo['key']; | ||||
|         let isDefault = buttonInfo['default']; | ||||
| @@ -161,12 +170,10 @@ const ModalDialog = new Lang.Class({ | ||||
|         else | ||||
|             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, | ||||
|                                      reactive:    true, | ||||
|                                      can_focus:   true, | ||||
|                                      x_expand:    true, | ||||
|                                      y_expand:    true, | ||||
|                                      label:       label }); | ||||
|         button.connect('clicked', action); | ||||
|  | ||||
| @@ -181,11 +188,47 @@ const ModalDialog = new Lang.Class({ | ||||
|         for (let i in keys) | ||||
|             this._buttonKeys[keys[i]] = buttonInfo; | ||||
|  | ||||
|         this.buttonLayout.add_actor(button); | ||||
|         this.buttonLayout.add(button, layoutInfo); | ||||
|  | ||||
|         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) { | ||||
|         this._pressedKey = event.get_key_symbol(); | ||||
|         return Clutter.EVENT_PROPAGATE; | ||||
|   | ||||
| @@ -107,6 +107,13 @@ const Overview = new Lang.Class({ | ||||
|  | ||||
|         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(); | ||||
|         this._stack = new Clutter.Actor({ layout_manager: layout }); | ||||
|         this._stack.add_constraint(new LayoutManager.MonitorConstraint({ primary: true })); | ||||
| @@ -121,11 +128,6 @@ const Overview = new Lang.Class({ | ||||
|                                             y_expand: true }); | ||||
|         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(); | ||||
|         Main.layoutManager.overviewGroup.add_child(this._backgroundGroup); | ||||
|         this._bgManagers = []; | ||||
|   | ||||
| @@ -30,7 +30,7 @@ const APP_MENU_ICON_MARGIN = 0; | ||||
|  | ||||
| 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, | ||||
| // we draw background and borders the same way, e.g. drawing | ||||
| @@ -95,7 +95,6 @@ const AppMenuButton = new Lang.Class({ | ||||
|         this._startingApps = []; | ||||
|  | ||||
|         this._menuManager = panel.menuManager; | ||||
|         this._gtkSettings = Gtk.Settings.get_default(); | ||||
|         this._targetApp = null; | ||||
|         this._appMenuNotifyId = 0; | ||||
|         this._actionGroupNotifyId = 0; | ||||
| @@ -124,14 +123,11 @@ const AppMenuButton = new Lang.Class({ | ||||
|         this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM); | ||||
|         this._container.add_actor(this._arrow); | ||||
|  | ||||
|         this._visible = this._gtkSettings.gtk_shell_shows_app_menu && | ||||
|                         !Main.overview.visible; | ||||
|         this._visible = !Main.overview.visible; | ||||
|         if (!this._visible) | ||||
|             this.actor.hide(); | ||||
|         this._overviewHidingId = Main.overview.connect('hiding', 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; | ||||
|  | ||||
| @@ -309,9 +305,7 @@ const AppMenuButton = new Lang.Class({ | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         let visible = (this._targetApp != null && | ||||
|                        this._gtkSettings.gtk_shell_shows_app_menu && | ||||
|                        !Main.overview.visibleTarget); | ||||
|         let visible = (this._targetApp != null && !Main.overview.visibleTarget); | ||||
|         if (visible) | ||||
|             this.show(); | ||||
|         else | ||||
| @@ -384,10 +378,6 @@ const AppMenuButton = new Lang.Class({ | ||||
|             Main.overview.disconnect(this._overviewShowingId); | ||||
|             this._overviewShowingId = 0; | ||||
|         } | ||||
|         if (this._showsAppMenuId > 0) { | ||||
|             this._gtkSettings.disconnect(this._showsAppMenuId); | ||||
|             this._showsAppMenuId = 0; | ||||
|         } | ||||
|         if (this._switchWorkspaceNotifyId > 0) { | ||||
|             global.window_manager.disconnect(this._switchWorkspaceNotifyId); | ||||
|             this._switchWorkspaceNotifyId = 0; | ||||
| @@ -459,8 +449,7 @@ const ActivitiesButton = new Lang.Class({ | ||||
|  | ||||
|         if (event.type() == Clutter.EventType.TOUCH_END || | ||||
|             event.type() == Clutter.EventType.BUTTON_RELEASE) | ||||
|             if (Main.overview.shouldToggleByCornerOrButton()) | ||||
|                 Main.overview.toggle(); | ||||
|             Main.overview.toggle(); | ||||
|  | ||||
|         return Clutter.EVENT_PROPAGATE; | ||||
|     }, | ||||
| @@ -468,8 +457,7 @@ const ActivitiesButton = new Lang.Class({ | ||||
|     _onKeyRelease: function(actor, event) { | ||||
|         let symbol = event.get_key_symbol(); | ||||
|         if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) { | ||||
|             if (Main.overview.shouldToggleByCornerOrButton()) | ||||
|                 Main.overview.toggle(); | ||||
|             Main.overview.toggle(); | ||||
|         } | ||||
|         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({ | ||||
|     Name: 'AggregateMenu', | ||||
|     Extends: PanelMenu.Button, | ||||
|  | ||||
|     _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'); | ||||
|  | ||||
|         let menuLayout = new AggregateLayout(); | ||||
|         this.menu.box.set_layout_manager(menuLayout); | ||||
|  | ||||
|         this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' }); | ||||
|         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._rfkill.menu); | ||||
|         this.menu.addMenuItem(this._power.menu); | ||||
|         this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); | ||||
|         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); | ||||
|     }, | ||||
| }); | ||||
|  | ||||
|   | ||||
| @@ -396,7 +396,6 @@ const PopupImageMenuItem = new Lang.Class({ | ||||
|         this.actor.add_child(this.label); | ||||
|         this._icon = new St.Icon({ style_class: 'popup-menu-icon' }); | ||||
|         this.actor.add_child(this._icon, { align: St.Align.END }); | ||||
|         this.actor.label_actor = this.label; | ||||
|  | ||||
|         this.setIcon(iconName); | ||||
|     }, | ||||
| @@ -1060,6 +1059,11 @@ const PopupSubMenuMenuItem = new Lang.Class({ | ||||
|         let expander = new St.Bin({ style_class: 'popup-menu-item-expander' }); | ||||
|         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.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 }); | ||||
|  | ||||
|   | ||||
| @@ -61,7 +61,6 @@ const RunDialog = new Lang.Class({ | ||||
|  | ||||
|                                    // rt is short for "reload theme" | ||||
|                                    'rt': Lang.bind(this, function() { | ||||
|                                        Main.reloadThemeResource(); | ||||
|                                        Main.loadTheme(); | ||||
|                                    }) | ||||
|                                  }; | ||||
|   | ||||
| @@ -1,8 +1,11 @@ | ||||
| // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- | ||||
|  | ||||
| const Clutter = imports.gi.Clutter; | ||||
| const GLib = imports.gi.GLib; | ||||
| const Gio = imports.gi.Gio; | ||||
| const GnomeBluetooth = imports.gi.GnomeBluetooth; | ||||
| const Lang = imports.lang; | ||||
| const St = imports.gi.St; | ||||
|  | ||||
| const Main = imports.ui.main; | ||||
| const PanelMenu = imports.ui.panelMenu; | ||||
| @@ -20,8 +23,6 @@ const RfkillManagerInterface = '<node> \ | ||||
|  | ||||
| const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface); | ||||
|  | ||||
| const HAD_BLUETOOTH_DEVICES_SETUP = 'had-bluetooth-devices-setup'; | ||||
|  | ||||
| const Indicator = new Lang.Class({ | ||||
|     Name: 'BTIndicator', | ||||
|     Extends: PanelMenu.SystemIndicator, | ||||
| @@ -31,7 +32,6 @@ const Indicator = new Lang.Class({ | ||||
|  | ||||
|         this._indicator = this._addIndicator(); | ||||
|         this._indicator.icon_name = 'bluetooth-active-symbolic'; | ||||
|         this._hadSetupDevices = global.settings.get_boolean(HAD_BLUETOOTH_DEVICES_SETUP); | ||||
|  | ||||
|         this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, | ||||
|                                              Lang.bind(this, function(proxy, error) { | ||||
| @@ -44,15 +44,13 @@ const Indicator = new Lang.Class({ | ||||
|                                              })); | ||||
|         this._proxy.connect('g-properties-changed', Lang.bind(this, this._sync)); | ||||
|  | ||||
|         // The Bluetooth menu only appears when Bluetooth is in use, | ||||
|         // so just statically build it with a "Turn Off" menu item. | ||||
|         this._item = new PopupMenu.PopupSubMenuMenuItem(_("Bluetooth"), true); | ||||
|         this._item.icon.icon_name = 'bluetooth-active-symbolic'; | ||||
|  | ||||
|         this._toggleItem = new PopupMenu.PopupMenuItem(''); | ||||
|         this._toggleItem.connect('activate', Lang.bind(this, function() { | ||||
|             this._proxy.BluetoothAirplaneMode = !this._proxy.BluetoothAirplaneMode; | ||||
|         this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() { | ||||
|             this._proxy.BluetoothAirplaneMode = true; | ||||
|         })); | ||||
|         this._item.menu.addMenuItem(this._toggleItem); | ||||
|  | ||||
|         this._item.menu.addSettingsAction(_("Bluetooth Settings"), 'gnome-bluetooth-panel.desktop'); | ||||
|         this.menu.addMenuItem(this._item); | ||||
|  | ||||
| @@ -70,75 +68,41 @@ const Indicator = new Lang.Class({ | ||||
|         while (ret) { | ||||
|             let isDefault = this._model.get_value(iter, | ||||
|                                                   GnomeBluetooth.Column.DEFAULT); | ||||
|             let isPowered = this._model.get_value(iter, | ||||
|                                                   GnomeBluetooth.Column.POWERED); | ||||
|             if (isDefault && isPowered) | ||||
|             if (isDefault) | ||||
|                 return iter; | ||||
|             ret = this._model.iter_next(iter); | ||||
|         } | ||||
|         return null; | ||||
|     }, | ||||
|  | ||||
|     // nDevices is the number of devices setup for the current default | ||||
|     // adapter if one exists and is powered. If unpowered or unavailable, | ||||
|     // nDevice is "1" if it had setup devices associated to it the last | ||||
|     // time it was seen, and "-1" if not. | ||||
|     // | ||||
|     // nConnectedDevices is the number of devices connected to the default | ||||
|     // adapter if one exists and is powered, or -1 if it's not available. | ||||
|     _getNDevices: function() { | ||||
|     _getNConnectedDevices: function() { | ||||
|         let adapter = this._getDefaultAdapter(); | ||||
|         if (!adapter) | ||||
|             return [ this._hadSetupDevices ? 1 : -1, -1 ]; | ||||
|             return 0; | ||||
|  | ||||
|         let nConnectedDevices = 0; | ||||
|         let nDevices = 0; | ||||
|         let [ret, iter] = this._model.iter_children(adapter); | ||||
|         while (ret) { | ||||
|             let isConnected = this._model.get_value(iter, | ||||
|                                                     GnomeBluetooth.Column.CONNECTED); | ||||
|             if (isConnected) | ||||
|                 nConnectedDevices++; | ||||
|  | ||||
|             let isPaired = this._model.get_value(iter, | ||||
|                                                  GnomeBluetooth.Column.PAIRED); | ||||
|             let isTrusted = this._model.get_value(iter, | ||||
|                                                   GnomeBluetooth.Column.TRUSTED); | ||||
|             if (isPaired || isTrusted) | ||||
|                 nDevices++; | ||||
|             ret = this._model.iter_next(iter); | ||||
|         } | ||||
|  | ||||
|         if (this._hadSetupDevices != (nDevices > 0)) { | ||||
|             this._hadSetupDevices = !this._hadSetupDevices; | ||||
|             global.settings.set_boolean(HAD_BLUETOOTH_DEVICES_SETUP, this._hadSetupDevices); | ||||
|         } | ||||
|  | ||||
|         return [ nDevices, nConnectedDevices]; | ||||
|         return nDevices; | ||||
|     }, | ||||
|  | ||||
|     _sync: function() { | ||||
|         let [ nDevices, nConnectedDevices ] = this._getNDevices(); | ||||
|         let nDevices = this._getNConnectedDevices(); | ||||
|         let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; | ||||
|  | ||||
|         this.menu.setSensitive(sensitive); | ||||
|         this._indicator.visible = nConnectedDevices > 0; | ||||
|         this._indicator.visible = nDevices > 0; | ||||
|         this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode; | ||||
|  | ||||
|         // Remember if there were setup devices and show the menu | ||||
|         // if we've seen setup devices and we're not hard blocked | ||||
|         if (nDevices > 0) | ||||
|             this._item.actor.visible = !this._proxy.BluetoothHardwareAirplaneMode; | ||||
|             this._item.status.text = ngettext("%d Connected Device", "%d Connected Devices", nDevices).format(nDevices); | ||||
|         else | ||||
|             this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode; | ||||
|  | ||||
|         if (nConnectedDevices > 0) | ||||
|             /* Translators: this is the number of connected bluetooth devices */ | ||||
|             this._item.label.text = ngettext("%d Connected", "%d Connected", nConnectedDevices).format(nConnectedDevices); | ||||
|         else if (nConnectedDevices == -1) | ||||
|             this._item.label.text = _("Off"); | ||||
|         else | ||||
|             this._item.label.text = _("Not In Use"); | ||||
|  | ||||
|         this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off"); | ||||
|             this._item.status.text = _("Not Connected"); | ||||
|     }, | ||||
| }); | ||||
|   | ||||
| @@ -62,13 +62,13 @@ const Indicator = new Lang.Class({ | ||||
|         this._indicator = this._addIndicator(); | ||||
|         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._agent = Gio.DBusExportedObject.wrapJSObject(AgentIface, this); | ||||
|         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._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop'); | ||||
|  | ||||
| @@ -173,11 +173,10 @@ const Indicator = new Lang.Class({ | ||||
|  | ||||
|     _updateMenuLabels: function() { | ||||
|         if (this._settings.get_boolean(ENABLED)) { | ||||
|             this._item.label.text = this._indicator.visible ? _("Location In Use") | ||||
|                                                             : _("Location Enabled"); | ||||
|             this._item.status.text = this._indicator.visible ? _("In Use") : _("Enabled"); | ||||
|             this._onOffAction.label.text = _("Disable"); | ||||
|         } else { | ||||
|             this._item.label.text = _("Location Disabled"); | ||||
|             this._item.status.text = _("Disabled"); | ||||
|             this._onOffAction.label.text = _("Enable"); | ||||
|         } | ||||
|     }, | ||||
|   | ||||
| @@ -257,8 +257,16 @@ const NMConnectionSection = new Lang.Class({ | ||||
|         this._radioSection.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(); | ||||
|  | ||||
|         // 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() { | ||||
| @@ -347,7 +355,6 @@ const NMConnectionDevice = new Lang.Class({ | ||||
|         this.parent(client); | ||||
|         this._device = device; | ||||
|         this._settings = settings; | ||||
|         this._description = ''; | ||||
|  | ||||
|         this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect)); | ||||
|         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) { | ||||
|         case NetworkManager.DeviceState.DISCONNECTED: | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Off").format(this._getDescription()); | ||||
|             return _("Off"); | ||||
|         case NetworkManager.DeviceState.ACTIVATED: | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Connected").format(this._getDescription()); | ||||
|             return _("Connected"); | ||||
|         case NetworkManager.DeviceState.UNMANAGED: | ||||
|             /* 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); | ||||
|                %s is a network identifier */ | ||||
|             return _("%s Unmanaged").format(this._getDescription()); | ||||
|                under NetworkManager's control (and thus cannot be used in the menu) */ | ||||
|             return _("Unmanaged"); | ||||
|         case NetworkManager.DeviceState.DEACTIVATING: | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Disconnecting").format(this._getDescription()); | ||||
|             return _("Disconnecting"); | ||||
|         case NetworkManager.DeviceState.PREPARE: | ||||
|         case NetworkManager.DeviceState.CONFIG: | ||||
|         case NetworkManager.DeviceState.IP_CONFIG: | ||||
|         case NetworkManager.DeviceState.IP_CHECK: | ||||
|         case NetworkManager.DeviceState.SECONDARIES: | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Connecting").format(this._getDescription()); | ||||
|             return _("Connecting"); | ||||
|         case NetworkManager.DeviceState.NEED_AUTH: | ||||
|             /* Translators: this is for network connections that require some kind of key or password; %s is a network identifier */ | ||||
|             return _("%s Requires Authentication").format(this._getDescription()); | ||||
|             /* Translators: this is for network connections that require some kind of key or password */ | ||||
|             return _("Authentication required"); | ||||
|         case NetworkManager.DeviceState.UNAVAILABLE: | ||||
|             // This state is actually a compound of various states (generically unavailable, | ||||
|             // firmware missing), that are exposed by different properties (whose state may | ||||
|             // or may not updated when we receive state-changed). | ||||
|             if (this._device.firmware_missing) { | ||||
|                 /* Translators: this is for devices that require some kind of firmware or kernel | ||||
|                    module, which is missing; %s is a network identifier */ | ||||
|                 return _("Firmware Missing For %s").format(this._getDescription()); | ||||
|                    module, which is missing */ | ||||
|                 return _("Firmware missing"); | ||||
|             } | ||||
|             /* 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 */ | ||||
|             return _("%s Unavailable").format(this._getDescription()); | ||||
|                is disabled by rfkill, or it has no coverage */ | ||||
|             return _("Unavailable"); | ||||
|         case NetworkManager.DeviceState.FAILED: | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Connection Failed").format(this._getDescription()); | ||||
|             return _("Connection failed"); | ||||
|         default: | ||||
|             log('Device state invalid, is %d'.format(this._device.state)); | ||||
|             return 'invalid'; | ||||
| @@ -584,12 +585,11 @@ const NMDeviceModem = new Lang.Class({ | ||||
|  | ||||
|     _getStatus: function() { | ||||
|         if (!this._client.wwan_hardware_enabled) | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Hardware Disabled").format(this._getDescription()); | ||||
|             return _("Hardware Disabled"); | ||||
|         else if (!this._client.wwan_enabled) | ||||
|             /* Translators: this is for a network device that cannot be activated | ||||
|                because it's disabled by rfkill (airplane mode); %s is a network identifier */ | ||||
|             return _("%s Disabled").format(this._getDescription()); | ||||
|                because it's disabled by rfkill (airplane mode) */ | ||||
|             return _("Disabled"); | ||||
|         else if (this._device.state == NetworkManager.DeviceState.ACTIVATED && | ||||
|                  this._mobileDevice && this._mobileDevice.operator_name) | ||||
|             return this._mobileDevice.operator_name; | ||||
| @@ -877,7 +877,7 @@ const NMWirelessDialog = new Lang.Class({ | ||||
|                                                  y_align: Clutter.ActorAlign.CENTER }); | ||||
|  | ||||
|         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(new St.Label({ style_class: 'no-networks-label', | ||||
|                                                      text: _("No Networks") })); | ||||
| @@ -917,7 +917,10 @@ const NMWirelessDialog = new Lang.Class({ | ||||
|                                                   key: Clutter.Escape }); | ||||
|         this._connectButton = this.addButton({ action: Lang.bind(this, this._connect), | ||||
|                                                label: _("Connect"), | ||||
|                                                key: Clutter.Return }); | ||||
|                                                key: Clutter.Return }, | ||||
|                                              { expand: true, | ||||
|                                                x_fill: false, | ||||
|                                                x_align: St.Align.END }); | ||||
|     }, | ||||
|  | ||||
|     _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.actor.visible = this._client.wireless_hardware_enabled; | ||||
|  | ||||
|         this.item.status.text = this._getStatus(); | ||||
|         this.item.icon.icon_name = this._getMenuIcon(); | ||||
|         this.item.label.text = this._getStatus(); | ||||
|         this.item.label.text = this._description; | ||||
|     }, | ||||
|  | ||||
|     setDeviceDescription: function(desc) { | ||||
| @@ -1292,23 +1296,18 @@ const NMDeviceWireless = new Lang.Class({ | ||||
|         let ap = this._device.active_access_point; | ||||
|  | ||||
|         if (this._isHotSpotMaster()) | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Hotspot Active").format(this._description); | ||||
|             return _("Hotspot Active"); | ||||
|         else if (this._device.state >= NetworkManager.DeviceState.PREPARE && | ||||
|                  this._device.state < NetworkManager.DeviceState.ACTIVATED) | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Connecting").format(this._description); | ||||
|             return _("Connecting"); | ||||
|         else if (ap) | ||||
|             return ssidToLabel(ap.get_ssid()); | ||||
|         else if (!this._client.wireless_hardware_enabled) | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Hardware Disabled").format(this._description); | ||||
|             return _("Hardware Disabled"); | ||||
|         else if (!this._client.wireless_enabled) | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Off").format(this._description); | ||||
|             return _("Off"); | ||||
|         else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED) | ||||
|             /* Translators: %s is a network identifier */ | ||||
|             return _("%s Not Connected").format(this._description); | ||||
|             return _("Not Connected"); | ||||
|         else | ||||
|             return ''; | ||||
|     }, | ||||
| @@ -1510,7 +1509,7 @@ const NMVPNSection = new Lang.Class({ | ||||
|                 return item.getName(); | ||||
|         } | ||||
|  | ||||
|         return _("VPN Off"); | ||||
|         return _("Off"); | ||||
|     }, | ||||
|  | ||||
|     _getMenuIcon: function() { | ||||
|   | ||||
| @@ -1,8 +1,6 @@ | ||||
| // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- | ||||
|  | ||||
| const Gio = imports.gi.Gio; | ||||
| const Clutter = imports.gi.Clutter; | ||||
| const St = imports.gi.St; | ||||
| const Lang = imports.lang; | ||||
| const UPower = imports.gi.UPowerGlib; | ||||
|  | ||||
| @@ -27,8 +25,6 @@ const DisplayDeviceInterface = '<node> \ | ||||
|  | ||||
| const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper(DisplayDeviceInterface); | ||||
|  | ||||
| const SHOW_BATTERY_PERCENTAGE       = 'show-battery-percentage'; | ||||
|  | ||||
| const Indicator = new Lang.Class({ | ||||
|     Name: 'PowerIndicator', | ||||
|     Extends: PanelMenu.SystemIndicator, | ||||
| @@ -36,15 +32,7 @@ const Indicator = new Lang.Class({ | ||||
|     _init: function() { | ||||
|         this.parent(); | ||||
|  | ||||
|         this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' }); | ||||
|         this._desktopSettings.connect('changed::' + SHOW_BATTERY_PERCENTAGE, | ||||
|                                       Lang.bind(this, this._sync)); | ||||
|  | ||||
|         this._indicator = this._addIndicator(); | ||||
|         this._percentageLabel = new St.Label({ y_expand: true, | ||||
|                                                y_align: Clutter.ActorAlign.CENTER }); | ||||
|         this.indicators.add(this._percentageLabel, { expand: true, y_fill: true }); | ||||
|         this.indicators.add_style_class_name('power-status'); | ||||
|  | ||||
|         this._proxy = new PowerManagerProxy(Gio.DBus.system, BUS_NAME, OBJECT_PATH, | ||||
|                                             Lang.bind(this, function(proxy, error) { | ||||
| @@ -95,12 +83,12 @@ const Indicator = new Lang.Class({ | ||||
|  | ||||
|         if (this._proxy.State == UPower.DeviceState.DISCHARGING) { | ||||
|             // Translators: this is <hours>:<minutes> Remaining (<percentage>) | ||||
|             return _("%d\u2236%02d Remaining (%d\u2009%%)").format(hours, minutes, this._proxy.Percentage); | ||||
|             return _("%d\u2236%02d Remaining (%d%%)").format(hours, minutes, this._proxy.Percentage); | ||||
|         } | ||||
|  | ||||
|         if (this._proxy.State == UPower.DeviceState.CHARGING) { | ||||
|             // Translators: this is <hours>:<minutes> Until Full (<percentage>) | ||||
|             return _("%d\u2236%02d Until Full (%d\u2009%%)").format(hours, minutes, this._proxy.Percentage); | ||||
|             return _("%d\u2236%02d Until Full (%d%%)").format(hours, minutes, this._proxy.Percentage); | ||||
|         } | ||||
|  | ||||
|         return null; | ||||
| @@ -111,12 +99,10 @@ const Indicator = new Lang.Class({ | ||||
|         let visible = this._proxy.IsPresent; | ||||
|         if (visible) { | ||||
|             this._item.actor.show(); | ||||
|             this._percentageLabel.visible = this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE); | ||||
|         } else { | ||||
|             // If there's no battery, then we use the power icon. | ||||
|             this._item.actor.hide(); | ||||
|             this._indicator.icon_name = 'system-shutdown-symbolic'; | ||||
|             this._percentageLabel.hide(); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
| @@ -125,15 +111,13 @@ const Indicator = new Lang.Class({ | ||||
|         this._indicator.icon_name = icon; | ||||
|         this._item.icon.icon_name = icon; | ||||
|  | ||||
|         // The icon label | ||||
|         let label | ||||
|         if (this._proxy.State == UPower.DeviceState.FULLY_CHARGED) | ||||
|           label = _("%d\u2009%%").format(100); | ||||
|         else | ||||
|           label = _("%d\u2009%%").format(this._proxy.Percentage); | ||||
|         this._percentageLabel.clutter_text.set_markup('<span size="smaller">' + label + '</span>'); | ||||
|  | ||||
|         // 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"); | ||||
|     }, | ||||
| }); | ||||
|   | ||||
| @@ -85,8 +85,9 @@ const Indicator = new Lang.Class({ | ||||
|         // The menu only appears when airplane mode is on, so just | ||||
|         // statically build it as if it was on, rather than dynamically | ||||
|         // 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.status.text = _("On"); | ||||
|         this._offItem = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() { | ||||
|             this._manager.airplaneMode = false; | ||||
|         })); | ||||
|   | ||||
| @@ -251,14 +251,8 @@ const Indicator = new Lang.Class({ | ||||
|             let file = Gio.File.new_for_path(iconFile); | ||||
|             let gicon = new Gio.FileIcon({ file: file }); | ||||
|             this._switchUserSubMenu.icon.gicon = gicon; | ||||
|  | ||||
|             this._switchUserSubMenu.icon.add_style_class_name('user-icon'); | ||||
|             this._switchUserSubMenu.icon.remove_style_class_name('default-icon'); | ||||
|         } else { | ||||
|             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._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('changed', Lang.bind(this, this._updateSwitchUserSubMenu)); | ||||
|  | ||||
|   | ||||
| @@ -465,12 +465,6 @@ const ViewSelector = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _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); | ||||
|         if (unicode == 0) | ||||
|             return false; | ||||
| @@ -478,7 +472,7 @@ const ViewSelector = new Lang.Class({ | ||||
|         if (getTermsForSearchString(String.fromCharCode(unicode)).length > 0) | ||||
|             return true; | ||||
|  | ||||
|         return false; | ||||
|         return symbol == Clutter.BackSpace && this._searchActive; | ||||
|     }, | ||||
|  | ||||
|     startSearch: function(event) { | ||||
|   | ||||
| @@ -81,10 +81,12 @@ const DisplayChangeDialog = new Lang.Class({ | ||||
|         */ | ||||
|         this._cancelButton = this.addButton({ label: _("Revert Settings"), | ||||
|                                               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"), | ||||
|                                           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)); | ||||
|         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({ | ||||
|     Name: 'TouchpadWorkspaceSwitchAction', | ||||
|  | ||||
|     _init: function(actor) { | ||||
|         this._dx = 0; | ||||
|         this._dy = 0; | ||||
|         actor.connect('captured-event', Lang.bind(this, this._handleEvent)); | ||||
|     }, | ||||
|  | ||||
|     _checkActivated: function() { | ||||
|         const MOTION_THRESHOLD = 50; | ||||
|         let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW; | ||||
| @@ -492,11 +488,11 @@ const TouchpadWorkspaceSwitchAction = new Lang.Class({ | ||||
|         if ((allowedModes & Main.actionMode) == 0) | ||||
|             return; | ||||
|  | ||||
|         if (this._dy < -MOTION_THRESHOLD) | ||||
|         if (this._dy < MOTION_THRESHOLD) | ||||
|             dir = Meta.MotionDirection.DOWN; | ||||
|         else if (this._dy > MOTION_THRESHOLD) | ||||
|             dir = Meta.MotionDirection.UP; | ||||
|         else if (this._dx < -MOTION_THRESHOLD) | ||||
|         else if (this._dx < MOTION_THRESHOLD) | ||||
|             dir = Meta.MotionDirection.RIGHT; | ||||
|         else if (this._dx > MOTION_THRESHOLD) | ||||
|             dir = Meta.MotionDirection.LEFT; | ||||
| @@ -507,19 +503,21 @@ const TouchpadWorkspaceSwitchAction = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _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; | ||||
|  | ||||
|         if (event.get_gesture_swipe_finger_count() != 4) | ||||
|             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); | ||||
|  | ||||
|             this._dx += dx; | ||||
|             this._dy += dy; | ||||
|         } else { | ||||
|             if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.END) | ||||
|             if (event.type() == Clutter.EventType.TOUCHPAD_SWIPE_END) | ||||
|                 this._checkActivated(); | ||||
|  | ||||
|             this._dx = 0; | ||||
| @@ -527,7 +525,13 @@ const TouchpadWorkspaceSwitchAction = new Lang.Class({ | ||||
|         } | ||||
|  | ||||
|         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); | ||||
|  | ||||
| @@ -677,7 +681,6 @@ const WindowManager = new Lang.Class({ | ||||
|         this._minimizing = []; | ||||
|         this._unminimizing = []; | ||||
|         this._mapping = []; | ||||
|         this._resizing = []; | ||||
|         this._destroying = []; | ||||
|         this._movingWindow = null; | ||||
|  | ||||
| @@ -693,7 +696,6 @@ const WindowManager = new Lang.Class({ | ||||
|             this._minimizeWindowDone(shellwm, actor); | ||||
|             this._mapWindowDone(shellwm, actor); | ||||
|             this._destroyWindowDone(shellwm, actor); | ||||
|             this._sizeChangeWindowDone(shellwm, actor); | ||||
|         })); | ||||
|  | ||||
|         this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace)); | ||||
| @@ -1220,120 +1222,9 @@ const WindowManager = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) { | ||||
|         let types = [Meta.WindowType.NORMAL]; | ||||
|         if (!this._shouldAnimateActor(actor, types)) { | ||||
|             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) { | ||||
|         var count = 0; | ||||
|         window.foreach_transient(function(win) { | ||||
|   | ||||
| @@ -74,7 +74,7 @@ const WindowMenu = new Lang.Class({ | ||||
|                 window.make_above(); | ||||
|         })); | ||||
|         if (window.is_above()) | ||||
|             item.setOrnament(PopupMenu.Ornament.CHECK); | ||||
|             item.setOrnament(PopupMenu.Ornament.DOT); | ||||
|         if (window.get_maximized() == Meta.MaximizeFlags.BOTH || | ||||
|             type == Meta.WindowType.DOCK || | ||||
|             type == Meta.WindowType.DESKTOP || | ||||
| @@ -93,7 +93,7 @@ const WindowMenu = new Lang.Class({ | ||||
|                     window.stick(); | ||||
|             })); | ||||
|             if (isSticky) | ||||
|                 item.setOrnament(PopupMenu.Ornament.CHECK); | ||||
|                 item.setOrnament(PopupMenu.Ornament.DOT); | ||||
|             if (window.is_always_on_all_workspaces()) | ||||
|                 item.setSensitive(false); | ||||
|  | ||||
| @@ -214,7 +214,7 @@ const WindowMenuManager = new Lang.Class({ | ||||
|                 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.show(); | ||||
|  | ||||
|   | ||||
| @@ -140,7 +140,7 @@ | ||||
|  | ||||
|                 <para> | ||||
|                         <filename>/usr/share/gnome-session/sessions/gnome.session</filename>, | ||||
|                         <filename>/usr/share/applications/org.gnome.Shell.desktop</filename>.</para> | ||||
|                         <filename>/usr/share/applications/gnome-shell.desktop</filename>.</para> | ||||
|         </refsect1> | ||||
|  | ||||
|         <refsect1> | ||||
|   | ||||
| @@ -24,7 +24,6 @@ fi | ||||
| fr | ||||
| fur | ||||
| ga | ||||
| gd | ||||
| gl | ||||
| gu | ||||
| he | ||||
|   | ||||
| @@ -2,8 +2,9 @@ | ||||
| # Please keep this file sorted alphabetically. | ||||
| [encoding: UTF-8] | ||||
| data/50-gnome-shell-system.xml.in | ||||
| data/gnome-shell.desktop.in.in | ||||
| data/gnome-shell-extension-prefs.desktop.in.in | ||||
| data/org.gnome.Shell.desktop.in.in | ||||
| data/gnome-shell-wayland.desktop.in.in | ||||
| data/org.gnome.shell.gschema.xml.in.in | ||||
| data/org.gnome.Shell.PortalHelper.desktop.in | ||||
| js/extensionPrefs/main.js | ||||
|   | ||||
							
								
								
									
										297
									
								
								po/an.po
									
									
									
									
									
								
							
							
						
						
									
										297
									
								
								po/an.po
									
									
									
									
									
								
							| @@ -9,23 +9,24 @@ msgstr "" | ||||
| "Project-Id-Version: gnome-shell master\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" | ||||
| "shell&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2015-07-23 08:08+0000\n" | ||||
| "PO-Revision-Date: 2015-04-28 08:40+0200\n" | ||||
| "Last-Translator: Daniel <entaltoaragon@gmail.com>\n" | ||||
| "POT-Creation-Date: 2015-03-17 12:39+0000\n" | ||||
| "PO-Revision-Date: 2015-03-17 19:50+0100\n" | ||||
| "Last-Translator: Daniel Martinez <entaltoaragon@gmail.com>\n" | ||||
| "Language-Team: Aragonés <softaragones@googlegroups.com>\n" | ||||
| "Language: an\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "X-Generator: Pootle 2.5.1.1\n" | ||||
| "X-POOTLE-MTIME: 1430206804.000000\n" | ||||
| "X-Generator: Gtranslator 2.91.6\n" | ||||
|  | ||||
| #: ../data/50-gnome-shell-system.xml.in.h:1 | ||||
| msgid "System" | ||||
| msgstr "Sistema" | ||||
|  | ||||
| #: ../data/50-gnome-shell-system.xml.in.h:2 | ||||
| #| msgid "%d new notification" | ||||
| #| msgid_plural "%d new notifications" | ||||
| msgid "Show the notification list" | ||||
| 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" | ||||
| 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:13 | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:12 | ||||
| msgid "History for the looking glass dialog" | ||||
| 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." | ||||
| msgstr "" | ||||
| "Amostrar siempre l'elemento de menú \"Trancar sesión\" en o menú de " | ||||
| "l'usuario." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:15 | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:14 | ||||
| msgid "" | ||||
| "This key overrides the automatic hiding of the 'Log out' menu item in single-" | ||||
| "user, single-session situations." | ||||
| @@ -154,14 +154,14 @@ msgstr "" | ||||
| "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." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:16 | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:15 | ||||
| msgid "" | ||||
| "Whether to remember password for mounting encrypted or remote filesystems" | ||||
| msgstr "" | ||||
| "Indica si se debe recordar a clau ta amontar sistemas de fichers remotos u " | ||||
| "zifraus" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:17 | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:16 | ||||
| msgid "" | ||||
| "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 " | ||||
| @@ -173,79 +173,81 @@ msgstr "" | ||||
| "s'amostrará a caixeta \"Remerar clau\". Ista clau estableix a valor " | ||||
| "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" | ||||
| 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." | ||||
| 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" | ||||
| 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." | ||||
| 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" | ||||
| 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 "" | ||||
| "Keybinding to open the \"Show Applications\" view of the Activities Overview." | ||||
| msgstr "" | ||||
| "Asociación de teclas ta ubrir la vista \"Amostrar aplicacions\" de la vista " | ||||
| "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" | ||||
| 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." | ||||
| 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" | ||||
| msgstr "" | ||||
| "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." | ||||
| msgstr "" | ||||
| "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" | ||||
| 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." | ||||
| 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 "" | ||||
| "Keybinding that pauses and resumes all running tweens, for debugging purposes" | ||||
| msgstr "" | ||||
| "Asociación de teclas que pausan y continan todas as execucions de «tweens», " | ||||
| "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" | ||||
| 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." | ||||
| 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." | ||||
| 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 "" | ||||
| "If true, only applications that have windows on the current workspace are " | ||||
| "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 " | ||||
| "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." | ||||
| 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 "" | ||||
| "Configures how the windows are shown in the switcher. Valid possibilities " | ||||
| "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only' " | ||||
| "(shows only the application icon) or 'both'." | ||||
| "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" | ||||
| "only' (shows only the application icon) or 'both'." | ||||
| msgstr "" | ||||
| "Configura cómo s'amuestran as finestras en o selector. Os valore posibles " | ||||
| "son \"thumbnail-only\" (amuestra una miniatura d'a finestra), \"app-icon-" | ||||
| "only\" (solament amuestra l'icono de l'aplicación) u \"both\"." | ||||
| "son \"thumbnail-only\" (amuestra una miniatura d'a finestra), \"app-icon-only" | ||||
| "\" (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 "" | ||||
| "If true, only windows from the current workspace are shown in the switcher. " | ||||
| "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 " | ||||
| "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" | ||||
| 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 "" | ||||
| "This key overrides the key in org.gnome.mutter when running GNOME Shell." | ||||
| msgstr "" | ||||
| "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" | ||||
| msgstr "" | ||||
| "Activar o mosaico en os bordes en arrocegar finestras a os bordes d'a " | ||||
| "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" | ||||
| 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" | ||||
| 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" | ||||
| msgstr "" | ||||
| "Retardo en cambiar o foco d'o churi dica que o puntero deixa de mover-se" | ||||
| @@ -309,12 +311,12 @@ msgstr "" | ||||
| msgid "Network Login" | ||||
| msgstr "Encetar sesión en o rete" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:122 | ||||
| #: ../js/extensionPrefs/main.js:123 | ||||
| #, javascript-format | ||||
| 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:" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:154 | ||||
| #: ../js/extensionPrefs/main.js:155 | ||||
| msgid "GNOME Shell Extensions" | ||||
| msgstr "Extensions de GNOME Shell" | ||||
|  | ||||
| @@ -325,39 +327,39 @@ msgstr "Extensions de GNOME Shell" | ||||
| msgid "Cancel" | ||||
| msgstr "Cancelar" | ||||
|  | ||||
| #: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215 | ||||
| #: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:217 | ||||
| msgid "Next" | ||||
| 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 | ||||
| msgid "Unlock" | ||||
| msgstr "Desbloquiar" | ||||
|  | ||||
| #: ../js/gdm/authPrompt.js:213 | ||||
| #: ../js/gdm/authPrompt.js:215 | ||||
| msgctxt "button" | ||||
| msgid "Sign In" | ||||
| msgstr "Encetar sesión" | ||||
|  | ||||
| #: ../js/gdm/loginDialog.js:281 | ||||
| #: ../js/gdm/loginDialog.js:280 | ||||
| msgid "Choose Session" | ||||
| msgstr "Esleyir a sesión" | ||||
|  | ||||
| #: ../js/gdm/loginDialog.js:431 | ||||
| #: ../js/gdm/loginDialog.js:420 | ||||
| msgid "Not listed?" | ||||
| msgstr "No ye en a lista?" | ||||
|  | ||||
| #: ../js/gdm/loginDialog.js:847 | ||||
| #: ../js/gdm/loginDialog.js:829 | ||||
| #, javascript-format | ||||
| msgid "(e.g., user or %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 | ||||
| msgid "Username: " | ||||
| msgstr "Nombre d'usuario: " | ||||
| msgstr "Nombre d'usuario:" | ||||
|  | ||||
| #: ../js/gdm/loginDialog.js:1180 | ||||
| #: ../js/gdm/loginDialog.js:1169 | ||||
| msgid "Login Window" | ||||
| msgstr "Finestra d'inicio de sesión" | ||||
|  | ||||
| @@ -450,31 +452,31 @@ msgstr "%d de %B de %Y, %l∶%M %" | ||||
| msgid "Web Authentication Redirect" | ||||
| msgstr "Rendrecera ta autentiación web" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:789 | ||||
| #: ../js/ui/appDisplay.js:792 | ||||
| msgid "Frequently used applications will appear here" | ||||
| msgstr "As aplicaciones usadas freqüentment amaneixerán aquí" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:909 | ||||
| #: ../js/ui/appDisplay.js:912 | ||||
| msgid "Frequent" | ||||
| msgstr "Freqüent" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:916 | ||||
| #: ../js/ui/appDisplay.js:919 | ||||
| msgid "All" | ||||
| msgstr "Todas" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1845 | ||||
| #: ../js/ui/appDisplay.js:1850 | ||||
| msgid "New Window" | ||||
| 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" | ||||
| msgstr "Sacar d'os favoritos" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1879 | ||||
| #: ../js/ui/appDisplay.js:1884 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "Anyadir a os favoritos" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1889 | ||||
| #: ../js/ui/appDisplay.js:1894 | ||||
| msgid "Show Details" | ||||
| msgstr "Amostrar detalles" | ||||
|  | ||||
| @@ -488,19 +490,15 @@ msgstr "S'ha anyadiu %s a os suyos favoritos." | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "S'ha sacau %s d'os suyos favoritos" | ||||
|  | ||||
| #: ../js/ui/backgroundMenu.js:19 | ||||
| msgid "Change Background…" | ||||
| 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 | ||||
| #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:650 | ||||
| #: ../js/ui/status/system.js:337 | ||||
| msgid "Settings" | ||||
| 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). */ | ||||
| #: ../js/ui/calendar.js:53 | ||||
| msgctxt "calendar-no-work" | ||||
| @@ -553,53 +551,54 @@ msgctxt "grid saturday" | ||||
| msgid "S" | ||||
| msgstr "S" | ||||
|  | ||||
| #: ../js/ui/calendar.js:564 | ||||
| #: ../js/ui/calendar.js:563 | ||||
| msgid "Previous month" | ||||
| msgstr "Mes anterior" | ||||
|  | ||||
| #: ../js/ui/calendar.js:574 | ||||
| #: ../js/ui/calendar.js:573 | ||||
| msgid "Next month" | ||||
| msgstr "Mes siguient" | ||||
|  | ||||
| #: ../js/ui/calendar.js:781 | ||||
| #: ../js/ui/calendar.js:780 | ||||
| msgid "Week %V" | ||||
| msgstr "Semana %V" | ||||
|  | ||||
| #. Translators: Shown in calendar event list for all day events | ||||
| #. * 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" | ||||
| msgid "All Day" | ||||
| msgstr "Tot o diya" | ||||
|  | ||||
| #: ../js/ui/calendar.js:1289 | ||||
| #: ../js/ui/calendar.js:1288 | ||||
| msgid "Clear section" | ||||
| msgstr "Limpiar a sección" | ||||
|  | ||||
| #: ../js/ui/calendar.js:1516 | ||||
| #: ../js/ui/calendar.js:1515 | ||||
| msgid "Events" | ||||
| msgstr "Eventos" | ||||
|  | ||||
| #: ../js/ui/calendar.js:1525 | ||||
| #: ../js/ui/calendar.js:1524 | ||||
| msgctxt "calendar heading" | ||||
| msgid "%A, %B %d" | ||||
| msgstr "%A, %d de %B" | ||||
|  | ||||
| #: ../js/ui/calendar.js:1529 | ||||
| #: ../js/ui/calendar.js:1528 | ||||
| msgctxt "calendar heading" | ||||
| msgid "%A, %B %d, %Y" | ||||
| msgstr "%A, %d de %B de %Y" | ||||
|  | ||||
| #: ../js/ui/calendar.js:1614 | ||||
| #: ../js/ui/calendar.js:1613 | ||||
| msgid "Notifications" | ||||
| msgstr "Notificacions" | ||||
|  | ||||
| #: ../js/ui/calendar.js:1765 | ||||
| #: ../js/ui/calendar.js:1764 | ||||
| #| msgid "Notifications" | ||||
| msgid "No Notifications" | ||||
| msgstr "No i hai notificacions" | ||||
|  | ||||
| #: ../js/ui/calendar.js:1768 | ||||
| #: ../js/ui/calendar.js:1767 | ||||
| msgid "No Events" | ||||
| msgstr "No i hai eventos" | ||||
|  | ||||
| @@ -635,23 +634,23 @@ msgstr "Connectar" | ||||
| #: ../js/ui/components/networkAgent.js:293 | ||||
| #: ../js/ui/components/networkAgent.js:303 | ||||
| msgid "Password: " | ||||
| msgstr "Clau de paso: " | ||||
| msgstr "Clau de paso:" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:238 | ||||
| msgid "Key: " | ||||
| msgstr "Clau: " | ||||
| msgstr "Clau:" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:277 | ||||
| msgid "Identity: " | ||||
| msgstr "Identidat: " | ||||
| msgstr "Identidat:" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:279 | ||||
| msgid "Private key password: " | ||||
| msgstr "Clau d'a clau privada: " | ||||
| msgstr "Clau d'a clau privada:" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:291 | ||||
| msgid "Service: " | ||||
| msgstr "Servicio: " | ||||
| msgstr "Servicio:" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:320 | ||||
| #: ../js/ui/components/networkAgent.js:658 | ||||
| @@ -662,8 +661,8 @@ msgstr "O ret sin cordón requiere autenticación" | ||||
| #: ../js/ui/components/networkAgent.js:659 | ||||
| #, javascript-format | ||||
| msgid "" | ||||
| "Passwords or encryption keys are required to access the wireless network “" | ||||
| "%s”." | ||||
| "Passwords or encryption keys are required to access the wireless network " | ||||
| "“%s”." | ||||
| msgstr "" | ||||
| "S'amenesten claus u claus de zifrau ta accedir a o ret inalambrico\"%s\"." | ||||
|  | ||||
| @@ -674,7 +673,7 @@ msgstr "Autenticación 802.1X cableada" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:327 | ||||
| msgid "Network name: " | ||||
| msgstr "Nombre d'o ret: " | ||||
| msgstr "Nombre d'o ret:" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:332 | ||||
| #: ../js/ui/components/networkAgent.js:666 | ||||
| @@ -734,7 +733,7 @@ msgstr "Prebe atra vegada." | ||||
|  | ||||
| #. Translators: this is the other person changing their old IM name to their new | ||||
| #. IM name. */ | ||||
| #: ../js/ui/components/telepathyClient.js:757 | ||||
| #: ../js/ui/components/telepathyClient.js:768 | ||||
| #, javascript-format | ||||
| msgid "%s is now known as %s" | ||||
| msgstr "Agora %s se dice %s" | ||||
| @@ -743,11 +742,11 @@ msgstr "Agora %s se dice %s" | ||||
| msgid "Windows" | ||||
| 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" | ||||
| msgstr "Amostrar aplicacions" | ||||
|  | ||||
| #: ../js/ui/dash.js:449 | ||||
| #: ../js/ui/dash.js:453 | ||||
| msgid "Dash" | ||||
| 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"). | ||||
| #. */ | ||||
| #: ../js/ui/dateMenu.js:73 | ||||
| #| msgid "%A %B %e, %Y" | ||||
| msgid "%B %e %Y" | ||||
| msgstr "%B %e %Y" | ||||
|  | ||||
| @@ -763,6 +763,7 @@ msgstr "%B %e %Y" | ||||
| #. * date, e.g. "Tuesday February 17 2015". | ||||
| #. */ | ||||
| #: ../js/ui/dateMenu.js:80 | ||||
| #| msgid "%A %B %e, %Y" | ||||
| msgid "%A %B %e %Y" | ||||
| msgstr "%A %e de %B de %Y" | ||||
|  | ||||
| @@ -771,6 +772,7 @@ msgid "Add world clocks…" | ||||
| msgstr "Adhibir reloches d'o mundo…" | ||||
|  | ||||
| #: ../js/ui/dateMenu.js:161 | ||||
| #| msgid "Open Clocks" | ||||
| msgid "World Clocks" | ||||
| msgstr "Reloches d'o mundo" | ||||
|  | ||||
| @@ -914,16 +916,17 @@ msgstr "Instalar" | ||||
| msgid "Download and install “%s” from 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" | ||||
| msgstr "Teclau" | ||||
|  | ||||
| #. translators: 'Hide' is a verb */ | ||||
| #: ../js/ui/legacyTray.js:66 | ||||
| #: ../js/ui/legacyTray.js:64 | ||||
| #| msgid "Hide Text" | ||||
| msgid "Hide tray" | ||||
| msgstr "Amagar servilla" | ||||
|  | ||||
| #: ../js/ui/legacyTray.js:107 | ||||
| #: ../js/ui/legacyTray.js:104 | ||||
| msgid "Status Icons" | ||||
| msgstr "Iconos d'estau" | ||||
|  | ||||
| @@ -979,7 +982,7 @@ msgstr "Veyer fuent" | ||||
| msgid "Web Page" | ||||
| msgstr "Pachina web" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1486 | ||||
| #: ../js/ui/messageTray.js:2133 | ||||
| msgid "System Information" | ||||
| msgstr "Informacion d'o sistema" | ||||
|  | ||||
| @@ -1021,7 +1024,7 @@ msgstr "toggle-switch-intl" | ||||
| msgid "Enter a Command" | ||||
| 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" | ||||
| msgstr "Trancar" | ||||
|  | ||||
| @@ -1049,27 +1052,27 @@ msgid_plural "%d new notifications" | ||||
| msgstr[0] "%d notificación nueva" | ||||
| 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" | ||||
| msgstr "Blocar" | ||||
|  | ||||
| #: ../js/ui/screenShield.js:684 | ||||
| #: ../js/ui/screenShield.js:668 | ||||
| msgid "GNOME needs to lock the screen" | ||||
| 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" | ||||
| 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" | ||||
| msgstr "Una aplicación impidió o bloqueyo" | ||||
|  | ||||
| #: ../js/ui/search.js:617 | ||||
| #: ../js/ui/search.js:616 | ||||
| msgid "Searching…" | ||||
| msgstr "Mirando…" | ||||
|  | ||||
| #: ../js/ui/search.js:619 | ||||
| #: ../js/ui/search.js:618 | ||||
| msgid "No results." | ||||
| msgstr "No se troboron resultaus." | ||||
|  | ||||
| @@ -1133,11 +1136,11 @@ msgstr "Refuso de teclas" | ||||
| msgid "Mouse Keys" | ||||
| msgstr "Teclas d'o ratet" | ||||
|  | ||||
| #: ../js/ui/status/accessibility.js:167 | ||||
| #: ../js/ui/status/accessibility.js:144 | ||||
| msgid "High Contrast" | ||||
| msgstr "Contraste alto" | ||||
|  | ||||
| #: ../js/ui/status/accessibility.js:202 | ||||
| #: ../js/ui/status/accessibility.js:193 | ||||
| msgid "Large Text" | ||||
| msgstr "Texto gran" | ||||
|  | ||||
| @@ -1171,7 +1174,7 @@ msgstr "No connectau" | ||||
| msgid "Brightness" | ||||
| msgstr "Brilo" | ||||
|  | ||||
| #: ../js/ui/status/keyboard.js:736 | ||||
| #: ../js/ui/status/keyboard.js:603 | ||||
| msgid "Show Keyboard Layout" | ||||
| msgstr "Amostrar a distribución d'o teclau" | ||||
|  | ||||
| @@ -1265,7 +1268,7 @@ msgstr "O modo avión ye enchegau" | ||||
|  | ||||
| #: ../js/ui/status/network.js:814 | ||||
| msgid "Wi-Fi is disabled when airplane mode is on." | ||||
| msgstr "O Wi-Fi ye desactivau quan o modo avión ye enchegau." | ||||
| msgstr "O Wi-Fi ye desactivau quan o modo avión  ye enchegau." | ||||
|  | ||||
| #: ../js/ui/status/network.js:815 | ||||
| msgid "Turn Off Airplane Mode" | ||||
| @@ -1382,23 +1385,23 @@ msgstr "Modo avión" | ||||
| msgid "On" | ||||
| msgstr "Enchegau" | ||||
|  | ||||
| #: ../js/ui/status/system.js:337 | ||||
| #: ../js/ui/status/system.js:317 | ||||
| msgid "Switch User" | ||||
| msgstr "Cambear d'usuario" | ||||
|  | ||||
| #: ../js/ui/status/system.js:342 | ||||
| #: ../js/ui/status/system.js:322 | ||||
| msgid "Log Out" | ||||
| msgstr "Trancar sesion" | ||||
|  | ||||
| #: ../js/ui/status/system.js:361 | ||||
| #: ../js/ui/status/system.js:341 | ||||
| msgid "Orientation Lock" | ||||
| msgstr "Bloqueyo d'Orientación" | ||||
|  | ||||
| #: ../js/ui/status/system.js:369 | ||||
| #: ../js/ui/status/system.js:349 | ||||
| msgid "Suspend" | ||||
| msgstr "Suspender" | ||||
|  | ||||
| #: ../js/ui/status/system.js:372 | ||||
| #: ../js/ui/status/system.js:352 | ||||
| msgid "Power Off" | ||||
| msgstr "Amortar" | ||||
|  | ||||
| @@ -1430,27 +1433,27 @@ msgstr "Aplicacions" | ||||
| msgid "Search" | ||||
| msgstr "Mirar" | ||||
|  | ||||
| #: ../js/ui/windowAttentionHandler.js:20 | ||||
| #: ../js/ui/windowAttentionHandler.js:19 | ||||
| #, javascript-format | ||||
| msgid "“%s” is ready" | ||||
| msgstr "\"%s\" ye parau" | ||||
|  | ||||
| #: ../js/ui/windowManager.js:63 | ||||
| #: ../js/ui/windowManager.js:65 | ||||
| msgid "Do you want to keep these display settings?" | ||||
| msgstr "Quiers mantener istas opcions de pantalla?" | ||||
|  | ||||
| #. Translators: this and the following message should be limited in lenght, | ||||
| #. to avoid ellipsizing the labels. | ||||
| #. */ | ||||
| #: ../js/ui/windowManager.js:82 | ||||
| #: ../js/ui/windowManager.js:84 | ||||
| msgid "Revert Settings" | ||||
| msgstr "Revertir as opcions" | ||||
|  | ||||
| #: ../js/ui/windowManager.js:86 | ||||
| #: ../js/ui/windowManager.js:88 | ||||
| msgid "Keep Changes" | ||||
| msgstr "Mantener os cambeos" | ||||
|  | ||||
| #: ../js/ui/windowManager.js:105 | ||||
| #: ../js/ui/windowManager.js:107 | ||||
| #, javascript-format | ||||
| msgid "Settings changes will revert in %d second" | ||||
| 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 | ||||
| #. * the width of the window and the second is the height. */ | ||||
| #: ../js/ui/windowManager.js:660 | ||||
| #: ../js/ui/windowManager.js:599 | ||||
| #, javascript-format | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
| @@ -1496,48 +1499,14 @@ msgstr "Siempre veyible" | ||||
| msgid "Always on Visible Workspace" | ||||
| msgstr "Siempre en l'aria de treballo veyible" | ||||
|  | ||||
| #: ../js/ui/windowMenu.js:105 | ||||
| #, 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 | ||||
| #: ../js/ui/windowMenu.js:106 | ||||
| msgid "Move to Workspace Up" | ||||
| msgstr "Mover ta l'aria de treballo d'alto" | ||||
|  | ||||
| #: ../js/ui/windowMenu.js:120 | ||||
| #: ../js/ui/windowMenu.js:111 | ||||
| msgid "Move to Workspace Down" | ||||
| 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 | ||||
| msgid "Evolution Calendar" | ||||
| msgstr "Calandario d'Evolution" | ||||
| @@ -1592,11 +1561,11 @@ msgstr "Desconoxiu" | ||||
| msgid "Failed to launch “%s”" | ||||
| msgstr "Ha fallau en aventar \"%s\"" | ||||
|  | ||||
| #: ../src/shell-keyring-prompt.c:742 | ||||
| #: ../src/shell-keyring-prompt.c:714 | ||||
| msgid "Passwords do not match." | ||||
| msgstr "As claus de paso no coinciden." | ||||
|  | ||||
| #: ../src/shell-keyring-prompt.c:750 | ||||
| #: ../src/shell-keyring-prompt.c:722 | ||||
| msgid "Password cannot be blank" | ||||
| 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." | ||||
| #~ 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 "" | ||||
| #~ "Configures the maximum level of location accuracy applications are " | ||||
| #~ "allowed to see. Valid options are 'off' (disable location tracking), " | ||||
| @@ -1845,8 +1822,8 @@ msgstr "L'usuario refusó o dialogo d'autenticación" | ||||
| #~ msgstr "" | ||||
| #~ "Configura o ran maximo de precisión d'ubicación que as aplicacions  " | ||||
| #~ "pueden veyer. As opcions validas son 'off' (seguimiento d'ubicación " | ||||
| #~ "desenchegau), 'country', 'city', 'neighborhood', 'street', and 'exact' " | ||||
| #~ "(typicament requier GPS " | ||||
| #~ "desenchegau), 'country', 'city', 'neighborhood', 'street', and " | ||||
| #~ "'exact' (typicament requier GPS " | ||||
|  | ||||
| #~ msgid "Arrangement of buttons on the titlebar" | ||||
| #~ 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…" | ||||
| #~ msgstr "Sesión…" | ||||
|  | ||||
| #~| msgid "Power Off" | ||||
| #~ msgid "Power" | ||||
| #~ msgstr "Enerchía" | ||||
|  | ||||
| @@ -2154,9 +2132,11 @@ msgstr "L'usuario refusó o dialogo d'autenticación" | ||||
| #~ msgid "%d%%" | ||||
| #~ msgstr "%d%%" | ||||
|  | ||||
| #~| msgid "AC adapter" | ||||
| #~ msgid "AC Adapter" | ||||
| #~ msgstr "Adaptador de corrient" | ||||
|  | ||||
| #~| msgid "Laptop battery" | ||||
| #~ msgid "Laptop Battery" | ||||
| #~ msgstr "Bateria d'o portatil" | ||||
|  | ||||
| @@ -2169,9 +2149,11 @@ msgstr "L'usuario refusó o dialogo d'autenticación" | ||||
| #~ msgid "PDA" | ||||
| #~ msgstr "PDA" | ||||
|  | ||||
| #~| msgid "Cell phone" | ||||
| #~ msgid "Cell Phone" | ||||
| #~ msgstr "Telefono movil" | ||||
|  | ||||
| #~| msgid "Media player" | ||||
| #~ msgid "Media Player" | ||||
| #~ msgstr "Reproductor multimeya" | ||||
|  | ||||
| @@ -2181,6 +2163,7 @@ msgstr "L'usuario refusó o dialogo d'autenticación" | ||||
| #~ msgid "Computer" | ||||
| #~ msgstr "Equipo" | ||||
|  | ||||
| #~| msgid "Unknown" | ||||
| #~ msgctxt "device" | ||||
| #~ msgid "Unknown" | ||||
| #~ msgstr "Desconoxiu" | ||||
|   | ||||
							
								
								
									
										702
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
							
						
						
									
										702
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										749
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
							
						
						
									
										749
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										680
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
							
						
						
									
										680
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										548
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
							
						
						
									
										548
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -41,6 +41,8 @@ | ||||
| #define N_(x) x | ||||
| #endif | ||||
|  | ||||
| #define CALENDAR_SOURCES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesPrivate)) | ||||
|  | ||||
| typedef struct _ClientData ClientData; | ||||
| typedef struct _CalendarSourceData CalendarSourceData; | ||||
|  | ||||
| @@ -64,14 +66,6 @@ struct _CalendarSourceData | ||||
|   guint            loaded : 1; | ||||
| }; | ||||
|  | ||||
| typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate; | ||||
|  | ||||
| struct _CalendarSources | ||||
| { | ||||
|   GObject                 parent; | ||||
|   CalendarSourcesPrivate *priv; | ||||
| }; | ||||
|  | ||||
| struct _CalendarSourcesPrivate | ||||
| { | ||||
|   ESourceRegistry    *registry; | ||||
| @@ -83,8 +77,8 @@ struct _CalendarSourcesPrivate | ||||
|   CalendarSourceData  task_sources; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (CalendarSources, calendar_sources, G_TYPE_OBJECT) | ||||
|  | ||||
| static void calendar_sources_class_init (CalendarSourcesClass *klass); | ||||
| static void calendar_sources_init       (CalendarSources      *sources); | ||||
| static void calendar_sources_finalize   (GObject             *object); | ||||
|  | ||||
| static void backend_died_cb (EClient *client, CalendarSourceData *source_data); | ||||
| @@ -114,6 +108,34 @@ client_data_free (ClientData *data) | ||||
|   g_slice_free (ClientData, data); | ||||
| } | ||||
|  | ||||
| GType | ||||
| calendar_sources_get_type (void) | ||||
| { | ||||
|   static GType sources_type = 0; | ||||
|    | ||||
|   if (!sources_type) | ||||
|     { | ||||
|       static const GTypeInfo sources_info = | ||||
|       { | ||||
| 	sizeof (CalendarSourcesClass), | ||||
| 	NULL,		/* base_init */ | ||||
| 	NULL,		/* base_finalize */ | ||||
| 	(GClassInitFunc) calendar_sources_class_init, | ||||
| 	NULL,           /* class_finalize */ | ||||
| 	NULL,		/* class_data */ | ||||
| 	sizeof (CalendarSources), | ||||
| 	0,		/* n_preallocs */ | ||||
| 	(GInstanceInitFunc) calendar_sources_init, | ||||
|       }; | ||||
|        | ||||
|       sources_type = g_type_register_static (G_TYPE_OBJECT, | ||||
| 					     "CalendarSources", | ||||
| 					     &sources_info, 0); | ||||
|     } | ||||
|    | ||||
|   return sources_type; | ||||
| } | ||||
|  | ||||
| static void | ||||
| calendar_sources_class_init (CalendarSourcesClass *klass) | ||||
| { | ||||
| @@ -123,11 +145,14 @@ calendar_sources_class_init (CalendarSourcesClass *klass) | ||||
|  | ||||
|   gobject_class->finalize = calendar_sources_finalize; | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (CalendarSourcesPrivate)); | ||||
|  | ||||
|   signals [APPOINTMENT_SOURCES_CHANGED] = | ||||
|     g_signal_new ("appointment-sources-changed", | ||||
| 		  G_TYPE_FROM_CLASS (gobject_class), | ||||
| 		  G_SIGNAL_RUN_LAST, | ||||
| 		  0, | ||||
| 		  G_STRUCT_OFFSET (CalendarSourcesClass, | ||||
| 				   appointment_sources_changed), | ||||
| 		  NULL, | ||||
| 		  NULL, | ||||
|                   NULL, | ||||
| @@ -138,7 +163,8 @@ calendar_sources_class_init (CalendarSourcesClass *klass) | ||||
|     g_signal_new ("task-sources-changed", | ||||
| 		  G_TYPE_FROM_CLASS (gobject_class), | ||||
| 		  G_SIGNAL_RUN_LAST, | ||||
| 		  0, | ||||
| 		  G_STRUCT_OFFSET (CalendarSourcesClass, | ||||
| 				   task_sources_changed), | ||||
| 		  NULL, | ||||
| 		  NULL, | ||||
|                   NULL, | ||||
| @@ -153,7 +179,7 @@ calendar_sources_init (CalendarSources *sources) | ||||
|   GDBusConnection *session_bus; | ||||
|   GVariant *result; | ||||
|  | ||||
|   sources->priv = calendar_sources_get_instance_private (sources); | ||||
|   sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources); | ||||
|  | ||||
|   /* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync() | ||||
|      (and other library calls that eventually call g_dbus_proxy_new[_sync]()) | ||||
| @@ -175,7 +201,7 @@ calendar_sources_init (CalendarSources *sources) | ||||
|                                         "/", "org.freedesktop.DBus", | ||||
|                                         "StartServiceByName", | ||||
|                                         g_variant_new ("(su)", | ||||
|                                                        "org.gnome.evolution.dataserver.Sources5", | ||||
|                                                        "org.gnome.evolution.dataserver.Sources4", | ||||
|                                                        0), | ||||
|                                         NULL, | ||||
|                                         G_DBUS_CALL_FLAGS_NONE, | ||||
|   | ||||
| @@ -28,10 +28,33 @@ | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ()) | ||||
| G_DECLARE_FINAL_TYPE (CalendarSources, calendar_sources, | ||||
|                       CALENDAR, SOURCES, GObject) | ||||
| #define CALENDAR_TYPE_SOURCES        (calendar_sources_get_type ()) | ||||
| #define CALENDAR_SOURCES(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_SOURCES, CalendarSources)) | ||||
| #define CALENDAR_SOURCES_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_SOURCES, CalendarSourcesClass)) | ||||
| #define CALENDAR_IS_SOURCES(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_SOURCES)) | ||||
| #define CALENDAR_IS_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_SOURCES)) | ||||
| #define CALENDAR_SOURCES_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesClass)) | ||||
|  | ||||
| typedef struct _CalendarSources        CalendarSources; | ||||
| typedef struct _CalendarSourcesClass   CalendarSourcesClass; | ||||
| typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate; | ||||
|  | ||||
| struct _CalendarSources | ||||
| { | ||||
|   GObject                 parent; | ||||
|   CalendarSourcesPrivate *priv; | ||||
| }; | ||||
|  | ||||
| struct _CalendarSourcesClass | ||||
| { | ||||
|   GObjectClass    parent_class; | ||||
|  | ||||
|   void         (* appointment_sources_changed) (CalendarSources *sources); | ||||
|   void         (* task_sources_changed)        (CalendarSources *sources); | ||||
| }; | ||||
|  | ||||
|  | ||||
| GType            calendar_sources_get_type                (void) G_GNUC_CONST; | ||||
| CalendarSources *calendar_sources_get                     (void); | ||||
| GList           *calendar_sources_get_appointment_clients (CalendarSources *sources); | ||||
| GList           *calendar_sources_get_task_clients        (CalendarSources *sources); | ||||
|   | ||||
| @@ -45,8 +45,8 @@ static void gnome_shell_plugin_unminimize       (MetaPlugin          *plugin, | ||||
| static void gnome_shell_plugin_size_change      (MetaPlugin          *plugin, | ||||
|                                                  MetaWindowActor     *actor, | ||||
|                                                  MetaSizeChange       which_change, | ||||
|                                                  MetaRectangle       *old_frame_rect, | ||||
|                                                  MetaRectangle       *old_buffer_rect); | ||||
|                                                  MetaRectangle       *old_rect, | ||||
|                                                  MetaRectangle       *new_rect); | ||||
| static void gnome_shell_plugin_map              (MetaPlugin          *plugin, | ||||
|                                                  MetaWindowActor     *actor); | ||||
| static void gnome_shell_plugin_destroy          (MetaPlugin          *plugin, | ||||
|   | ||||
| @@ -176,15 +176,15 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section, | ||||
|  | ||||
|       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. */ | ||||
|           n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items, | ||||
|                                                                section_could_have_separator, | ||||
|                                                                section_could_have_separator ? section->model : NULL, | ||||
|                                                                section_could_have_separator ? i : 0); | ||||
|                                                                could_have_separator, | ||||
|                                                                could_have_separator ? section->model : NULL, | ||||
|                                                                could_have_separator ? i : 0); | ||||
|         } | ||||
|       else | ||||
|         n_items++; | ||||
| @@ -197,11 +197,11 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section, | ||||
|   if (should_have_separator > section->has_separator) | ||||
|     { | ||||
|       /* Add a separator */ | ||||
|       GtkMenuTrackerItem *menuitem; | ||||
|       GtkMenuTrackerItem *item; | ||||
|  | ||||
|       menuitem = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE); | ||||
|       (* tracker->insert_func) (menuitem, offset, tracker->user_data); | ||||
|       g_object_unref (menuitem); | ||||
|       item = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE); | ||||
|       (* tracker->insert_func) (item, offset, tracker->user_data); | ||||
|       g_object_unref (item); | ||||
|  | ||||
|       section->has_separator = TRUE; | ||||
|     } | ||||
|   | ||||
							
								
								
									
										2
									
								
								src/gvc
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								src/gvc
									
									
									
									
									
								
							 Submodule src/gvc updated: 0a79019088...e14dbe8aa6
									
								
							| @@ -43,6 +43,8 @@ | ||||
| #define DIRECTORY_LOAD_ITEMS_PER_CALLBACK 100 | ||||
| #define HIGH_SCORE_RATIO 0.10 | ||||
|  | ||||
| G_DEFINE_TYPE (ShellMimeSniffer, shell_mime_sniffer, G_TYPE_OBJECT); | ||||
|  | ||||
| enum { | ||||
|   PROP_FILE = 1, | ||||
|   NUM_PROPERTIES | ||||
| @@ -70,26 +72,16 @@ typedef struct { | ||||
|   gint total_items; | ||||
| } DeepCountState; | ||||
|  | ||||
| typedef struct _ShellMimeSnifferPrivate   ShellMimeSnifferPrivate; | ||||
|  | ||||
| struct _ShellMimeSniffer | ||||
| { | ||||
|   GObject parent_instance; | ||||
|  | ||||
|   ShellMimeSnifferPrivate *priv; | ||||
| }; | ||||
|  | ||||
| struct _ShellMimeSnifferPrivate { | ||||
|   GFile *file; | ||||
|  | ||||
|   GCancellable *cancellable; | ||||
|   guint watchdog_id; | ||||
|  | ||||
|   GTask *task; | ||||
|   GSimpleAsyncResult *async_result; | ||||
|   gchar **sniffed_mime; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (ShellMimeSniffer, shell_mime_sniffer, G_TYPE_OBJECT); | ||||
|  | ||||
| static void deep_count_load (DeepCountState *state, | ||||
|                              GFile *file); | ||||
|  | ||||
| @@ -187,7 +179,6 @@ prepare_async_result (DeepCountState *state) | ||||
|   GArray *results; | ||||
|   GPtrArray *sniffed_mime; | ||||
|   SniffedResult result; | ||||
|   char **mimes; | ||||
|  | ||||
|   sniffed_mime = g_ptr_array_new (); | ||||
|   results = g_array_new (TRUE, TRUE, sizeof (SniffedResult)); | ||||
| @@ -229,10 +220,10 @@ prepare_async_result (DeepCountState *state) | ||||
|  | ||||
|  out: | ||||
|   g_ptr_array_add (sniffed_mime, NULL); | ||||
|   mimes = (gchar **) g_ptr_array_free (sniffed_mime, FALSE); | ||||
|   self->priv->sniffed_mime = (gchar **) g_ptr_array_free (sniffed_mime, FALSE); | ||||
|  | ||||
|   g_array_free (results, TRUE); | ||||
|   g_task_return_pointer (self->priv->task, mimes, (GDestroyNotify)g_strfreev); | ||||
|   g_simple_async_result_complete_in_idle (self->priv->async_result); | ||||
| } | ||||
|  | ||||
| /* adapted from nautilus/libnautilus-private/nautilus-directory-async.c */ | ||||
| @@ -425,17 +416,20 @@ query_info_async_ready_cb (GObject *source, | ||||
|  | ||||
|   if (error != NULL) | ||||
|     { | ||||
|       g_task_return_error (self->priv->task, error); | ||||
|       g_simple_async_result_take_error (self->priv->async_result, | ||||
|                                         error); | ||||
|       g_simple_async_result_complete_in_idle (self->priv->async_result); | ||||
|  | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   if (g_file_info_get_file_type (info) != G_FILE_TYPE_DIRECTORY) | ||||
|     { | ||||
|       g_task_return_new_error (self->priv->task, | ||||
|                                G_IO_ERROR, | ||||
|                                G_IO_ERROR_NOT_DIRECTORY, | ||||
|                                "Not a directory"); | ||||
|       g_simple_async_result_set_error (self->priv->async_result, | ||||
|                                        G_IO_ERROR, | ||||
|                                        G_IO_ERROR_NOT_DIRECTORY, | ||||
|                                        "Not a directory"); | ||||
|       g_simple_async_result_complete_in_idle (self->priv->async_result); | ||||
|  | ||||
|       return; | ||||
|     } | ||||
| @@ -481,7 +475,7 @@ shell_mime_sniffer_dispose (GObject *object) | ||||
|  | ||||
|   g_clear_object (&self->priv->file); | ||||
|   g_clear_object (&self->priv->cancellable); | ||||
|   g_clear_object (&self->priv->task); | ||||
|   g_clear_object (&self->priv->async_result); | ||||
|  | ||||
|   if (self->priv->watchdog_id != 0) | ||||
|     { | ||||
| @@ -492,6 +486,16 @@ shell_mime_sniffer_dispose (GObject *object) | ||||
|   G_OBJECT_CLASS (shell_mime_sniffer_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| shell_mime_sniffer_finalize (GObject *object) | ||||
| { | ||||
|   ShellMimeSniffer *self = SHELL_MIME_SNIFFER (object); | ||||
|  | ||||
|   g_strfreev (self->priv->sniffed_mime); | ||||
|  | ||||
|   G_OBJECT_CLASS (shell_mime_sniffer_parent_class)->finalize (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| shell_mime_sniffer_get_property (GObject *object, | ||||
|                                 guint       prop_id, | ||||
| @@ -535,6 +539,7 @@ shell_mime_sniffer_class_init (ShellMimeSnifferClass *klass) | ||||
|  | ||||
|   oclass = G_OBJECT_CLASS (klass); | ||||
|   oclass->dispose = shell_mime_sniffer_dispose; | ||||
|   oclass->finalize = shell_mime_sniffer_finalize; | ||||
|   oclass->get_property = shell_mime_sniffer_get_property; | ||||
|   oclass->set_property = shell_mime_sniffer_set_property; | ||||
|  | ||||
| @@ -545,13 +550,17 @@ shell_mime_sniffer_class_init (ShellMimeSnifferClass *klass) | ||||
|                          G_TYPE_FILE, | ||||
|                          G_PARAM_READWRITE); | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (ShellMimeSnifferPrivate)); | ||||
|   g_object_class_install_properties (oclass, NUM_PROPERTIES, properties); | ||||
| } | ||||
|  | ||||
| static void | ||||
| shell_mime_sniffer_init (ShellMimeSniffer *self) | ||||
| { | ||||
|   self->priv = shell_mime_sniffer_get_instance_private (self); | ||||
|   self->priv = | ||||
|     G_TYPE_INSTANCE_GET_PRIVATE (self, | ||||
|                                  SHELL_TYPE_MIME_SNIFFER, | ||||
|                                  ShellMimeSnifferPrivate); | ||||
|   init_mimetypes (); | ||||
| } | ||||
|  | ||||
| @@ -569,11 +578,14 @@ shell_mime_sniffer_sniff_async (ShellMimeSniffer *self, | ||||
|                                 gpointer user_data) | ||||
| { | ||||
|   g_assert (self->priv->watchdog_id == 0); | ||||
|   g_assert (self->priv->task == NULL); | ||||
|   g_assert (self->priv->async_result == NULL); | ||||
|  | ||||
|   self->priv->async_result =  | ||||
|     g_simple_async_result_new (G_OBJECT (self), | ||||
|                                callback, user_data, | ||||
|                                shell_mime_sniffer_sniff_finish); | ||||
|    | ||||
|   self->priv->cancellable = g_cancellable_new (); | ||||
|   self->priv->task = g_task_new (self, self->priv->cancellable, | ||||
|                                  callback, user_data); | ||||
|  | ||||
|   self->priv->watchdog_id = | ||||
|     g_timeout_add (WATCHDOG_TIMEOUT, | ||||
| @@ -588,5 +600,8 @@ shell_mime_sniffer_sniff_finish (ShellMimeSniffer *self, | ||||
|                                  GAsyncResult *res, | ||||
|                                  GError **error) | ||||
| { | ||||
|   return g_task_propagate_pointer (self->priv->task, error); | ||||
|   if (g_simple_async_result_propagate_error (self->priv->async_result, error)) | ||||
|     return NULL; | ||||
|  | ||||
|   return g_strdupv (self->priv->sniffed_mime); | ||||
| } | ||||
|   | ||||
| @@ -27,9 +27,30 @@ | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define SHELL_TYPE_MIME_SNIFFER (shell_mime_sniffer_get_type ()) | ||||
| G_DECLARE_FINAL_TYPE (ShellMimeSniffer, shell_mime_sniffer, | ||||
|                       SHELL, MIME_SNIFFER, GObject) | ||||
| #define SHELL_TYPE_MIME_SNIFFER            (shell_mime_sniffer_get_type ()) | ||||
| #define SHELL_MIME_SNIFFER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_MIME_SNIFFER, ShellMimeSniffer)) | ||||
| #define SHELL_IS_MIME_SNIFFER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_MIME_SNIFFER)) | ||||
| #define SHELL_MIME_SNIFFER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  SHELL_TYPE_MIME_SNIFFER, ShellMimeSnifferClass)) | ||||
| #define SHELL_IS_MIME_SNIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  SHELL_TYPE_MIME_SNIFFER)) | ||||
| #define SHELL_MIME_SNIFFER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  SHELL_TYPE_MIME_SNIFFER, ShellMimeSnifferClass)) | ||||
|  | ||||
| typedef struct _ShellMimeSniffer          ShellMimeSniffer; | ||||
| typedef struct _ShellMimeSnifferPrivate   ShellMimeSnifferPrivate; | ||||
| typedef struct _ShellMimeSnifferClass     ShellMimeSnifferClass; | ||||
|  | ||||
| struct _ShellMimeSniffer | ||||
| { | ||||
|   GObject parent_instance; | ||||
|  | ||||
|   ShellMimeSnifferPrivate *priv; | ||||
| }; | ||||
|  | ||||
| struct _ShellMimeSnifferClass | ||||
| { | ||||
|   GObjectClass parent_class; | ||||
| }; | ||||
|  | ||||
| GType    shell_mime_sniffer_get_type     (void) G_GNUC_CONST; | ||||
|  | ||||
| ShellMimeSniffer *shell_mime_sniffer_new (GFile *file); | ||||
|  | ||||
|   | ||||
							
								
								
									
										36
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								src/main.c
									
									
									
									
									
								
							| @@ -51,11 +51,11 @@ enum { | ||||
| static int _shell_debug; | ||||
|  | ||||
| static void | ||||
| shell_dbus_acquire_name (GDBusProxy  *bus, | ||||
|                          guint32      request_name_flags, | ||||
|                          guint32     *request_name_result, | ||||
|                          const gchar *name, | ||||
|                          gboolean     fatal) | ||||
| shell_dbus_acquire_name (GDBusProxy *bus, | ||||
|                          guint32     request_name_flags, | ||||
|                          guint32    *request_name_result, | ||||
|                          gchar      *name, | ||||
|                          gboolean    fatal) | ||||
| { | ||||
|   GError *error = NULL; | ||||
|   GVariant *request_name_variant; | ||||
| @@ -69,26 +69,24 @@ shell_dbus_acquire_name (GDBusProxy  *bus, | ||||
|                                                        &error))) | ||||
|     { | ||||
|       g_printerr ("failed to acquire %s: %s\n", name, error->message); | ||||
|       g_clear_error (&error); | ||||
|       if (!fatal) | ||||
|         return; | ||||
|       exit (1); | ||||
|     } | ||||
|   g_variant_get (request_name_variant, "(u)", request_name_result); | ||||
|   g_variant_unref (request_name_variant); | ||||
| } | ||||
|  | ||||
| static void | ||||
| shell_dbus_acquire_names (GDBusProxy  *bus, | ||||
|                           guint32      request_name_flags, | ||||
|                           const gchar *name, | ||||
|                           gboolean     fatal, ...) G_GNUC_NULL_TERMINATED; | ||||
| shell_dbus_acquire_names (GDBusProxy *bus, | ||||
|                           guint32     request_name_flags, | ||||
|                           gchar      *name, | ||||
|                           gboolean    fatal, ...) G_GNUC_NULL_TERMINATED; | ||||
|  | ||||
| static void | ||||
| shell_dbus_acquire_names (GDBusProxy  *bus, | ||||
|                           guint32      request_name_flags, | ||||
|                           const gchar *name, | ||||
|                           gboolean     fatal, ...) | ||||
| shell_dbus_acquire_names (GDBusProxy *bus, | ||||
|                           guint32     request_name_flags, | ||||
|                           gchar      *name, | ||||
|                           gboolean    fatal, ...) | ||||
| { | ||||
|   va_list al; | ||||
|   guint32 request_name_result; | ||||
| @@ -132,12 +130,6 @@ shell_dbus_init (gboolean replace) | ||||
|                                NULL, /* cancellable */ | ||||
|                                &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; | ||||
|   if (replace) | ||||
|     request_name_flags |= DBUS_NAME_FLAG_REPLACE_EXISTING; | ||||
| @@ -462,7 +454,7 @@ main (int argc, char **argv) | ||||
|  | ||||
|   /* Initialize the global object */ | ||||
|   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); | ||||
|  | ||||
|   | ||||
| @@ -37,15 +37,6 @@ enum { | ||||
|  | ||||
| static guint signals[LAST_SIGNAL] = { 0 }; | ||||
|  | ||||
| typedef struct _ShellAppSystemPrivate ShellAppSystemPrivate; | ||||
|  | ||||
| struct _ShellAppSystem | ||||
| { | ||||
|   GObject parent; | ||||
|  | ||||
|   ShellAppSystemPrivate *priv; | ||||
| }; | ||||
|  | ||||
| struct _ShellAppSystemPrivate { | ||||
|   GHashTable *running_apps; | ||||
|   GHashTable *id_to_app; | ||||
| @@ -54,7 +45,7 @@ struct _ShellAppSystemPrivate { | ||||
|  | ||||
| static void shell_app_system_finalize (GObject *object); | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (ShellAppSystem, shell_app_system, G_TYPE_OBJECT); | ||||
| G_DEFINE_TYPE(ShellAppSystem, shell_app_system, G_TYPE_OBJECT); | ||||
|  | ||||
| static void shell_app_system_class_init(ShellAppSystemClass *klass) | ||||
| { | ||||
| @@ -73,9 +64,11 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass) | ||||
|     g_signal_new ("installed-changed", | ||||
| 		  SHELL_TYPE_APP_SYSTEM, | ||||
| 		  G_SIGNAL_RUN_LAST, | ||||
|                   0, | ||||
|                   NULL, NULL, NULL, | ||||
| 		  G_STRUCT_OFFSET (ShellAppSystemClass, installed_changed), | ||||
|           NULL, NULL, NULL, | ||||
| 		  G_TYPE_NONE, 0); | ||||
|  | ||||
|   g_type_class_add_private (gobject_class, sizeof (ShellAppSystemPrivate)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -154,7 +147,9 @@ shell_app_system_init (ShellAppSystem *self) | ||||
|   ShellAppSystemPrivate *priv; | ||||
|   GAppInfoMonitor *monitor; | ||||
|  | ||||
|   self->priv = priv = shell_app_system_get_instance_private (self); | ||||
|   self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (self, | ||||
|                                                    SHELL_TYPE_APP_SYSTEM, | ||||
|                                                    ShellAppSystemPrivate); | ||||
|  | ||||
|   priv->running_apps = g_hash_table_new_full (NULL, NULL, (GDestroyNotify) g_object_unref, NULL); | ||||
|   priv->id_to_app = g_hash_table_new_full (g_str_hash, g_str_equal, | ||||
| @@ -187,7 +182,7 @@ shell_app_system_finalize (GObject *object) | ||||
|  * Return Value: (transfer none): The global #ShellAppSystem singleton | ||||
|  */ | ||||
| ShellAppSystem * | ||||
| shell_app_system_get_default (void) | ||||
| shell_app_system_get_default () | ||||
| { | ||||
|   static ShellAppSystem *instance = NULL; | ||||
|  | ||||
| @@ -353,9 +348,6 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self, | ||||
|     case SHELL_APP_STATE_STOPPED: | ||||
|       g_hash_table_remove (self->priv->running_apps, app); | ||||
|       break; | ||||
|     default: | ||||
|       g_warn_if_reached(); | ||||
|       break; | ||||
|     } | ||||
|   g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app); | ||||
| } | ||||
| @@ -391,28 +383,3 @@ shell_app_system_get_running (ShellAppSystem *self) | ||||
|  | ||||
|   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; | ||||
| } | ||||
|   | ||||
| @@ -8,10 +8,33 @@ | ||||
|  | ||||
| #include "shell-app.h" | ||||
|  | ||||
| #define SHELL_TYPE_APP_SYSTEM (shell_app_system_get_type ()) | ||||
| G_DECLARE_FINAL_TYPE (ShellAppSystem, shell_app_system, | ||||
|                       SHELL, APP_SYSTEM, GObject) | ||||
| #define SHELL_TYPE_APP_SYSTEM                 (shell_app_system_get_type ()) | ||||
| #define SHELL_APP_SYSTEM(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystem)) | ||||
| #define SHELL_APP_SYSTEM_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP_SYSTEM, ShellAppSystemClass)) | ||||
| #define SHELL_IS_APP_SYSTEM(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_APP_SYSTEM)) | ||||
| #define SHELL_IS_APP_SYSTEM_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP_SYSTEM)) | ||||
| #define SHELL_APP_SYSTEM_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystemClass)) | ||||
|  | ||||
| typedef struct _ShellAppSystem ShellAppSystem; | ||||
| typedef struct _ShellAppSystemClass ShellAppSystemClass; | ||||
| typedef struct _ShellAppSystemPrivate ShellAppSystemPrivate; | ||||
|  | ||||
| struct _ShellAppSystem | ||||
| { | ||||
|   GObject parent; | ||||
|  | ||||
|   ShellAppSystemPrivate *priv; | ||||
| }; | ||||
|  | ||||
| struct _ShellAppSystemClass | ||||
| { | ||||
|   GObjectClass parent_class; | ||||
|  | ||||
|   void (*installed_changed)(ShellAppSystem *appsys, gpointer user_data); | ||||
|   void (*favorites_changed)(ShellAppSystem *appsys, gpointer user_data); | ||||
| }; | ||||
|  | ||||
| GType           shell_app_system_get_type    (void) G_GNUC_CONST; | ||||
| ShellAppSystem *shell_app_system_get_default (void); | ||||
|  | ||||
| ShellApp       *shell_app_system_lookup_app                   (ShellAppSystem  *system, | ||||
| @@ -25,6 +48,5 @@ ShellApp       *shell_app_system_lookup_desktop_wmclass       (ShellAppSystem *s | ||||
|                                                                const char     *wmclass); | ||||
|  | ||||
| GSList         *shell_app_system_get_running               (ShellAppSystem  *self); | ||||
| char         ***shell_app_system_search                    (const char *search_string); | ||||
|  | ||||
| #endif /* __SHELL_APP_SYSTEM_H__ */ | ||||
|   | ||||
| @@ -996,7 +996,7 @@ on_enable_monitoring_key_changed (GSettings     *settings, | ||||
|  * Return Value: (transfer none): The global #ShellAppUsage instance | ||||
|  */ | ||||
| ShellAppUsage * | ||||
| shell_app_usage_get_default (void) | ||||
| shell_app_usage_get_default () | ||||
| { | ||||
|   static ShellAppUsage *instance; | ||||
|  | ||||
|   | ||||
| @@ -7,9 +7,23 @@ | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| typedef struct _ShellAppUsage ShellAppUsage; | ||||
| typedef struct _ShellAppUsageClass ShellAppUsageClass; | ||||
| typedef struct _ShellAppUsagePrivate ShellAppUsagePrivate; | ||||
|  | ||||
| #define SHELL_TYPE_APP_USAGE              (shell_app_usage_get_type ()) | ||||
| G_DECLARE_FINAL_TYPE (ShellAppUsage, shell_app_usage, | ||||
|                       SHELL, APP_USAGE, GObject) | ||||
| #define SHELL_APP_USAGE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_APP_USAGE, ShellAppUsage)) | ||||
| #define SHELL_APP_USAGE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP_USAGE, ShellAppUsageClass)) | ||||
| #define SHELL_IS_APP_USAGE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_APP_USAGE)) | ||||
| #define SHELL_IS_APP_USAGE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP_USAGE)) | ||||
| #define SHELL_APP_USAGE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP_USAGE, ShellAppUsageClass)) | ||||
|  | ||||
| struct _ShellAppUsageClass | ||||
| { | ||||
|   GObjectClass parent_class; | ||||
| }; | ||||
|  | ||||
| GType shell_app_usage_get_type (void) G_GNUC_CONST; | ||||
|  | ||||
| ShellAppUsage* shell_app_usage_get_default(void); | ||||
|  | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user