Compare commits
	
		
			34 Commits
		
	
	
		
			wip/jimmac
			...
			gnome-3-32
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 6bb5c1feec | ||
|   | 40db793230 | ||
|   | 1c6abf3785 | ||
|   | 2483b60386 | ||
|   | b118c874da | ||
|   | 80cf412e83 | ||
|   | e8ddb23b3a | ||
|   | 8b98740897 | ||
|   | ae05679498 | ||
|   | f3680306b2 | ||
|   | ea51a7c657 | ||
|   | 95e353fdb4 | ||
|   | 24cb1c1aab | ||
|   | 3a060d755d | ||
|   | e43c8f6364 | ||
|   | e65bd48062 | ||
|   | 1c5f926a70 | ||
|   | 92f1e88e06 | ||
|   | 5100458c1b | ||
|   | 5150166336 | ||
|   | d0d9c249de | ||
|   | 2d9ed18668 | ||
|   | a1af8b94fd | ||
|   | 0539efc8df | ||
|   | 059c729da0 | ||
|   | 2d0e84469e | ||
|   | 59559d5fc2 | ||
|   | c062be25d6 | ||
|   | e5cfdf9f48 | ||
|   | 6db9f51bda | ||
|   | 8cefd91933 | ||
|   | 435d9ed750 | ||
|   | 78d6ccd804 | ||
|   | f662864ada | 
| @@ -17,6 +17,8 @@ variables: | ||||
| check_commit_log: | ||||
|     image: registry.gitlab.gnome.org/gnome/mutter/master:v1 | ||||
|     stage: review | ||||
|     variables: | ||||
|         GIT_DEPTH: "100" | ||||
|     script: | ||||
|         - ./.gitlab-ci/check-commit-log.sh | ||||
|     only: | ||||
|   | ||||
| @@ -17,15 +17,19 @@ if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then | ||||
|   merge_request_branch=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME | ||||
|  | ||||
|   echo Looking for $merge_request_branch on remote ... | ||||
|   if git fetch $merge_request_remote $merge_request_branch >/dev/null 2>&1; then | ||||
|   if git fetch -q $merge_request_remote $merge_request_branch 2>/dev/null; then | ||||
|     mutter_target=FETCH_HEAD | ||||
|   else | ||||
|     mutter_target=origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME | ||||
|     echo Using $mutter_target instead | ||||
|   fi | ||||
| fi | ||||
|  | ||||
| if [ -z "$mutter_target" ]; then | ||||
|   mutter_target=$(git branch -r -l $shell_branch) | ||||
|   mutter_target=$(git branch -r -l origin/$shell_branch) | ||||
|   mutter_target=${mutter_target:-$(git branch -r -l ${shell_branch#remotes/})} | ||||
|   mutter_target=${mutter_target:-origin/master} | ||||
|   echo Using $mutter_target instead | ||||
| fi | ||||
|  | ||||
| git checkout $mutter_target | ||||
| git checkout -q $mutter_target | ||||
|   | ||||
							
								
								
									
										19
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,3 +1,22 @@ | ||||
| 3.32.2 | ||||
| ====== | ||||
| * Fix tablet button mapping overlay [Carlos; #1220] | ||||
| * Fix ellipsization in dialog subtitles/bodies [Marco; !531] | ||||
| * Don't crash for world clock locations with no timezone<Paste> [Florian; #1062] | ||||
| * Handle network interface name changes [Fabrice; !534] | ||||
| * Don't leak old on-screen keyboard layout groups [Carlos; mutter#556] | ||||
| * Avoid unnecessary style changes when computing :first/:last-child | ||||
|   [Florian; !529] | ||||
| * Misc. bug fixes [Simon, Carlos, Florian; #822, !551, !509, | ||||
|   !511, #1054, !506, #1065] | ||||
|  | ||||
| Contributors: | ||||
|   Fabrice Bellet, Carlos Garnacho, Simon McVittie, Florian Müllner, | ||||
|   Marco Trevisan (Treviño) | ||||
|  | ||||
| Translators: | ||||
|   Dingzhong Chen [zh_CN], Tim Sabsch [de] | ||||
|  | ||||
| 3.32.1 | ||||
| ====== | ||||
| * Fix avatar scaling on login screen [Florian; #1024] | ||||
|   | ||||
| @@ -71,7 +71,7 @@ function _findProviderForMccMnc(operator_name, operator_code) { | ||||
| // Tries to find the operator name corresponding to the given SID | ||||
| // | ||||
| function _findProviderForSid(sid) { | ||||
|     if (sid == 0) | ||||
|     if (!sid) | ||||
|         return null; | ||||
|  | ||||
|     let mpd = _getMobileProvidersDatabase(); | ||||
|   | ||||
| @@ -665,14 +665,6 @@ class AppIcon extends St.BoxLayout { | ||||
|     set_size(size) { | ||||
|         this.icon = this.app.create_icon_texture(size); | ||||
|         this._iconBin.child = this.icon; | ||||
|         this._iconBin.set_size(size, size); | ||||
|     } | ||||
|  | ||||
|     vfunc_get_preferred_width(forHeight) { | ||||
|         let [minWidth, ] = super.vfunc_get_preferred_width(forHeight); | ||||
|  | ||||
|         minWidth = Math.max(minWidth, forHeight); | ||||
|         return [minWidth, minWidth]; | ||||
|     } | ||||
| }); | ||||
|  | ||||
| @@ -730,11 +722,12 @@ class AppSwitcher extends SwitcherPopup.SwitcherList { | ||||
|                 j++; | ||||
|         } | ||||
|         let themeNode = this._items[j].get_theme_node(); | ||||
|         this._list.ensure_style(); | ||||
|  | ||||
|         let iconPadding = themeNode.get_horizontal_padding(); | ||||
|         let iconBorder = themeNode.get_border_width(St.Side.LEFT) + themeNode.get_border_width(St.Side.RIGHT); | ||||
|         let [iconMinHeight, iconNaturalHeight] = this.icons[j].label.get_preferred_height(-1); | ||||
|         let iconSpacing = iconNaturalHeight + iconPadding + iconBorder; | ||||
|         let [, labelNaturalHeight] = this.icons[j].label.get_preferred_height(-1); | ||||
|         let iconSpacing = labelNaturalHeight + iconPadding + iconBorder; | ||||
|         let totalSpacing = this._list.spacing * (this._items.length - 1); | ||||
|  | ||||
|         // We just assume the whole screen here due to weirdness happing with the passed width | ||||
|   | ||||
| @@ -50,6 +50,15 @@ var BoxPointer = GObject.registerClass({ | ||||
|         this._sourceAlignment = 0.5; | ||||
|         this._capturedEventId = 0; | ||||
|         this._muteInput(); | ||||
|  | ||||
|         this.connect('destroy', this._onDestroy.bind(this)); | ||||
|     } | ||||
|  | ||||
|     _onDestroy() { | ||||
|         if (this._sourceActorDestroyId) { | ||||
|             this._sourceActor.disconnect(this._sourceActorDestroyId); | ||||
|             delete this._sourceActorDestroyId; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     get arrowSide() { | ||||
| @@ -454,9 +463,26 @@ var BoxPointer = GObject.registerClass({ | ||||
|         // so that we can query the correct size. | ||||
|         this.show(); | ||||
|  | ||||
|         this._sourceActor = sourceActor; | ||||
|         if (!this._sourceActor || sourceActor != this._sourceActor) { | ||||
|             if (this._sourceActorDestroyId) { | ||||
|                 this._sourceActor.disconnect(this._sourceActorDestroyId); | ||||
|                 delete this._sourceActorDestroyId; | ||||
|             } | ||||
|  | ||||
|             this._sourceActor = sourceActor; | ||||
|  | ||||
|             if (this._sourceActor) { | ||||
|                 this._sourceActorDestroyId = this._sourceActor.connect('destroy', () => { | ||||
|                     this._sourceActor = null; | ||||
|                     delete this._sourceActorDestroyId; | ||||
|                 }) | ||||
|             } | ||||
|         } | ||||
|         this._arrowAlignment = alignment; | ||||
|  | ||||
|         if (!this._sourceActor) | ||||
|             return; | ||||
|  | ||||
|         this._reposition(); | ||||
|         this._updateFlip(); | ||||
|     } | ||||
|   | ||||
| @@ -118,7 +118,7 @@ var WorldClocksSection = class WorldClocksSection { | ||||
|             if (!clocks[i].location) | ||||
|                 continue; | ||||
|             let l = world.deserialize(clocks[i].location); | ||||
|             if (l) | ||||
|             if (l && l.get_timezone() != null) | ||||
|                 this._locations.push({ location: l }); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -175,7 +175,7 @@ var MessageDialogContent = GObject.registerClass({ | ||||
|             this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`); | ||||
|         }); | ||||
|  | ||||
|         let textProps = { ellipsize_mode: Pango.EllipsizeMode.NONE, | ||||
|         let textProps = { ellipsize: Pango.EllipsizeMode.NONE, | ||||
|                           line_wrap: true }; | ||||
|         Object.assign(this._subtitle.clutter_text, textProps); | ||||
|         Object.assign(this._body.clutter_text, textProps); | ||||
|   | ||||
| @@ -1470,7 +1470,12 @@ var Keyboard = class Keyboard { | ||||
|     } | ||||
|  | ||||
|     _onKeyboardGroupsChanged(keyboard) { | ||||
|         this._groups = []; | ||||
|         let nonGroupActors = [this._emojiSelection.actor, this._keypad.actor]; | ||||
|         this._aspectContainer.get_children().filter(c => !nonGroupActors.includes(c)).forEach(c => { | ||||
|             c.destroy(); | ||||
|         }); | ||||
|  | ||||
|         this._groups = {}; | ||||
|         this._onGroupChanged(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -369,17 +369,15 @@ class DashSpacer extends St.Widget { | ||||
|     } | ||||
|  | ||||
|     vfunc_get_preferred_width(forHeight) { | ||||
|         let box = this.get_allocation_box(); | ||||
|         let minWidth = super.vfunc_get_preferred_width(forHeight)[0]; | ||||
|         let natWidth = box.x2 - box.x1; | ||||
|         return [minWidth, natWidth]; | ||||
|         if (this._bindConstraint) | ||||
|             return this._bindConstraint.source.get_preferred_width(forHeight); | ||||
|         return super.vfunc_get_preferred_width(forHeight); | ||||
|     } | ||||
|  | ||||
|     vfunc_get_preferred_height(forWidth) { | ||||
|         let box = this.get_allocation_box(); | ||||
|         let minHeight = super.vfunc_get_preferred_height(forWidth)[0]; | ||||
|         let natHeight = box.y2 - box.y1; | ||||
|         return [minHeight, natHeight]; | ||||
|         if (this._bindConstraint) | ||||
|             return this._bindConstraint.source.get_preferred_height(forWidth); | ||||
|         return super.vfunc_get_preferred_height(forWidth); | ||||
|     } | ||||
| }); | ||||
|  | ||||
|   | ||||
| @@ -374,12 +374,12 @@ var PadDiagram = GObject.registerClass({ | ||||
|         svgData += this._cssString(); | ||||
|         svgData += this._wrappingSvgFooter(); | ||||
|  | ||||
|         let handle = new Rsvg.Handle(); | ||||
|         handle.set_base_uri(GLib.path_get_dirname(this._imagePath)); | ||||
|         handle.write(svgData); | ||||
|         handle.close(); | ||||
|         let istream = new Gio.MemoryInputStream(); | ||||
|         istream.add_bytes(new GLib.Bytes(svgData)); | ||||
|  | ||||
|         return handle; | ||||
|         return Rsvg.Handle.new_from_stream_sync(istream, | ||||
|                                                 Gio.File.new_for_path(this._imagePath), | ||||
|                                                 0, null); | ||||
|     } | ||||
|  | ||||
|     _updateDiagramScale() { | ||||
|   | ||||
| @@ -882,7 +882,7 @@ class Panel extends St.Widget { | ||||
|     } | ||||
|  | ||||
|     vfunc_allocate(box, flags) { | ||||
|         super.vfunc_allocate(box, flags); | ||||
|         this.set_allocation(box, flags); | ||||
|  | ||||
|         let allocWidth = box.x2 - box.x1; | ||||
|         let allocHeight = box.y2 - box.y1; | ||||
|   | ||||
| @@ -1730,14 +1730,24 @@ var NMApplet = class extends PanelMenu.SystemIndicator { | ||||
|             this._addDeviceWrapper(wrapper); | ||||
|  | ||||
|             this._nmDevices.push(device); | ||||
|             if (!skipSyncDeviceNames) | ||||
|                 this._syncDeviceNames(); | ||||
|             this._deviceChanged(device, skipSyncDeviceNames); | ||||
|  | ||||
|             if (wrapper instanceof NMConnectionSection) { | ||||
|                 this._connections.forEach(connection => { | ||||
|                     wrapper.checkConnection(connection); | ||||
|                 }); | ||||
|             } | ||||
|             device.connect('notify::interface', () => { | ||||
|                 this._deviceChanged(device, false); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     _deviceChanged(device, skipSyncDeviceNames) { | ||||
|         let wrapper = device._delegate; | ||||
|  | ||||
|         if (!skipSyncDeviceNames) | ||||
|             this._syncDeviceNames(); | ||||
|  | ||||
|         if (wrapper instanceof NMConnectionSection) { | ||||
|             this._connections.forEach(connection => { | ||||
|                 wrapper.checkConnection(connection); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -69,8 +69,6 @@ var Source = class WindowAttentionSource extends MessageTray.Source { | ||||
|                                                  () => { this.destroy(); })); | ||||
|         this.signalIDs.push(this._window.connect('unmanaged', | ||||
|                                                  () => { this.destroy(); })); | ||||
|  | ||||
|         this.connect('destroy', this._onDestroy.bind(this)); | ||||
|     } | ||||
|  | ||||
|     _sync() { | ||||
| @@ -79,13 +77,6 @@ var Source = class WindowAttentionSource extends MessageTray.Source { | ||||
|         this.destroy(); | ||||
|     } | ||||
|  | ||||
|     _onDestroy() { | ||||
|         for(let i = 0; i < this.signalIDs.length; i++) { | ||||
|            this._window.disconnect(this.signalIDs[i]); | ||||
|         } | ||||
|         this.signalIDs = []; | ||||
|     } | ||||
|  | ||||
|     _createPolicy() { | ||||
|         if (this._app && this._app.get_app_info()) { | ||||
|             let id = this._app.get_id().replace(/\.desktop$/,''); | ||||
| @@ -99,6 +90,14 @@ var Source = class WindowAttentionSource extends MessageTray.Source { | ||||
|         return this._app.create_icon_texture(size); | ||||
|     } | ||||
|  | ||||
|     destroy(params) { | ||||
|         for (let i = 0; i < this.signalIDs.length; i++) | ||||
|             this._window.disconnect(this.signalIDs[i]); | ||||
|         this.signalIDs = []; | ||||
|  | ||||
|         super.destroy(params); | ||||
|     } | ||||
|  | ||||
|     open() { | ||||
|         Main.activateWindow(this._window); | ||||
|     } | ||||
|   | ||||
| @@ -479,12 +479,12 @@ var WorkspacesDisplay = class { | ||||
|         this.actor.connect('notify::mapped', () => { | ||||
|             switchGesture.enabled = this.actor.mapped; | ||||
|         }); | ||||
|         switchGesture.enabled = this.actor.mapped; | ||||
|  | ||||
|         this._primaryIndex = Main.layoutManager.primaryIndex; | ||||
|  | ||||
|         this._workspacesViews = []; | ||||
|         this._primaryScrollAdjustment = null; | ||||
|         switchGesture.enabled = this.actor.mapped; | ||||
|  | ||||
|         this._settings = new Gio.Settings({ schema_id: MUTTER_SCHEMA }); | ||||
|         this._settings.connect('changed::workspaces-only-on-primary', | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| project('gnome-shell', 'c', | ||||
|   version: '3.32.1', | ||||
|   version: '3.32.2', | ||||
|   meson_version: '>= 0.47.0', | ||||
|   license: 'GPLv2+' | ||||
| ) | ||||
|   | ||||
							
								
								
									
										128
									
								
								po/de.po
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								po/de.po
									
									
									
									
									
								
							| @@ -16,14 +16,14 @@ | ||||
| # Benjamin Steinwender <b@stbe.at>, 2013-2014. | ||||
| # Bernd Homuth <dev@hmt.im>, 2014-2015, 2016, 2019. | ||||
| # Franco Della-Monica <franco.della.monica@gmail.com>, 2016. | ||||
| # Tim Sabsch <tim@sabsch.com>, 2018. | ||||
| # Tim Sabsch <tim@sabsch.com>, 2018-2019. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell master\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2019-03-02 19:56+0000\n" | ||||
| "PO-Revision-Date: 2019-03-02 21:13+0100\n" | ||||
| "POT-Creation-Date: 2019-05-08 10:16+0000\n" | ||||
| "PO-Revision-Date: 2019-05-12 12:36+0200\n" | ||||
| "Last-Translator: Tim Sabsch <tim@sabsch.com>\n" | ||||
| "Language-Team: Deutsch <gnome-de@gnome.org>\n" | ||||
| "Language: de\n" | ||||
| @@ -390,11 +390,6 @@ msgstr "" | ||||
| msgid "Network Login" | ||||
| msgstr "Netzwerkanmeldung" | ||||
|  | ||||
| #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! | ||||
| #: data/org.gnome.Shell.PortalHelper.desktop.in.in:9 | ||||
| msgid "network-workgroup" | ||||
| msgstr "network-workgroup" | ||||
|  | ||||
| #: js/extensionPrefs/main.js:116 | ||||
| msgid "Something’s gone wrong" | ||||
| msgstr "Etwas ist schiefgelaufen" | ||||
| @@ -542,7 +537,7 @@ msgstr "abmelden;verlassen" | ||||
| #: js/misc/systemActions.js:109 | ||||
| msgctxt "search-result" | ||||
| msgid "Suspend" | ||||
| msgstr "In Bereitschaft versetzen" | ||||
| msgstr "Bereitschaft" | ||||
|  | ||||
| #. Translators: A list of keywords that match the suspend action, separated by semicolons | ||||
| #: js/misc/systemActions.js:112 | ||||
| @@ -762,12 +757,12 @@ msgstr "Zu Favoriten hinzufügen" | ||||
| msgid "Show Details" | ||||
| msgstr "Details anzeigen" | ||||
|  | ||||
| #: js/ui/appFavorites.js:141 | ||||
| #: js/ui/appFavorites.js:149 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s wurde zu Ihren Favoriten hinzugefügt" | ||||
|  | ||||
| #: js/ui/appFavorites.js:175 | ||||
| #: js/ui/appFavorites.js:183 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s wurde aus Ihren Favoriten entfernt" | ||||
| @@ -1053,7 +1048,7 @@ msgstr "Passwort der mobilen Breitbandverbindung" | ||||
| msgid "A password is required to connect to “%s”." | ||||
| msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden." | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665 | ||||
| #: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664 | ||||
| msgid "Network Manager" | ||||
| msgstr "Netzwerk-Verwaltung" | ||||
|  | ||||
| @@ -1125,23 +1120,23 @@ msgstr "Weltuhren hinzufügen …" | ||||
| msgid "World Clocks" | ||||
| msgstr "Weltuhren" | ||||
|  | ||||
| #: js/ui/dateMenu.js:222 | ||||
| #: js/ui/dateMenu.js:228 | ||||
| msgid "Weather" | ||||
| msgstr "Wetter" | ||||
|  | ||||
| #: js/ui/dateMenu.js:305 | ||||
| #: js/ui/dateMenu.js:311 | ||||
| msgid "Select a location…" | ||||
| msgstr "Ort auswählen …" | ||||
|  | ||||
| #: js/ui/dateMenu.js:313 | ||||
| #: js/ui/dateMenu.js:319 | ||||
| msgid "Loading…" | ||||
| msgstr "Wird geladen …" | ||||
|  | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #: js/ui/dateMenu.js:329 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Gehen Sie Online, um Wetterinformationen beziehen zu können" | ||||
|  | ||||
| #: js/ui/dateMenu.js:325 | ||||
| #: js/ui/dateMenu.js:331 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "Wetterinformationen sind momentan nicht verfügbar" | ||||
|  | ||||
| @@ -1304,26 +1299,26 @@ msgid "Download and install “%s” from extensions.gnome.org?" | ||||
| msgstr "»%s« von extensions.gnome.org herunterladen und installieren?" | ||||
|  | ||||
| #. Translators: %s is an application name like "Settings" | ||||
| #: js/ui/inhibitShortcutsDialog.js:50 | ||||
| #: js/ui/inhibitShortcutsDialog.js:78 | ||||
| #, javascript-format | ||||
| msgid "%s wants to inhibit shortcuts" | ||||
| msgstr "%s möchte Tastenkombinationen sperren" | ||||
|  | ||||
| #: js/ui/inhibitShortcutsDialog.js:51 | ||||
| #: js/ui/inhibitShortcutsDialog.js:79 | ||||
| msgid "Application wants to inhibit shortcuts" | ||||
| msgstr "Die Anwendung möchte Tastenkombinationen sperren" | ||||
|  | ||||
| #. Translators: %s is a keyboard shortcut like "Super+x" | ||||
| #: js/ui/inhibitShortcutsDialog.js:60 | ||||
| #: js/ui/inhibitShortcutsDialog.js:88 | ||||
| #, javascript-format | ||||
| msgid "You can restore shortcuts by pressing %s." | ||||
| msgstr "Sie können Tastenkombinationen durch Drücken von %s wiederherstellen." | ||||
|  | ||||
| #: js/ui/inhibitShortcutsDialog.js:65 | ||||
| #: js/ui/inhibitShortcutsDialog.js:93 | ||||
| msgid "Deny" | ||||
| msgstr "Ablehnen" | ||||
|  | ||||
| #: js/ui/inhibitShortcutsDialog.js:71 | ||||
| #: js/ui/inhibitShortcutsDialog.js:100 | ||||
| msgid "Allow" | ||||
| msgstr "Zulassen" | ||||
|  | ||||
| @@ -1376,13 +1371,13 @@ msgid "Leave On" | ||||
| msgstr "Eingeschaltet lassen" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:1264 | ||||
| #: js/ui/status/network.js:1263 | ||||
| msgid "Turn On" | ||||
| msgstr "Einschalten" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:128 js/ui/status/network.js:310 | ||||
| #: js/ui/status/network.js:1264 js/ui/status/network.js:1376 | ||||
| #: js/ui/status/network.js:1263 js/ui/status/network.js:1375 | ||||
| #: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79 | ||||
| #: js/ui/status/rfkill.js:106 | ||||
| msgid "Turn Off" | ||||
| @@ -1392,7 +1387,7 @@ msgstr "Ausschalten" | ||||
| msgid "Leave Off" | ||||
| msgstr "Ausgeschaltet lassen" | ||||
|  | ||||
| #: js/ui/keyboard.js:203 | ||||
| #: js/ui/keyboard.js:200 | ||||
| msgid "Region & Language Settings" | ||||
| msgstr "Regions- und Spracheinstellungen" | ||||
|  | ||||
| @@ -1444,7 +1439,7 @@ msgstr "Quelle zeigen" | ||||
| msgid "Web Page" | ||||
| msgstr "Webseite" | ||||
|  | ||||
| #: js/ui/messageTray.js:1474 | ||||
| #: js/ui/messageTray.js:1480 | ||||
| msgid "System Information" | ||||
| msgstr "Systeminformationen" | ||||
|  | ||||
| @@ -1528,11 +1523,11 @@ msgstr "Beenden" | ||||
|  | ||||
| #. Translators: If there is no suitable word for "Activities" | ||||
| #. in your language, you can use the word for "Overview". | ||||
| #: js/ui/panel.js:471 | ||||
| #: js/ui/panel.js:470 | ||||
| msgid "Activities" | ||||
| msgstr "Aktivitäten" | ||||
|  | ||||
| #: js/ui/panel.js:746 | ||||
| #: js/ui/panel.js:745 | ||||
| msgctxt "System menu in the top bar" | ||||
| msgid "System" | ||||
| msgstr "System" | ||||
| @@ -1541,15 +1536,6 @@ msgstr "System" | ||||
| msgid "Top Bar" | ||||
| msgstr "Oberes Panel" | ||||
|  | ||||
| #. Translators: this MUST be either "toggle-switch-us" | ||||
| #. (for toggle switches containing the English words | ||||
| #. "ON" and "OFF") or "toggle-switch-intl" (for toggle | ||||
| #. switches containing "◯" and "|"). Other values will | ||||
| #. simply result in invisible toggle switches. | ||||
| #: js/ui/popupMenu.js:285 | ||||
| msgid "toggle-switch-us" | ||||
| msgstr "toggle-switch-intl" | ||||
|  | ||||
| #: js/ui/runDialog.js:64 | ||||
| msgid "Enter a Command" | ||||
| msgstr "Bitte geben Sie einen Befehl ein" | ||||
| @@ -1589,7 +1575,7 @@ msgid_plural "%d new notifications" | ||||
| msgstr[0] "%d neue Benachrichtigung" | ||||
| msgstr[1] "%d neue Benachrichtigungen" | ||||
|  | ||||
| #: js/ui/screenShield.js:449 js/ui/status/system.js:270 | ||||
| #: js/ui/screenShield.js:449 js/ui/status/system.js:271 | ||||
| msgid "Lock" | ||||
| msgstr "Sperren" | ||||
|  | ||||
| @@ -1604,11 +1590,11 @@ msgstr "GNOME muss den Bildschirm sperren" | ||||
| #. | ||||
| #. XXX: another option is to kick the user into the gdm login | ||||
| #. screen, where we're not affected by grabs | ||||
| #: js/ui/screenShield.js:834 js/ui/screenShield.js:1307 | ||||
| #: js/ui/screenShield.js:826 js/ui/screenShield.js:1299 | ||||
| msgid "Unable to lock" | ||||
| msgstr "Sperrung fehlgeschlagen" | ||||
|  | ||||
| #: js/ui/screenShield.js:835 js/ui/screenShield.js:1308 | ||||
| #: js/ui/screenShield.js:827 js/ui/screenShield.js:1300 | ||||
| msgid "Lock was blocked by an application" | ||||
| msgstr "Sperrung wurde von einer Anwendung blockiert" | ||||
|  | ||||
| @@ -1772,7 +1758,7 @@ msgid "<unknown>" | ||||
| msgstr "<Unbekannt>" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:416 js/ui/status/network.js:1293 | ||||
| #: js/ui/status/network.js:416 js/ui/status/network.js:1292 | ||||
| #, javascript-format | ||||
| msgid "%s Off" | ||||
| msgstr "%s ausgeschaltet" | ||||
| @@ -1798,7 +1784,7 @@ msgid "%s Disconnecting" | ||||
| msgstr "%s wird getrennt" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:434 js/ui/status/network.js:1285 | ||||
| #: js/ui/status/network.js:434 js/ui/status/network.js:1284 | ||||
| #, javascript-format | ||||
| msgid "%s Connecting" | ||||
| msgstr "%s wird verbunden" | ||||
| @@ -1838,7 +1824,7 @@ msgid "Mobile Broadband Settings" | ||||
| msgstr "Einstellungen der mobilen Breitbandverbindung" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:553 js/ui/status/network.js:1290 | ||||
| #: js/ui/status/network.js:553 js/ui/status/network.js:1289 | ||||
| #, javascript-format | ||||
| msgid "%s Hardware Disabled" | ||||
| msgstr "%s-Hardware ausgeschaltet" | ||||
| @@ -1910,72 +1896,72 @@ msgid "Wi-Fi Settings" | ||||
| msgstr "Drahtlosnetzwerk-Einstellungen" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1281 | ||||
| #: js/ui/status/network.js:1280 | ||||
| #, javascript-format | ||||
| msgid "%s Hotspot Active" | ||||
| msgstr "Hotspot %s eingeschaltet" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1296 | ||||
| #: js/ui/status/network.js:1295 | ||||
| #, javascript-format | ||||
| msgid "%s Not Connected" | ||||
| msgstr "%s nicht verbunden" | ||||
|  | ||||
| #: js/ui/status/network.js:1393 | ||||
| #: js/ui/status/network.js:1392 | ||||
| msgid "connecting…" | ||||
| msgstr "Verbindungsaufbau …" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password | ||||
| #: js/ui/status/network.js:1396 | ||||
| #: js/ui/status/network.js:1395 | ||||
| msgid "authentication required" | ||||
| msgstr "Anmeldung erforderlich" | ||||
|  | ||||
| #: js/ui/status/network.js:1398 | ||||
| #: js/ui/status/network.js:1397 | ||||
| msgid "connection failed" | ||||
| msgstr "Verbindung gescheitert" | ||||
|  | ||||
| #: js/ui/status/network.js:1448 | ||||
| #: js/ui/status/network.js:1447 | ||||
| msgid "VPN Settings" | ||||
| msgstr "VPN-Einstellungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1465 | ||||
| #: js/ui/status/network.js:1464 | ||||
| msgid "VPN" | ||||
| msgstr "VPN" | ||||
|  | ||||
| #: js/ui/status/network.js:1475 | ||||
| #: js/ui/status/network.js:1474 | ||||
| msgid "VPN Off" | ||||
| msgstr "VPN ausgeschaltet" | ||||
|  | ||||
| #: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82 | ||||
| #: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82 | ||||
| msgid "Network Settings" | ||||
| msgstr "Netzwerkeinstellungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1565 | ||||
| #: js/ui/status/network.js:1564 | ||||
| #, javascript-format | ||||
| msgid "%s Wired Connection" | ||||
| msgid_plural "%s Wired Connections" | ||||
| msgstr[0] "%s Kabelverbindung" | ||||
| msgstr[1] "%s Kabelverbindungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1569 | ||||
| #: js/ui/status/network.js:1568 | ||||
| #, javascript-format | ||||
| msgid "%s Wi-Fi Connection" | ||||
| msgid_plural "%s Wi-Fi Connections" | ||||
| msgstr[0] "%s Funknetzwerkverbindung" | ||||
| msgstr[1] "%s Funknetzwerkverbindungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1573 | ||||
| #: js/ui/status/network.js:1572 | ||||
| #, javascript-format | ||||
| msgid "%s Modem Connection" | ||||
| msgid_plural "%s Modem Connections" | ||||
| msgstr[0] "%s Modem-Verbindung" | ||||
| msgstr[1] "%s Modem-Verbindungen" | ||||
|  | ||||
| #: js/ui/status/network.js:1702 | ||||
| #: js/ui/status/network.js:1705 | ||||
| msgid "Connection failed" | ||||
| msgstr "Verbindung gescheitert" | ||||
|  | ||||
| #: js/ui/status/network.js:1703 | ||||
| #: js/ui/status/network.js:1706 | ||||
| msgid "Activation of network connection failed" | ||||
| msgstr "Aktivierung der Netzwerkverbindung ist gescheitert" | ||||
|  | ||||
| @@ -2057,15 +2043,15 @@ msgstr "Abmelden" | ||||
| msgid "Account Settings" | ||||
| msgstr "Kontoeinstellungen" | ||||
|  | ||||
| #: js/ui/status/system.js:255 | ||||
| #: js/ui/status/system.js:256 | ||||
| msgid "Orientation Lock" | ||||
| msgstr "Hoch-/Querformats-Fixierung" | ||||
|  | ||||
| #: js/ui/status/system.js:281 | ||||
| #: js/ui/status/system.js:282 | ||||
| msgid "Suspend" | ||||
| msgstr "In Bereitschaft versetzen" | ||||
| msgstr "Bereitschaft" | ||||
|  | ||||
| #: js/ui/status/system.js:291 | ||||
| #: js/ui/status/system.js:292 | ||||
| msgid "Power Off" | ||||
| msgstr "Ausschalten" | ||||
|  | ||||
| @@ -2183,7 +2169,7 @@ msgstr[1] "" | ||||
|  | ||||
| #. 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:662 | ||||
| #: js/ui/windowManager.js:677 | ||||
| #, javascript-format | ||||
| msgid "%d × %d" | ||||
| msgstr "%d × %d" | ||||
| @@ -2256,11 +2242,6 @@ msgstr "Auf den Bildschirm nach rechts verschieben" | ||||
| msgid "Evolution Calendar" | ||||
| msgstr "Evolution-Kalender" | ||||
|  | ||||
| #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! | ||||
| #: src/calendar-server/evolution-calendar.desktop.in:6 | ||||
| msgid "evolution" | ||||
| msgstr "evolution" | ||||
|  | ||||
| #: src/main.c:408 | ||||
| msgid "Print version" | ||||
| msgstr "Version ausgeben" | ||||
| @@ -2279,12 +2260,12 @@ msgstr "" | ||||
| msgid "List possible modes" | ||||
| msgstr "Die möglichen Modi auflisten" | ||||
|  | ||||
| #: src/shell-app.c:260 | ||||
| #: src/shell-app.c:264 | ||||
| msgctxt "program" | ||||
| msgid "Unknown" | ||||
| msgstr "Unbekannt" | ||||
|  | ||||
| #: src/shell-app.c:511 | ||||
| #: src/shell-app.c:515 | ||||
| #, c-format | ||||
| msgid "Failed to launch “%s”" | ||||
| msgstr "»%s« konnte nicht gestartet werden" | ||||
| @@ -2323,6 +2304,15 @@ msgstr[1] "%u Eingänge" | ||||
| msgid "System Sounds" | ||||
| msgstr "Systemklänge" | ||||
|  | ||||
| #~ msgid "network-workgroup" | ||||
| #~ msgstr "network-workgroup" | ||||
|  | ||||
| #~ msgid "toggle-switch-us" | ||||
| #~ msgstr "toggle-switch-intl" | ||||
|  | ||||
| #~ msgid "evolution" | ||||
| #~ msgstr "evolution" | ||||
|  | ||||
| #~ msgid "There was an error loading the preferences dialog for %s:" | ||||
| #~ msgstr "" | ||||
| #~ "Beim Laden des Einstellungsdialogs für %s ist ein Fehler aufgetreten:" | ||||
|   | ||||
							
								
								
									
										56
									
								
								po/es.po
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								po/es.po
									
									
									
									
									
								
							| @@ -9,16 +9,16 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell.master\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2019-03-24 17:37+0000\n" | ||||
| "PO-Revision-Date: 2019-02-06 11:27+0100\n" | ||||
| "POT-Creation-Date: 2019-07-17 14:17+0000\n" | ||||
| "PO-Revision-Date: 2019-07-24 09:53+0200\n" | ||||
| "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" | ||||
| "Language-Team: es <gnome-es-list@gnome.org>\n" | ||||
| "Language: es\n" | ||||
| "Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n" | ||||
| "Language: es_ES\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: Gtranslator 3.31.90\n" | ||||
| "X-Generator: Gtranslator 3.32.1\n" | ||||
|  | ||||
| #: data/50-gnome-shell-system.xml:6 | ||||
| msgid "System" | ||||
| @@ -748,12 +748,12 @@ msgstr "Añadir a los favoritos" | ||||
| msgid "Show Details" | ||||
| msgstr "Mostrar detalles" | ||||
|  | ||||
| #: js/ui/appFavorites.js:141 | ||||
| #: js/ui/appFavorites.js:149 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "Se ha añadido %s a sus favoritos." | ||||
|  | ||||
| #: js/ui/appFavorites.js:175 | ||||
| #: js/ui/appFavorites.js:183 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "Se ha quitado %s de sus favoritos." | ||||
| @@ -1108,23 +1108,23 @@ msgstr "Añadir relojes del mundo…" | ||||
| msgid "World Clocks" | ||||
| msgstr "Relojes del mundo" | ||||
|  | ||||
| #: js/ui/dateMenu.js:222 | ||||
| #: js/ui/dateMenu.js:228 | ||||
| msgid "Weather" | ||||
| msgstr "Meteorología" | ||||
|  | ||||
| #: js/ui/dateMenu.js:305 | ||||
| #: js/ui/dateMenu.js:311 | ||||
| msgid "Select a location…" | ||||
| msgstr "Seleccionar ubicación…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:313 | ||||
| #: js/ui/dateMenu.js:319 | ||||
| msgid "Loading…" | ||||
| msgstr "Cargando…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #: js/ui/dateMenu.js:329 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Conectarse para obtener la información meteorológica" | ||||
|  | ||||
| #: js/ui/dateMenu.js:325 | ||||
| #: js/ui/dateMenu.js:331 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "La información meteorológica no está disponible actualmente." | ||||
|  | ||||
| @@ -1361,7 +1361,7 @@ msgstr "Dejar activada" | ||||
| #: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:1263 | ||||
| msgid "Turn On" | ||||
| msgstr "Encender" | ||||
| msgstr "Encendido" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 | ||||
| #: js/ui/status/network.js:128 js/ui/status/network.js:310 | ||||
| @@ -1373,7 +1373,7 @@ msgstr "Apagar" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:65 | ||||
| msgid "Leave Off" | ||||
| msgstr "Dejar desactivada" | ||||
| msgstr "Dejar desactivado" | ||||
|  | ||||
| #: js/ui/keyboard.js:200 | ||||
| msgid "Region & Language Settings" | ||||
| @@ -1511,28 +1511,19 @@ msgstr "Salir" | ||||
|  | ||||
| #. Translators: If there is no suitable word for "Activities" | ||||
| #. in your language, you can use the word for "Overview". | ||||
| #: js/ui/panel.js:471 | ||||
| #: js/ui/panel.js:470 | ||||
| msgid "Activities" | ||||
| msgstr "Actividades" | ||||
|  | ||||
| #: js/ui/panel.js:746 | ||||
| #: js/ui/panel.js:745 | ||||
| msgctxt "System menu in the top bar" | ||||
| msgid "System" | ||||
| msgstr "Sistema" | ||||
|  | ||||
| #: js/ui/panel.js:867 | ||||
| #: js/ui/panel.js:866 | ||||
| msgid "Top Bar" | ||||
| msgstr "Barra superior" | ||||
|  | ||||
| #. Translators: this MUST be either "toggle-switch-us" | ||||
| #. (for toggle switches containing the English words | ||||
| #. "ON" and "OFF") or "toggle-switch-intl" (for toggle | ||||
| #. switches containing "◯" and "|"). Other values will | ||||
| #. simply result in invisible toggle switches. | ||||
| #: js/ui/popupMenu.js:285 | ||||
| msgid "toggle-switch-us" | ||||
| msgstr "toggle-switch-intl" | ||||
|  | ||||
| #: js/ui/runDialog.js:64 | ||||
| msgid "Enter a Command" | ||||
| msgstr "Introducir un comando" | ||||
| @@ -1944,11 +1935,11 @@ msgid_plural "%s Modem Connections" | ||||
| msgstr[0] "%s conexión por módem" | ||||
| msgstr[1] "%s conexiones por módem" | ||||
|  | ||||
| #: js/ui/status/network.js:1701 | ||||
| #: js/ui/status/network.js:1705 | ||||
| msgid "Connection failed" | ||||
| msgstr "Falló la conexión" | ||||
|  | ||||
| #: js/ui/status/network.js:1702 | ||||
| #: js/ui/status/network.js:1706 | ||||
| msgid "Activation of network connection failed" | ||||
| msgstr "Falló la activación de la conexión de red" | ||||
|  | ||||
| @@ -2154,7 +2145,7 @@ msgstr[1] "La configuración se revertirá 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:662 | ||||
| #: js/ui/windowManager.js:677 | ||||
| #, javascript-format | ||||
| msgid "%d × %d" | ||||
| msgstr "%d × %d" | ||||
| @@ -2255,11 +2246,11 @@ msgstr "Desconocido" | ||||
| msgid "Failed to launch “%s”" | ||||
| msgstr "Falló al lanzar «%s»" | ||||
|  | ||||
| #: src/shell-keyring-prompt.c:730 | ||||
| #: src/shell-keyring-prompt.c:731 | ||||
| msgid "Passwords do not match." | ||||
| msgstr "Las contraseñas no coinciden." | ||||
|  | ||||
| #: src/shell-keyring-prompt.c:738 | ||||
| #: src/shell-keyring-prompt.c:739 | ||||
| msgid "Password cannot be blank" | ||||
| msgstr "La contraseña no puede estar vacía" | ||||
|  | ||||
| @@ -2289,6 +2280,9 @@ msgstr[1] "%u entradas" | ||||
| msgid "System Sounds" | ||||
| msgstr "Sonidos del sistema" | ||||
|  | ||||
| #~ msgid "toggle-switch-us" | ||||
| #~ msgstr "toggle-switch-intl" | ||||
|  | ||||
| #~ msgid "network-workgroup" | ||||
| #~ msgstr "network-workgroup" | ||||
|  | ||||
|   | ||||
							
								
								
									
										1083
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
							
						
						
									
										1083
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1069,9 +1069,9 @@ _shell_app_add_window (ShellApp        *app, | ||||
|  | ||||
|   app->running_state->window_sort_stale = TRUE; | ||||
|   app->running_state->windows = g_slist_prepend (app->running_state->windows, g_object_ref (window)); | ||||
|   g_signal_connect (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app); | ||||
|   g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app); | ||||
|   g_signal_connect (window, "notify::skip-taskbar", G_CALLBACK(shell_app_on_skip_taskbar_changed), app); | ||||
|   g_signal_connect_object (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app, 0); | ||||
|   g_signal_connect_object (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app, 0); | ||||
|   g_signal_connect_object (window, "notify::skip-taskbar", G_CALLBACK(shell_app_on_skip_taskbar_changed), app, 0); | ||||
|  | ||||
|   shell_app_update_app_actions (app, window); | ||||
|   shell_app_ensure_busy_watch (app); | ||||
|   | ||||
| @@ -1560,7 +1560,8 @@ delete_variant_cb (GObject      *object, | ||||
|  | ||||
|   if (!g_file_delete_finish (G_FILE (object), result, &error)) | ||||
|     { | ||||
|       if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) | ||||
|       if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) && | ||||
|           !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) | ||||
|         { | ||||
|           g_warning ("Could not delete runtime/persistent state file: %s\n", | ||||
|                      error->message); | ||||
|   | ||||
| @@ -115,7 +115,8 @@ remove_mnemonics (const GValue *value) | ||||
|   g_return_val_if_fail (G_VALUE_HOLDS_STRING (value), NULL); | ||||
|  | ||||
|   label = g_value_get_string (value); | ||||
|   g_return_val_if_fail (label != NULL, NULL); | ||||
|   if (!label) | ||||
|     return NULL; | ||||
|  | ||||
|   /* Stripped label will have the original label lenght at most */ | ||||
|   stripped_label = temp = g_new (gchar, strlen(label) + 1); | ||||
|   | ||||
| @@ -465,7 +465,7 @@ recorder_record_frame (ShellRecorder *recorder, | ||||
|  | ||||
|       g_object_get (settings, "magnifier-active", &magnifier_active, NULL); | ||||
|  | ||||
|       if (magnifier_active) | ||||
|       if (!magnifier_active) | ||||
|         recorder_draw_cursor (recorder, buffer); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -535,12 +535,17 @@ track_window (ShellWindowTracker *self, | ||||
|  | ||||
| static void | ||||
| shell_window_tracker_on_window_added (MetaWorkspace   *workspace, | ||||
|                                    MetaWindow      *window, | ||||
|                                    gpointer         user_data) | ||||
|                                       MetaWindow      *window, | ||||
|                                       gpointer         user_data) | ||||
| { | ||||
|   ShellWindowTracker *self = SHELL_WINDOW_TRACKER (user_data); | ||||
|   MetaWindowType window_type = meta_window_get_window_type (window); | ||||
|  | ||||
|   track_window (self, window); | ||||
|   if (window_type == META_WINDOW_NORMAL || | ||||
|       window_type == META_WINDOW_DIALOG || | ||||
|       window_type == META_WINDOW_UTILITY || | ||||
|       window_type == META_WINDOW_MODAL_DIALOG) | ||||
|     track_window (self, window); | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -496,15 +496,31 @@ pixbuf_to_st_content_image (GdkPixbuf *pixbuf, | ||||
|   ClutterContent *image; | ||||
|   g_autoptr(GError) error = NULL; | ||||
|  | ||||
|   if (width < 0) | ||||
|     width = ceilf (gdk_pixbuf_get_width (pixbuf) / resource_scale); | ||||
|   else | ||||
|     width *= paint_scale; | ||||
|   float native_width, native_height; | ||||
|  | ||||
|   if (height < 0) | ||||
|     height = ceilf (gdk_pixbuf_get_height (pixbuf) / resource_scale); | ||||
|   native_width = ceilf (gdk_pixbuf_get_width (pixbuf) / resource_scale); | ||||
|   native_height = ceilf (gdk_pixbuf_get_height (pixbuf) / resource_scale); | ||||
|  | ||||
|   if (width < 0 && height < 0) | ||||
|     { | ||||
|       width = native_width; | ||||
|       height = native_height; | ||||
|     } | ||||
|   else if (width < 0) | ||||
|     { | ||||
|       height *= paint_scale; | ||||
|       width = native_width * (height / native_height); | ||||
|     } | ||||
|   else if (height < 0) | ||||
|     { | ||||
|       width *= paint_scale; | ||||
|       height = native_height * (width / native_width); | ||||
|     } | ||||
|   else | ||||
|     height *= paint_scale; | ||||
|     { | ||||
|       width *= paint_scale; | ||||
|       height *= paint_scale; | ||||
|     } | ||||
|  | ||||
|   image = st_image_content_new_with_preferred_size (width, height); | ||||
|   clutter_image_set_data (CLUTTER_IMAGE (image), | ||||
|   | ||||
| @@ -65,6 +65,8 @@ struct _StWidgetPrivate | ||||
|   StThemeNodeTransition *transition_animation; | ||||
|  | ||||
|   guint is_style_dirty : 1; | ||||
|   guint first_child_dirty : 1; | ||||
|   guint last_child_dirty : 1; | ||||
|   guint draw_bg_color : 1; | ||||
|   guint draw_border_internal : 1; | ||||
|   guint track_hover : 1; | ||||
| @@ -72,6 +74,7 @@ struct _StWidgetPrivate | ||||
|   guint can_focus : 1; | ||||
|  | ||||
|   gulong texture_file_changed_id; | ||||
|   guint update_child_styles_id; | ||||
|  | ||||
|   AtkObject *accessible; | ||||
|   AtkRole accessible_role; | ||||
| @@ -323,6 +326,8 @@ st_widget_dispose (GObject *gobject) | ||||
|   g_clear_object (&priv->last_visible_child); | ||||
|  | ||||
|   G_OBJECT_CLASS (st_widget_parent_class)->dispose (gobject); | ||||
|  | ||||
|   g_clear_handle_id (&priv->update_child_styles_id, g_source_remove); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -1608,47 +1613,85 @@ find_nearest_visible_forward (ClutterActor *actor) | ||||
|   return next; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| st_widget_update_child_styles (StWidget *widget) | ||||
| { | ||||
|   StWidgetPrivate *priv = st_widget_get_instance_private (widget); | ||||
|  | ||||
|   if (priv->first_child_dirty) | ||||
|     { | ||||
|       ClutterActor *first_child; | ||||
|  | ||||
|       priv->first_child_dirty = FALSE; | ||||
|  | ||||
|       first_child = clutter_actor_get_first_child (CLUTTER_ACTOR (widget)); | ||||
|       st_widget_set_first_visible_child (widget, | ||||
|                                          find_nearest_visible_forward (first_child)); | ||||
|     } | ||||
|  | ||||
|   if (priv->last_child_dirty) | ||||
|     { | ||||
|       ClutterActor *last_child; | ||||
|  | ||||
|       priv->last_child_dirty = FALSE; | ||||
|  | ||||
|       last_child = clutter_actor_get_last_child (CLUTTER_ACTOR (widget)); | ||||
|       st_widget_set_last_visible_child (widget, | ||||
|                                         find_nearest_visible_backwards (last_child)); | ||||
|     } | ||||
|  | ||||
|   priv->update_child_styles_id = 0; | ||||
|   return G_SOURCE_REMOVE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| st_widget_queue_child_styles_update (StWidget *widget) | ||||
| { | ||||
|   StWidgetPrivate *priv = st_widget_get_instance_private (widget); | ||||
|  | ||||
|   if (priv->update_child_styles_id != 0) | ||||
|     return; | ||||
|  | ||||
|   priv->update_child_styles_id = g_idle_add ((GSourceFunc) st_widget_update_child_styles, widget); | ||||
| } | ||||
|  | ||||
| static void | ||||
| st_widget_visible_notify (StWidget   *widget, | ||||
|                           GParamSpec *pspec, | ||||
|                           gpointer    data) | ||||
| { | ||||
|   StWidgetPrivate *parent_priv; | ||||
|   ClutterActor *actor = CLUTTER_ACTOR (widget); | ||||
|   ClutterActor *parent = clutter_actor_get_parent (actor); | ||||
|  | ||||
|   if (parent == NULL || !ST_IS_WIDGET (parent)) | ||||
|     return; | ||||
|  | ||||
|   parent_priv = st_widget_get_instance_private (ST_WIDGET (parent)); | ||||
|  | ||||
|   if (clutter_actor_is_visible (actor)) | ||||
|     { | ||||
|       ClutterActor *before, *after; | ||||
|  | ||||
|       before = clutter_actor_get_previous_sibling (actor); | ||||
|       if (find_nearest_visible_backwards (before) == NULL) | ||||
|         st_widget_set_first_visible_child (ST_WIDGET (parent), actor); | ||||
|         parent_priv->first_child_dirty = TRUE; | ||||
|  | ||||
|       after = clutter_actor_get_next_sibling (actor); | ||||
|       if (find_nearest_visible_forward (after) == NULL) | ||||
|         st_widget_set_last_visible_child (ST_WIDGET (parent), actor); | ||||
|         parent_priv->last_child_dirty = TRUE; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (st_widget_has_style_pseudo_class (widget, "first-child")) | ||||
|         { | ||||
|           ClutterActor *new_first; | ||||
|  | ||||
|           new_first = find_nearest_visible_forward (CLUTTER_ACTOR (widget)); | ||||
|           st_widget_set_first_visible_child (ST_WIDGET (parent), new_first); | ||||
|         } | ||||
|         parent_priv->first_child_dirty = TRUE; | ||||
|  | ||||
|       if (st_widget_has_style_pseudo_class (widget, "last-child")) | ||||
|         { | ||||
|           ClutterActor *new_last; | ||||
|  | ||||
|           new_last = find_nearest_visible_backwards (CLUTTER_ACTOR (widget)); | ||||
|           st_widget_set_last_visible_child (ST_WIDGET (parent), new_last); | ||||
|         } | ||||
|         parent_priv->last_child_dirty = TRUE; | ||||
|     } | ||||
|  | ||||
|   if (parent_priv->first_child_dirty || parent_priv->last_child_dirty) | ||||
|     st_widget_queue_child_styles_update (ST_WIDGET (parent)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -1656,10 +1699,10 @@ st_widget_first_child_notify (StWidget   *widget, | ||||
|                               GParamSpec *pspec, | ||||
|                               gpointer    data) | ||||
| { | ||||
|   ClutterActor *first_child; | ||||
|   StWidgetPrivate *priv = st_widget_get_instance_private (widget); | ||||
|  | ||||
|   first_child = clutter_actor_get_first_child (CLUTTER_ACTOR (widget)); | ||||
|   st_widget_set_first_visible_child (widget, find_nearest_visible_forward (first_child)); | ||||
|   priv->first_child_dirty = TRUE; | ||||
|   st_widget_queue_child_styles_update (widget); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -1667,10 +1710,10 @@ st_widget_last_child_notify (StWidget   *widget, | ||||
|                              GParamSpec *pspec, | ||||
|                              gpointer    data) | ||||
| { | ||||
|   ClutterActor *last_child; | ||||
|   StWidgetPrivate *priv = st_widget_get_instance_private (widget); | ||||
|  | ||||
|   last_child = clutter_actor_get_last_child (CLUTTER_ACTOR (widget)); | ||||
|   st_widget_set_last_visible_child (widget, find_nearest_visible_backwards (last_child)); | ||||
|   priv->last_child_dirty = TRUE; | ||||
|   st_widget_queue_child_styles_update (widget); | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
		Reference in New Issue
	
	Block a user