Compare commits
	
		
			41 Commits
		
	
	
		
			wip/nielsd
			...
			gnome-3-10
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | b05e592d16 | ||
|   | a57740648a | ||
|   | dd7b3f6d8d | ||
|   | d8d8d36ffb | ||
|   | 72ec20e48f | ||
|   | 3d1d155561 | ||
|   | 7943cf50d4 | ||
|   | 489ad9e978 | ||
|   | a3f3c60a6c | ||
|   | b39ef6a961 | ||
|   | 14dbe8ac8a | ||
|   | d158e19133 | ||
|   | c2dadecab8 | ||
|   | 099059c930 | ||
|   | 24f5b37d6b | ||
|   | 2958b15a61 | ||
|   | fd263d8457 | ||
|   | 47758f0f5f | ||
|   | 477eb1afed | ||
|   | 3b8b05518c | ||
|   | 0bd30696b1 | ||
|   | fb4e9d2232 | ||
|   | e072295395 | ||
|   | 1066c19e67 | ||
|   | d654c93ed2 | ||
|   | 7d1611f666 | ||
|   | 2579e48f21 | ||
|   | 7278f9bd6b | ||
|   | da55e27c3b | ||
|   | f3196e356b | ||
|   | 491b17af19 | ||
|   | 01e0eaf1fc | ||
|   | f679ce7017 | ||
|   | 844f4e9348 | ||
|   | 5cfc1461a1 | ||
|   | 323e1aba59 | ||
|   | 992b97d565 | ||
|   | da5b9f3255 | ||
|   | 6c1eff0dc2 | ||
|   | 1ff986e227 | ||
|   | b86a289ee3 | 
							
								
								
									
										50
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,3 +1,53 @@ | ||||
| 3.10.4 | ||||
| ====== | ||||
| * Fix CSD titlebars being placed off-screen [Jasper; #719772] | ||||
| * Expose MetaWindow:skip-taskbar property [Florian; #723307] | ||||
| * Fix legacy tray icons showing up blank [Adel; #721596] | ||||
| * Fix configuration of cloned monitors [Adel; #710610] | ||||
| * Use correct output property for backlight control [Robert; #723606] | ||||
| * Misc. bug fixes [Jasper, Adel, Giovanni, Ryan; #720630, #723468, #724258, | ||||
|   #724364] | ||||
|  | ||||
| Contributors: | ||||
|   Robert Ancell, Giovanni Campagna, Adel Gadllah, Ryan Lortie, Florian Müllner, | ||||
|   Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|   Shankar Prasad [kn], Khaled Hosny [ar] | ||||
|  | ||||
| 3.10.3 | ||||
| ====== | ||||
| * xrandr: Use "hotplug_mode_update" property [Marc-André; #711216] | ||||
| * Don't focus the no-focus-window for globally active windows [Jasper; #710296] | ||||
| * Fix window group paint volume [Owen; #719669] | ||||
| * Fix checks for KeyPress/ButtonPress [Jasper; #720545] | ||||
| * Fix problems with focus tracking [Owen; #720558] | ||||
| * Don't leave focus on windows that are being unmanaged [Owen; #711618] | ||||
| * Reduce server grabs [Daniel; #721345, #721709] | ||||
|  | ||||
| Contributors: | ||||
|   Daniel Drake, Marc-André Lureau, Jasper St. Pierre, Owen W. Taylor | ||||
|  | ||||
| Translations: | ||||
|   甘露(Gan  Lu) [zh_CN] | ||||
|  | ||||
| 3.10.2 | ||||
| ====== | ||||
| * Fix resize operations using mouse-button-modifier [Lionel; #710251] | ||||
|  | ||||
| Contributors: | ||||
|   Lionel Landwerlin | ||||
|  | ||||
| Translations: | ||||
|   Efstathios Iosifidis [el], Reinout van Schouwen [nl] | ||||
|  | ||||
| 3.10.1.1 | ||||
| ======== | ||||
| * Don't assert that at least one output is connected [Giovanni; #709009] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna | ||||
|  | ||||
| 3.10.1 | ||||
| ====== | ||||
| * Don't apply fullscreen workarounds to CSD windows [Giovanni; #708718] | ||||
|   | ||||
| @@ -2,7 +2,7 @@ AC_PREREQ(2.50) | ||||
|  | ||||
| m4_define([mutter_major_version], [3]) | ||||
| m4_define([mutter_minor_version], [10]) | ||||
| m4_define([mutter_micro_version], [1]) | ||||
| m4_define([mutter_micro_version], [4]) | ||||
|  | ||||
| m4_define([mutter_version], | ||||
|           [mutter_major_version.mutter_minor_version.mutter_micro_version]) | ||||
|   | ||||
							
								
								
									
										16
									
								
								po/ar.po
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								po/ar.po
									
									
									
									
									
								
							| @@ -4,14 +4,14 @@ | ||||
| # Arafat Medini <lumina@silverpen.de>, 2003. | ||||
| # Abdulaziz Al-Arfaj <alarfaj0@yahoo.com>, 2004. | ||||
| # Djihed Afifi <djihed@gmail.com>, 2006. | ||||
| # Khaled Hosny <khaledhosny@eglug.org>, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. | ||||
| # Khaled Hosny <khaledhosny@eglug.org>, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. | ||||
| # Anas Afif Emad <anas.e87@gmail.com>, 2008. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: metacity.HEAD\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-10-07 17:09+0200\n" | ||||
| "PO-Revision-Date: 2013-10-07 17:09+0200\n" | ||||
| "POT-Creation-Date: 2014-02-06 15:37+0200\n" | ||||
| "PO-Revision-Date: 2014-02-06 15:37+0200\n" | ||||
| "Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n" | ||||
| "Language-Team: Arabic <doc@arabeyes.org>\n" | ||||
| "Language: ar\n" | ||||
| @@ -314,16 +314,16 @@ msgstr "تعذّر إيجاد سِمة! تأكد من وجود %s و احتوا | ||||
|  | ||||
| #: ../src/core/monitor.c:696 | ||||
| msgid "Built-in display" | ||||
| msgstr "" | ||||
| msgstr "شاشة مدمجة" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:724 | ||||
| #, fuzzy, c-format | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "عنصر مجهول %s" | ||||
| msgstr "غير معروفة %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| @@ -503,7 +503,7 @@ msgid "Window manager error: " | ||||
| msgstr "خطأ مدير النوافذ: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7515 | ||||
| #: ../src/core/window.c:7497 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -519,7 +519,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8345 | ||||
| #: ../src/core/window.c:8329 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
|   | ||||
							
								
								
									
										234
									
								
								po/nl.po
									
									
									
									
									
								
							
							
						
						
									
										234
									
								
								po/nl.po
									
									
									
									
									
								
							| @@ -7,10 +7,9 @@ | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter" | ||||
| "&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-10-12 00:32+0200\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-10-25 00:15+0200\n" | ||||
| "PO-Revision-Date: 2013-10-25 00:23+0200\n" | ||||
| "Last-Translator: Reinout van Schouwen <reinouts@gnome.org>\n" | ||||
| "Language-Team: Dutch <vertaling@vrijschrift.org>\n" | ||||
| "Language: nl\n" | ||||
| @@ -18,7 +17,6 @@ msgstr "" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "X-Generator: Virtaal 0.7.1\n" | ||||
| "X-Project-Style: gnome\n" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| @@ -211,16 +209,16 @@ msgstr "Weergave gesplitst op rechts" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #: ../src/compositor/compositor.c:596 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "" | ||||
| "Er is al een andere ‘compositing manager’ actief op scherm %i van display ‘%" | ||||
| "s’." | ||||
| "Er is al een andere ‘compositing manager’ actief op scherm %i van display " | ||||
| "‘%s’." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| #: ../src/compositor/meta-background.c:1075 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "aanmaken achtergrondstructuur uit bestand mislukt" | ||||
|  | ||||
| @@ -235,7 +233,6 @@ msgstr "Onbekende aanvraag voor vensterinformatie: %d" | ||||
|  | ||||
| #: ../src/core/delete.c:111 | ||||
| #, c-format | ||||
| #| msgid "<tt>%s</tt> is not responding." | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "‘%s’ reageert niet." | ||||
|  | ||||
| @@ -259,12 +256,12 @@ msgstr "_Wachten" | ||||
| msgid "_Force Quit" | ||||
| msgstr "Ge_forceerd afsluiten" | ||||
|  | ||||
| #: ../src/core/display.c:421 | ||||
| #: ../src/core/display.c:422 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Benodigde extensie ‘%s’ voor ‘compositing’ ontbreekt" | ||||
|  | ||||
| #: ../src/core/display.c:513 | ||||
| #: ../src/core/display.c:514 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Openen van X Window System display ‘%s’ mislukt\n" | ||||
| @@ -281,7 +278,6 @@ msgstr "" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| #| msgid "\"%s\" is not a valid value for focus attribute" | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "‘%s’ is geen geldige sneltoets\n" | ||||
|  | ||||
| @@ -322,7 +318,7 @@ msgstr "" | ||||
| "Kon geen thema vinden! Zorg ervoor dat %s bestaat en de gebruikelijke " | ||||
| "thema's bevat.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| #: ../src/core/monitor.c:696 | ||||
| msgid "Built-in display" | ||||
| msgstr "Ingebouwd beeldscherm" | ||||
|  | ||||
| @@ -330,9 +326,8 @@ msgstr "Ingebouwd beeldscherm" | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #: ../src/core/monitor.c:724 | ||||
| #, c-format | ||||
| #| msgid "Unknown element %s" | ||||
| msgid "Unknown %s" | ||||
| msgstr "Onbekend %s" | ||||
|  | ||||
| @@ -394,12 +389,12 @@ msgstr "" | ||||
| msgid "Workspace %d" | ||||
| msgstr "Werkblad %d" | ||||
|  | ||||
| #: ../src/core/screen.c:534 | ||||
| #: ../src/core/screen.c:537 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Scherm %d op display '%s' is ongeldig\n" | ||||
|  | ||||
| #: ../src/core/screen.c:550 | ||||
| #: ../src/core/screen.c:553 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -408,19 +403,19 @@ msgstr "" | ||||
| "Scherm %d op display ‘%s’ heeft al een ‘window manager’; probeer de optie: --" | ||||
| "replace te gebruiken om de huidige ‘window manager’ te vervangen.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:577 | ||||
| #: ../src/core/screen.c:580 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "" | ||||
| "Kon ‘window manager’-selectie niet verkrijgen op scherm %d display ‘%s’\n" | ||||
|  | ||||
| #: ../src/core/screen.c:655 | ||||
| #: ../src/core/screen.c:658 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Scherm %d op display ‘%s’ heeft al een ‘window manager’\n" | ||||
|  | ||||
| #: ../src/core/screen.c:846 | ||||
| #: ../src/core/screen.c:850 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Kon scherm %d op display ‘%s’ niet vrijmaken\n" | ||||
| @@ -516,7 +511,7 @@ msgid "Window manager error: " | ||||
| msgstr "Fout van vensterbeheer:" | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7533 | ||||
| #: ../src/core/window.c:7515 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -532,7 +527,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8257 | ||||
| #: ../src/core/window.c:8345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -650,6 +645,9 @@ msgid "" | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
| "Bepaalt of werkbladen dynamisch worden beheerd of dat er een statisch aantal " | ||||
| "werkbladen is (gegeven door de sleutel num-workspaces in org.gnome.desktop." | ||||
| "wm.preferences)." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:9 | ||||
| msgid "Workspaces only on primary" | ||||
| @@ -672,10 +670,12 @@ msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
| "Bepaalt of het gebruik van pop-up en markering van het kader uitgeschakeld " | ||||
| "wordt voor het vensterbladeren." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:13 | ||||
| msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "" | ||||
| msgstr "Aandacht vertragen totdat de muispijl stopt met bewegen" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:14 | ||||
| msgid "" | ||||
| @@ -683,16 +683,22 @@ msgid "" | ||||
| "the focus will not be changed immediately when entering a window, but only " | ||||
| "after the pointer stops moving." | ||||
| msgstr "" | ||||
| "Indien op ‘true’ ingesteld en de aandachtsmodus is ofwel ‘sloppy’ of ‘mouse’, " | ||||
| "dan zal de aandacht niet direct veranderd worden bij het binnengaan van een " | ||||
| "venster, maar slechts wanneer de muispijl stopt met bewegen." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:15 | ||||
| msgid "Draggable border width" | ||||
| msgstr "" | ||||
| msgstr "Sleepbare randbreedte" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:16 | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
| "Het totaal aantal sleepbare randen. Als de zichtbare randen in het thema " | ||||
| "onvoldoende zijn, worden onzichtbare randen toegevoegd om deze waarde " | ||||
| "te bereiken." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:17 | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| @@ -957,13 +963,13 @@ msgid "Gradients should have at least two colors" | ||||
| msgstr "Kleurverloop moet tenminste twee kleuren hebben" | ||||
|  | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, fuzzy, c-format | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| "parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "GTK-kleurspecificatie moet een sluithaakje hebben na de status, dus: gtk: " | ||||
| "fg[NORMAL] waarbij NORMAL de stutus is; kon ‘%s’ niet verwerken" | ||||
| "Aangepaste GTK-kleurspecificatie moet een kleurnaam en terugvaloptie " | ||||
| "hebben tussen haakjes, dus: gtk:custom(foo,bar); kon ‘%s’ niet verwerken" | ||||
|  | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| @@ -971,15 +977,17 @@ msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| "_ are valid" | ||||
| msgstr "" | ||||
| "Ongeldig teken ‘%c’ in color_name-parameter van gtk:custom, alleen A-Za-z0-9-_ " | ||||
| "zijn geldig" | ||||
|  | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, fuzzy, c-format | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| "fit the format" | ||||
| msgstr "" | ||||
| "Schaduwformaat is ‘schaduw/basiskleur/factor’, ‘%s’ voldoet niet aan dit " | ||||
| "formaat" | ||||
| "Gtk:custom-formaat is ‘gtk:custom(color_name,fallback)’, ‘%s’ voldoet " | ||||
| "niet aan dit formaat" | ||||
|  | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| @@ -987,8 +995,8 @@ msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| "where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "GTK-kleurspecificatie moet de toestand in rechte haken hebben, bijv. gtk:fg" | ||||
| "[NORMAL] waarbij NORMAL de toestand is; kon ‘%s’ niet verwerken" | ||||
| "GTK-kleurspecificatie moet de toestand in rechte haken hebben, bijv. gtk:" | ||||
| "fg[NORMAL] waarbij NORMAL de toestand is; kon ‘%s’ niet verwerken" | ||||
|  | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| @@ -996,8 +1004,8 @@ msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| "fg[NORMAL] where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "GTK-kleurspecificatie moet een sluithaakje hebben na de status, dus: gtk: fg" | ||||
| "[NORMAL] waarbij NORMAL de stutus is; kon ‘%s’ niet verwerken" | ||||
| "GTK-kleurspecificatie moet een sluithaakje hebben na de status, dus: gtk: " | ||||
| "fg[NORMAL] waarbij NORMAL de stutus is; kon ‘%s’ niet verwerken" | ||||
|  | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| @@ -1222,59 +1230,59 @@ msgstr "Geen ‘%s’-attribuut op element <%s>" | ||||
| msgid "Line %d character %d: %s" | ||||
| msgstr "Regel %d teken %d: %s" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:479 | ||||
| #: ../src/ui/theme-parser.c:483 | ||||
| #, c-format | ||||
| msgid "Attribute \"%s\" repeated twice on the same <%s> element" | ||||
| msgstr "Attribuut ‘%s’ twee keer herhaald op hetzelfde <%s>-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:503 ../src/ui/theme-parser.c:552 | ||||
| #: ../src/ui/theme-parser.c:507 ../src/ui/theme-parser.c:556 | ||||
| #, c-format | ||||
| msgid "Attribute \"%s\" is invalid on <%s> element in this context" | ||||
| msgstr "Attribuut ‘%s’ is ongeldig op een <%s>-element in deze context" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:594 | ||||
| #: ../src/ui/theme-parser.c:598 | ||||
| #, c-format | ||||
| msgid "Could not parse \"%s\" as an integer" | ||||
| msgstr "Kon ‘%s’ niet verwerken als geheel getal" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:603 ../src/ui/theme-parser.c:658 | ||||
| #: ../src/ui/theme-parser.c:607 ../src/ui/theme-parser.c:662 | ||||
| #, c-format | ||||
| msgid "Did not understand trailing characters \"%s\" in string \"%s\"" | ||||
| msgstr "Niet begrepen: de laatste tekens ‘%s’ in ‘%s’" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:613 | ||||
| #: ../src/ui/theme-parser.c:617 | ||||
| #, c-format | ||||
| msgid "Integer %ld must be positive" | ||||
| msgstr "Geheel getal %ld moet positief zijn" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:621 | ||||
| #: ../src/ui/theme-parser.c:625 | ||||
| #, c-format | ||||
| msgid "Integer %ld is too large, current max is %d" | ||||
| msgstr "Geheel getal %ld is te groot, huidige maximum is %d" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:649 ../src/ui/theme-parser.c:765 | ||||
| #: ../src/ui/theme-parser.c:653 ../src/ui/theme-parser.c:769 | ||||
| #, c-format | ||||
| msgid "Could not parse \"%s\" as a floating point number" | ||||
| msgstr "Kon ‘%s’ niet als 'floating-point'-getal verwerken" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:680 ../src/ui/theme-parser.c:708 | ||||
| #: ../src/ui/theme-parser.c:684 ../src/ui/theme-parser.c:712 | ||||
| #, c-format | ||||
| msgid "Boolean values must be \"true\" or \"false\" not \"%s\"" | ||||
| msgstr "Boolese waarde moet ‘true’ of ‘false’ zijn, niet ‘%s’" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:735 | ||||
| #: ../src/ui/theme-parser.c:739 | ||||
| #, c-format | ||||
| msgid "Angle must be between 0.0 and 360.0, was %g\n" | ||||
| msgstr "Hoek moet liggen tussen 0.0 en 360.0, maar was %g\n" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:798 | ||||
| #: ../src/ui/theme-parser.c:802 | ||||
| #, c-format | ||||
| msgid "Alpha must be between 0.0 (invisible) and 1.0 (fully opaque), was %g\n" | ||||
| msgstr "" | ||||
| "Alpha moet liggen tussen 0.0 (onzichtbaar) en 1.0 (volledig ondoorzichtig), " | ||||
| "maar was %g\n" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:863 | ||||
| #: ../src/ui/theme-parser.c:867 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium," | ||||
| @@ -1283,60 +1291,60 @@ msgstr "" | ||||
| "Ongeldige titel-schaal ‘%s’ (u kunt kiezen uit: xx-small, x-small, small, " | ||||
| "medium, large, x-large, xx-large)\n" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1019 ../src/ui/theme-parser.c:1082 | ||||
| #: ../src/ui/theme-parser.c:1116 ../src/ui/theme-parser.c:1219 | ||||
| #: ../src/ui/theme-parser.c:1023 ../src/ui/theme-parser.c:1086 | ||||
| #: ../src/ui/theme-parser.c:1120 ../src/ui/theme-parser.c:1223 | ||||
| #, c-format | ||||
| msgid "<%s> name \"%s\" used a second time" | ||||
| msgstr "<%s>-naam ‘%s’ een tweede keer gebruikt" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1031 ../src/ui/theme-parser.c:1128 | ||||
| #: ../src/ui/theme-parser.c:1231 | ||||
| #: ../src/ui/theme-parser.c:1035 ../src/ui/theme-parser.c:1132 | ||||
| #: ../src/ui/theme-parser.c:1235 | ||||
| #, c-format | ||||
| msgid "<%s> parent \"%s\" has not been defined" | ||||
| msgstr "<%s>-ouder ‘%s’ is niet gedefinieerd" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1141 | ||||
| #: ../src/ui/theme-parser.c:1145 | ||||
| #, c-format | ||||
| msgid "<%s> geometry \"%s\" has not been defined" | ||||
| msgstr "<%s>-afmetingen ‘%s’ is niet gedefinieerd" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1154 | ||||
| #: ../src/ui/theme-parser.c:1158 | ||||
| #, c-format | ||||
| msgid "<%s> must specify either a geometry or a parent that has a geometry" | ||||
| msgstr "<%s> moet ofwel afmetingen specificeren, of een ouder met afmetingen" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1196 | ||||
| #: ../src/ui/theme-parser.c:1200 | ||||
| msgid "You must specify a background for an alpha value to be meaningful" | ||||
| msgstr "" | ||||
| "U dient een achtergrond te specificeren voordat een alpha-waarde betekenis " | ||||
| "heeft" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1264 | ||||
| #: ../src/ui/theme-parser.c:1268 | ||||
| #, c-format | ||||
| msgid "Unknown type \"%s\" on <%s> element" | ||||
| msgstr "Onbekend type ‘%s’ op <%s>-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1275 | ||||
| #: ../src/ui/theme-parser.c:1279 | ||||
| #, c-format | ||||
| msgid "Unknown style_set \"%s\" on <%s> element" | ||||
| msgstr "Onbekende style_set ‘%s’ op <%s>-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1283 | ||||
| #: ../src/ui/theme-parser.c:1287 | ||||
| #, c-format | ||||
| msgid "Window type \"%s\" has already been assigned a style set" | ||||
| msgstr "Venstertype ‘%s’ heeft reeds een stijlset toegewezen gekregen" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1313 ../src/ui/theme-parser.c:1377 | ||||
| #: ../src/ui/theme-parser.c:1603 ../src/ui/theme-parser.c:2838 | ||||
| #: ../src/ui/theme-parser.c:2884 ../src/ui/theme-parser.c:3034 | ||||
| #: ../src/ui/theme-parser.c:3273 ../src/ui/theme-parser.c:3311 | ||||
| #: ../src/ui/theme-parser.c:3349 ../src/ui/theme-parser.c:3387 | ||||
| #: ../src/ui/theme-parser.c:1317 ../src/ui/theme-parser.c:1381 | ||||
| #: ../src/ui/theme-parser.c:1607 ../src/ui/theme-parser.c:2842 | ||||
| #: ../src/ui/theme-parser.c:2888 ../src/ui/theme-parser.c:3038 | ||||
| #: ../src/ui/theme-parser.c:3274 ../src/ui/theme-parser.c:3312 | ||||
| #: ../src/ui/theme-parser.c:3350 ../src/ui/theme-parser.c:3388 | ||||
| #, c-format | ||||
| msgid "Element <%s> is not allowed below <%s>" | ||||
| msgstr "Element <%s> is niet toegestaan onder <%s>" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1427 ../src/ui/theme-parser.c:1441 | ||||
| #: ../src/ui/theme-parser.c:1486 | ||||
| #: ../src/ui/theme-parser.c:1431 ../src/ui/theme-parser.c:1445 | ||||
| #: ../src/ui/theme-parser.c:1490 | ||||
| msgid "" | ||||
| "Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio\" " | ||||
| "for buttons" | ||||
| @@ -1344,123 +1352,123 @@ msgstr "" | ||||
| "Kan niet tegelijk ‘button_width’/‘button_height’ en ‘aspect_ratio’ voor " | ||||
| "knoppen opgeven." | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1450 | ||||
| #: ../src/ui/theme-parser.c:1454 | ||||
| #, c-format | ||||
| msgid "Distance \"%s\" is unknown" | ||||
| msgstr "Afstand ‘%s’ is onbekend" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1495 | ||||
| #: ../src/ui/theme-parser.c:1499 | ||||
| #, c-format | ||||
| msgid "Aspect ratio \"%s\" is unknown" | ||||
| msgstr "Verhouding ‘%s’ is onbekend" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1557 | ||||
| #: ../src/ui/theme-parser.c:1561 | ||||
| #, c-format | ||||
| msgid "Border \"%s\" is unknown" | ||||
| msgstr "Rand ‘%s’ is onbekend" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1868 | ||||
| #: ../src/ui/theme-parser.c:1872 | ||||
| #, c-format | ||||
| msgid "No \"start_angle\" or \"from\" attribute on element <%s>" | ||||
| msgstr "Geen ‘start_angle’- of ‘from’-attribuut op element <%s>" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1875 | ||||
| #: ../src/ui/theme-parser.c:1879 | ||||
| #, c-format | ||||
| msgid "No \"extent_angle\" or \"to\" attribute on element <%s>" | ||||
| msgstr "Geen ‘extent_angle’- of ‘to’-attribuut op element <%s>" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2115 | ||||
| #: ../src/ui/theme-parser.c:2119 | ||||
| #, c-format | ||||
| msgid "Did not understand value \"%s\" for type of gradient" | ||||
| msgstr "Niet begrepen: de waarde ‘%s’ voor type kleurverloop" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2193 ../src/ui/theme-parser.c:2568 | ||||
| #: ../src/ui/theme-parser.c:2197 ../src/ui/theme-parser.c:2572 | ||||
| #, c-format | ||||
| msgid "Did not understand fill type \"%s\" for <%s> element" | ||||
| msgstr "Niet begrepen: vul-type ‘%s’ voor <%s>-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2360 ../src/ui/theme-parser.c:2443 | ||||
| #: ../src/ui/theme-parser.c:2506 | ||||
| #: ../src/ui/theme-parser.c:2364 ../src/ui/theme-parser.c:2447 | ||||
| #: ../src/ui/theme-parser.c:2510 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" for <%s> element" | ||||
| msgstr "Niet begrepen: status ‘%s’ voor <%s>-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2370 ../src/ui/theme-parser.c:2453 | ||||
| #: ../src/ui/theme-parser.c:2374 ../src/ui/theme-parser.c:2457 | ||||
| #, c-format | ||||
| msgid "Did not understand shadow \"%s\" for <%s> element" | ||||
| msgstr "Niet begrepen: schaduw ‘%s’ voor <%s>-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2380 | ||||
| #: ../src/ui/theme-parser.c:2384 | ||||
| #, c-format | ||||
| msgid "Did not understand arrow \"%s\" for <%s> element" | ||||
| msgstr "Niet begrepen: pijl ‘%s’ voor <%s>-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2694 ../src/ui/theme-parser.c:2790 | ||||
| #: ../src/ui/theme-parser.c:2698 ../src/ui/theme-parser.c:2794 | ||||
| #, c-format | ||||
| msgid "No <draw_ops> called \"%s\" has been defined" | ||||
| msgstr "Er zijn geen <draw_ops> genaamd ‘%s’ gedefinieerd" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2706 ../src/ui/theme-parser.c:2802 | ||||
| #: ../src/ui/theme-parser.c:2710 ../src/ui/theme-parser.c:2806 | ||||
| #, c-format | ||||
| msgid "Including draw_ops \"%s\" here would create a circular reference" | ||||
| msgstr "Hier ‘draw_ops’ ‘%s’ meenemen zou een circulaire verwijzing creëren" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2917 | ||||
| #: ../src/ui/theme-parser.c:2921 | ||||
| #, c-format | ||||
| msgid "Unknown position \"%s\" for frame piece" | ||||
| msgstr "Onbekende positie ‘%s’ voor kader-onderdeel" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2925 | ||||
| #: ../src/ui/theme-parser.c:2929 | ||||
| #, c-format | ||||
| msgid "Frame style already has a piece at position %s" | ||||
| msgstr "Kader-stijl heeft al een onderdeel op positie %s" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2942 ../src/ui/theme-parser.c:3019 | ||||
| #: ../src/ui/theme-parser.c:2946 ../src/ui/theme-parser.c:3023 | ||||
| #, c-format | ||||
| msgid "No <draw_ops> with the name \"%s\" has been defined" | ||||
| msgstr "Er zijn geen <draw_ops> met naam ‘%s’ gedefinieerd" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2972 | ||||
| #: ../src/ui/theme-parser.c:2976 | ||||
| #, c-format | ||||
| msgid "Unknown function \"%s\" for button" | ||||
| msgstr "Onbekende functie ‘%s’ voor knop" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2982 | ||||
| #: ../src/ui/theme-parser.c:2986 | ||||
| #, c-format | ||||
| msgid "Button function \"%s\" does not exist in this version (%d, need %d)" | ||||
| msgstr "Knopfunctie ‘%s’ bestaat niet in deze versie (%d, %d benodigd)" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2994 | ||||
| #: ../src/ui/theme-parser.c:2998 | ||||
| #, c-format | ||||
| msgid "Unknown state \"%s\" for button" | ||||
| msgstr "Onbekende status ‘%s’ voor knop" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3002 | ||||
| #: ../src/ui/theme-parser.c:3006 | ||||
| #, c-format | ||||
| msgid "Frame style already has a button for function %s state %s" | ||||
| msgstr "Kader-stijl heeft reeds een knop voor functie %s status %s" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3073 | ||||
| #: ../src/ui/theme-parser.c:3077 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid value for focus attribute" | ||||
| msgstr "‘%s’ is geen geldige waarde voor ‘focus’-attribuut" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3082 | ||||
| #: ../src/ui/theme-parser.c:3086 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid value for state attribute" | ||||
| msgstr "‘%s’ is geen geldige waarde voor ‘state’-attribuut" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3092 | ||||
| #: ../src/ui/theme-parser.c:3096 | ||||
| #, c-format | ||||
| msgid "A style called \"%s\" has not been defined" | ||||
| msgstr "Een stijl genaamd ‘%s’ is niet gedefinieerd" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3113 ../src/ui/theme-parser.c:3136 | ||||
| #: ../src/ui/theme-parser.c:3117 ../src/ui/theme-parser.c:3140 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid value for resize attribute" | ||||
| msgstr "‘%s’ is geen geldige waarde voor ‘resize’-attribuut" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3147 | ||||
| #: ../src/ui/theme-parser.c:3151 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Should not have \"resize\" attribute on <%s> element for maximized/shaded " | ||||
| @@ -1469,7 +1477,7 @@ msgstr "" | ||||
| "Behoort geen ‘resize’-attribuut te hebben op <%s>-element voor " | ||||
| "gemaximaliseerde/opgerolde toestanden" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3161 | ||||
| #: ../src/ui/theme-parser.c:3165 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Should not have \"resize\" attribute on <%s> element for maximized states" | ||||
| @@ -1477,20 +1485,20 @@ msgstr "" | ||||
| "Behoort geen ‘resize’-attribuut te hebben op <%s>-element voor " | ||||
| "gemaximaliseerde toestand" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3175 ../src/ui/theme-parser.c:3222 | ||||
| #: ../src/ui/theme-parser.c:3179 ../src/ui/theme-parser.c:3223 | ||||
| #, c-format | ||||
| msgid "Style has already been specified for state %s resize %s focus %s" | ||||
| msgstr "" | ||||
| "Stijl is reeds gespecificeerd voor status %s grootte aanpassen %s aandacht %s" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3186 ../src/ui/theme-parser.c:3197 | ||||
| #: ../src/ui/theme-parser.c:3208 ../src/ui/theme-parser.c:3233 | ||||
| #: ../src/ui/theme-parser.c:3244 ../src/ui/theme-parser.c:3255 | ||||
| #: ../src/ui/theme-parser.c:3190 ../src/ui/theme-parser.c:3201 | ||||
| #: ../src/ui/theme-parser.c:3212 ../src/ui/theme-parser.c:3234 | ||||
| #: ../src/ui/theme-parser.c:3245 ../src/ui/theme-parser.c:3256 | ||||
| #, c-format | ||||
| msgid "Style has already been specified for state %s focus %s" | ||||
| msgstr "Stijl is reeds gespecificeerd voor status %s aandacht %s" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3294 | ||||
| #: ../src/ui/theme-parser.c:3295 | ||||
| msgid "" | ||||
| "Can't have a two draw_ops for a <piece> element (theme specified a draw_ops " | ||||
| "attribute and also a <draw_ops> element, or specified two elements)" | ||||
| @@ -1499,7 +1507,7 @@ msgstr "" | ||||
| "specificeerde een ‘draw_ops’-attribuut en tevens een <draw_ops>-element, of " | ||||
| "specificeerde twee elementen)" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3332 | ||||
| #: ../src/ui/theme-parser.c:3333 | ||||
| msgid "" | ||||
| "Can't have a two draw_ops for a <button> element (theme specified a draw_ops " | ||||
| "attribute and also a <draw_ops> element, or specified two elements)" | ||||
| @@ -1508,7 +1516,7 @@ msgstr "" | ||||
| "specificeerde een ‘draw_ops’-attribuut en tevens een <draw_ops>-element, of " | ||||
| "specificeerde twee elementen)" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3370 | ||||
| #: ../src/ui/theme-parser.c:3371 | ||||
| msgid "" | ||||
| "Can't have a two draw_ops for a <menu_icon> element (theme specified a " | ||||
| "draw_ops attribute and also a <draw_ops> element, or specified two elements)" | ||||
| @@ -1517,12 +1525,12 @@ msgstr "" | ||||
| "specificeerde een ‘draw_ops’-attribuut en tevens een <draw_ops>-element, of " | ||||
| "specificeerde twee elementen)" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3434 | ||||
| #: ../src/ui/theme-parser.c:3435 | ||||
| #, c-format | ||||
| msgid "Bad version specification '%s'" | ||||
| msgstr "Foutieve opgave van versie: ‘%s’" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3507 | ||||
| #: ../src/ui/theme-parser.c:3508 | ||||
| msgid "" | ||||
| "\"version\" attribute cannot be used in metacity-theme-1.xml or metacity-" | ||||
| "theme-2.xml" | ||||
| @@ -1530,18 +1538,18 @@ msgstr "" | ||||
| "Het ‘version’-attribuut kan niet gebruikt worden in metacity-theme-1.xml of " | ||||
| "metacity-theme-2.xml." | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3530 | ||||
| #: ../src/ui/theme-parser.c:3531 | ||||
| #, c-format | ||||
| msgid "Theme requires version %s but latest supported theme version is %d.%d" | ||||
| msgstr "" | ||||
| "Het thema vereist versie %s, maar de recentste ondersteunde versie is %d.%d" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3562 | ||||
| #: ../src/ui/theme-parser.c:3563 | ||||
| #, c-format | ||||
| msgid "Outermost element in theme must be <metacity_theme> not <%s>" | ||||
| msgstr "Buitenste element in thema moet zijn: <metacity_theme>, niet <%s>" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3582 | ||||
| #: ../src/ui/theme-parser.c:3583 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Element <%s> is not allowed inside a name/author/date/description element" | ||||
| @@ -1549,12 +1557,12 @@ msgstr "" | ||||
| "Element <%s> is niet toegestaan binnen een naam/auteur/datum/beschrijving " | ||||
| "element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3587 | ||||
| #: ../src/ui/theme-parser.c:3588 | ||||
| #, c-format | ||||
| msgid "Element <%s> is not allowed inside a <constant> element" | ||||
| msgstr "Element <%s> is niet toegestaan binnen een <constant>-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3599 | ||||
| #: ../src/ui/theme-parser.c:3600 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Element <%s> is not allowed inside a distance/border/aspect_ratio element" | ||||
| @@ -1562,38 +1570,38 @@ msgstr "" | ||||
| "Element <%s> is niet toegestaan binnen de elementen distance/border/" | ||||
| "aspect_ratio" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3621 | ||||
| #: ../src/ui/theme-parser.c:3622 | ||||
| #, c-format | ||||
| msgid "Element <%s> is not allowed inside a draw operation element" | ||||
| msgstr "Element <%s> is niet toegestaan binnen een ‘draw operation’-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3631 ../src/ui/theme-parser.c:3661 | ||||
| #: ../src/ui/theme-parser.c:3666 ../src/ui/theme-parser.c:3671 | ||||
| #: ../src/ui/theme-parser.c:3632 ../src/ui/theme-parser.c:3662 | ||||
| #: ../src/ui/theme-parser.c:3667 ../src/ui/theme-parser.c:3672 | ||||
| #, c-format | ||||
| msgid "Element <%s> is not allowed inside a <%s> element" | ||||
| msgstr "Element <%s> is niet toegestaan binnen een <%s>-element" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3899 | ||||
| #: ../src/ui/theme-parser.c:3900 | ||||
| msgid "No draw_ops provided for frame piece" | ||||
| msgstr "Geen ‘draw_ops’ gegeven voor kader-onderdeel" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3914 | ||||
| #: ../src/ui/theme-parser.c:3915 | ||||
| msgid "No draw_ops provided for button" | ||||
| msgstr "Geen ‘draw_ops’ gegeven voor knop" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3968 | ||||
| #: ../src/ui/theme-parser.c:3969 | ||||
| #, c-format | ||||
| msgid "No text is allowed inside element <%s>" | ||||
| msgstr "Geen tekst toegestaan binnen element <%s>" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4026 ../src/ui/theme-parser.c:4038 | ||||
| #: ../src/ui/theme-parser.c:4050 ../src/ui/theme-parser.c:4062 | ||||
| #: ../src/ui/theme-parser.c:4074 | ||||
| #: ../src/ui/theme-parser.c:4027 ../src/ui/theme-parser.c:4039 | ||||
| #: ../src/ui/theme-parser.c:4051 ../src/ui/theme-parser.c:4063 | ||||
| #: ../src/ui/theme-parser.c:4075 | ||||
| #, c-format | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> twee keer gegeven voor dit thema" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #: ../src/ui/theme-parser.c:4337 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Geen geldig bestand gevonden voor thema %s\n" | ||||
|   | ||||
							
								
								
									
										222
									
								
								po/pt.po
									
									
									
									
									
								
							
							
						
						
									
										222
									
								
								po/pt.po
									
									
									
									
									
								
							| @@ -1,20 +1,24 @@ | ||||
| # mutter's Portuguese Translation | ||||
| # Copyright © 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 metacity/mutter | ||||
| # Distributed under the same licence as the metacity package | ||||
| # Duarte Loreto <happyguy_pt@hotmail.com>, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. | ||||
| #  | ||||
| # mutter's Portuguese Translation | ||||
| # Copyright © 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 metacity/mutter | ||||
| # Distributed under the same licence as the metacity package | ||||
| # Duarte Loreto <happyguy_pt@hotmail.com>, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. | ||||
| # Pedro Albuquerque <palbuquerque73@gmail.com>, 2015. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: 3.10\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-09-23 00:17+0100\n" | ||||
| "PO-Revision-Date: 2013-09-23 00:20+0000\n" | ||||
| "Last-Translator: Duarte Loreto <happyguy_pt@hotmail.com>\n" | ||||
| "Language-Team: Portuguese <gnome_pt@yahoogroups.com>\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2015-09-28 23:51+0000\n" | ||||
| "PO-Revision-Date: 2015-10-07 09:55+0100\n" | ||||
| "Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>\n" | ||||
| "Language-Team: Português <palbuquerque73@gmail.com>\n" | ||||
| "Language: pt\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\n" | ||||
| "X-Generator: Gtranslator 2.91.6\n" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| msgid "Navigation" | ||||
| @@ -54,11 +58,11 @@ msgstr "Mover a janela uma área de trabalho abaixo" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:10 | ||||
| msgid "Switch applications" | ||||
| msgstr "Alternar entre aplicações" | ||||
| msgstr "Mudar de aplicações" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:11 | ||||
| msgid "Switch windows" | ||||
| msgstr "Alternar entre janelas" | ||||
| msgstr "Mudar de janelas" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:12 | ||||
| msgid "Switch windows of an application" | ||||
| @@ -82,23 +86,23 @@ msgstr "Alternar diretamente entre controlos de sistema" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:17 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Esconder todas as janelas normais" | ||||
| msgstr "Ocultar todas as janelas normais" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:18 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Alternar para a área de trabalho 1" | ||||
| msgstr "Mudar para a área de trabalho 1" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:19 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Alternar para a área de trabalho 2" | ||||
| msgstr "Mudar para a área de trabalho 2" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:20 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Alternar para a área de trabalho 3" | ||||
| msgstr "Mudar para a área de trabalho 3" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:21 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Alternar para a área de trabalho 4" | ||||
| msgstr "Mudar para a área de trabalho 4" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:22 | ||||
| msgid "Move to workspace left" | ||||
| @@ -122,11 +126,11 @@ msgstr "Sistema" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:2 | ||||
| msgid "Show the run command prompt" | ||||
| msgstr "Apresentar a linha de comando de execução" | ||||
| msgstr "Mostrar a linha de comando de execução" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:3 | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Apresentar o resumo de atividades" | ||||
| msgstr "Mostrar o resumo de atividades" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:1 | ||||
| msgid "Windows" | ||||
| @@ -162,7 +166,7 @@ msgstr "Fechar a janela" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:9 | ||||
| msgid "Hide window" | ||||
| msgstr "Esconder a janela" | ||||
| msgstr "Ocultar a janela" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:10 | ||||
| msgid "Move window" | ||||
| @@ -174,7 +178,7 @@ msgstr "Redimensionar a janela" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:12 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Alternar janela em todas as áreas de trabalho ou apenas numa" | ||||
| msgstr "Alternar janela em todas as áreas de trabalho ou só numa" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:13 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| @@ -198,11 +202,11 @@ msgstr "Maximizar janela horizontalmente" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:18 | ||||
| msgid "View split on left" | ||||
| msgstr "Visualizar a divisão à esquerda" | ||||
| msgstr "Ver a divisão à esquerda" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:19 | ||||
| msgid "View split on right" | ||||
| msgstr "Visualizar a divisão à direita" | ||||
| msgstr "Ver a divisão à direita" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| @@ -215,9 +219,9 @@ msgstr "" | ||||
| "Já se encontra em execução outro gestor de janelas no ecrã %i do monitor \"%s" | ||||
| "\"." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1075 | ||||
| #: ../src/compositor/meta-background.c:1090 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "incapaz de criar de ficheiro a textura de fundo" | ||||
| msgstr "impossível criar de ficheiro a textura de fundo" | ||||
|  | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| @@ -231,7 +235,7 @@ msgstr "Pedido de informação de janela desconhecido: %d" | ||||
| #: ../src/core/delete.c:111 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "“%s” não está a responder." | ||||
| msgstr "\"%s\" não está a responder." | ||||
|  | ||||
| #: ../src/core/delete.c:113 | ||||
| msgid "Application is not responding." | ||||
| @@ -251,17 +255,17 @@ msgstr "_Aguardar" | ||||
|  | ||||
| #: ../src/core/delete.c:125 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Forçar Terminar" | ||||
| msgstr "_Forçar terminar" | ||||
|  | ||||
| #: ../src/core/display.c:422 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Incapaz de encontrar a extensão %s, necessária para a composição" | ||||
| msgstr "Impossível encontrar a extensão %s, necessária para a composição" | ||||
|  | ||||
| #: ../src/core/display.c:514 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Falha ao abrir ecrã '%s' do Sistema Janelas X\n" | ||||
| msgstr "Falha ao abrir ecrã \"%s\" do sistema Janelas X\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| @@ -287,7 +291,7 @@ msgstr "Substituir o gestor de janelas em execução" | ||||
|  | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Especificar o ID de gestão de sessão" | ||||
| msgstr "Especificar a ID de gestão de sessão" | ||||
|  | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| @@ -299,19 +303,19 @@ msgstr "Inicializar a sessão a partir de um ficheiro de gravação de sessão" | ||||
|  | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Realizar as invocações X sincronamente" | ||||
| msgstr "Fazer as chamadas X sincronamente" | ||||
|  | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Falha ao analizar diretório de temas: %s\n" | ||||
| msgstr "Falha ao analizar pasta de temas: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| msgstr "" | ||||
| "Incapaz de encontrar um tema! Certifique-se que %s existe e contém os temas " | ||||
| "Impossível encontrar um tema! Certifique-se que %s existe e contém os temas " | ||||
| "normais.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:696 | ||||
| @@ -349,21 +353,21 @@ msgstr "Imprimir a versão" | ||||
|  | ||||
| #: ../src/core/mutter.c:60 | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Plugin Mutter a utilizar" | ||||
| msgstr "Extensão Mutter a utilizar" | ||||
|  | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| msgstr "" | ||||
| "Recursos para aplicações problemáticas inativos. Algumas aplicações poderão " | ||||
| "Recursos inativos para aplicações problemáticas. Algumas aplicações poderão " | ||||
| "não funcionar corretamente.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "" | ||||
| "Incapaz de processar a descrição de fonte \"%s\" da chave GSettings %s\n" | ||||
| "Impossível processar a descrição de letra \"%s\" da chave GSettings %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| @@ -386,14 +390,14 @@ msgstr "" | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Área de Trabalho %d" | ||||
| msgstr "Área de trabalho %d" | ||||
|  | ||||
| #: ../src/core/screen.c:537 | ||||
| #: ../src/core/screen.c:539 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Ecrã %d no monitor '%s' é inválido\n" | ||||
| msgstr "Ecrã %d no monitor \"%s\" é inválido\n" | ||||
|  | ||||
| #: ../src/core/screen.c:553 | ||||
| #: ../src/core/screen.c:555 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -402,42 +406,42 @@ msgstr "" | ||||
| "Ecrã %d no monitor \"%s\" já tem um gestor de janelas; tente utilizar a " | ||||
| "opção --replace para substituir o gestor de janelas atual.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:580 | ||||
| #: ../src/core/screen.c:582 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "" | ||||
| "Incapaz de obter seleção do gestor de janelas no ecrã %d monitor \"%s\"\n" | ||||
| "Impossível obter seleção do gestor de janelas no ecrã %d monitor \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/screen.c:658 | ||||
| #: ../src/core/screen.c:660 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Ecrã %d no monitor \"%s\" já tem um gestor de janelas\n" | ||||
|  | ||||
| #: ../src/core/screen.c:850 | ||||
| #: ../src/core/screen.c:852 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Incapaz libertar ecrã %d no monitor \"%s\"\n" | ||||
| msgstr "Impossível libertar ecrã %d no monitor \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/session.c:843 ../src/core/session.c:850 | ||||
| #, c-format | ||||
| msgid "Could not create directory '%s': %s\n" | ||||
| msgstr "Incapaz de criar diretório '%s': %s\n" | ||||
| msgstr "Impossível criar pasta \"%s\": %s\n" | ||||
|  | ||||
| #: ../src/core/session.c:860 | ||||
| #, c-format | ||||
| msgid "Could not open session file '%s' for writing: %s\n" | ||||
| msgstr "Incapaz de abrir ficheiro de sessão '%s' para escrita: %s\n" | ||||
| msgstr "Impossível abrir ficheiro de sessão \"%s\" para escrita: %s\n" | ||||
|  | ||||
| #: ../src/core/session.c:1001 | ||||
| #, c-format | ||||
| msgid "Error writing session file '%s': %s\n" | ||||
| msgstr "Erro ao escrever ficheiro de sessão '%s': %s\n" | ||||
| msgstr "Erro ao escrever ficheiro de sessão \"%s\": %s\n" | ||||
|  | ||||
| #: ../src/core/session.c:1006 | ||||
| #, c-format | ||||
| msgid "Error closing session file '%s': %s\n" | ||||
| msgstr "Erro ao fechar ficheiro de sessão '%s': %s\n" | ||||
| msgstr "Erro ao fechar ficheiro de sessão \"%s\": %s\n" | ||||
|  | ||||
| #: ../src/core/session.c:1136 | ||||
| #, c-format | ||||
| @@ -459,7 +463,7 @@ msgstr "Atributo %s desconhecido no elemento <%s>" | ||||
| #: ../src/core/session.c:1215 | ||||
| #, c-format | ||||
| msgid "nested <window> tag" | ||||
| msgstr "etiqueta de <window> encadeada" | ||||
| msgstr "etiqueta de <window> aninhada" | ||||
|  | ||||
| #: ../src/core/session.c:1457 | ||||
| #, c-format | ||||
| @@ -471,8 +475,8 @@ msgid "" | ||||
| "These windows do not support "save current setup" and will have to " | ||||
| "be restarted manually next time you log in." | ||||
| msgstr "" | ||||
| "Estas janelas não suportam "gravar configuração atual" e terão de " | ||||
| "ser reiniciadas manualmente da próxima vez que iniciar sessão." | ||||
| "Estas janelas não suportam \"Gravar configuração atual\" e terão de ser " | ||||
| "reiniciadas manualmente da próxima vez que iniciar sessão." | ||||
|  | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| @@ -492,7 +496,7 @@ msgstr "Ficheiro de registo %s aberto\n" | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "" | ||||
| "Mutter foi compilado sem suporte para modo de registo detalhado (verbose)\n" | ||||
| "Mutter foi compilado sem suporte para modo de registo detalhado (verboso)\n" | ||||
|  | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| @@ -511,7 +515,7 @@ msgid "Window manager error: " | ||||
| msgstr "Erro do gestor de janelas: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7515 | ||||
| #: ../src/core/window.c:7509 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -527,7 +531,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8345 | ||||
| #: ../src/core/window.c:8341 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -602,10 +606,10 @@ msgid "" | ||||
| "\"Windows key\" on PC hardware. It's expected that this binding either the " | ||||
| "default or set to the empty string." | ||||
| msgstr "" | ||||
| "Esta chave irá iniciar a \"sobreposição\", que é um sistema de visão " | ||||
| "combinada de janelas e arranque de aplicações. Por omissão é a \"tecla " | ||||
| "Windows\" em computadores PC. Espera-se que esta associação esteja para a " | ||||
| "omissão ou uma expressão vazia." | ||||
| "Esta tecla iniciará a \"sobreposição\", que é um sistema de visão combinada " | ||||
| "de janelas e arranque de aplicações. Por predefinição é a \"tecla Windows\" " | ||||
| "em computadores PC. Espera-se que esta associação seja a predefinição ou uma " | ||||
| "cadeia vazia." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:3 | ||||
| msgid "Attach modal dialogs" | ||||
| @@ -618,8 +622,8 @@ msgid "" | ||||
| "the parent window." | ||||
| msgstr "" | ||||
| "Quando verdadeiro, em vez de terem barras de título independentes, os " | ||||
| "diálogos modais surgem anexados à barra de título da janela pai e são " | ||||
| "movidos juntamente com a janela pai." | ||||
| "diálogos modais surgem anexados à barra de título da janela-mãe e são " | ||||
| "movidos juntamente com a janela-mãe." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:5 | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| @@ -724,17 +728,17 @@ msgstr "Cancelar o popup de tabulador" | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "Mi_nimizar" | ||||
| msgstr "Mi_Nimizar" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Ma_ximizar" | ||||
| msgstr "Ma_Ximizar" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "Resta_urar" | ||||
| msgstr "Resta_Urar" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| @@ -744,7 +748,7 @@ msgstr "_Enrolar" | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "D_esenrolar" | ||||
| msgstr "D_Esenrolar" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| @@ -759,7 +763,7 @@ msgstr "_Redimensionar" | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Mover a _Barra de Títulos no Ecrã" | ||||
| msgstr "Mover a _Barra de títulos no ecrã" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| @@ -770,32 +774,32 @@ msgstr "Sempre no _Topo" | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "_Sempre na Área de Trabalho Visível" | ||||
| msgstr "_Sempre na área de trabalho visível" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "_Apenas nesta Área de Trabalho" | ||||
| msgstr "_Só nesta área de trabalho" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Mover para a Área de Trabalho à _Esquerda" | ||||
| msgstr "Mover para a área de trabalho à _Esquerda" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Mover para a Área de Trabalho à _Direita" | ||||
| msgstr "Mover para a área de trabalho à _Direita" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Mover para a Área de Trabalho _Acima" | ||||
| msgstr "Mover para a área de trabalho _Acima" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Mover para a Área de Trabalho A_baixo" | ||||
| msgstr "Mover para a área de trabalho a_Baixo" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| @@ -806,21 +810,21 @@ msgstr "_Fechar" | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Área de Trabalho %d%n" | ||||
| msgstr "Área de trabalho %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Área de Trabalho 1_0" | ||||
| msgstr "Área de trabalho 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Área de Trabalho %s%d" | ||||
| msgstr "Área de trabalho %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Mover para Outra Área de _Trabalho" | ||||
| msgstr "Mover para outra área de _Trabalho" | ||||
|  | ||||
| #. This is the text that should appear next to menu accelerators | ||||
| #. * that use the shift key. If the text on this key isn't typically | ||||
| @@ -949,7 +953,7 @@ msgstr "geometria de moldura não especifica dimensão \"%s\" para margem \"%s\" | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "Rácio de aparência de botão %g não é um valor razoável" | ||||
| msgstr "Proporção do botão %g não é um valor razoável" | ||||
|  | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| @@ -968,7 +972,7 @@ msgid "" | ||||
| "parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "Especificação de cor GTK tem de ter o nome da cor e o recurso entre " | ||||
| "parentesis, por ex. gtk:custom(foo,bar); incapaz de processar \"%s\"" | ||||
| "parentesis, por ex. gtk:custom(foo,bar); impossível processar \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| @@ -976,8 +980,8 @@ msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| "_ are valid" | ||||
| msgstr "" | ||||
| "Caracter '%c' inválido no parâmetro color_name de gtk:custom, apenas são " | ||||
| "válidos os carateres A-Za-z0-9-_" | ||||
| "Carácter \"%c\" inválido no parâmetro color_name de gtk:custom, apenas são " | ||||
| "válidos os caracteres A-Za-z0-9-_" | ||||
|  | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| @@ -994,8 +998,8 @@ msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| "where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "Especificação de cor GTK tem de ter o estado entre parentesis retos, por ex. " | ||||
| "gtk:fg[NORMAL] em que NORMAL é o estado; incapaz de processar \"%s\"" | ||||
| "Especificação de cor GTK tem de ter o estado entre parênteses retos, por ex. " | ||||
| "gtk:fg[NORMAL] em que NORMAL é o estado; impossível processar \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| @@ -1003,20 +1007,20 @@ msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| "fg[NORMAL] where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "Especificação de cor GTK tem de ter um parentesis reto de fecho após o " | ||||
| "estado, por ex. gtk:fg[NORMAL] em que NORMAL é o estado; incapaz de " | ||||
| "Especificação de cor GTK tem de ter um parênteses reto de fecho após o " | ||||
| "estado, por ex. gtk:fg[NORMAL] em que NORMAL é o estado; impossível " | ||||
| "processar \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Incapaz de compreender o estado \"%s\" na especificação de cor" | ||||
| msgstr "Impossível compreender o estado \"%s\" na especificação de cor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "" | ||||
| "Incapaz de compreender componente de cor \"%s\" na especificação de cor" | ||||
| "Impossível compreender componente de cor \"%s\" na especificação de cor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| @@ -1030,7 +1034,7 @@ msgstr "" | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Incapaz de processar o valor alfa \"%s\" na mistura de cor" | ||||
| msgstr "Impossível processar o valor alfa \"%s\" na mistura de cor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| @@ -1048,7 +1052,7 @@ msgstr "" | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "" | ||||
| "Incapaz de processar o valor de fator de sombra \"%s\" na cor sombreada" | ||||
| "Impossível processar o valor de fator de sombra \"%s\" na cor sombreada" | ||||
|  | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| @@ -1058,12 +1062,12 @@ msgstr "Fator de sombreado \"%s\" na cor sombreada é negativo" | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Incapaz de processar cor \"%s\"" | ||||
| msgstr "Impossível processar cor \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Expressão de coordenada contém caracter '%s' que não é permitido" | ||||
| msgstr "Expressão de coordenada contém carácter \"%s\" que não é permitido" | ||||
|  | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| @@ -1071,14 +1075,14 @@ msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "" | ||||
| "Expressão de coordenada contém número decimal '%s' que não pode ser " | ||||
| "Expressão de coordenada contém número decimal \"%s\" que não pode ser " | ||||
| "processado" | ||||
|  | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "" | ||||
| "Expressão de coordenada contém número inteiro '%s' que não pode ser " | ||||
| "Expressão de coordenada contém número inteiro \"%s\" que não pode ser " | ||||
| "processado" | ||||
|  | ||||
| #: ../src/ui/theme.c:1942 | ||||
| @@ -1147,13 +1151,13 @@ msgstr "O processador de expressão de coordenada transbordou o seu buffer." | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "" | ||||
| "Expressão de coordenada tem um fecho de parentesis sem a respetiva abertura" | ||||
| "Expressão de coordenada tem um fecho de parênteses sem a respetiva abertura" | ||||
|  | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "" | ||||
| "Expressão de coordenada tem uma abertura de parentesis sem o respetivo fecho" | ||||
| "Expressão de coordenada tem uma abertura de parênteses sem o respetivo fecho" | ||||
|  | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| @@ -1185,7 +1189,7 @@ msgstr "" | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Falha ao ler tema \"%s\": %s\n" | ||||
| msgstr "Falha ao carregar tema \"%s\": %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| @@ -1226,7 +1230,7 @@ msgstr "Nenhum atributo \"%s\" no elemento <%s>" | ||||
| #: ../src/ui/theme-parser.c:265 ../src/ui/theme-parser.c:283 | ||||
| #, c-format | ||||
| msgid "Line %d character %d: %s" | ||||
| msgstr "Linha %d caracter %d: %s" | ||||
| msgstr "Linha %d, carácter %d: %s" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:483 | ||||
| #, c-format | ||||
| @@ -1241,12 +1245,12 @@ msgstr "Atributo \"%s\" é inválido no elemento <%s> neste contexto" | ||||
| #: ../src/ui/theme-parser.c:598 | ||||
| #, c-format | ||||
| msgid "Could not parse \"%s\" as an integer" | ||||
| msgstr "Incapaz de processar \"%s\" como um inteiro" | ||||
| msgstr "Impossível processar \"%s\" como um inteiro" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:607 ../src/ui/theme-parser.c:662 | ||||
| #, c-format | ||||
| msgid "Did not understand trailing characters \"%s\" in string \"%s\"" | ||||
| msgstr "Incapaz de compreender últimos carateres \"%s\" na expressão \"%s\"" | ||||
| msgstr "Impossível compreender últimos caracteres \"%s\" na expressão \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:617 | ||||
| #, c-format | ||||
| @@ -1256,17 +1260,17 @@ msgstr "Inteiro %ld tem de ser positivo" | ||||
| #: ../src/ui/theme-parser.c:625 | ||||
| #, c-format | ||||
| msgid "Integer %ld is too large, current max is %d" | ||||
| msgstr "Inteiro %ld é demasiado grande, máx atual é %d" | ||||
| msgstr "Inteiro %ld é demasiado grande, máximo atual é %d" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:653 ../src/ui/theme-parser.c:769 | ||||
| #, c-format | ||||
| msgid "Could not parse \"%s\" as a floating point number" | ||||
| msgstr "Incapaz de processar \"%s\" como um númerico decimal" | ||||
| msgstr "Impossível processar \"%s\" como um número decimal" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:684 ../src/ui/theme-parser.c:712 | ||||
| #, c-format | ||||
| msgid "Boolean values must be \"true\" or \"false\" not \"%s\"" | ||||
| msgstr "Valores boleanos têm de ser \"true\" ou \"false\" não \"%s\"" | ||||
| msgstr "Valores boolianos têm de ser \"true\" ou \"false\" não \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:739 | ||||
| #, c-format | ||||
| @@ -1356,7 +1360,7 @@ msgstr "Distância \"%s\" é desconhecida" | ||||
| #: ../src/ui/theme-parser.c:1499 | ||||
| #, c-format | ||||
| msgid "Aspect ratio \"%s\" is unknown" | ||||
| msgstr "Rácio de aparência \"%s\" é desconhecido" | ||||
| msgstr "Proporção \"%s\" é desconhecida" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1561 | ||||
| #, c-format | ||||
| @@ -1376,28 +1380,28 @@ msgstr "Nenhum atributo \"extent_angle\" ou \"to\" no elemento <%s>" | ||||
| #: ../src/ui/theme-parser.c:2119 | ||||
| #, c-format | ||||
| msgid "Did not understand value \"%s\" for type of gradient" | ||||
| msgstr "Incapaz de compreender valor \"%s\" para tipo de gradiente" | ||||
| msgstr "Impossível compreender valor \"%s\" para tipo de gradiente" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2197 ../src/ui/theme-parser.c:2572 | ||||
| #, c-format | ||||
| msgid "Did not understand fill type \"%s\" for <%s> element" | ||||
| msgstr "Incapaz de compreender tipo de enchimento \"%s\" para elemento <%s>" | ||||
| msgstr "Impossível compreender tipo de enchimento \"%s\" para elemento <%s>" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2364 ../src/ui/theme-parser.c:2447 | ||||
| #: ../src/ui/theme-parser.c:2510 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" for <%s> element" | ||||
| msgstr "Incapaz de compreender estado \"%s\" para elemento <%s>" | ||||
| msgstr "Impossível compreender estado \"%s\" para elemento <%s>" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2374 ../src/ui/theme-parser.c:2457 | ||||
| #, c-format | ||||
| msgid "Did not understand shadow \"%s\" for <%s> element" | ||||
| msgstr "Incapaz de compreender sombra \"%s\" para elemento <%s>" | ||||
| msgstr "Impossível compreender sombra \"%s\" para elemento <%s>" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2384 | ||||
| #, c-format | ||||
| msgid "Did not understand arrow \"%s\" for <%s> element" | ||||
| msgstr "Incapaz de compreender seta \"%s\" para elemento <%s>" | ||||
| msgstr "Impossível compreender seta \"%s\" para elemento <%s>" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2698 ../src/ui/theme-parser.c:2794 | ||||
| #, c-format | ||||
| @@ -1407,7 +1411,7 @@ msgstr "Não foi definido nenhum <draw_ops> chamado \"%s\"" | ||||
| #: ../src/ui/theme-parser.c:2710 ../src/ui/theme-parser.c:2806 | ||||
| #, c-format | ||||
| msgid "Including draw_ops \"%s\" here would create a circular reference" | ||||
| msgstr "Incluir aqui draw_ops \"%s\" iria criar uma referência circular" | ||||
| msgstr "Incluir aqui draw_ops \"%s\" criaria uma referência circular" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2921 | ||||
| #, c-format | ||||
| @@ -1524,7 +1528,7 @@ msgstr "" | ||||
| #: ../src/ui/theme-parser.c:3435 | ||||
| #, c-format | ||||
| msgid "Bad version specification '%s'" | ||||
| msgstr "Especificação de versão '%s' inválida" | ||||
| msgstr "Especificação de versão \"%s\" inválida" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:3508 | ||||
| msgid "" | ||||
|   | ||||
							
								
								
									
										1197
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
							
						
						
									
										1197
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -501,7 +501,8 @@ set_brightness (MetaBackground *self, | ||||
|  | ||||
|   priv->brightness = brightness; | ||||
|  | ||||
|   if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE) | ||||
|   if (clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL) && | ||||
|       priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE) | ||||
|     { | ||||
|       ensure_pipeline (self); | ||||
|       cogl_pipeline_set_uniform_1f (priv->pipeline, | ||||
| @@ -509,6 +510,14 @@ set_brightness (MetaBackground *self, | ||||
|                                                                         "brightness"), | ||||
|                                     priv->brightness); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       ensure_pipeline (self); | ||||
|       CoglColor blend_color; | ||||
|       cogl_color_init_from_4f (&blend_color, brightness, brightness, brightness, 1.0); | ||||
|       cogl_pipeline_set_layer_combine (priv->pipeline, 1, "RGB=MODULATE(PREVIOUS, CONSTANT) A=REPLACE(PREVIOUS)", NULL); | ||||
|       cogl_pipeline_set_layer_combine_constant (priv->pipeline, 1, &blend_color); | ||||
|     } | ||||
|  | ||||
|   clutter_content_invalidate (CLUTTER_CONTENT (self)); | ||||
|  | ||||
| @@ -526,6 +535,9 @@ set_vignette_sharpness (MetaBackground *self, | ||||
|  | ||||
|   priv->vignette_sharpness = sharpness; | ||||
|  | ||||
|   if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL)) | ||||
|     return; | ||||
|  | ||||
|   if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE) | ||||
|     { | ||||
|       ensure_pipeline (self); | ||||
| @@ -546,6 +558,9 @@ add_vignette (MetaBackground *self) | ||||
|   MetaBackgroundPrivate *priv = self->priv; | ||||
|   static CoglSnippet *snippet = NULL; | ||||
|  | ||||
|   if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL)) | ||||
|     return; | ||||
|  | ||||
|   ensure_pipeline (self); | ||||
|  | ||||
|   /* Cogl automatically caches pipelines with no eviction policy, | ||||
|   | ||||
| @@ -734,8 +734,12 @@ meta_window_actor_get_paint_volume (ClutterActor       *actor, | ||||
|       gdk_rectangle_union (&bounds, &shadow_bounds, &bounds); | ||||
|     } | ||||
|  | ||||
|   if (priv->unobscured_region) | ||||
|     cairo_region_intersect_rectangle (priv->unobscured_region, &bounds); | ||||
|   if (priv->unobscured_region && !clutter_actor_has_mapped_clones (actor)) | ||||
|     { | ||||
|       cairo_rectangle_int_t unobscured_bounds; | ||||
|       cairo_region_get_extents (priv->unobscured_region, &unobscured_bounds); | ||||
|       gdk_rectangle_intersect (&bounds, &unobscured_bounds, &bounds); | ||||
|     } | ||||
|  | ||||
|   origin.x = bounds.x; | ||||
|   origin.y = bounds.y; | ||||
| @@ -1395,6 +1399,12 @@ meta_window_actor_destroy (MetaWindowActor *self) | ||||
|   window_type = meta_window_get_window_type (window); | ||||
|   meta_window_set_compositor_private (window, NULL); | ||||
|  | ||||
|   if (priv->send_frame_messages_timer != 0) | ||||
|     { | ||||
|       g_source_remove (priv->send_frame_messages_timer); | ||||
|       priv->send_frame_messages_timer = 0; | ||||
|     } | ||||
|  | ||||
|   /* | ||||
|    * We remove the window from internal lookup hashes and thus any other | ||||
|    * unmap events etc fail | ||||
| @@ -2219,7 +2229,8 @@ build_and_scan_frame_mask (MetaWindowActor       *self, | ||||
|  | ||||
|   meta_shaped_texture_set_mask_texture (META_SHAPED_TEXTURE (priv->actor), | ||||
|                                         mask_texture); | ||||
|   cogl_object_unref (mask_texture); | ||||
|   if (mask_texture) | ||||
|     cogl_object_unref (mask_texture); | ||||
|  | ||||
|   g_free (mask_data); | ||||
| } | ||||
|   | ||||
| @@ -277,11 +277,30 @@ meta_window_group_paint (ClutterActor *actor) | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* Adapted from clutter_actor_update_default_paint_volume() */ | ||||
| static gboolean | ||||
| meta_window_group_get_paint_volume (ClutterActor       *actor, | ||||
| meta_window_group_get_paint_volume (ClutterActor       *self, | ||||
|                                     ClutterPaintVolume *volume) | ||||
| { | ||||
|   return clutter_paint_volume_set_from_allocation (volume, actor); | ||||
|   ClutterActorIter iter; | ||||
|   ClutterActor *child; | ||||
|  | ||||
|   clutter_actor_iter_init (&iter, self); | ||||
|   while (clutter_actor_iter_next (&iter, &child)) | ||||
|     { | ||||
|       const ClutterPaintVolume *child_volume; | ||||
|  | ||||
|       if (!CLUTTER_ACTOR_IS_MAPPED (child)) | ||||
|         continue; | ||||
|  | ||||
|       child_volume = clutter_actor_get_transformed_paint_volume (child, self); | ||||
|       if (child_volume == NULL) | ||||
|         return FALSE; | ||||
|  | ||||
|       clutter_paint_volume_union (volume, child_volume); | ||||
|     } | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -1390,7 +1390,6 @@ constrain_titlebar_visible (MetaWindow         *window, | ||||
|       window->type == META_WINDOW_DOCK    || | ||||
|       window->fullscreen                  || | ||||
|       !window->require_titlebar_visible   || | ||||
|       !window->decorated                  || | ||||
|       unconstrained_user_action) | ||||
|     return TRUE; | ||||
|  | ||||
|   | ||||
| @@ -138,6 +138,14 @@ struct _MetaDisplay | ||||
|    */ | ||||
|   guint allow_terminal_deactivation : 1; | ||||
|  | ||||
|   /* If true, server->focus_serial refers to us changing the focus; in | ||||
|    * this case, we can ignore focus events that have exactly focus_serial, | ||||
|    * since we take care to make another request immediately afterwards. | ||||
|    * But if focus is being changed by another client, we have to accept | ||||
|    * multiple events with the same serial. | ||||
|    */ | ||||
|   guint focused_by_us : 1; | ||||
|  | ||||
|   guint static_gravity_works : 1; | ||||
|    | ||||
|   /*< private-ish >*/ | ||||
|   | ||||
| @@ -925,8 +925,6 @@ meta_display_open (void) | ||||
|  | ||||
|   enable_compositor (the_display); | ||||
|     | ||||
|   meta_display_grab (the_display); | ||||
|    | ||||
|   /* Now manage all existing windows */ | ||||
|   tmp = the_display->screens; | ||||
|   while (tmp != NULL) | ||||
| @@ -978,8 +976,6 @@ meta_display_open (void) | ||||
|  | ||||
|   meta_idle_monitor_init_dbus (); | ||||
|  | ||||
|   meta_display_ungrab (the_display); | ||||
|  | ||||
|   /* Done opening new display */ | ||||
|   the_display->display_opening = FALSE; | ||||
|  | ||||
| @@ -1224,7 +1220,18 @@ meta_display_screen_for_x_screen (MetaDisplay *display, | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| /* Grab/ungrab routines taken from fvwm */ | ||||
| /* Grab/ungrab routines taken from fvwm. | ||||
|  * Calling this function will cause X to ignore all other clients until | ||||
|  * you ungrab. This may not be quite as bad as it sounds, yet there is | ||||
|  * agreement that avoiding server grabs except when they are clearly needed | ||||
|  * is a good thing. | ||||
|  * | ||||
|  * If you do use such grabs, please clearly explain the necessity for their | ||||
|  * usage in a comment. Try to keep their scope extremely limited. In | ||||
|  * particular, try to avoid emitting any signals or notifications while | ||||
|  * a grab is active (if the signal receiver tries to block on an X request | ||||
|  * from another client at this point, you will have a deadlock). | ||||
|  */ | ||||
| void | ||||
| meta_display_grab (MetaDisplay *display) | ||||
| { | ||||
| @@ -1890,9 +1897,11 @@ static void | ||||
| update_focus_window (MetaDisplay *display, | ||||
|                      MetaWindow  *window, | ||||
|                      Window       xwindow, | ||||
|                      gulong       serial) | ||||
|                      gulong       serial, | ||||
|                      gboolean     focused_by_us) | ||||
| { | ||||
|   display->focus_serial = serial; | ||||
|   display->focused_by_us = focused_by_us; | ||||
|  | ||||
|   if (display->focus_xwindow == xwindow) | ||||
|     return; | ||||
| @@ -2003,7 +2012,8 @@ request_xserver_input_focus_change (MetaDisplay *display, | ||||
|   update_focus_window (display, | ||||
|                        meta_window, | ||||
|                        xwindow, | ||||
|                        serial); | ||||
|                        serial, | ||||
|                        TRUE); | ||||
|  | ||||
|   meta_error_trap_pop (display); | ||||
|  | ||||
| @@ -2117,12 +2127,20 @@ handle_window_focus_event (MetaDisplay  *display, | ||||
|   else | ||||
|     g_return_if_reached (); | ||||
|  | ||||
|   if (display->server_focus_serial > display->focus_serial) | ||||
|   /* If display->focused_by_us, then the focus_serial will be used only | ||||
|    * for a focus change we made and have already accounted for. | ||||
|    * (See request_xserver_input_focus_change().) Otherwise, we can get | ||||
|    * multiple focus events with the same serial. | ||||
|    */ | ||||
|   if (display->server_focus_serial > display->focus_serial || | ||||
|       (!display->focused_by_us && | ||||
|        display->server_focus_serial == display->focus_serial)) | ||||
|     { | ||||
|       update_focus_window (display, | ||||
|                            focus_window, | ||||
|                            focus_window ? focus_window->xwindow : None, | ||||
|                            display->server_focus_serial); | ||||
|                            display->server_focus_serial, | ||||
|                            FALSE); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -2179,7 +2197,8 @@ event_callback (XEvent   *event, | ||||
|   display->current_time = event_get_time (display, event); | ||||
|   display->monitor_cache_invalidated = TRUE; | ||||
|  | ||||
|   if (event->xany.serial > display->focus_serial && | ||||
|   if (display->focused_by_us && | ||||
|       event->xany.serial > display->focus_serial && | ||||
|       display->focus_window && | ||||
|       display->focus_window->xwindow != display->server_focus_window) | ||||
|     { | ||||
| @@ -2188,7 +2207,8 @@ event_callback (XEvent   *event, | ||||
|       update_focus_window (display, | ||||
|                            meta_display_lookup_x_window (display, display->server_focus_window), | ||||
|                            display->server_focus_window, | ||||
|                            display->server_focus_serial); | ||||
|                            display->server_focus_serial, | ||||
|                            FALSE); | ||||
|     } | ||||
|  | ||||
|   screen = meta_display_screen_for_root (display, event->xany.window); | ||||
| @@ -2304,7 +2324,7 @@ event_callback (XEvent   *event, | ||||
|       XIEnterEvent *enter_event = (XIEnterEvent *) input_event; | ||||
|  | ||||
|       if (window && !window->override_redirect && | ||||
|           ((input_event->type == XI_KeyPress) || (input_event->type == XI_ButtonPress))) | ||||
|           ((input_event->evtype == XI_KeyPress) || (input_event->evtype == XI_ButtonPress))) | ||||
|         { | ||||
|           if (CurrentTime == display->current_time) | ||||
|             { | ||||
| @@ -2774,14 +2794,14 @@ event_callback (XEvent   *event, | ||||
|               && meta_display_screen_for_root (display, event->xmap.event)) | ||||
|             { | ||||
|               window = meta_window_new (display, event->xmap.window, | ||||
|                                         FALSE); | ||||
|                                         FALSE, META_COMP_EFFECT_CREATE); | ||||
|             } | ||||
|           break; | ||||
|         case MapRequest: | ||||
|           if (window == NULL) | ||||
|             { | ||||
|               window = meta_window_new (display, event->xmaprequest.window, | ||||
|                                         FALSE); | ||||
|                                         FALSE, META_COMP_EFFECT_CREATE); | ||||
|             } | ||||
|           /* if frame was receiver it's some malicious send event or something */ | ||||
|           else if (!frame_was_receiver && window)         | ||||
| @@ -5808,25 +5828,6 @@ meta_display_request_take_focus (MetaDisplay *display, | ||||
|   meta_topic (META_DEBUG_FOCUS, "WM_TAKE_FOCUS(%s, %u)\n", | ||||
|               window->desc, timestamp); | ||||
|  | ||||
|   if (window != display->focus_window) | ||||
|     { | ||||
|       /* The "Globally Active Input" window case, where the window | ||||
|        * doesn't want us to call XSetInputFocus on it, but does | ||||
|        * want us to send a WM_TAKE_FOCUS. | ||||
|        * | ||||
|        * We can't just set display->focus_window to @window, since we | ||||
|        * we don't know when (or even if) the window will actually take | ||||
|        * focus, so we could end up being wrong for arbitrarily long. | ||||
|        * But we also can't leave it set to the current window, or else | ||||
|        * bug #597352 would come back. So we focus the no_focus_window | ||||
|        * now (and set display->focus_window to that), send the | ||||
|        * WM_TAKE_FOCUS, and then just forget about @window | ||||
|        * until/unless we get a FocusIn. | ||||
|        */ | ||||
|       meta_display_focus_the_no_focus_window (display, | ||||
|                                               window->screen, | ||||
|                                               timestamp); | ||||
|     } | ||||
|   meta_window_send_icccm_message (window, | ||||
|                                   display->atom_WM_TAKE_FOCUS, | ||||
|                                   timestamp); | ||||
|   | ||||
| @@ -51,9 +51,6 @@ meta_window_ensure_frame (MetaWindow *window) | ||||
|   if (window->frame) | ||||
|     return; | ||||
|    | ||||
|   /* See comment below for why this is required. */ | ||||
|   meta_display_grab (window->display); | ||||
|    | ||||
|   frame = g_new (MetaFrame, 1); | ||||
|  | ||||
|   frame->window = window; | ||||
| @@ -116,14 +113,6 @@ meta_window_ensure_frame (MetaWindow *window) | ||||
|    | ||||
|   meta_display_register_x_window (window->display, &frame->xwindow, window); | ||||
|  | ||||
|   /* Reparent the client window; it may be destroyed, | ||||
|    * thus the error trap. We'll get a destroy notify later | ||||
|    * and free everything. Comment in FVWM source code says | ||||
|    * we need a server grab or the child can get its MapNotify | ||||
|    * before we've finished reparenting and getting the decoration | ||||
|    * window onscreen, so ensure_frame must be called with | ||||
|    * a grab. | ||||
|    */ | ||||
|   meta_error_trap_push (window->display); | ||||
|   if (window->mapped) | ||||
|     { | ||||
| @@ -165,8 +154,6 @@ meta_window_ensure_frame (MetaWindow *window) | ||||
|  | ||||
|   /* Move keybindings to frame instead of window */ | ||||
|   meta_window_grab_keys (window); | ||||
|  | ||||
|   meta_display_ungrab (window->display); | ||||
| } | ||||
|  | ||||
| void | ||||
|   | ||||
| @@ -501,7 +501,7 @@ make_watch (MetaIdleMonitor           *monitor, | ||||
|       if (meta_idle_monitor_get_idletime (monitor) > (gint64)timeout_msec) | ||||
|         watch->idle_source_id = g_idle_add (fire_watch_idle, watch); | ||||
|     } | ||||
|   else | ||||
|   else if (monitor->user_active_alarm != None) | ||||
|     { | ||||
|       watch->xalarm = monitor->user_active_alarm; | ||||
|  | ||||
|   | ||||
| @@ -816,6 +816,22 @@ meta_monitor_config_match_current (MetaMonitorConfig  *self, | ||||
|   return ok; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_monitor_manager_has_hotplug_mode_update (MetaMonitorManager *manager) | ||||
| { | ||||
|   MetaOutput *outputs; | ||||
|   unsigned n_outputs; | ||||
|   unsigned int i; | ||||
|  | ||||
|   outputs = meta_monitor_manager_get_outputs (manager, &n_outputs); | ||||
|  | ||||
|   for (i = 0; i < n_outputs; i++) | ||||
|     if (outputs[i].hotplug_mode_update) | ||||
|       return TRUE; | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static MetaConfiguration * | ||||
| meta_monitor_config_get_stored (MetaMonitorConfig *self, | ||||
| 				MetaOutput        *outputs, | ||||
| @@ -824,6 +840,9 @@ meta_monitor_config_get_stored (MetaMonitorConfig *self, | ||||
|   MetaConfiguration key; | ||||
|   MetaConfiguration *stored; | ||||
|  | ||||
|   if (n_outputs == 0) | ||||
|     return NULL; | ||||
|  | ||||
|   make_config_key (&key, outputs, n_outputs, -1); | ||||
|   stored = g_hash_table_lookup (self->configs, &key); | ||||
|  | ||||
| @@ -1231,6 +1250,12 @@ meta_monitor_config_make_default (MetaMonitorConfig  *self, | ||||
|   outputs = meta_monitor_manager_get_outputs (manager, &n_outputs); | ||||
|   meta_monitor_manager_get_screen_limits (manager, &max_width, &max_height); | ||||
|  | ||||
|   if (n_outputs == 0) | ||||
|     { | ||||
|       meta_verbose ("No output connected, not applying configuration\n"); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   default_config = make_default_config (self, outputs, n_outputs, max_width, max_height); | ||||
|  | ||||
|   if (default_config != NULL) | ||||
|   | ||||
| @@ -116,6 +116,9 @@ struct _MetaOutput | ||||
|   */ | ||||
|   gboolean is_primary; | ||||
|   gboolean is_presentation; | ||||
|  | ||||
|   /* get a new preferred mode on hotplug events, to handle dynamic guest resizing */ | ||||
|   gboolean hotplug_mode_update; | ||||
| }; | ||||
|  | ||||
| struct _MetaCRTC | ||||
| @@ -383,6 +386,7 @@ void               meta_output_info_free (MetaOutputInfo *info); | ||||
|  | ||||
| void               meta_monitor_manager_free_output_array (MetaOutput *old_outputs, | ||||
|                                                            int         n_old_outputs); | ||||
| gboolean           meta_monitor_manager_has_hotplug_mode_update (MetaMonitorManager *manager); | ||||
|  | ||||
| /* Returns true if transform causes width and height to be inverted | ||||
|    This is true for the odd transforms in the enum */ | ||||
|   | ||||
| @@ -187,7 +187,7 @@ output_get_backlight_xrandr (MetaMonitorManagerXrandr *manager_xrandr, | ||||
|  | ||||
|   XRRGetOutputProperty (manager_xrandr->xdisplay, | ||||
|                         (XID)output->output_id, | ||||
|                         display->atom_BACKLIGHT, | ||||
|                         display->atom_Backlight, | ||||
|                         0, G_MAXLONG, False, False, XA_INTEGER, | ||||
|                         &actual_type, &actual_format, | ||||
|                         &nitems, &bytes_after, &buffer); | ||||
| @@ -212,7 +212,7 @@ output_get_backlight_limits_xrandr (MetaMonitorManagerXrandr *manager_xrandr, | ||||
|   meta_error_trap_push (display); | ||||
|   info = XRRQueryOutputProperty (manager_xrandr->xdisplay, | ||||
|                                  (XID)output->output_id, | ||||
|                                  display->atom_BACKLIGHT); | ||||
|                                  display->atom_Backlight); | ||||
|   meta_error_trap_pop (display); | ||||
|  | ||||
|   if (info == NULL) | ||||
| @@ -311,6 +311,29 @@ read_output_edid (MetaMonitorManagerXrandr *manager_xrandr, | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| output_get_hotplug_mode_update (MetaMonitorManagerXrandr *manager_xrandr, | ||||
|                                 XID                       output_id) | ||||
| { | ||||
|   MetaDisplay *display = meta_get_display (); | ||||
|   XRRPropertyInfo *info; | ||||
|   gboolean result = FALSE; | ||||
|  | ||||
|   meta_error_trap_push (display); | ||||
|   info = XRRQueryOutputProperty (manager_xrandr->xdisplay, output_id, | ||||
|                                  display->atom_hotplug_mode_update); | ||||
|   meta_error_trap_pop (display); | ||||
|  | ||||
|   if (info) | ||||
|     { | ||||
|       result = TRUE; | ||||
|       XFree (info); | ||||
|     } | ||||
|  | ||||
|   return result; | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager) | ||||
| { | ||||
| @@ -430,8 +453,10 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager) | ||||
|       XRRFreeCrtcInfo (crtc); | ||||
|     } | ||||
|  | ||||
|   meta_error_trap_push (meta_get_display ()); | ||||
|   primary_output = XRRGetOutputPrimary (manager_xrandr->xdisplay, | ||||
| 					DefaultRootWindow (manager_xrandr->xdisplay)); | ||||
|   meta_error_trap_pop (meta_get_display ()); | ||||
|  | ||||
|   n_actual_outputs = 0; | ||||
|   for (i = 0; i < (unsigned)resources->noutput; i++) | ||||
| @@ -484,6 +509,8 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager) | ||||
| 	  meta_output->width_mm = output->mm_width; | ||||
| 	  meta_output->height_mm = output->mm_height; | ||||
| 	  meta_output->subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN; | ||||
|           meta_output->hotplug_mode_update = | ||||
|               output_get_hotplug_mode_update (manager_xrandr, meta_output->output_id); | ||||
|  | ||||
| 	  meta_output->n_modes = output->nmode; | ||||
| 	  meta_output->modes = g_new0 (MetaMonitorMode *, meta_output->n_modes); | ||||
| @@ -668,10 +695,11 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager, | ||||
| 						 unsigned int         n_outputs) | ||||
| { | ||||
|   MetaMonitorManagerXrandr *manager_xrandr = META_MONITOR_MANAGER_XRANDR (manager); | ||||
|   MetaDisplay *display = meta_get_display (); | ||||
|   unsigned i; | ||||
|   int width, height, width_mm, height_mm; | ||||
|  | ||||
|   meta_display_grab (meta_get_display ()); | ||||
|   meta_display_grab (display); | ||||
|  | ||||
|   /* First compute the new size of the screen (framebuffer) */ | ||||
|   width = 0; height = 0; | ||||
| @@ -765,10 +793,10 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager, | ||||
|    */ | ||||
|   width_mm = (width / DPI_FALLBACK) * 25.4 + 0.5; | ||||
|   height_mm = (height / DPI_FALLBACK) * 25.4 + 0.5; | ||||
|   meta_error_trap_push (meta_get_display ()); | ||||
|   meta_error_trap_push (display); | ||||
|   XRRSetScreenSize (manager_xrandr->xdisplay, DefaultRootWindow (manager_xrandr->xdisplay), | ||||
|                     width, height, width_mm, height_mm); | ||||
|   meta_error_trap_pop (meta_get_display ()); | ||||
|   meta_error_trap_pop (display); | ||||
|  | ||||
|   for (i = 0; i < n_crtcs; i++) | ||||
|     { | ||||
| @@ -825,7 +853,7 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager, | ||||
|               goto next; | ||||
|             } | ||||
|  | ||||
|           meta_error_trap_push (meta_get_display ()); | ||||
|           meta_error_trap_push (display); | ||||
|           ok = XRRSetCrtcConfig (manager_xrandr->xdisplay, | ||||
|                                  manager_xrandr->resources, | ||||
|                                  (XID)crtc->crtc_id, | ||||
| @@ -834,7 +862,7 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager, | ||||
|                                  (XID)mode->mode_id, | ||||
|                                  wl_transform_to_xrandr (crtc_info->transform), | ||||
|                                  outputs, n_outputs); | ||||
|           meta_error_trap_pop (meta_get_display ()); | ||||
|           meta_error_trap_pop (display); | ||||
|  | ||||
|           if (ok != Success) | ||||
|             { | ||||
| @@ -875,9 +903,11 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager, | ||||
|  | ||||
|       if (output_info->is_primary) | ||||
|         { | ||||
|           meta_error_trap_push (display); | ||||
|           XRRSetOutputPrimary (manager_xrandr->xdisplay, | ||||
|                                DefaultRootWindow (manager_xrandr->xdisplay), | ||||
|                                (XID)output_info->output->output_id); | ||||
|           meta_error_trap_pop (display); | ||||
|         } | ||||
|  | ||||
|       output_set_presentation_xrandr (manager_xrandr, | ||||
| @@ -903,7 +933,7 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager, | ||||
|       output->is_primary = FALSE; | ||||
|     } | ||||
|  | ||||
|   meta_display_ungrab (meta_get_display ()); | ||||
|   meta_display_ungrab (display); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -920,7 +950,7 @@ meta_monitor_manager_xrandr_change_backlight (MetaMonitorManager *manager, | ||||
|   meta_error_trap_push (display); | ||||
|   XRRChangeOutputProperty (manager_xrandr->xdisplay, | ||||
|                            (XID)output->output_id, | ||||
|                            display->atom_BACKLIGHT, | ||||
|                            display->atom_Backlight, | ||||
|                            XA_INTEGER, 32, PropModeReplace, | ||||
|                            (unsigned char *) &hw_value, 1); | ||||
|   meta_error_trap_pop (display); | ||||
| @@ -971,6 +1001,16 @@ meta_monitor_manager_xrandr_set_crtc_gamma (MetaMonitorManager *manager, | ||||
|   XRRFreeGamma (gamma); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_monitor_manager_xrandr_rebuild_derived (MetaMonitorManager *manager) | ||||
| { | ||||
|   /* This will be a no-op if the change was from our side, as | ||||
|      we already called it in the DBus method handler */ | ||||
|   meta_monitor_config_update_current (manager->config, manager); | ||||
|  | ||||
|   meta_monitor_manager_rebuild_derived (manager); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManager *manager, | ||||
| 					   XEvent             *event) | ||||
| @@ -980,6 +1020,7 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManager *manager, | ||||
|   MetaCRTC *old_crtcs; | ||||
|   MetaMonitorMode *old_modes; | ||||
|   int n_old_outputs; | ||||
|   gboolean new_config; | ||||
|  | ||||
|   if ((event->type - manager_xrandr->rr_event_base) != RRScreenChangeNotify) | ||||
|     return FALSE; | ||||
| @@ -995,31 +1036,36 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManager *manager, | ||||
|   manager->serial++; | ||||
|   meta_monitor_manager_xrandr_read_current (manager); | ||||
|  | ||||
|   /* Check if the current intended configuration has the same outputs | ||||
|      as the new real one, or if the event is a result of an XRandR call. | ||||
|      If so, we can go straight to rebuild the logical config and tell | ||||
|      the outside world. | ||||
|      Otherwise, this event was caused by hotplug, so give a chance to | ||||
|      MetaMonitorConfig. | ||||
|   new_config = manager_xrandr->resources->timestamp >= | ||||
|     manager_xrandr->resources->configTimestamp; | ||||
|   if (meta_monitor_manager_has_hotplug_mode_update (manager)) | ||||
|  | ||||
|      Note that we need to check both the timestamps and the list of | ||||
|      outputs, because the X server might emit spurious events with | ||||
|      new configTimestamps (bug 702804), and the driver may have | ||||
|      changed the EDID for some other reason (old broken qxl and vbox | ||||
|      drivers...). | ||||
|   */ | ||||
|   if (manager_xrandr->resources->timestamp >= manager_xrandr->resources->configTimestamp || | ||||
|       meta_monitor_config_match_current (manager->config, manager)) | ||||
|     { | ||||
|       /* This will be a no-op if the change was from our side, as | ||||
|          we already called it in the DBus method handler */ | ||||
|       meta_monitor_config_update_current (manager->config, manager); | ||||
|  | ||||
|       meta_monitor_manager_rebuild_derived (manager); | ||||
|       /* Check if the current intended configuration is a result of an | ||||
|          XRandR call.  Otherwise, hotplug_mode_update tells us to get | ||||
|          a new preferred mode on hotplug events to handle dynamic | ||||
|          guest resizing. */ | ||||
|       if (new_config) | ||||
|         meta_monitor_manager_xrandr_rebuild_derived (manager); | ||||
|       else | ||||
|         meta_monitor_config_make_default (manager->config, manager); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (!meta_monitor_config_apply_stored (manager->config, manager)) | ||||
|       /* Check if the current intended configuration has the same outputs | ||||
|          as the new real one, or if the event is a result of an XRandR call. | ||||
|          If so, we can go straight to rebuild the logical config and tell | ||||
|          the outside world. | ||||
|          Otherwise, this event was caused by hotplug, so give a chance to | ||||
|          MetaMonitorConfig. | ||||
|  | ||||
|          Note that we need to check both the timestamps and the list of | ||||
|          outputs, because the X server might emit spurious events with new | ||||
|          configTimestamps (bug 702804), and the driver may have changed | ||||
|          the EDID for some other reason (old qxl and vbox drivers). */ | ||||
|       if (new_config || meta_monitor_config_match_current (manager->config, manager)) | ||||
|         meta_monitor_manager_xrandr_rebuild_derived (manager); | ||||
|       else if (!meta_monitor_config_apply_stored (manager->config, manager)) | ||||
|         meta_monitor_config_make_default (manager->config, manager); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -406,7 +406,7 @@ make_logical_config (MetaMonitorManager *manager) | ||||
|  | ||||
|       for (j = 0; j < monitor_infos->len; j++) | ||||
|         { | ||||
|           MetaMonitorInfo *info = &g_array_index (monitor_infos, MetaMonitorInfo, i); | ||||
|           MetaMonitorInfo *info = &g_array_index (monitor_infos, MetaMonitorInfo, j); | ||||
|           if (meta_rectangle_equal (&crtc->rect, | ||||
|                                     &info->rect)) | ||||
|             { | ||||
|   | ||||
| @@ -392,6 +392,8 @@ int | ||||
| meta_screen_monitor_index_to_xinerama_index (MetaScreen *screen, | ||||
|                                              int         index) | ||||
| { | ||||
|   g_return_val_if_fail (index >= 0 && index < screen->n_monitor_infos, -1); | ||||
|  | ||||
|   meta_screen_ensure_xinerama_indices (screen); | ||||
|  | ||||
|   return screen->monitor_infos[index].xinerama_index; | ||||
| @@ -877,83 +879,31 @@ meta_screen_free (MetaScreen *screen, | ||||
|   meta_display_ungrab (display); | ||||
| } | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   Window		xwindow; | ||||
|   XWindowAttributes	attrs; | ||||
| } WindowInfo; | ||||
|  | ||||
| static GList * | ||||
| list_windows (MetaScreen *screen) | ||||
| { | ||||
|   Window ignored1, ignored2; | ||||
|   Window *children; | ||||
|   guint n_children, i; | ||||
|   GList *result; | ||||
|  | ||||
|   XQueryTree (screen->display->xdisplay, | ||||
|               screen->xroot, | ||||
|               &ignored1, &ignored2, &children, &n_children); | ||||
|  | ||||
|   result = NULL; | ||||
|   for (i = 0; i < n_children; ++i) | ||||
|     { | ||||
|       WindowInfo *info = g_new0 (WindowInfo, 1); | ||||
|  | ||||
|       meta_error_trap_push_with_return (screen->display); | ||||
|        | ||||
|       XGetWindowAttributes (screen->display->xdisplay, | ||||
|                             children[i], &info->attrs); | ||||
|  | ||||
|       if (meta_error_trap_pop_with_return (screen->display)) | ||||
| 	{ | ||||
|           meta_verbose ("Failed to get attributes for window 0x%lx\n", | ||||
|                         children[i]); | ||||
| 	  g_free (info); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
| 	  info->xwindow = children[i]; | ||||
| 	} | ||||
|  | ||||
|       result = g_list_prepend (result, info); | ||||
|     } | ||||
|  | ||||
|   if (children) | ||||
|     XFree (children); | ||||
|  | ||||
|   return g_list_reverse (result); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_screen_manage_all_windows (MetaScreen *screen) | ||||
| { | ||||
|   GList *windows; | ||||
|   GList *list; | ||||
|  | ||||
|   meta_display_grab (screen->display); | ||||
|   Window *_children; | ||||
|   Window *children; | ||||
|   int n_children, i; | ||||
|  | ||||
|   if (screen->guard_window == None) | ||||
|     screen->guard_window = create_guard_window (screen->display->xdisplay, | ||||
|                                                 screen); | ||||
|  | ||||
|   windows = list_windows (screen); | ||||
|  | ||||
|   meta_stack_freeze (screen->stack); | ||||
|   for (list = windows; list != NULL; list = list->next) | ||||
|   meta_stack_tracker_get_stack (screen->stack_tracker, &_children, &n_children); | ||||
|  | ||||
|   /* Copy the stack as it will be modified as part of the loop */ | ||||
|   children = g_memdup (_children, sizeof (Window) * n_children); | ||||
|  | ||||
|   for (i = 0; i < n_children; ++i) | ||||
|     { | ||||
|       WindowInfo *info = list->data; | ||||
|  | ||||
|       meta_window_new_with_attrs (screen->display, info->xwindow, TRUE, | ||||
|                                   META_COMP_EFFECT_NONE, | ||||
|                                   &info->attrs); | ||||
|       meta_window_new (screen->display, children[i], TRUE, | ||||
|                        META_COMP_EFFECT_NONE); | ||||
|     } | ||||
|  | ||||
|   g_free (children); | ||||
|   meta_stack_thaw (screen->stack); | ||||
|  | ||||
|   g_list_foreach (windows, (GFunc)g_free, NULL); | ||||
|   g_list_free (windows); | ||||
|  | ||||
|   meta_display_ungrab (screen->display); | ||||
| } | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -484,12 +484,8 @@ struct _MetaWindowClass | ||||
|  | ||||
| MetaWindow* meta_window_new                (MetaDisplay *display, | ||||
|                                             Window       xwindow, | ||||
|                                             gboolean     must_be_viewable); | ||||
| MetaWindow* meta_window_new_with_attrs     (MetaDisplay       *display, | ||||
|                                             Window             xwindow, | ||||
|                                             gboolean           must_be_viewable, | ||||
|                                             MetaCompEffect     effect, | ||||
|                                             XWindowAttributes *attrs); | ||||
|                                             gboolean     must_be_viewable, | ||||
|                                             MetaCompEffect     effect); | ||||
| void        meta_window_unmanage           (MetaWindow  *window, | ||||
|                                             guint32      timestamp); | ||||
| void        meta_window_calc_showing       (MetaWindow  *window); | ||||
|   | ||||
| @@ -175,6 +175,7 @@ enum { | ||||
|   PROP_USER_TIME, | ||||
|   PROP_DEMANDS_ATTENTION, | ||||
|   PROP_URGENT, | ||||
|   PROP_SKIP_TASKBAR, | ||||
|   PROP_MUTTER_HINTS, | ||||
|   PROP_APPEARS_FOCUSED, | ||||
|   PROP_RESIZEABLE, | ||||
| @@ -308,6 +309,9 @@ meta_window_get_property(GObject         *object, | ||||
|     case PROP_URGENT: | ||||
|       g_value_set_boolean (value, win->wm_hints_urgent); | ||||
|       break; | ||||
|     case PROP_SKIP_TASKBAR: | ||||
|       g_value_set_boolean (value, win->skip_taskbar); | ||||
|       break; | ||||
|     case PROP_MUTTER_HINTS: | ||||
|       g_value_set_string (value, win->mutter_hints); | ||||
|       break; | ||||
| @@ -468,6 +472,14 @@ meta_window_class_init (MetaWindowClass *klass) | ||||
|                                                          FALSE, | ||||
|                                                          G_PARAM_READABLE)); | ||||
|  | ||||
|   g_object_class_install_property (object_class, | ||||
|                                    PROP_SKIP_TASKBAR, | ||||
|                                    g_param_spec_boolean ("skip-taskbar", | ||||
|                                                          "Skip taskbar", | ||||
|                                                          "Whether the skip-taskbar flag of WM_HINTS is set", | ||||
|                                                          FALSE, | ||||
|                                                          G_PARAM_READABLE)); | ||||
|  | ||||
|   g_object_class_install_property (object_class, | ||||
|                                    PROP_MUTTER_HINTS, | ||||
|                                    g_param_spec_string ("mutter-hints", | ||||
| @@ -659,53 +671,6 @@ maybe_leave_show_desktop_mode (MetaWindow *window) | ||||
|     } | ||||
| } | ||||
|  | ||||
| MetaWindow* | ||||
| meta_window_new (MetaDisplay *display, | ||||
|                  Window       xwindow, | ||||
|                  gboolean     must_be_viewable) | ||||
| { | ||||
|   XWindowAttributes attrs; | ||||
|   MetaWindow *window; | ||||
|  | ||||
|   meta_display_grab (display); | ||||
|   meta_error_trap_push (display); /* Push a trap over all of window | ||||
|                                    * creation, to reduce XSync() calls | ||||
|                                    */ | ||||
|  | ||||
|   meta_error_trap_push_with_return (display); | ||||
|  | ||||
|   if (XGetWindowAttributes (display->xdisplay,xwindow, &attrs)) | ||||
|    { | ||||
|       if(meta_error_trap_pop_with_return (display) != Success) | ||||
|        { | ||||
|           meta_verbose ("Failed to get attributes for window 0x%lx\n", | ||||
|                         xwindow); | ||||
|           meta_error_trap_pop (display); | ||||
|           meta_display_ungrab (display); | ||||
|           return NULL; | ||||
|        } | ||||
|       window = meta_window_new_with_attrs (display, xwindow, | ||||
|                                            must_be_viewable, | ||||
|                                            META_COMP_EFFECT_CREATE, | ||||
|                                            &attrs); | ||||
|    } | ||||
|   else | ||||
|    { | ||||
|          meta_error_trap_pop_with_return (display); | ||||
|          meta_verbose ("Failed to get attributes for window 0x%lx\n", | ||||
|                         xwindow); | ||||
|          meta_error_trap_pop (display); | ||||
|          meta_display_ungrab (display); | ||||
|          return NULL; | ||||
|    } | ||||
|  | ||||
|  | ||||
|   meta_error_trap_pop (display); | ||||
|   meta_display_ungrab (display); | ||||
|  | ||||
|   return window; | ||||
| } | ||||
|  | ||||
| /* The MUTTER_WM_CLASS_FILTER environment variable is designed for | ||||
|  * performance and regression testing environments where we want to do | ||||
|  * tests with only a limited set of windows and ignore all other windows | ||||
| @@ -816,12 +781,12 @@ meta_window_should_attach_to_parent (MetaWindow *window) | ||||
| } | ||||
|  | ||||
| MetaWindow* | ||||
| meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|                             Window             xwindow, | ||||
|                             gboolean           must_be_viewable, | ||||
|                             MetaCompEffect     effect, | ||||
|                             XWindowAttributes *attrs) | ||||
| meta_window_new (MetaDisplay   *display, | ||||
|                  Window         xwindow, | ||||
|                  gboolean       must_be_viewable, | ||||
|                  MetaCompEffect effect) | ||||
| { | ||||
|   XWindowAttributes	attrs; | ||||
|   MetaWindow *window; | ||||
|   GSList *tmp; | ||||
|   MetaWorkspace *space; | ||||
| @@ -830,8 +795,6 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|   MetaMoveResizeFlags flags; | ||||
|   MetaScreen *screen; | ||||
|  | ||||
|   g_assert (attrs != NULL); | ||||
|  | ||||
|   meta_verbose ("Attempting to manage 0x%lx\n", xwindow); | ||||
|  | ||||
|   if (meta_display_xwindow_is_a_no_focus_window (display, xwindow)) | ||||
| @@ -841,12 +804,28 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|       return NULL; | ||||
|     } | ||||
|  | ||||
|   meta_error_trap_push (display); /* Push a trap over all of window | ||||
|                                    * creation, to reduce XSync() calls | ||||
|                                    */ | ||||
|   /* | ||||
|    * This function executes without any server grabs held. This means that | ||||
|    * the window could have already gone away, or could go away at any point, | ||||
|    * so we must be careful with X error handling. | ||||
|    */ | ||||
|  | ||||
|   if (!XGetWindowAttributes (display->xdisplay, xwindow, &attrs)) | ||||
|     { | ||||
|       meta_verbose ("Failed to get attributes for window 0x%lx\n", | ||||
|                     xwindow); | ||||
|       goto error; | ||||
|     } | ||||
|  | ||||
|   screen = NULL; | ||||
|   for (tmp = display->screens; tmp != NULL; tmp = tmp->next) | ||||
|     { | ||||
|       MetaScreen *scr = tmp->data; | ||||
|  | ||||
|       if (scr->xroot == attrs->root) | ||||
|       if (scr->xroot == attrs.root) | ||||
|         { | ||||
|           screen = tmp->data; | ||||
|           break; | ||||
| @@ -856,14 +835,14 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|   g_assert (screen); | ||||
|  | ||||
|   /* A black list of override redirect windows that we don't need to manage: */ | ||||
|   if (attrs->override_redirect && | ||||
|   if (attrs.override_redirect && | ||||
|       (xwindow == screen->no_focus_window || | ||||
|        xwindow == screen->flash_window || | ||||
|        xwindow == screen->wm_sn_selection_window || | ||||
|        attrs->class == InputOnly || | ||||
|        attrs.class == InputOnly || | ||||
|        /* any windows created via meta_create_offscreen_window: */ | ||||
|        (attrs->x == -100 && attrs->y == -100 | ||||
| 	&& attrs->width == 1 && attrs->height == 1) || | ||||
|        (attrs.x == -100 && attrs.y == -100 | ||||
| 	&& attrs.width == 1 && attrs.height == 1) || | ||||
|        xwindow == screen->wm_cm_selection_window || | ||||
|        xwindow == screen->guard_window || | ||||
|        (display->compositor && | ||||
| @@ -873,34 +852,28 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|       ) | ||||
|      ) { | ||||
|     meta_verbose ("Not managing our own windows\n"); | ||||
|     return NULL; | ||||
|     goto error; | ||||
|   } | ||||
|  | ||||
|   if (maybe_filter_window (display, xwindow, must_be_viewable, attrs)) | ||||
|   if (maybe_filter_window (display, xwindow, must_be_viewable, &attrs)) | ||||
|     { | ||||
|       meta_verbose ("Not managing filtered window\n"); | ||||
|       return NULL; | ||||
|       goto error; | ||||
|     } | ||||
|  | ||||
|   /* Grab server */ | ||||
|   meta_display_grab (display); | ||||
|   meta_error_trap_push (display); /* Push a trap over all of window | ||||
|                                    * creation, to reduce XSync() calls | ||||
|                                    */ | ||||
|  | ||||
|   meta_verbose ("must_be_viewable = %d attrs->map_state = %d (%s)\n", | ||||
|   meta_verbose ("must_be_viewable = %d attrs.map_state = %d (%s)\n", | ||||
|                 must_be_viewable, | ||||
|                 attrs->map_state, | ||||
|                 (attrs->map_state == IsUnmapped) ? | ||||
|                 attrs.map_state, | ||||
|                 (attrs.map_state == IsUnmapped) ? | ||||
|                 "IsUnmapped" : | ||||
|                 (attrs->map_state == IsViewable) ? | ||||
|                 (attrs.map_state == IsViewable) ? | ||||
|                 "IsViewable" : | ||||
|                 (attrs->map_state == IsUnviewable) ? | ||||
|                 (attrs.map_state == IsUnviewable) ? | ||||
|                 "IsUnviewable" : | ||||
|                 "(unknown)"); | ||||
|  | ||||
|   existing_wm_state = WithdrawnState; | ||||
|   if (must_be_viewable && attrs->map_state != IsViewable) | ||||
|   if (must_be_viewable && attrs.map_state != IsViewable) | ||||
|     { | ||||
|       /* Only manage if WM_STATE is IconicState or NormalState */ | ||||
|       gulong state; | ||||
| @@ -913,9 +886,7 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|             (state == IconicState || state == NormalState))) | ||||
|         { | ||||
|           meta_verbose ("Deciding not to manage unmapped or unviewable window 0x%lx\n", xwindow); | ||||
|           meta_error_trap_pop (display); | ||||
|           meta_display_ungrab (display); | ||||
|           return NULL; | ||||
|           goto error; | ||||
|         } | ||||
|  | ||||
|       existing_wm_state = state; | ||||
| @@ -923,29 +894,26 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|                     wm_state_to_string (existing_wm_state)); | ||||
|     } | ||||
|  | ||||
|   meta_error_trap_push_with_return (display); | ||||
|  | ||||
|   /* | ||||
|    * XAddToSaveSet can only be called on windows created by a different client. | ||||
|    * with Mutter we want to be able to create manageable windows from within | ||||
|    * the process (such as a dummy desktop window), so we do not want this | ||||
|    * call failing to prevent the window from being managed -- wrap it in its | ||||
|    * own error trap (we use the _with_return() version here to ensure that | ||||
|    * XSync() is done on the pop, otherwise the error will not get caught). | ||||
|    * the process (such as a dummy desktop window). As we do not want this | ||||
|    * call failing to prevent the window from being managed, we call this | ||||
|    * before creating the return-checked error trap. | ||||
|    */ | ||||
|   meta_error_trap_push_with_return (display); | ||||
|   XAddToSaveSet (display->xdisplay, xwindow); | ||||
|   meta_error_trap_pop_with_return (display); | ||||
|  | ||||
|   meta_error_trap_push_with_return (display); | ||||
|  | ||||
|   event_mask = PropertyChangeMask | ColormapChangeMask; | ||||
|   if (attrs->override_redirect) | ||||
|   if (attrs.override_redirect) | ||||
|     event_mask |= StructureNotifyMask; | ||||
|  | ||||
|   /* If the window is from this client (a menu, say) we need to augment | ||||
|    * the event mask, not replace it. For windows from other clients, | ||||
|    * attrs->your_event_mask will be empty at this point. | ||||
|    * attrs.your_event_mask will be empty at this point. | ||||
|    */ | ||||
|   XSelectInput (display->xdisplay, xwindow, attrs->your_event_mask | event_mask); | ||||
|   XSelectInput (display->xdisplay, xwindow, attrs.your_event_mask | event_mask); | ||||
|  | ||||
|   { | ||||
|     unsigned char mask_bits[XIMaskLen (XI_LASTEVENT)] = { 0 }; | ||||
| @@ -967,11 +935,11 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
| #endif | ||||
|  | ||||
|   /* Get rid of any borders */ | ||||
|   if (attrs->border_width != 0) | ||||
|   if (attrs.border_width != 0) | ||||
|     XSetWindowBorderWidth (display->xdisplay, xwindow, 0); | ||||
|  | ||||
|   /* Get rid of weird gravities */ | ||||
|   if (attrs->win_gravity != NorthWestGravity) | ||||
|   if (attrs.win_gravity != NorthWestGravity) | ||||
|     { | ||||
|       XSetWindowAttributes set_attrs; | ||||
|  | ||||
| @@ -987,9 +955,7 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|     { | ||||
|       meta_verbose ("Window 0x%lx disappeared just as we tried to manage it\n", | ||||
|                     xwindow); | ||||
|       meta_error_trap_pop (display); | ||||
|       meta_display_ungrab (display); | ||||
|       return NULL; | ||||
|       goto error; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -1018,22 +984,22 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|  | ||||
|   window->desc = g_strdup_printf ("0x%lx", window->xwindow); | ||||
|  | ||||
|   window->override_redirect = attrs->override_redirect; | ||||
|   window->override_redirect = attrs.override_redirect; | ||||
|  | ||||
|   /* avoid tons of stack updates */ | ||||
|   meta_stack_freeze (window->screen->stack); | ||||
|  | ||||
|   window->rect.x = attrs->x; | ||||
|   window->rect.y = attrs->y; | ||||
|   window->rect.width = attrs->width; | ||||
|   window->rect.height = attrs->height; | ||||
|   window->rect.x = attrs.x; | ||||
|   window->rect.y = attrs.y; | ||||
|   window->rect.width = attrs.width; | ||||
|   window->rect.height = attrs.height; | ||||
|  | ||||
|   /* And border width, size_hints are the "request" */ | ||||
|   window->border_width = attrs->border_width; | ||||
|   window->size_hints.x = attrs->x; | ||||
|   window->size_hints.y = attrs->y; | ||||
|   window->size_hints.width = attrs->width; | ||||
|   window->size_hints.height = attrs->height; | ||||
|   window->border_width = attrs.border_width; | ||||
|   window->size_hints.x = attrs.x; | ||||
|   window->size_hints.y = attrs.y; | ||||
|   window->size_hints.width = attrs.width; | ||||
|   window->size_hints.height = attrs.height; | ||||
|   /* initialize the remaining size_hints as if size_hints.flags were zero */ | ||||
|   meta_set_normal_hints (window, NULL); | ||||
|  | ||||
| @@ -1041,9 +1007,9 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|   window->saved_rect = window->rect; | ||||
|   window->user_rect = window->rect; | ||||
|  | ||||
|   window->depth = attrs->depth; | ||||
|   window->xvisual = attrs->visual; | ||||
|   window->colormap = attrs->colormap; | ||||
|   window->depth = attrs.depth; | ||||
|   window->xvisual = attrs.visual; | ||||
|   window->colormap = attrs.colormap; | ||||
|  | ||||
|   window->title = NULL; | ||||
|   window->icon_name = NULL; | ||||
| @@ -1078,7 +1044,7 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|   window->minimized = FALSE; | ||||
|   window->tab_unminimized = FALSE; | ||||
|   window->iconic = FALSE; | ||||
|   window->mapped = attrs->map_state != IsUnmapped; | ||||
|   window->mapped = attrs.map_state != IsUnmapped; | ||||
|   window->hidden = FALSE; | ||||
|   window->visible_to_compositor = FALSE; | ||||
|   window->pending_compositor_effect = effect; | ||||
| @@ -1483,7 +1449,6 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|     unminimize_window_and_all_transient_parents (window); | ||||
|  | ||||
|   meta_error_trap_pop (display); /* pop the XSync()-reducing trap */ | ||||
|   meta_display_ungrab (display); | ||||
|  | ||||
|   window->constructing = FALSE; | ||||
|  | ||||
| @@ -1496,6 +1461,10 @@ meta_window_new_with_attrs (MetaDisplay       *display, | ||||
|     g_signal_emit_by_name (window->display, "window-marked-urgent", window); | ||||
|  | ||||
|   return window; | ||||
|  | ||||
| error: | ||||
|   meta_error_trap_pop (display); | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| /* This function should only be called from the end of meta_window_new_with_attrs () */ | ||||
| @@ -2090,23 +2059,35 @@ set_net_wm_state (MetaWindow *window) | ||||
|  | ||||
|   if (window->fullscreen) | ||||
|     { | ||||
|       data[0] = meta_screen_monitor_index_to_xinerama_index (window->screen, | ||||
|                                                              window->fullscreen_monitors[0]); | ||||
|       data[1] = meta_screen_monitor_index_to_xinerama_index (window->screen, | ||||
|                                                              window->fullscreen_monitors[1]); | ||||
|       data[2] = meta_screen_monitor_index_to_xinerama_index (window->screen, | ||||
|                                                              window->fullscreen_monitors[2]); | ||||
|       data[3] = meta_screen_monitor_index_to_xinerama_index (window->screen, | ||||
|                                                              window->fullscreen_monitors[3]); | ||||
|       if (window->fullscreen_monitors[0] >= 0) | ||||
|         { | ||||
|           data[0] = meta_screen_monitor_index_to_xinerama_index (window->screen, | ||||
|                                                                  window->fullscreen_monitors[0]); | ||||
|           data[1] = meta_screen_monitor_index_to_xinerama_index (window->screen, | ||||
|                                                                  window->fullscreen_monitors[1]); | ||||
|           data[2] = meta_screen_monitor_index_to_xinerama_index (window->screen, | ||||
|                                                                  window->fullscreen_monitors[2]); | ||||
|           data[3] = meta_screen_monitor_index_to_xinerama_index (window->screen, | ||||
|                                                                  window->fullscreen_monitors[3]); | ||||
|  | ||||
|       meta_verbose ("Setting _NET_WM_FULLSCREEN_MONITORS\n"); | ||||
|       meta_error_trap_push (window->display); | ||||
|       XChangeProperty (window->display->xdisplay, | ||||
|                        window->xwindow, | ||||
|                        window->display->atom__NET_WM_FULLSCREEN_MONITORS, | ||||
|                        XA_CARDINAL, 32, PropModeReplace, | ||||
|                        (guchar*) data, 4); | ||||
|       meta_error_trap_pop (window->display); | ||||
|           meta_verbose ("Setting _NET_WM_FULLSCREEN_MONITORS\n"); | ||||
|           meta_error_trap_push (window->display); | ||||
|           XChangeProperty (window->display->xdisplay, | ||||
|                            window->xwindow, | ||||
|                            window->display->atom__NET_WM_FULLSCREEN_MONITORS, | ||||
|                            XA_CARDINAL, 32, PropModeReplace, | ||||
|                            (guchar*) data, 4); | ||||
|           meta_error_trap_pop (window->display); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           meta_verbose ("Clearing _NET_WM_FULLSCREEN_MONITORS\n"); | ||||
|           meta_error_trap_push (window->display); | ||||
|           XDeleteProperty (window->display->xdisplay, | ||||
|                            window->xwindow, | ||||
|                            window->display->atom__NET_WM_FULLSCREEN_MONITORS); | ||||
|           meta_error_trap_pop (window->display); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -2292,7 +2273,6 @@ idle_calc_showing (gpointer data) | ||||
|   GSList *should_hide; | ||||
|   GSList *unplaced; | ||||
|   GSList *displays; | ||||
|   MetaWindow *first_window; | ||||
|   guint queue_index = GPOINTER_TO_INT (data); | ||||
|  | ||||
|   g_return_val_if_fail (queue_pending[queue_index] != NULL, FALSE); | ||||
| @@ -2345,10 +2325,6 @@ idle_calc_showing (gpointer data) | ||||
|   should_show = g_slist_sort (should_show, stackcmp); | ||||
|   should_show = g_slist_reverse (should_show); | ||||
|  | ||||
|   first_window = copy->data; | ||||
|  | ||||
|   meta_display_grab (first_window->display); | ||||
|  | ||||
|   tmp = unplaced; | ||||
|   while (tmp != NULL) | ||||
|     { | ||||
| @@ -2421,8 +2397,6 @@ idle_calc_showing (gpointer data) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   meta_display_ungrab (first_window->display); | ||||
|  | ||||
|   g_slist_free (copy); | ||||
|  | ||||
|   g_slist_free (unplaced); | ||||
| @@ -5890,7 +5864,8 @@ meta_window_focus (MetaWindow  *window, | ||||
|               window->desc, window->input, window->take_focus); | ||||
|  | ||||
|   if (window->display->grab_window && | ||||
|       window->display->grab_window->all_keys_grabbed) | ||||
|       window->display->grab_window->all_keys_grabbed && | ||||
|       !window->display->grab_window->unmanaging) | ||||
|     { | ||||
|       meta_topic (META_DEBUG_FOCUS, | ||||
|                   "Current focus window %s has global keygrab, not focusing window %s after all\n", | ||||
| @@ -5961,6 +5936,25 @@ meta_window_focus (MetaWindow  *window, | ||||
|                       "Sending WM_TAKE_FOCUS to %s since take_focus = true\n", | ||||
|                       window->desc); | ||||
|  | ||||
|           if (!window->input) | ||||
|             { | ||||
|               /* The "Globally Active Input" window case, where the window | ||||
|                * doesn't want us to call XSetInputFocus on it, but does | ||||
|                * want us to send a WM_TAKE_FOCUS. | ||||
|                * | ||||
|                * Normally, we want to just leave the focus undisturbed until | ||||
|                * the window respnds to WM_TAKE_FOCUS, but if we're unmanaging | ||||
|                * the current focus window we *need* to move the focus away, so | ||||
|                * we focus the no_focus_window now (and set | ||||
|                * display->focus_window to that) before sending WM_TAKE_FOCUS. | ||||
|                */ | ||||
|               if (window->display->focus_window != NULL && | ||||
|                   window->display->focus_window->unmanaging) | ||||
|                 meta_display_focus_the_no_focus_window (window->display, | ||||
|                                                         window->screen, | ||||
|                                                         timestamp); | ||||
|             } | ||||
|  | ||||
|           meta_display_request_take_focus (window->display, | ||||
|                                            window, | ||||
|                                            timestamp); | ||||
| @@ -8310,6 +8304,7 @@ recalc_window_features (MetaWindow *window) | ||||
|   gboolean old_has_resize_func; | ||||
|   gboolean old_has_shade_func; | ||||
|   gboolean old_always_sticky; | ||||
|   gboolean old_skip_taskbar; | ||||
|  | ||||
|   old_has_close_func = window->has_close_func; | ||||
|   old_has_minimize_func = window->has_minimize_func; | ||||
| @@ -8317,6 +8312,7 @@ recalc_window_features (MetaWindow *window) | ||||
|   old_has_resize_func = window->has_resize_func; | ||||
|   old_has_shade_func = window->has_shade_func; | ||||
|   old_always_sticky = window->always_sticky; | ||||
|   old_skip_taskbar = window->skip_taskbar; | ||||
|  | ||||
|   /* Use MWM hints initially */ | ||||
|   window->decorated = window->mwm_decorated; | ||||
| @@ -8509,6 +8505,9 @@ recalc_window_features (MetaWindow *window) | ||||
|               window->skip_taskbar, | ||||
|               window->skip_pager); | ||||
|  | ||||
|   if (old_skip_taskbar != window->skip_taskbar) | ||||
|     g_object_notify (G_OBJECT (window), "skip-taskbar"); | ||||
|  | ||||
|   /* FIXME: | ||||
|    * Lame workaround for recalc_window_features | ||||
|    * being used overzealously. The fix is to | ||||
| @@ -9711,7 +9710,8 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window, | ||||
|   switch (xev->evtype) | ||||
|     { | ||||
|     case XI_ButtonRelease: | ||||
|       if (xev->detail == 1) | ||||
|       if (xev->detail == 1 || | ||||
|           xev->detail == meta_prefs_get_mouse_button_resize ()) | ||||
|         { | ||||
|           meta_display_check_threshold_reached (window->display, | ||||
|                                                 xev->root_x, | ||||
|   | ||||
| @@ -80,7 +80,8 @@ item(MULTIPLE) | ||||
| item(TIMESTAMP) | ||||
| item(VERSION) | ||||
| item(ATOM_PAIR) | ||||
| item(BACKLIGHT) | ||||
| item(Backlight) | ||||
| item(hotplug_mode_update) | ||||
|  | ||||
| /* Oddities: These are used, and we need atoms for them, | ||||
|  * but when we need all _NET_WM hints (i.e. when we're making | ||||
|   | ||||
		Reference in New Issue
	
	Block a user