Compare commits

..

3 Commits

Author SHA1 Message Date
Jasper St. Pierre
48b74b86ec window: Separate pointer-focus operations and explicit-focus operations
Some clients, like on-screen keyboards, don't want their windows to be
activated on click, as that would steal focus from the window they're
trying to send events to. They do this by setting the Input Hint in
WM_HINTS to be FALSE, along with not specifying WM_TAKE_FOCUS in their
WM_PROTOCOLS.

However, in this case, when a window tries to get focus in this scenario,
we focus the frame so that a11y and key navigation works properly.
Both policies aren't acceptable -- we can't make OSK steal focus from
windows on click, and we can't make an OSK un-Alt-Tabbable-to.

To solve this, split meta_window_focus() into two different focus policies:

 * meta_window_focus_implicitly() should be called on pointer click or
   focus-follows-mouse or similar cases where we may not want to forcibly
   set focus for clients that don't want it.

 * meta_window_focus_explicitly() should be called by pagers, like
   the gnome-shell overview, or Alt-Tab. In this case, most of the existing
   clients are using meta_window_activate(), so simply adapting that so
   it calls meta_window_focus_explicitly() should be enough.

https://bugzilla.gnome.org/show_bug.cgi?id=715030
2013-11-25 15:08:22 -05:00
Jasper St. Pierre
91c2225ecd window: Reword a condition to make it easier to understand
https://bugzilla.gnome.org/show_bug.cgi?id=715030
2013-11-25 15:08:22 -05:00
Jasper St. Pierre
2aa24f2da8 Move autoraise callbacks into window.c
This matches what the wayland branch does, which allows us to share
code more easily.

https://bugzilla.gnome.org/show_bug.cgi?id=715030
2013-11-25 15:08:22 -05:00
29 changed files with 2016 additions and 1904 deletions

21
NEWS
View File

@@ -1,24 +1,3 @@
3.11.3
======
* xrandr: Use "hotplug_mode_update" property [Marc-André; #711216]
* Fix position of attached dialogs for CSD windows [Giovanni, Owen; #707194]
* Fix focus issues with external OSKs [Jasper; #715030]
* Add a MetaCullable interface [Jasper; #714706]
* Fix window group paint volume [Owen; #719669]
* Fix frame extents problems [Owen; #714707]
* Add shortcut to move windows between monitors [Florian; #671054]
* Fix problems with focus tracking [Owen; #720558]
* Misc. bug fixes and cleanups [Rui, Jasper, Owen; #712833, #678989, #720106,
#720417, #720630]
Contributors:
Robert Bragg, Giovanni Campagna, Marc-André Lureau, Rui Matos, Alberto Milone,
Florian Müllner, Sindhu S, Jasper St. Pierre, Rico Tzschichholz,
Owen W. Taylor
Translations:
甘露(Gan Lu) [zh_CN], Khaled Hosny [ar]
3.11.2
======
* Fix resize operations using mouse-button-modifier [Lionel; #710251]

View File

@@ -3,7 +3,7 @@ AC_CONFIG_MACRO_DIR([m4])
m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [11])
m4_define([mutter_micro_version], [3])
m4_define([mutter_micro_version], [2])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])

View File

@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity.HEAD\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-12-11 06:55+0200\n"
"PO-Revision-Date: 2013-12-11 06:57+0200\n"
"POT-Creation-Date: 2013-10-07 17:09+0200\n"
"PO-Revision-Date: 2013-10-07 17:09+0200\n"
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
"Language-Team: Arabic <doc@arabeyes.org>\n"
"Language: ar\n"
@@ -212,7 +212,7 @@ msgstr "المنظور مقسوم على اليسار"
#. 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:571
#: ../src/compositor/compositor.c:596
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
@@ -255,12 +255,12 @@ msgstr "ا_نتظر"
msgid "_Force Quit"
msgstr "أ_جبر الإنهاء"
#: ../src/core/display.c:415
#: ../src/core/display.c:422
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "الامتداد %s مفقود، لكنه مطلوب للتركيب"
#: ../src/core/display.c:507
#: ../src/core/display.c:514
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "فشل فتح عرض نظام نوافذ إكس '%s'\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
#, c-format
#, fuzzy, c-format
msgid "Unknown %s"
msgstr "غير معروفة %s"
msgstr "عنصر مجهول %s"
#: ../src/core/mutter.c:40
#, c-format
@@ -382,12 +382,12 @@ msgstr ""
msgid "Workspace %d"
msgstr "مساحة العمل %d"
#: ../src/core/screen.c:540
#: ../src/core/screen.c:537
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "الشاشة %d على العرض '%s' غير صحيحة\n"
#: ../src/core/screen.c:556
#: ../src/core/screen.c:553
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -396,18 +396,18 @@ msgstr ""
"الشاشة %d على العرض \"%s\" لها مدير نوافذ بالفعل، حاول استعمال خيار التبديل "
"--replace لتحُلّ محلّ مدير النوافذ الحالي.\n"
#: ../src/core/screen.c:583
#: ../src/core/screen.c:580
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "لا يمكن الحصول على اختيار مدير النوافذ على الشاشة %d العرض \"%s\"\n"
#: ../src/core/screen.c:661
#: ../src/core/screen.c:658
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "الشاشة %d على العرض \"%s\" لها مدير نوافذ بالفعل\n"
#: ../src/core/screen.c:853
#: ../src/core/screen.c:850
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "لا يمكن ترك الشاشة %d على العرض \"%s\"\n"
@@ -503,7 +503,7 @@ msgid "Window manager error: "
msgstr "خطأ مدير النوافذ: "
#. first time through
#: ../src/core/window.c:7615
#: ../src/core/window.c:7515
#, 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:8537
#: ../src/core/window.c:8345
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -528,22 +528,22 @@ msgstr ""
"ضبطت النافذة %s تلميحة MWM يدل على انه لا يمكن تحجيمها، لكنها تضبط الحجم "
"الأدنى %d x %d و الحجم الأقصى %d x %d، هذا ليس له أي معنى.\n"
#: ../src/core/window-props.c:350
#: ../src/core/window-props.c:347
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "ضبط التطبيق رمز NET_WM_PID غير مفهوم %lu\n"
#: ../src/core/window-props.c:466
#: ../src/core/window-props.c:463
#, c-format
msgid "%s (on %s)"
msgstr "%s (على %s)"
#: ../src/core/window-props.c:1549
#: ../src/core/window-props.c:1546
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "نافذة WM_TRANSIENT_FOR 0x%lx غير صحيحة ل %s.\n"
#: ../src/core/window-props.c:1560
#: ../src/core/window-props.c:1557
#, fuzzy, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "نافذة WM_TRANSIENT_FOR 0x%lx غير صحيحة ل %s.\n"
@@ -929,8 +929,8 @@ 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:fg[NORMAL]، NORMAL هنا هو الحالة، لا يمكن تحليل \"%s\""
"يحب أن يكون لتخصيص حالة ألوان جتك قوس غلق قائم بعد الحالة/ مثال gtk:"
"fg[NORMAL]، NORMAL هنا هو الحالة، لا يمكن تحليل \"%s\""
#: ../src/ui/theme.c:1219
#, c-format

668
po/el.po

File diff suppressed because it is too large Load Diff

224
po/es.po
View File

@@ -7,23 +7,23 @@
# Pablo Gonzalo del Campo <pablodc@bigfoot.com>,2002,2003.
# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006.
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009, 2010, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013, 2014.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-01-07 17:48+0000\n"
"PO-Revision-Date: 2014-01-08 10:37+0100\n"
"POT-Creation-Date: 2013-08-20 15:46+0000\n"
"PO-Revision-Date: 2013-08-27 18:27+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Gtranslator 2.91.5\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ../src/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@@ -215,7 +215,7 @@ msgstr "Ver división a la derecha"
#. 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:571
#: ../src/compositor/compositor.c:596
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
@@ -224,7 +224,7 @@ msgstr ""
"Ya existe un gestor de composición ejecutándose en la monitor %i, pantalla "
"«%s»."
#: ../src/compositor/meta-background.c:1075
#: ../src/compositor/meta-background.c:1076
msgid "background texture could not be created from file"
msgstr "no se pudo crear la textura de fondo a partir de archivo"
@@ -262,17 +262,17 @@ msgstr "_Esperar"
msgid "_Force Quit"
msgstr "_Forzar la salida"
#: ../src/core/display.c:415
#: ../src/core/display.c:421
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Falta la extensión %s requerida para la composición"
#: ../src/core/display.c:507
#: ../src/core/display.c:513
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
#: ../src/core/keybindings.c:1137
#: ../src/core/keybindings.c:1136
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -281,7 +281,7 @@ msgstr ""
"Algún otro programa ya está usando la clave %s con el modificador %x como "
"una vinculación\n"
#: ../src/core/keybindings.c:1334
#: ../src/core/keybindings.c:1333
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "«%s» no es un acelerador válido\n"
@@ -327,23 +327,15 @@ msgstr ""
msgid "Built-in display"
msgstr "Pantalla integrada"
#: ../src/core/monitor.c:727
#| msgid "Unknown %s"
msgid "Unknown"
msgstr "Desconocida"
#: ../src/core/monitor.c:729
#| msgid "Unknown %s"
msgid "Unknown Display"
msgstr "Pantalla desconocida"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#. 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:737
#: ../src/core/monitor.c:730
#, c-format
msgid "%s %s"
msgstr "%s %s"
#| msgid "Unknown element %s"
msgid "Unknown %s"
msgstr "Pantalla de %s desconocida"
#: ../src/core/mutter.c:40
#, c-format
@@ -406,12 +398,12 @@ msgstr ""
msgid "Workspace %d"
msgstr "Área de trabajo %d"
#: ../src/core/screen.c:540
#: ../src/core/screen.c:535
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "La ventana %d en la pantalla «%s» no es válida\n"
#: ../src/core/screen.c:556
#: ../src/core/screen.c:551
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -420,7 +412,7 @@ msgstr ""
"La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas, intente "
"usar la opción «--replace» para reemplazar el gestor de ventanas activo.\n"
#: ../src/core/screen.c:583
#: ../src/core/screen.c:578
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@@ -428,12 +420,12 @@ msgstr ""
"No se ha podido obtener la selección del gestor de ventanas en la ventana %d "
"en la pantalla «%s»\n"
#: ../src/core/screen.c:661
#: ../src/core/screen.c:656
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas\n"
#: ../src/core/screen.c:853
#: ../src/core/screen.c:848
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "No se ha podido liberar el monitor %d en la pantalla «%s»\n"
@@ -531,7 +523,7 @@ msgid "Window manager error: "
msgstr "Error del gestor de ventanas: "
#. first time through
#: ../src/core/window.c:7597
#: ../src/core/window.c:7533
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -547,7 +539,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:8519
#: ../src/core/window.c:8257
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -557,23 +549,23 @@ msgstr ""
"redimensionable, pero configuró el tamaño mínimo a %d x %d y el tamaño "
"máximo a %d x %d ; esto no tiene mucho sentido.\n"
#: ../src/core/window-props.c:350
#: ../src/core/window-props.c:347
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "La aplicación establecio un _NET_WM_PID %lu erróneo\n"
#: ../src/core/window-props.c:466
#: ../src/core/window-props.c:463
#, c-format
msgid "%s (on %s)"
msgstr "%s (on %s)"
#: ../src/core/window-props.c:1549
#: ../src/core/window-props.c:1546
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr ""
"WM_TRANSIENT_FOR no válido para la ventana 0x%lx especificada para %s.\n"
#: ../src/core/window-props.c:1560
#: ../src/core/window-props.c:1557
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR ventana 0x%lx para %s crearía un bucle.\n"
@@ -1264,59 +1256,59 @@ msgstr "El atributo «%s» no está definido en el elemento <%s>"
msgid "Line %d character %d: %s"
msgstr "Línea %d carácter %d: %s"
#: ../src/ui/theme-parser.c:483
#: ../src/ui/theme-parser.c:479
#, c-format
msgid "Attribute \"%s\" repeated twice on the same <%s> element"
msgstr "El atributo «%s» se ha repetido dos veces en el mismo elemento <%s>"
#: ../src/ui/theme-parser.c:507 ../src/ui/theme-parser.c:556
#: ../src/ui/theme-parser.c:503 ../src/ui/theme-parser.c:552
#, c-format
msgid "Attribute \"%s\" is invalid on <%s> element in this context"
msgstr "El atributo «%s» es no válido en el elemento <%s> en este contexto"
#: ../src/ui/theme-parser.c:598
#: ../src/ui/theme-parser.c:594
#, c-format
msgid "Could not parse \"%s\" as an integer"
msgstr "No se ha podido interpretar «%s» como un entero"
#: ../src/ui/theme-parser.c:607 ../src/ui/theme-parser.c:662
#: ../src/ui/theme-parser.c:603 ../src/ui/theme-parser.c:658
#, c-format
msgid "Did not understand trailing characters \"%s\" in string \"%s\""
msgstr "No se comprenden los caracteres sobrantes «%s» en la cadena «%s»"
#: ../src/ui/theme-parser.c:617
#: ../src/ui/theme-parser.c:613
#, c-format
msgid "Integer %ld must be positive"
msgstr "El entero %ld debe ser positivo"
#: ../src/ui/theme-parser.c:625
#: ../src/ui/theme-parser.c:621
#, c-format
msgid "Integer %ld is too large, current max is %d"
msgstr "El entero %ld es demasiado grande, el máximo actual es %d"
#: ../src/ui/theme-parser.c:653 ../src/ui/theme-parser.c:769
#: ../src/ui/theme-parser.c:649 ../src/ui/theme-parser.c:765
#, c-format
msgid "Could not parse \"%s\" as a floating point number"
msgstr "No se ha podido interpretar «%s» como un número de coma flotante"
#: ../src/ui/theme-parser.c:684 ../src/ui/theme-parser.c:712
#: ../src/ui/theme-parser.c:680 ../src/ui/theme-parser.c:708
#, c-format
msgid "Boolean values must be \"true\" or \"false\" not \"%s\""
msgstr "Los valores booleanos deben ser «true» o «false» no «%s»"
#: ../src/ui/theme-parser.c:739
#: ../src/ui/theme-parser.c:735
#, c-format
msgid "Angle must be between 0.0 and 360.0, was %g\n"
msgstr "El ángulo debe estar entre 0.0 y 360.0, fue %g\n"
#: ../src/ui/theme-parser.c:802
#: ../src/ui/theme-parser.c:798
#, c-format
msgid "Alpha must be between 0.0 (invisible) and 1.0 (fully opaque), was %g\n"
msgstr ""
"El valor de alfa debe estar entre 0.0 (invisible) y 1.0 (completamente "
"opaco), fue %g\n"
#: ../src/ui/theme-parser.c:867
#: ../src/ui/theme-parser.c:863
#, c-format
msgid ""
"Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,"
@@ -1325,59 +1317,59 @@ msgstr ""
"Escala de título no válida «%s» (debe ser una de xx-small,x-small,small,"
"medium,large,x-large,xx-large)\n"
#: ../src/ui/theme-parser.c:1023 ../src/ui/theme-parser.c:1086
#: ../src/ui/theme-parser.c:1120 ../src/ui/theme-parser.c:1223
#: ../src/ui/theme-parser.c:1019 ../src/ui/theme-parser.c:1082
#: ../src/ui/theme-parser.c:1116 ../src/ui/theme-parser.c:1219
#, c-format
msgid "<%s> name \"%s\" used a second time"
msgstr "<%s> nombre «%s» usado una segunda vez"
#: ../src/ui/theme-parser.c:1035 ../src/ui/theme-parser.c:1132
#: ../src/ui/theme-parser.c:1235
#: ../src/ui/theme-parser.c:1031 ../src/ui/theme-parser.c:1128
#: ../src/ui/theme-parser.c:1231
#, c-format
msgid "<%s> parent \"%s\" has not been defined"
msgstr "El <%s> padre «%s» no ha sido definido"
#: ../src/ui/theme-parser.c:1145
#: ../src/ui/theme-parser.c:1141
#, c-format
msgid "<%s> geometry \"%s\" has not been defined"
msgstr "La <%s> geometría «%s» no ha sido definida"
#: ../src/ui/theme-parser.c:1158
#: ../src/ui/theme-parser.c:1154
#, c-format
msgid "<%s> must specify either a geometry or a parent that has a geometry"
msgstr ""
"<%s> debe especificar o una geometría o un padre para tenga una geometría"
#: ../src/ui/theme-parser.c:1200
#: ../src/ui/theme-parser.c:1196
msgid "You must specify a background for an alpha value to be meaningful"
msgstr "Debe especificar un fondo para un valor alfa para que tenga sentido"
#: ../src/ui/theme-parser.c:1268
#: ../src/ui/theme-parser.c:1264
#, c-format
msgid "Unknown type \"%s\" on <%s> element"
msgstr "Tipo «%s» desconocido en el elemento <%s>"
#: ../src/ui/theme-parser.c:1279
#: ../src/ui/theme-parser.c:1275
#, c-format
msgid "Unknown style_set \"%s\" on <%s> element"
msgstr "style_set «%s» desconocido en el elemento <%s>"
#: ../src/ui/theme-parser.c:1287
#: ../src/ui/theme-parser.c:1283
#, c-format
msgid "Window type \"%s\" has already been assigned a style set"
msgstr "El tipo de ventana «%s» ya ha sido asignado a un conjunto de estilo"
#: ../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
#: ../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
#, c-format
msgid "Element <%s> is not allowed below <%s>"
msgstr "El elemento <%s> no está permitido debajo de <%s>"
#: ../src/ui/theme-parser.c:1431 ../src/ui/theme-parser.c:1445
#: ../src/ui/theme-parser.c:1490
#: ../src/ui/theme-parser.c:1427 ../src/ui/theme-parser.c:1441
#: ../src/ui/theme-parser.c:1486
msgid ""
"Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio\" "
"for buttons"
@@ -1385,123 +1377,123 @@ msgstr ""
"No se puede especificar ambos «button_width»/«button_height» y «aspect "
"ratio» para los botones"
#: ../src/ui/theme-parser.c:1454
#: ../src/ui/theme-parser.c:1450
#, c-format
msgid "Distance \"%s\" is unknown"
msgstr "La distancia «%s» es desconocida"
#: ../src/ui/theme-parser.c:1499
#: ../src/ui/theme-parser.c:1495
#, c-format
msgid "Aspect ratio \"%s\" is unknown"
msgstr "La proporción «%s» es desconocido"
#: ../src/ui/theme-parser.c:1561
#: ../src/ui/theme-parser.c:1557
#, c-format
msgid "Border \"%s\" is unknown"
msgstr "El borde «%s» es desconocido"
#: ../src/ui/theme-parser.c:1872
#: ../src/ui/theme-parser.c:1868
#, c-format
msgid "No \"start_angle\" or \"from\" attribute on element <%s>"
msgstr "No hay atributo «start_angle» o «from» en el elemento <%s>"
#: ../src/ui/theme-parser.c:1879
#: ../src/ui/theme-parser.c:1875
#, c-format
msgid "No \"extent_angle\" or \"to\" attribute on element <%s>"
msgstr "No hay atributo «extent_angle» o «to» en el elemento <%s>"
#: ../src/ui/theme-parser.c:2119
#: ../src/ui/theme-parser.c:2115
#, c-format
msgid "Did not understand value \"%s\" for type of gradient"
msgstr "No se entendió el valor «%s» para el tipo de degradado"
#: ../src/ui/theme-parser.c:2197 ../src/ui/theme-parser.c:2572
#: ../src/ui/theme-parser.c:2193 ../src/ui/theme-parser.c:2568
#, c-format
msgid "Did not understand fill type \"%s\" for <%s> element"
msgstr "No se entendió en tipo de relleno «%s» para el elemento <%s>"
#: ../src/ui/theme-parser.c:2364 ../src/ui/theme-parser.c:2447
#: ../src/ui/theme-parser.c:2510
#: ../src/ui/theme-parser.c:2360 ../src/ui/theme-parser.c:2443
#: ../src/ui/theme-parser.c:2506
#, c-format
msgid "Did not understand state \"%s\" for <%s> element"
msgstr "No se entendió estado «%s» para el elemento <%s>"
#: ../src/ui/theme-parser.c:2374 ../src/ui/theme-parser.c:2457
#: ../src/ui/theme-parser.c:2370 ../src/ui/theme-parser.c:2453
#, c-format
msgid "Did not understand shadow \"%s\" for <%s> element"
msgstr "No se entendió enrollar «%s» para el elemento <%s>"
#: ../src/ui/theme-parser.c:2384
#: ../src/ui/theme-parser.c:2380
#, c-format
msgid "Did not understand arrow \"%s\" for <%s> element"
msgstr "No se entendió la flecha «%s» para el elemento <%s>"
#: ../src/ui/theme-parser.c:2698 ../src/ui/theme-parser.c:2794
#: ../src/ui/theme-parser.c:2694 ../src/ui/theme-parser.c:2790
#, c-format
msgid "No <draw_ops> called \"%s\" has been defined"
msgstr "No se ha definido una <draw_ops> llamada «%s»"
#: ../src/ui/theme-parser.c:2710 ../src/ui/theme-parser.c:2806
#: ../src/ui/theme-parser.c:2706 ../src/ui/theme-parser.c:2802
#, c-format
msgid "Including draw_ops \"%s\" here would create a circular reference"
msgstr "Incluir el draw_ops «%s» aquí podría crear una referencia circular"
#: ../src/ui/theme-parser.c:2921
#: ../src/ui/theme-parser.c:2917
#, c-format
msgid "Unknown position \"%s\" for frame piece"
msgstr "Posición desconocida «%s» para la pieza del marco"
#: ../src/ui/theme-parser.c:2929
#: ../src/ui/theme-parser.c:2925
#, c-format
msgid "Frame style already has a piece at position %s"
msgstr "El estilo del marco ya tiene una pieza en la posición %s"
#: ../src/ui/theme-parser.c:2946 ../src/ui/theme-parser.c:3023
#: ../src/ui/theme-parser.c:2942 ../src/ui/theme-parser.c:3019
#, c-format
msgid "No <draw_ops> with the name \"%s\" has been defined"
msgstr "No se ha definido ninguna <draw_ops> con el nombre «%s»"
#: ../src/ui/theme-parser.c:2976
#: ../src/ui/theme-parser.c:2972
#, c-format
msgid "Unknown function \"%s\" for button"
msgstr "Función desconocida «%s» para el botón"
#: ../src/ui/theme-parser.c:2986
#: ../src/ui/theme-parser.c:2982
#, c-format
msgid "Button function \"%s\" does not exist in this version (%d, need %d)"
msgstr "La función del botón «%s» no existe en esta versión (%d, necesita %d)"
#: ../src/ui/theme-parser.c:2998
#: ../src/ui/theme-parser.c:2994
#, c-format
msgid "Unknown state \"%s\" for button"
msgstr "Estado desconocido «%s» para el botón"
#: ../src/ui/theme-parser.c:3006
#: ../src/ui/theme-parser.c:3002
#, c-format
msgid "Frame style already has a button for function %s state %s"
msgstr "El estilo del marcos ya tiene un botón para la función %s estado %s"
#: ../src/ui/theme-parser.c:3077
#: ../src/ui/theme-parser.c:3073
#, c-format
msgid "\"%s\" is not a valid value for focus attribute"
msgstr "«%s» no es valor válido para el atributo foco"
#: ../src/ui/theme-parser.c:3086
#: ../src/ui/theme-parser.c:3082
#, c-format
msgid "\"%s\" is not a valid value for state attribute"
msgstr "«%s» no es un valor válido para el atributo estado"
#: ../src/ui/theme-parser.c:3096
#: ../src/ui/theme-parser.c:3092
#, c-format
msgid "A style called \"%s\" has not been defined"
msgstr "No se ha definido ningún estilo llamado «%s»"
#: ../src/ui/theme-parser.c:3117 ../src/ui/theme-parser.c:3140
#: ../src/ui/theme-parser.c:3113 ../src/ui/theme-parser.c:3136
#, c-format
msgid "\"%s\" is not a valid value for resize attribute"
msgstr "«%s» no es un estado válido para el atributo resize"
#: ../src/ui/theme-parser.c:3151
#: ../src/ui/theme-parser.c:3147
#, c-format
msgid ""
"Should not have \"resize\" attribute on <%s> element for maximized/shaded "
@@ -1510,7 +1502,7 @@ msgstr ""
"No debería tener un atributo «resize» en el elemento <%s> para los estados "
"maximizado/enrollado"
#: ../src/ui/theme-parser.c:3165
#: ../src/ui/theme-parser.c:3161
#, c-format
msgid ""
"Should not have \"resize\" attribute on <%s> element for maximized states"
@@ -1518,20 +1510,20 @@ msgstr ""
"No debería tener un atributo «resize» en el elemento <%s> para los estados "
"maximizados."
#: ../src/ui/theme-parser.c:3179 ../src/ui/theme-parser.c:3223
#: ../src/ui/theme-parser.c:3175 ../src/ui/theme-parser.c:3222
#, c-format
msgid "Style has already been specified for state %s resize %s focus %s"
msgstr ""
"El estilo ya ha sido especificado para estado %s redimensionado %s foco %s"
#: ../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
#: ../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
#, c-format
msgid "Style has already been specified for state %s focus %s"
msgstr "El estilo ya ha sido especificado para estado %s foco %s"
#: ../src/ui/theme-parser.c:3295
#: ../src/ui/theme-parser.c:3294
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)"
@@ -1540,7 +1532,7 @@ msgstr ""
"especificado un atributo draw_ops y también un elemento <draw_ops> o ha "
"especificado los dos elementos)"
#: ../src/ui/theme-parser.c:3333
#: ../src/ui/theme-parser.c:3332
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)"
@@ -1549,7 +1541,7 @@ msgstr ""
"especificado un atributo draw_ops y también un elemento <draw_ops> o ha "
"especificado los dos elementos)"
#: ../src/ui/theme-parser.c:3371
#: ../src/ui/theme-parser.c:3370
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)"
@@ -1558,12 +1550,12 @@ msgstr ""
"especificado un atributo draw_ops y también un elemento <draw_ops> o ha "
"especificado los dos elementos)"
#: ../src/ui/theme-parser.c:3435
#: ../src/ui/theme-parser.c:3434
#, c-format
msgid "Bad version specification '%s'"
msgstr "Especificación de versión «%s» errónea"
#: ../src/ui/theme-parser.c:3508
#: ../src/ui/theme-parser.c:3507
msgid ""
"\"version\" attribute cannot be used in metacity-theme-1.xml or metacity-"
"theme-2.xml"
@@ -1571,19 +1563,19 @@ msgstr ""
"No se puede usar el atributo «version» con metacity-theme-1.xml o metacity-"
"theme-2.xml"
#: ../src/ui/theme-parser.c:3531
#: ../src/ui/theme-parser.c:3530
#, c-format
msgid "Theme requires version %s but latest supported theme version is %d.%d"
msgstr ""
"El tema requiere la versión %s pero la última versión soportada del tema es "
"la %d.%d"
#: ../src/ui/theme-parser.c:3563
#: ../src/ui/theme-parser.c:3562
#, c-format
msgid "Outermost element in theme must be <metacity_theme> not <%s>"
msgstr "El elemento mas externo en un tema debe ser <metacity_theme> no <%s>"
#: ../src/ui/theme-parser.c:3583
#: ../src/ui/theme-parser.c:3582
#, c-format
msgid ""
"Element <%s> is not allowed inside a name/author/date/description element"
@@ -1591,12 +1583,12 @@ msgstr ""
"El elemento <%s> no esta permitido dentro de un elemento name/author/date/"
"description"
#: ../src/ui/theme-parser.c:3588
#: ../src/ui/theme-parser.c:3587
#, c-format
msgid "Element <%s> is not allowed inside a <constant> element"
msgstr "El elemento <%s> no esta permitido dentro de un elemento <constant>"
#: ../src/ui/theme-parser.c:3600
#: ../src/ui/theme-parser.c:3599
#, c-format
msgid ""
"Element <%s> is not allowed inside a distance/border/aspect_ratio element"
@@ -1604,40 +1596,40 @@ msgstr ""
"El elemento <%s> no esta permitido dentro de un elemento distance/border/"
"aspect_ratio"
#: ../src/ui/theme-parser.c:3622
#: ../src/ui/theme-parser.c:3621
#, c-format
msgid "Element <%s> is not allowed inside a draw operation element"
msgstr ""
"El elemento <%s> no esta permitido dentro de un elemento de operación de "
"dibujo"
#: ../src/ui/theme-parser.c:3632 ../src/ui/theme-parser.c:3662
#: ../src/ui/theme-parser.c:3667 ../src/ui/theme-parser.c:3672
#: ../src/ui/theme-parser.c:3631 ../src/ui/theme-parser.c:3661
#: ../src/ui/theme-parser.c:3666 ../src/ui/theme-parser.c:3671
#, c-format
msgid "Element <%s> is not allowed inside a <%s> element"
msgstr "El elemento <%s> no esta permitido dentro del elemento <%s>"
#: ../src/ui/theme-parser.c:3900
#: ../src/ui/theme-parser.c:3899
msgid "No draw_ops provided for frame piece"
msgstr "No se dio draw_ops para la pieza del cuadro"
#: ../src/ui/theme-parser.c:3915
#: ../src/ui/theme-parser.c:3914
msgid "No draw_ops provided for button"
msgstr "No se dio draw_ops para botón"
#: ../src/ui/theme-parser.c:3969
#: ../src/ui/theme-parser.c:3968
#, c-format
msgid "No text is allowed inside element <%s>"
msgstr "No se permite texto dentro del elemento <%s>"
#: ../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
#: ../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
#, c-format
msgid "<%s> specified twice for this theme"
msgstr "<%s> especificado dos veces para este tema"
#: ../src/ui/theme-parser.c:4337
#: ../src/ui/theme-parser.c:4336
#, c-format
msgid "Failed to find a valid file for theme %s\n"
msgstr "Falló al encontrar un archivo válido para el tema%s\n"

220
po/it.po
View File

@@ -1,18 +1,19 @@
# Italian translation for Mutter.
# Based on Italian translation for Metacity
# This file is distributed under the same license as metacity package
# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
# Copyright (C) 2012 the mutter's copyright holder.
# Pier Luigi Fiorini <plfiorini@libero.it>, 2002.
# Lapo Calamandrei <lapo.calamandrei@virgilio.it>, 2003.
# Luca Ferretti <lferrett@gnome.org>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
# Milo Casagrande <milo@ubuntu.com>, 2012, 2013, 2014.
# Milo Casagrande <milo@ubuntu.com>, 2012, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-10 08:54+0100\n"
"PO-Revision-Date: 2014-01-10 08:54+0100\n"
"POT-Creation-Date: 2013-08-24 19:11+0200\n"
"PO-Revision-Date: 2013-08-24 19:11+0200\n"
"Last-Translator: Milo Casagrande <milo@ubuntu.com>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n"
@@ -216,7 +217,7 @@ msgstr "Massimizza a destra"
#. 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:571
#: ../src/compositor/compositor.c:596
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
@@ -225,7 +226,7 @@ msgstr ""
"Un altro compositing manager è già in esecuzione sullo schermo %i sul "
"display «%s»."
#: ../src/compositor/meta-background.c:1075
#: ../src/compositor/meta-background.c:1076
msgid "background texture could not be created from file"
msgstr "La texture dello sfondo non può essere creata dal file"
@@ -265,17 +266,17 @@ msgstr "_Attendi"
msgid "_Force Quit"
msgstr "_Forza uscita"
#: ../src/core/display.c:415
#: ../src/core/display.c:422
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Estensione %s richiesta per il compositing mancante"
#: ../src/core/display.c:507
#: ../src/core/display.c:514
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Apertura del display «%s» di X Window System non riuscita\n"
#: ../src/core/keybindings.c:1137
#: ../src/core/keybindings.c:1136
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -284,7 +285,7 @@ msgstr ""
"Qualche altro programma sta già usando il tasto %s con i modificatori %x "
"come una associazione di tasti\n"
#: ../src/core/keybindings.c:1334
#: ../src/core/keybindings.c:1333
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "«%s» non è una scorciatoia valida\n"
@@ -326,25 +327,18 @@ msgstr ""
"Non è stato trovato alcun tema. Assicurarsi che %s esista e contenga i temi "
"standard.\n"
#: ../src/core/monitor.c:701
#: ../src/core/monitor.c:702
msgid "Built-in display"
msgstr "Display integrato"
#: ../src/core/monitor.c:726
msgid "Unknown"
msgstr "Sconosciuto"
#: ../src/core/monitor.c:728
msgid "Unknown Display"
msgstr "Display sconosciuto"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#. 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:736
#: ../src/core/monitor.c:730
#, c-format
msgid "%s %s"
msgstr "%s %s"
msgid "Unknown %s"
msgstr "Sconosciuto %s"
#: ../src/core/mutter.c:40
#, c-format
@@ -407,12 +401,12 @@ msgstr ""
msgid "Workspace %d"
msgstr "Spazio di lavoro %d"
#: ../src/core/screen.c:540
#: ../src/core/screen.c:537
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Lo schermo %d nel display «%s» non è valido\n"
#: ../src/core/screen.c:556
#: ../src/core/screen.c:553
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -421,7 +415,7 @@ msgstr ""
"Lo schermo %d sul display «%s» ha già un window manager; provare a "
"utilizzare l'opzione --replace per sostituirlo.\n"
#: ../src/core/screen.c:583
#: ../src/core/screen.c:580
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@@ -429,12 +423,12 @@ msgstr ""
"Impossibile acquisire la selezione del window manager per lo schermo %d nel "
"display «%s»\n"
#: ../src/core/screen.c:661
#: ../src/core/screen.c:658
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Lo schermo %d sul display «%s» ha già un window manager\n"
#: ../src/core/screen.c:853
#: ../src/core/screen.c:850
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Impossibile rilasciare lo schermo %d sul display «%s»\n"
@@ -533,7 +527,7 @@ msgid "Window manager error: "
msgstr "Errore del window manager: "
#. first time through
#: ../src/core/window.c:7590
#: ../src/core/window.c:7533
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -549,7 +543,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:8512
#: ../src/core/window.c:8257
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -559,26 +553,26 @@ msgstr ""
"ridimensionabile, ma ha impostato la dimensione minima %d x %d e la "
"dimensione massima %d x %d; ciò non ha senso.\n"
#: ../src/core/window-props.c:350
#: ../src/core/window-props.c:347
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "L'applicazione ha impostato un _NET_WM_PID errato %lu\n"
#: ../src/core/window-props.c:466
#: ../src/core/window-props.c:463
#, c-format
msgid "%s (on %s)"
msgstr "%s (su %s)"
# Sì, direi che è oscuro -Luca
#
#: ../src/core/window-props.c:1549
#: ../src/core/window-props.c:1546
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Specificato un WM_TRANSIENT_FOR finestra 0x%lx non valido per %s.\n"
# Sì, direi che è oscuro -Luca
#
#: ../src/core/window-props.c:1560
#: ../src/core/window-props.c:1557
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR finestra 0x%lx per %s potrebbe creare un loop.\n"
@@ -1290,60 +1284,60 @@ msgstr "Nessun attributo «%s» nell'elemento <%s>"
msgid "Line %d character %d: %s"
msgstr "Riga %d carattere %d: %s"
#: ../src/ui/theme-parser.c:483
#: ../src/ui/theme-parser.c:479
#, c-format
msgid "Attribute \"%s\" repeated twice on the same <%s> element"
msgstr "L'attributo «%s» è ripetuto due volte nello stesso elemento <%s>"
#: ../src/ui/theme-parser.c:507 ../src/ui/theme-parser.c:556
#: ../src/ui/theme-parser.c:503 ../src/ui/theme-parser.c:552
#, c-format
msgid "Attribute \"%s\" is invalid on <%s> element in this context"
msgstr "L'attributo «%s» non è valido nell'elemento <%s> in questo contesto"
#: ../src/ui/theme-parser.c:598
#: ../src/ui/theme-parser.c:594
#, c-format
msgid "Could not parse \"%s\" as an integer"
msgstr "Impossibile analizzare «%s» come un intero"
#: ../src/ui/theme-parser.c:607 ../src/ui/theme-parser.c:662
#: ../src/ui/theme-parser.c:603 ../src/ui/theme-parser.c:658
#, c-format
msgid "Did not understand trailing characters \"%s\" in string \"%s\""
msgstr ""
"Non sono stati compresi i caratteri di chiusura «%s» nella stringa «%s»"
#: ../src/ui/theme-parser.c:617
#: ../src/ui/theme-parser.c:613
#, c-format
msgid "Integer %ld must be positive"
msgstr "L'intero %ld deve essere positivo"
#: ../src/ui/theme-parser.c:625
#: ../src/ui/theme-parser.c:621
#, c-format
msgid "Integer %ld is too large, current max is %d"
msgstr "L'intero %ld è troppo grande, il massimo corrente è %d"
#: ../src/ui/theme-parser.c:653 ../src/ui/theme-parser.c:769
#: ../src/ui/theme-parser.c:649 ../src/ui/theme-parser.c:765
#, c-format
msgid "Could not parse \"%s\" as a floating point number"
msgstr "Impossibile analizzare «%s» come numero in virgola mobile"
#: ../src/ui/theme-parser.c:684 ../src/ui/theme-parser.c:712
#: ../src/ui/theme-parser.c:680 ../src/ui/theme-parser.c:708
#, c-format
msgid "Boolean values must be \"true\" or \"false\" not \"%s\""
msgstr "I valori booleani devono essere «true» o «false», non «%s»"
# cambiato il finale, ma se è errore, vuol dire che %g è sbagliato..
#: ../src/ui/theme-parser.c:739
#: ../src/ui/theme-parser.c:735
#, c-format
msgid "Angle must be between 0.0 and 360.0, was %g\n"
msgstr "L'angolo deve essere tra 0.0 e 360.0, non %g\n"
# come sopra
#: ../src/ui/theme-parser.c:802
#: ../src/ui/theme-parser.c:798
#, c-format
msgid "Alpha must be between 0.0 (invisible) and 1.0 (fully opaque), was %g\n"
msgstr "Alpha deve essere tra 0.0 (trasparente) e 1.0 (opaco), non %g\n"
#: ../src/ui/theme-parser.c:867
#: ../src/ui/theme-parser.c:863
#, c-format
msgid ""
"Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,"
@@ -1353,64 +1347,64 @@ msgstr ""
"medium,large, x-large, o xx-large)\n"
# element_name, name
#: ../src/ui/theme-parser.c:1023 ../src/ui/theme-parser.c:1086
#: ../src/ui/theme-parser.c:1120 ../src/ui/theme-parser.c:1223
#: ../src/ui/theme-parser.c:1019 ../src/ui/theme-parser.c:1082
#: ../src/ui/theme-parser.c:1116 ../src/ui/theme-parser.c:1219
#, c-format
msgid "<%s> name \"%s\" used a second time"
msgstr "Nome «%2$s» di <%1$s> usato una seconda volta"
# element_name, parent
#: ../src/ui/theme-parser.c:1035 ../src/ui/theme-parser.c:1132
#: ../src/ui/theme-parser.c:1235
#: ../src/ui/theme-parser.c:1031 ../src/ui/theme-parser.c:1128
#: ../src/ui/theme-parser.c:1231
#, c-format
msgid "<%s> parent \"%s\" has not been defined"
msgstr "Il genitore «%2$s» di <%1$s> non è stato definito"
# element_name, geometry
#: ../src/ui/theme-parser.c:1145
#: ../src/ui/theme-parser.c:1141
#, c-format
msgid "<%s> geometry \"%s\" has not been defined"
msgstr "La geometria «%2$s» di <%1$s> non è stata definita"
#: ../src/ui/theme-parser.c:1158
#: ../src/ui/theme-parser.c:1154
#, c-format
msgid "<%s> must specify either a geometry or a parent that has a geometry"
msgstr "<%s> deve specificare una geometria o un genitore che ha una geometria"
#: ../src/ui/theme-parser.c:1200
#: ../src/ui/theme-parser.c:1196
msgid "You must specify a background for an alpha value to be meaningful"
msgstr ""
"È necessario specificare uno sfondo per un valore alpha affinché sia "
"significativo"
# in base al successivo, type dovrebbe essere parola chiave....
#: ../src/ui/theme-parser.c:1268
#: ../src/ui/theme-parser.c:1264
#, c-format
msgid "Unknown type \"%s\" on <%s> element"
msgstr "type «%s» sconosciuto nell'elemento <%s>"
#: ../src/ui/theme-parser.c:1279
#: ../src/ui/theme-parser.c:1275
#, c-format
msgid "Unknown style_set \"%s\" on <%s> element"
msgstr "style_set «%s» sconosciuto nell'elemento <%s>"
#: ../src/ui/theme-parser.c:1287
#: ../src/ui/theme-parser.c:1283
#, c-format
msgid "Window type \"%s\" has already been assigned a style set"
msgstr ""
"Al tipo di finestra «%s» è stata già assegnata una impostazione di stile"
#: ../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
#: ../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
#, c-format
msgid "Element <%s> is not allowed below <%s>"
msgstr "L'elemento <%s> non è consentito all'interno di <%s>"
#: ../src/ui/theme-parser.c:1431 ../src/ui/theme-parser.c:1445
#: ../src/ui/theme-parser.c:1490
#: ../src/ui/theme-parser.c:1427 ../src/ui/theme-parser.c:1441
#: ../src/ui/theme-parser.c:1486
msgid ""
"Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio\" "
"for buttons"
@@ -1418,128 +1412,128 @@ msgstr ""
"Non è possibile specificare sia \"button_width\"/\"button_height\" che "
"\"aspect_ratio\" per i pulsanti"
#: ../src/ui/theme-parser.c:1454
#: ../src/ui/theme-parser.c:1450
#, c-format
msgid "Distance \"%s\" is unknown"
msgstr "La distanza «%s» è sconosciuta"
#: ../src/ui/theme-parser.c:1499
#: ../src/ui/theme-parser.c:1495
#, c-format
msgid "Aspect ratio \"%s\" is unknown"
msgstr "Le proporzioni «%s» sono sconosciute"
#: ../src/ui/theme-parser.c:1561
#: ../src/ui/theme-parser.c:1557
#, c-format
msgid "Border \"%s\" is unknown"
msgstr "Il bordo «%s» è sconosciuto"
#: ../src/ui/theme-parser.c:1872
#: ../src/ui/theme-parser.c:1868
#, c-format
msgid "No \"start_angle\" or \"from\" attribute on element <%s>"
msgstr "Nessun attributo «start_angle» o «from» nell'elemento <%s>"
#: ../src/ui/theme-parser.c:1879
#: ../src/ui/theme-parser.c:1875
#, c-format
msgid "No \"extent_angle\" or \"to\" attribute on element <%s>"
msgstr "Nessun attributo «extent_angle» o «to» nell'elemento <%s>"
#: ../src/ui/theme-parser.c:2119
#: ../src/ui/theme-parser.c:2115
#, c-format
msgid "Did not understand value \"%s\" for type of gradient"
msgstr "Valore «%s» incomprensibile per il tipo di gradiente"
#: ../src/ui/theme-parser.c:2197 ../src/ui/theme-parser.c:2572
#: ../src/ui/theme-parser.c:2193 ../src/ui/theme-parser.c:2568
#, c-format
msgid "Did not understand fill type \"%s\" for <%s> element"
msgstr "Tipo di riempimento «%s» incomprensibile per l'elemento <%s>"
#: ../src/ui/theme-parser.c:2364 ../src/ui/theme-parser.c:2447
#: ../src/ui/theme-parser.c:2510
#: ../src/ui/theme-parser.c:2360 ../src/ui/theme-parser.c:2443
#: ../src/ui/theme-parser.c:2506
#, c-format
msgid "Did not understand state \"%s\" for <%s> element"
msgstr "Stato «%s» incomprensibile per l'elemento <%s>"
#: ../src/ui/theme-parser.c:2374 ../src/ui/theme-parser.c:2457
#: ../src/ui/theme-parser.c:2370 ../src/ui/theme-parser.c:2453
#, c-format
msgid "Did not understand shadow \"%s\" for <%s> element"
msgstr "Ombra «%s» incomprensibile per l'elemento <%s>"
#: ../src/ui/theme-parser.c:2384
#: ../src/ui/theme-parser.c:2380
#, c-format
msgid "Did not understand arrow \"%s\" for <%s> element"
msgstr "Freccia «%s» incomprensibile per l'elemento <%s>"
#: ../src/ui/theme-parser.c:2698 ../src/ui/theme-parser.c:2794
#: ../src/ui/theme-parser.c:2694 ../src/ui/theme-parser.c:2790
#, c-format
msgid "No <draw_ops> called \"%s\" has been defined"
msgstr "Non è stato definito alcun <draw_ops> di nome «%s»"
#: ../src/ui/theme-parser.c:2710 ../src/ui/theme-parser.c:2806
#: ../src/ui/theme-parser.c:2706 ../src/ui/theme-parser.c:2802
#, c-format
msgid "Including draw_ops \"%s\" here would create a circular reference"
msgstr ""
"Includendo draw_ops «%s» qui si potrebbe creare un riferimento circolare"
# piece dovrebbe essere parola chiave
#: ../src/ui/theme-parser.c:2921
#: ../src/ui/theme-parser.c:2917
#, c-format
msgid "Unknown position \"%s\" for frame piece"
msgstr "Posizione «%s» sconosciuta per il piece di cornice"
# piece dovrebbe essere parola chiave
#: ../src/ui/theme-parser.c:2929
#: ../src/ui/theme-parser.c:2925
#, c-format
msgid "Frame style already has a piece at position %s"
msgstr "Lo stile della cornice ha già una piece alla posizione %s"
#: ../src/ui/theme-parser.c:2946 ../src/ui/theme-parser.c:3023
#: ../src/ui/theme-parser.c:2942 ../src/ui/theme-parser.c:3019
#, c-format
msgid "No <draw_ops> with the name \"%s\" has been defined"
msgstr "Non è stato definito alcun <draw_ops> con il nome «%s»"
#: ../src/ui/theme-parser.c:2976
#: ../src/ui/theme-parser.c:2972
#, c-format
msgid "Unknown function \"%s\" for button"
msgstr "Funzione «%s» sconosciuta per il pulsante"
#: ../src/ui/theme-parser.c:2986
#: ../src/ui/theme-parser.c:2982
#, c-format
msgid "Button function \"%s\" does not exist in this version (%d, need %d)"
msgstr ""
"La funzione di pulsante «%s» non esiste in questa versione (%d, necessaria "
"%d)"
#: ../src/ui/theme-parser.c:2998
#: ../src/ui/theme-parser.c:2994
#, c-format
msgid "Unknown state \"%s\" for button"
msgstr "Stato «%s» sconosciuto per il pulsate"
#: ../src/ui/theme-parser.c:3006
#: ../src/ui/theme-parser.c:3002
#, c-format
msgid "Frame style already has a button for function %s state %s"
msgstr "Lo stile della cornice ha già un pulsante per la funzione %s stato %s"
#: ../src/ui/theme-parser.c:3077
#: ../src/ui/theme-parser.c:3073
#, c-format
msgid "\"%s\" is not a valid value for focus attribute"
msgstr "«%s» non è un valore valido per l'attributo focus"
#: ../src/ui/theme-parser.c:3086
#: ../src/ui/theme-parser.c:3082
#, c-format
msgid "\"%s\" is not a valid value for state attribute"
msgstr "«%s» non è un valore valido per l'attributo state"
#: ../src/ui/theme-parser.c:3096
#: ../src/ui/theme-parser.c:3092
#, c-format
msgid "A style called \"%s\" has not been defined"
msgstr "Uno stile chiamato «%s» non è stato definito"
#: ../src/ui/theme-parser.c:3117 ../src/ui/theme-parser.c:3140
#: ../src/ui/theme-parser.c:3113 ../src/ui/theme-parser.c:3136
#, c-format
msgid "\"%s\" is not a valid value for resize attribute"
msgstr "«%s» non è un valore valido per l'attributo resize"
#: ../src/ui/theme-parser.c:3151
#: ../src/ui/theme-parser.c:3147
#, c-format
msgid ""
"Should not have \"resize\" attribute on <%s> element for maximized/shaded "
@@ -1548,7 +1542,7 @@ msgstr ""
"Non si dovrebbe avere l'attributo «resize» nell'elemento <%s> per gli stati "
"maximized/shaded"
#: ../src/ui/theme-parser.c:3165
#: ../src/ui/theme-parser.c:3161
#, c-format
msgid ""
"Should not have \"resize\" attribute on <%s> element for maximized states"
@@ -1556,19 +1550,19 @@ msgstr ""
"Non si dovrebbe avere l'attributo «resize» nell'elemento <%s> per gli stati "
"maximized"
#: ../src/ui/theme-parser.c:3179 ../src/ui/theme-parser.c:3223
#: ../src/ui/theme-parser.c:3175 ../src/ui/theme-parser.c:3222
#, c-format
msgid "Style has already been specified for state %s resize %s focus %s"
msgstr "Lo stile è stato già specificato per lo stato %s resize %s focus %s"
#: ../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
#: ../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
#, c-format
msgid "Style has already been specified for state %s focus %s"
msgstr "Lo stile è stato già specificato per lo stato %s focus %s"
#: ../src/ui/theme-parser.c:3295
#: ../src/ui/theme-parser.c:3294
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)"
@@ -1577,7 +1571,7 @@ msgstr ""
"specificato un attributo draw_ops e anche un elemento <draw_ops>, o ha "
"specificato due elementi)"
#: ../src/ui/theme-parser.c:3333
#: ../src/ui/theme-parser.c:3332
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)"
@@ -1586,7 +1580,7 @@ msgstr ""
"specificato un attributo draw_ops e anche un elemento <draw_ops>, o ha "
"specificato due elementi)"
#: ../src/ui/theme-parser.c:3371
#: ../src/ui/theme-parser.c:3370
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)"
@@ -1595,12 +1589,12 @@ msgstr ""
"specificato un attributo draw_ops e anche un elemento <draw_ops>, o ha "
"specificato due elementi)"
#: ../src/ui/theme-parser.c:3435
#: ../src/ui/theme-parser.c:3434
#, c-format
msgid "Bad version specification '%s'"
msgstr "Specificazione di versione «%s» errata"
#: ../src/ui/theme-parser.c:3508
#: ../src/ui/theme-parser.c:3507
msgid ""
"\"version\" attribute cannot be used in metacity-theme-1.xml or metacity-"
"theme-2.xml"
@@ -1608,19 +1602,19 @@ msgstr ""
"L'attributo «version» non può essere usato in metacity-theme-1.xml o "
"metacity-theme-2.xml"
#: ../src/ui/theme-parser.c:3531
#: ../src/ui/theme-parser.c:3530
#, c-format
msgid "Theme requires version %s but latest supported theme version is %d.%d"
msgstr ""
"Il tema richiede la versione %s, ma la versione di tema supportata più "
"recente è la %d.%d"
#: ../src/ui/theme-parser.c:3563
#: ../src/ui/theme-parser.c:3562
#, c-format
msgid "Outermost element in theme must be <metacity_theme> not <%s>"
msgstr "L'elemento più esterno nel tema deve essere <metacity_theme> not <%s>"
#: ../src/ui/theme-parser.c:3583
#: ../src/ui/theme-parser.c:3582
#, c-format
msgid ""
"Element <%s> is not allowed inside a name/author/date/description element"
@@ -1628,12 +1622,12 @@ msgstr ""
"L'elemento <%s> non è consentito all'interno di un elemento name/author/date/"
"description"
#: ../src/ui/theme-parser.c:3588
#: ../src/ui/theme-parser.c:3587
#, c-format
msgid "Element <%s> is not allowed inside a <constant> element"
msgstr "L'elemento <%s> non è consentito all'interno di un elemento <constant>"
#: ../src/ui/theme-parser.c:3600
#: ../src/ui/theme-parser.c:3599
#, c-format
msgid ""
"Element <%s> is not allowed inside a distance/border/aspect_ratio element"
@@ -1641,41 +1635,41 @@ msgstr ""
"L'elemento <%s> non è consentito all'interno di un elemento distance/border/"
"aspect_ratio"
#: ../src/ui/theme-parser.c:3622
#: ../src/ui/theme-parser.c:3621
#, c-format
msgid "Element <%s> is not allowed inside a draw operation element"
msgstr ""
"L'elemento <%s> non è consentito all'interno di un elemento relativo "
"un'operazione di disegno"
#: ../src/ui/theme-parser.c:3632 ../src/ui/theme-parser.c:3662
#: ../src/ui/theme-parser.c:3667 ../src/ui/theme-parser.c:3672
#: ../src/ui/theme-parser.c:3631 ../src/ui/theme-parser.c:3661
#: ../src/ui/theme-parser.c:3666 ../src/ui/theme-parser.c:3671
#, c-format
msgid "Element <%s> is not allowed inside a <%s> element"
msgstr "L'elemento <%s> non è consentito all'interno di un elemento <%s>"
# piece dovrebbe essere parola chiave
#: ../src/ui/theme-parser.c:3900
#: ../src/ui/theme-parser.c:3899
msgid "No draw_ops provided for frame piece"
msgstr "Nessun draw_ops fornito per il piece di cornice"
#: ../src/ui/theme-parser.c:3915
#: ../src/ui/theme-parser.c:3914
msgid "No draw_ops provided for button"
msgstr "Nessun draw_ops fornito per il pulsante"
#: ../src/ui/theme-parser.c:3969
#: ../src/ui/theme-parser.c:3968
#, c-format
msgid "No text is allowed inside element <%s>"
msgstr "Il testo non è consentito all'interno dell'elemento <%s>"
#: ../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
#: ../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
#, c-format
msgid "<%s> specified twice for this theme"
msgstr "<%s> specificato due volte per questo tema"
#: ../src/ui/theme-parser.c:4337
#: ../src/ui/theme-parser.c:4336
#, c-format
msgid "Failed to find a valid file for theme %s\n"
msgstr "Ricerca di un file valido per il tema «%s» non riuscita\n"

View File

@@ -1,5 +1,5 @@
# Brazilian Portuguese translation of mutter.
# Copyright (C) 2002-2014 Free Software Foundation, Inc.
# Copyright (C) 2002-2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the mutter package.
# Sun G11n <gnome_int_l10n@ireland.sun.com>, 2002.
# Evandro Fernandes Giovanini <evandrofg@ig.com.br>, 2002, 2003, 2006.
@@ -14,15 +14,15 @@
# Antonio Fernandes C. Neto <fernandes@pelivre.org>, 2010.
# Rodrigo Padula de Oliveira <contato@rodrigopadula.com>, 2011.
# Enrico Nicoletto <liverig@gmail.com>, 2012.
# Rafael Ferreira <rafael.f.f1@gmail.co>, 2013, 2014.
# Rafael Ferreira <rafael.f.f1@gmail.co>, 2013.
#
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-12-19 15:30+0000\n"
"PO-Revision-Date: 2014-01-05 03:08-0300\n"
"POT-Creation-Date: 2013-08-20 12:22+0000\n"
"PO-Revision-Date: 2013-08-18 21:39-0300\n"
"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n"
@@ -30,7 +30,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 1.6.3\n"
"X-Generator: Poedit 1.5.7\n"
#: ../src/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@@ -222,7 +222,7 @@ msgstr "Visualizar divisão à direita"
#. 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:571
#: ../src/compositor/compositor.c:596
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
@@ -230,7 +230,7 @@ msgid ""
msgstr ""
"Outro compositor de janelas está em execução na tela %i na área \"%s\"."
#: ../src/compositor/meta-background.c:1075
#: ../src/compositor/meta-background.c:1076
msgid "background texture could not be created from file"
msgstr "textura de plano de fundo não pôde ser criado de arquivo"
@@ -268,17 +268,17 @@ msgstr "_Esperar"
msgid "_Force Quit"
msgstr "_Forçar sair"
#: ../src/core/display.c:415
#: ../src/core/display.c:421
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Faltando extensão %s necessária para composição"
#: ../src/core/display.c:507
#: ../src/core/display.c:513
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Falha ao abrir a exibição \"%s\" do X Window System\n"
#: ../src/core/keybindings.c:1137
#: ../src/core/keybindings.c:1136
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -287,7 +287,7 @@ msgstr ""
"Algum outro programa já está usando a chave %s com modificadores %x como uma "
"tecla de atalho\n"
#: ../src/core/keybindings.c:1334
#: ../src/core/keybindings.c:1333
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "\"%s\" não é um acelerador válido\n"
@@ -329,7 +329,7 @@ msgstr ""
"Não foi possível localizar um tema! Verifique se %s existe e contém os temas "
"comuns.\n"
#: ../src/core/monitor.c:696
#: ../src/core/monitor.c:702
msgid "Built-in display"
msgstr "Tela embutida"
@@ -337,7 +337,7 @@ msgstr "Tela embutida"
#. the vendor), it's Unknown followed by a size in inches,
#. like 'Unknown 15"'
#.
#: ../src/core/monitor.c:724
#: ../src/core/monitor.c:730
#, c-format
msgid "Unknown %s"
msgstr "%s desconhecido"
@@ -404,12 +404,12 @@ msgstr ""
msgid "Workspace %d"
msgstr "Espaço de trabalho %d"
#: ../src/core/screen.c:540
#: ../src/core/screen.c:535
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "A tela %d na exibição \"%s\" é inválida\n"
#: ../src/core/screen.c:556
#: ../src/core/screen.c:551
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -418,7 +418,7 @@ msgstr ""
"A tela %d na exibição \"%s\" já possui um gerenciador de janelas; tente usar "
"a opção --replace para substituir o gerenciador de janelas atual.\n"
#: ../src/core/screen.c:583
#: ../src/core/screen.c:578
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@@ -426,12 +426,12 @@ msgstr ""
"Não foi possível obter a seleção do gerenciador de janelas na exibição \"%2$s"
"\" da tela %1$d\n"
#: ../src/core/screen.c:661
#: ../src/core/screen.c:656
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "A tela %d na exibição \"%s\" já possui um gerenciador de janelas\n"
#: ../src/core/screen.c:853
#: ../src/core/screen.c:848
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Não foi possível liberar a tela %d na exibição \"%s\"\n"
@@ -528,7 +528,7 @@ msgid "Window manager error: "
msgstr "Erro do gerenciador de janelas: "
#. first time through
#: ../src/core/window.c:7620
#: ../src/core/window.c:7533
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -544,7 +544,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:8542
#: ../src/core/window.c:8257
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -554,22 +554,22 @@ msgstr ""
"define o tamanho mínimo %d x %d e máximo %d x %d; isso não faz muito "
"sentido.\n"
#: ../src/core/window-props.c:350
#: ../src/core/window-props.c:347
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "O aplicativo definiu um _NET_WM_PID %lu inválido\n"
#: ../src/core/window-props.c:466
#: ../src/core/window-props.c:463
#, c-format
msgid "%s (on %s)"
msgstr "%s (em %s)"
#: ../src/core/window-props.c:1549
#: ../src/core/window-props.c:1546
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Janela WM_TRANSIENT_FOR inválida 0x%lx especificada para %s.\n"
#: ../src/core/window-props.c:1560
#: ../src/core/window-props.c:1557
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Janela WM_TRANSIENT_FOR 0x%lx especificada para %s iriar criar loop.\n"
@@ -977,7 +977,7 @@ msgstr "A geometria do quadro não especifica o tamanho dos botões"
#: ../src/ui/theme.c:1051
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Os degradês devem ter pelo menos duas cores"
msgstr "Os gradientes devem ter pelo menos duas cores"
#: ../src/ui/theme.c:1203
#, c-format
@@ -1252,59 +1252,59 @@ msgstr "Nenhum atributo \"%s\" no elemento <%s>"
msgid "Line %d character %d: %s"
msgstr "Caractere %d da linha %d: %s"
#: ../src/ui/theme-parser.c:483
#: ../src/ui/theme-parser.c:479
#, c-format
msgid "Attribute \"%s\" repeated twice on the same <%s> element"
msgstr "O atributo \"%s\" foi repetido duas vezes no mesmo elemento <%s>"
#: ../src/ui/theme-parser.c:507 ../src/ui/theme-parser.c:556
#: ../src/ui/theme-parser.c:503 ../src/ui/theme-parser.c:552
#, c-format
msgid "Attribute \"%s\" is invalid on <%s> element in this context"
msgstr "O atributo \"%s\" é inválido no elemento <%s> neste contexto"
#: ../src/ui/theme-parser.c:598
#: ../src/ui/theme-parser.c:594
#, c-format
msgid "Could not parse \"%s\" as an integer"
msgstr "Não foi possível analisar \"%s\" como um inteiro"
#: ../src/ui/theme-parser.c:607 ../src/ui/theme-parser.c:662
#: ../src/ui/theme-parser.c:603 ../src/ui/theme-parser.c:658
#, c-format
msgid "Did not understand trailing characters \"%s\" in string \"%s\""
msgstr ""
"Os caracteres à direita \"%s\" na string \"%s\" não foram compreendidos"
#: ../src/ui/theme-parser.c:617
#: ../src/ui/theme-parser.c:613
#, c-format
msgid "Integer %ld must be positive"
msgstr "O inteiro %ld deve ser positivo"
#: ../src/ui/theme-parser.c:625
#: ../src/ui/theme-parser.c:621
#, c-format
msgid "Integer %ld is too large, current max is %d"
msgstr "O inteiro %ld é muito grande; o valor máximo atual é %d"
#: ../src/ui/theme-parser.c:653 ../src/ui/theme-parser.c:769
#: ../src/ui/theme-parser.c:649 ../src/ui/theme-parser.c:765
#, c-format
msgid "Could not parse \"%s\" as a floating point number"
msgstr "Não foi possível analisar \"%s\" como um número de ponto flutuante"
#: ../src/ui/theme-parser.c:684 ../src/ui/theme-parser.c:712
#: ../src/ui/theme-parser.c:680 ../src/ui/theme-parser.c:708
#, c-format
msgid "Boolean values must be \"true\" or \"false\" not \"%s\""
msgstr "Os valores booleanos devem ser \"true\" ou \"false\" e não \"%s\""
#: ../src/ui/theme-parser.c:739
#: ../src/ui/theme-parser.c:735
#, c-format
msgid "Angle must be between 0.0 and 360.0, was %g\n"
msgstr "O ângulo deve estar entre 0,0 e 360,0 e era %g\n"
#: ../src/ui/theme-parser.c:802
#: ../src/ui/theme-parser.c:798
#, c-format
msgid "Alpha must be between 0.0 (invisible) and 1.0 (fully opaque), was %g\n"
msgstr ""
"Alfa deve estar entre 0,0 (invisível) e 1,0 (totalmente opaco) e era %g\n"
#: ../src/ui/theme-parser.c:867
#: ../src/ui/theme-parser.c:863
#, c-format
msgid ""
"Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,"
@@ -1313,59 +1313,59 @@ msgstr ""
"Escala de título \"%s\" inválida (deve ser super pequena, extra pequena, "
"pequena, média, grande, extra grande ou super grande)\n"
#: ../src/ui/theme-parser.c:1023 ../src/ui/theme-parser.c:1086
#: ../src/ui/theme-parser.c:1120 ../src/ui/theme-parser.c:1223
#: ../src/ui/theme-parser.c:1019 ../src/ui/theme-parser.c:1082
#: ../src/ui/theme-parser.c:1116 ../src/ui/theme-parser.c:1219
#, c-format
msgid "<%s> name \"%s\" used a second time"
msgstr "<%s> nome \"%s\" usado uma segunda vez"
#: ../src/ui/theme-parser.c:1035 ../src/ui/theme-parser.c:1132
#: ../src/ui/theme-parser.c:1235
#: ../src/ui/theme-parser.c:1031 ../src/ui/theme-parser.c:1128
#: ../src/ui/theme-parser.c:1231
#, c-format
msgid "<%s> parent \"%s\" has not been defined"
msgstr "<%s> pai \"%s\" não foi definido"
#: ../src/ui/theme-parser.c:1145
#: ../src/ui/theme-parser.c:1141
#, c-format
msgid "<%s> geometry \"%s\" has not been defined"
msgstr "<%s> geometria \"%s\" não foi definida"
#: ../src/ui/theme-parser.c:1158
#: ../src/ui/theme-parser.c:1154
#, c-format
msgid "<%s> must specify either a geometry or a parent that has a geometry"
msgstr "<%s> deve especificar uma geometria ou um pai que tenha uma geometria"
#: ../src/ui/theme-parser.c:1200
#: ../src/ui/theme-parser.c:1196
msgid "You must specify a background for an alpha value to be meaningful"
msgstr ""
"Você pode especificar um plano de fundo para que um valor alfa faça sentido"
#: ../src/ui/theme-parser.c:1268
#: ../src/ui/theme-parser.c:1264
#, c-format
msgid "Unknown type \"%s\" on <%s> element"
msgstr "Tipo \"%s\" desconhecido no elemento <%s>"
#: ../src/ui/theme-parser.c:1279
#: ../src/ui/theme-parser.c:1275
#, c-format
msgid "Unknown style_set \"%s\" on <%s> element"
msgstr "conjunto_de_estilo \"%s\" desconhecido no elemento <%s>"
#: ../src/ui/theme-parser.c:1287
#: ../src/ui/theme-parser.c:1283
#, c-format
msgid "Window type \"%s\" has already been assigned a style set"
msgstr "O tipo de janela \"%s\" já foi atribuído a um estilo definido"
#: ../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
#: ../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
#, c-format
msgid "Element <%s> is not allowed below <%s>"
msgstr "O elemento <%s> não é permitido abaixo de <%s>"
#: ../src/ui/theme-parser.c:1431 ../src/ui/theme-parser.c:1445
#: ../src/ui/theme-parser.c:1490
#: ../src/ui/theme-parser.c:1427 ../src/ui/theme-parser.c:1441
#: ../src/ui/theme-parser.c:1486
msgid ""
"Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio\" "
"for buttons"
@@ -1373,124 +1373,124 @@ msgstr ""
"Não foi possível especificar \"button_width\"/\"button_height\" e "
"\"aspect_ratio\" para os botões"
#: ../src/ui/theme-parser.c:1454
#: ../src/ui/theme-parser.c:1450
#, c-format
msgid "Distance \"%s\" is unknown"
msgstr "A distância \"%s\" é desconhecida"
#: ../src/ui/theme-parser.c:1499
#: ../src/ui/theme-parser.c:1495
#, c-format
msgid "Aspect ratio \"%s\" is unknown"
msgstr "A taxa de proporção \"%s\" é desconhecida"
#: ../src/ui/theme-parser.c:1561
#: ../src/ui/theme-parser.c:1557
#, c-format
msgid "Border \"%s\" is unknown"
msgstr "A borda \"%s\" é desconhecida"
#: ../src/ui/theme-parser.c:1872
#: ../src/ui/theme-parser.c:1868
#, c-format
msgid "No \"start_angle\" or \"from\" attribute on element <%s>"
msgstr "Nenhum atributo \"start_angle\" ou \"from\" no elemento <%s>"
#: ../src/ui/theme-parser.c:1879
#: ../src/ui/theme-parser.c:1875
#, c-format
msgid "No \"extent_angle\" or \"to\" attribute on element <%s>"
msgstr "Nenhum atributo \"extent_angle\" ou \"to\" no elemento <%s>"
#: ../src/ui/theme-parser.c:2119
#: ../src/ui/theme-parser.c:2115
#, c-format
msgid "Did not understand value \"%s\" for type of gradient"
msgstr "O valor \"%s\" não foi compreendido para o tipo de degradê"
msgstr "O valor \"%s\" não foi compreendido para o tipo de gradiente"
#: ../src/ui/theme-parser.c:2197 ../src/ui/theme-parser.c:2572
#: ../src/ui/theme-parser.c:2193 ../src/ui/theme-parser.c:2568
#, c-format
msgid "Did not understand fill type \"%s\" for <%s> element"
msgstr ""
"O tipo de preenchimento \"%s\" não foi compreendido para o elemento <%s>"
#: ../src/ui/theme-parser.c:2364 ../src/ui/theme-parser.c:2447
#: ../src/ui/theme-parser.c:2510
#: ../src/ui/theme-parser.c:2360 ../src/ui/theme-parser.c:2443
#: ../src/ui/theme-parser.c:2506
#, c-format
msgid "Did not understand state \"%s\" for <%s> element"
msgstr "O estado \"%s\" não foi compreendido para o elemento <%s>"
#: ../src/ui/theme-parser.c:2374 ../src/ui/theme-parser.c:2457
#: ../src/ui/theme-parser.c:2370 ../src/ui/theme-parser.c:2453
#, c-format
msgid "Did not understand shadow \"%s\" for <%s> element"
msgstr "A sombra \"%s\" não foi compreendida para o elemento <%s>"
#: ../src/ui/theme-parser.c:2384
#: ../src/ui/theme-parser.c:2380
#, c-format
msgid "Did not understand arrow \"%s\" for <%s> element"
msgstr "A seta \"%s\" não foi compreendida para o elemento <%s>"
#: ../src/ui/theme-parser.c:2698 ../src/ui/theme-parser.c:2794
#: ../src/ui/theme-parser.c:2694 ../src/ui/theme-parser.c:2790
#, c-format
msgid "No <draw_ops> called \"%s\" has been defined"
msgstr "Nenhum <draw_ops> chamado \"%s\" foi definido"
#: ../src/ui/theme-parser.c:2710 ../src/ui/theme-parser.c:2806
#: ../src/ui/theme-parser.c:2706 ../src/ui/theme-parser.c:2802
#, c-format
msgid "Including draw_ops \"%s\" here would create a circular reference"
msgstr "A inclusão do draw_ops \"%s\" aqui criaria uma referência circular"
#: ../src/ui/theme-parser.c:2921
#: ../src/ui/theme-parser.c:2917
#, c-format
msgid "Unknown position \"%s\" for frame piece"
msgstr "Posição \"%s\" desconhecida para a parte do quadro"
#: ../src/ui/theme-parser.c:2929
#: ../src/ui/theme-parser.c:2925
#, c-format
msgid "Frame style already has a piece at position %s"
msgstr "O estilo de quadro já tem uma parte na posição %s"
#: ../src/ui/theme-parser.c:2946 ../src/ui/theme-parser.c:3023
#: ../src/ui/theme-parser.c:2942 ../src/ui/theme-parser.c:3019
#, c-format
msgid "No <draw_ops> with the name \"%s\" has been defined"
msgstr "Nenhum <draw_ops> com o nome \"%s\" foi definido"
#: ../src/ui/theme-parser.c:2976
#: ../src/ui/theme-parser.c:2972
#, c-format
msgid "Unknown function \"%s\" for button"
msgstr "Função \"%s\" desconhecida para o botão"
#: ../src/ui/theme-parser.c:2986
#: ../src/ui/theme-parser.c:2982
#, c-format
msgid "Button function \"%s\" does not exist in this version (%d, need %d)"
msgstr "A função \"%s\" de botão não existe nesta versão (%d, necessário %d)"
#: ../src/ui/theme-parser.c:2998
#: ../src/ui/theme-parser.c:2994
#, c-format
msgid "Unknown state \"%s\" for button"
msgstr "Estado \"%s\" desconhecido para o botão"
#: ../src/ui/theme-parser.c:3006
#: ../src/ui/theme-parser.c:3002
#, c-format
msgid "Frame style already has a button for function %s state %s"
msgstr "O estilo de quadro já possui um botão para o estado %s da função %s"
#: ../src/ui/theme-parser.c:3077
#: ../src/ui/theme-parser.c:3073
#, c-format
msgid "\"%s\" is not a valid value for focus attribute"
msgstr "\"%s\" não é um valor válido para o atributo de foco"
#: ../src/ui/theme-parser.c:3086
#: ../src/ui/theme-parser.c:3082
#, c-format
msgid "\"%s\" is not a valid value for state attribute"
msgstr "\"%s\" não é um valor válido para o atributo de estado"
#: ../src/ui/theme-parser.c:3096
#: ../src/ui/theme-parser.c:3092
#, c-format
msgid "A style called \"%s\" has not been defined"
msgstr "Um estilo chamado \"%s\" não foi definido"
#: ../src/ui/theme-parser.c:3117 ../src/ui/theme-parser.c:3140
#: ../src/ui/theme-parser.c:3113 ../src/ui/theme-parser.c:3136
#, c-format
msgid "\"%s\" is not a valid value for resize attribute"
msgstr "\"%s\" não é um valor válido para o atributo de redimensionamento"
#: ../src/ui/theme-parser.c:3151
#: ../src/ui/theme-parser.c:3147
#, c-format
msgid ""
"Should not have \"resize\" attribute on <%s> element for maximized/shaded "
@@ -1499,7 +1499,7 @@ msgstr ""
"Não deve haver o atributo \"resize\" no elemento <%s> para os estados "
"maximizado/sombreado"
#: ../src/ui/theme-parser.c:3165
#: ../src/ui/theme-parser.c:3161
#, c-format
msgid ""
"Should not have \"resize\" attribute on <%s> element for maximized states"
@@ -1507,21 +1507,21 @@ msgstr ""
"Não deve haver o atributo \"resize\" no elemento <%s> para os estados "
"maximizados"
#: ../src/ui/theme-parser.c:3179 ../src/ui/theme-parser.c:3223
#: ../src/ui/theme-parser.c:3175 ../src/ui/theme-parser.c:3222
#, c-format
msgid "Style has already been specified for state %s resize %s focus %s"
msgstr ""
"O estilo já foi especificado para o foco %s de redimensionamento %s do "
"estado %s"
#: ../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
#: ../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
#, c-format
msgid "Style has already been specified for state %s focus %s"
msgstr "O estilo já foi especificado para o foco %s do estado %s"
#: ../src/ui/theme-parser.c:3295
#: ../src/ui/theme-parser.c:3294
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)"
@@ -1530,7 +1530,7 @@ msgstr ""
"especificou um atributo draw_ops e um elemento <draw_ops> ou especificou "
"dois elementos)"
#: ../src/ui/theme-parser.c:3333
#: ../src/ui/theme-parser.c:3332
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)"
@@ -1539,7 +1539,7 @@ msgstr ""
"especificou um atributo draw_ops e um elemento <draw_ops> ou especificou "
"dois elementos)"
#: ../src/ui/theme-parser.c:3371
#: ../src/ui/theme-parser.c:3370
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)"
@@ -1548,12 +1548,12 @@ msgstr ""
"especificou um atributo draw_ops e um elemento <draw_ops> ou especificou "
"dois elementos)"
#: ../src/ui/theme-parser.c:3435
#: ../src/ui/theme-parser.c:3434
#, c-format
msgid "Bad version specification '%s'"
msgstr "Especificação da versão inválida \"%s\""
#: ../src/ui/theme-parser.c:3508
#: ../src/ui/theme-parser.c:3507
msgid ""
"\"version\" attribute cannot be used in metacity-theme-1.xml or metacity-"
"theme-2.xml"
@@ -1561,29 +1561,29 @@ msgstr ""
"O atributo \"versão\" não pode ser usado em metacity-theme-1.xml ou metacity-"
"theme-2.xml"
#: ../src/ui/theme-parser.c:3531
#: ../src/ui/theme-parser.c:3530
#, c-format
msgid "Theme requires version %s but latest supported theme version is %d.%d"
msgstr "Tema requer versão %s, mas a última versão que o tema suporta é %d.%d"
#: ../src/ui/theme-parser.c:3563
#: ../src/ui/theme-parser.c:3562
#, c-format
msgid "Outermost element in theme must be <metacity_theme> not <%s>"
msgstr "O elemento mais externo no tema deve ser <metacity_theme> e não <%s>"
#: ../src/ui/theme-parser.c:3583
#: ../src/ui/theme-parser.c:3582
#, c-format
msgid ""
"Element <%s> is not allowed inside a name/author/date/description element"
msgstr ""
"O elemento <%s> não é permitido em um elemento nome/autor/data/descrição"
#: ../src/ui/theme-parser.c:3588
#: ../src/ui/theme-parser.c:3587
#, c-format
msgid "Element <%s> is not allowed inside a <constant> element"
msgstr "O elemento <%s> não é permitido em um elemento <constant>"
#: ../src/ui/theme-parser.c:3600
#: ../src/ui/theme-parser.c:3599
#, c-format
msgid ""
"Element <%s> is not allowed inside a distance/border/aspect_ratio element"
@@ -1591,38 +1591,38 @@ msgstr ""
"O elemento <%s> não é permitido em um elemento distância/borda/"
"taxa_de_proporção"
#: ../src/ui/theme-parser.c:3622
#: ../src/ui/theme-parser.c:3621
#, c-format
msgid "Element <%s> is not allowed inside a draw operation element"
msgstr "O elemento <%s> não é permitido em um elemento de operação de desenho"
#: ../src/ui/theme-parser.c:3632 ../src/ui/theme-parser.c:3662
#: ../src/ui/theme-parser.c:3667 ../src/ui/theme-parser.c:3672
#: ../src/ui/theme-parser.c:3631 ../src/ui/theme-parser.c:3661
#: ../src/ui/theme-parser.c:3666 ../src/ui/theme-parser.c:3671
#, c-format
msgid "Element <%s> is not allowed inside a <%s> element"
msgstr "O elemento <%s> não é permitido em um elemento <%s>"
#: ../src/ui/theme-parser.c:3900
#: ../src/ui/theme-parser.c:3899
msgid "No draw_ops provided for frame piece"
msgstr "Nenhum draw_ops foi fornecido para a parte do quadro"
#: ../src/ui/theme-parser.c:3915
#: ../src/ui/theme-parser.c:3914
msgid "No draw_ops provided for button"
msgstr "Nenhum draw_ops foi fornecido para o botão"
#: ../src/ui/theme-parser.c:3969
#: ../src/ui/theme-parser.c:3968
#, c-format
msgid "No text is allowed inside element <%s>"
msgstr "Nenhum texto é permitido no elemento <%s>"
#: ../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
#: ../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
#, c-format
msgid "<%s> specified twice for this theme"
msgstr "<%s> especificado duas vezes para este tema"
#: ../src/ui/theme-parser.c:4337
#: ../src/ui/theme-parser.c:4336
#, c-format
msgid "Failed to find a valid file for theme %s\n"
msgstr "Falha ao localizar um arquivo válido para o tema %s\n"

File diff suppressed because it is too large Load Diff

View File

@@ -17,6 +17,8 @@ struct _MetaCompositor
{
MetaDisplay *display;
Atom atom_x_root_pixmap;
Atom atom_net_wm_window_opacity;
guint repaint_func_id;
ClutterActor *shadow_src;

View File

@@ -175,6 +175,31 @@ process_damage (MetaCompositor *compositor,
meta_window_actor_process_damage (window_actor, event);
}
static void
process_property_notify (MetaCompositor *compositor,
XPropertyEvent *event,
MetaWindow *window)
{
MetaWindowActor *window_actor;
if (window == NULL)
return;
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
if (window_actor == NULL)
return;
/* Check for the opacity changing */
if (event->atom == compositor->atom_net_wm_window_opacity)
{
meta_window_actor_update_opacity (window_actor);
DEBUG_TRACE ("process_property_notify: net_wm_window_opacity\n");
return;
}
DEBUG_TRACE ("process_property_notify: unknown\n");
}
static Window
get_output_window (MetaScreen *screen)
{
@@ -852,18 +877,6 @@ meta_compositor_window_shape_changed (MetaCompositor *compositor,
meta_window_actor_update_shape (window_actor);
}
void
meta_compositor_window_opacity_changed (MetaCompositor *compositor,
MetaWindow *window)
{
MetaWindowActor *window_actor;
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
if (!window_actor)
return;
meta_window_actor_update_opacity (window_actor);
}
/* Clutter makes the assumption that there is only one X window
* per stage, which is a valid assumption to make for a generic
* application toolkit. As such, it will ignore any events sent
@@ -970,19 +983,28 @@ meta_compositor_process_event (MetaCompositor *compositor,
}
}
if (event->type == meta_display_get_damage_event_base (compositor->display) + XDamageNotify)
switch (event->type)
{
/* Core code doesn't handle damage events, so we need to extract the MetaWindow
* ourselves
*/
if (window == NULL)
{
Window xwin = ((XDamageNotifyEvent *) event)->drawable;
window = meta_display_lookup_x_window (compositor->display, xwin);
}
case PropertyNotify:
process_property_notify (compositor, (XPropertyEvent *) event, window);
break;
DEBUG_TRACE ("meta_compositor_process_event (process_damage)\n");
process_damage (compositor, (XDamageNotifyEvent *) event, window);
default:
if (event->type == meta_display_get_damage_event_base (compositor->display) + XDamageNotify)
{
/* Core code doesn't handle damage events, so we need to extract the MetaWindow
* ourselves
*/
if (window == NULL)
{
Window xwin = ((XDamageNotifyEvent *) event)->drawable;
window = meta_display_lookup_x_window (compositor->display, xwin);
}
DEBUG_TRACE ("meta_compositor_process_event (process_damage)\n");
process_damage (compositor, (XDamageNotifyEvent *) event, window);
}
break;
}
/* Clutter needs to know about MapNotify events otherwise it will
@@ -1486,7 +1508,13 @@ on_shadow_factory_changed (MetaShadowFactory *factory,
MetaCompositor *
meta_compositor_new (MetaDisplay *display)
{
char *atom_names[] = {
"_XROOTPMAP_ID",
"_NET_WM_WINDOW_OPACITY",
};
Atom atoms[G_N_ELEMENTS(atom_names)];
MetaCompositor *compositor;
Display *xdisplay = meta_display_get_xdisplay (display);
if (!composite_at_least_version (display, 0, 3))
return NULL;
@@ -1498,11 +1526,18 @@ meta_compositor_new (MetaDisplay *display)
if (g_getenv("META_DISABLE_MIPMAPS"))
compositor->no_mipmaps = TRUE;
meta_verbose ("Creating %d atoms\n", (int) G_N_ELEMENTS (atom_names));
XInternAtoms (xdisplay, atom_names, G_N_ELEMENTS (atom_names),
False, atoms);
g_signal_connect (meta_shadow_factory_get_default (),
"changed",
G_CALLBACK (on_shadow_factory_changed),
compositor);
compositor->atom_x_root_pixmap = atoms[0];
compositor->atom_net_wm_window_opacity = atoms[1];
compositor->repaint_func_id = clutter_threads_add_repaint_func (meta_repaint_func,
compositor,
NULL);

View File

@@ -119,6 +119,26 @@ meta_background_actor_get_preferred_height (ClutterActor *actor,
*natural_height_p = height;
}
static gboolean
meta_background_actor_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
{
ClutterContent *content;
gfloat width, height;
content = clutter_actor_get_content (actor);
if (!content)
return FALSE;
clutter_content_get_preferred_size (content, &width, &height);
clutter_paint_volume_set_width (volume, width);
clutter_paint_volume_set_height (volume, height);
return TRUE;
}
static void
meta_background_actor_class_init (MetaBackgroundActorClass *klass)
{
@@ -131,6 +151,7 @@ meta_background_actor_class_init (MetaBackgroundActorClass *klass)
actor_class->get_preferred_width = meta_background_actor_get_preferred_width;
actor_class->get_preferred_height = meta_background_actor_get_preferred_height;
actor_class->get_paint_volume = meta_background_actor_get_paint_volume;
}
static void

View File

@@ -46,6 +46,7 @@ static guint signals[LAST_SIGNAL] = {0};
struct _MetaWindowActorPrivate
{
MetaWindow *window;
Window xwindow;
MetaScreen *screen;
ClutterActor *actor;
@@ -68,6 +69,8 @@ struct _MetaWindowActorPrivate
Damage damage;
guint8 opacity;
/* A region that matches the shape of the window, including frame bounds */
cairo_region_t *shape_region;
/* If the window has an input shape, a region that matches the shape */
@@ -152,6 +155,8 @@ struct _FrameData
enum
{
PROP_META_WINDOW = 1,
PROP_META_SCREEN,
PROP_X_WINDOW,
PROP_NO_SHADOW,
PROP_SHADOW_CLASS
};
@@ -220,12 +225,33 @@ meta_window_actor_class_init (MetaWindowActorClass *klass)
"MetaWindow",
"The displayed MetaWindow",
META_TYPE_WINDOW,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
g_object_class_install_property (object_class,
PROP_META_WINDOW,
pspec);
pspec = g_param_spec_pointer ("meta-screen",
"MetaScreen",
"MetaScreen",
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
g_object_class_install_property (object_class,
PROP_META_SCREEN,
pspec);
pspec = g_param_spec_ulong ("x-window",
"Window",
"Window",
0,
G_MAXULONG,
0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
g_object_class_install_property (object_class,
PROP_X_WINDOW,
pspec);
pspec = g_param_spec_boolean ("no-shadow",
"No shadow",
"Do not add shaddow to this window",
@@ -268,6 +294,7 @@ meta_window_actor_init (MetaWindowActor *self)
priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
META_TYPE_WINDOW_ACTOR,
MetaWindowActorPrivate);
priv->opacity = 0xff;
priv->shadow_class = NULL;
}
@@ -278,9 +305,11 @@ window_decorated_notify (MetaWindow *mw,
{
MetaWindowActor *self = META_WINDOW_ACTOR (data);
MetaWindowActorPrivate *priv = self->priv;
MetaFrame *frame = meta_window_get_frame (mw);
MetaScreen *screen = priv->screen;
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdisplay = meta_display_get_xdisplay (display);
Window new_xwindow;
/*
* Basically, we have to reconstruct the the internals of this object
@@ -288,6 +317,11 @@ window_decorated_notify (MetaWindow *mw,
*/
priv->redecorating = TRUE;
if (frame)
new_xwindow = meta_frame_get_xwindow (frame);
else
new_xwindow = meta_window_get_xwindow (mw);
meta_window_actor_detach (self);
/*
@@ -302,6 +336,8 @@ window_decorated_notify (MetaWindow *mw,
priv->damage = None;
}
priv->xwindow = new_xwindow;
/*
* Recreate the contents.
*/
@@ -316,30 +352,18 @@ window_appears_focused_notify (MetaWindow *mw,
clutter_actor_queue_redraw (CLUTTER_ACTOR (data));
}
static gboolean
is_non_opaque (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
MetaWindow *window = priv->window;
return priv->argb32 || (window->opacity != 0xFF);
}
static void
meta_window_actor_constructed (GObject *object)
{
MetaWindowActor *self = META_WINDOW_ACTOR (object);
MetaWindowActorPrivate *priv = self->priv;
MetaWindow *window = priv->window;
MetaScreen *screen = meta_window_get_screen (window);
MetaScreen *screen = priv->screen;
MetaDisplay *display = meta_screen_get_display (screen);
Window xwindow = priv->xwindow;
MetaWindow *window = priv->window;
Display *xdisplay = meta_display_get_xdisplay (display);
XRenderPictFormat *format;
Window xwindow;
xwindow = meta_window_get_toplevel_xwindow (window);
priv->screen = screen;
priv->damage = XDamageCreate (xdisplay, xwindow,
XDamageReportBoundingBox);
@@ -362,6 +386,19 @@ meta_window_actor_constructed (GObject *object)
* We will release it in dispose().
*/
g_object_ref (priv->actor);
g_signal_connect_object (window, "notify::decorated",
G_CALLBACK (window_decorated_notify), self, 0);
g_signal_connect_object (window, "notify::appears-focused",
G_CALLBACK (window_appears_focused_notify), self, 0);
}
else
{
/*
* This is the case where existing window is gaining/loosing frame.
* Just ensure the actor is top most (i.e., above shadow).
*/
clutter_actor_set_child_above_sibling (CLUTTER_ACTOR (self), priv->actor, NULL);
}
meta_window_actor_update_opacity (self);
@@ -454,12 +491,17 @@ meta_window_actor_set_property (GObject *object,
switch (prop_id)
{
case PROP_META_WINDOW:
priv->window = g_value_dup_object (value);
g_signal_connect_object (priv->window, "notify::decorated",
G_CALLBACK (window_decorated_notify), self, 0);
g_signal_connect_object (priv->window, "notify::appears-focused",
G_CALLBACK (window_appears_focused_notify), self, 0);
{
if (priv->window)
g_object_unref (priv->window);
priv->window = g_value_dup_object (value);
}
break;
case PROP_META_SCREEN:
priv->screen = g_value_get_pointer (value);
break;
case PROP_X_WINDOW:
priv->xwindow = g_value_get_ulong (value);
break;
case PROP_NO_SHADOW:
{
@@ -505,6 +547,12 @@ meta_window_actor_get_property (GObject *object,
case PROP_META_WINDOW:
g_value_set_object (value, priv->window);
break;
case PROP_META_SCREEN:
g_value_set_pointer (value, priv->screen);
break;
case PROP_X_WINDOW:
g_value_set_ulong (value, priv->xwindow);
break;
case PROP_NO_SHADOW:
g_value_set_boolean (value, priv->no_shadow);
break;
@@ -602,7 +650,7 @@ clip_shadow_under_window (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
return is_non_opaque (self) && priv->window->frame;
return (priv->argb32 || priv->opacity != 0xff) && priv->window->frame;
}
static void
@@ -628,7 +676,6 @@ meta_window_actor_paint (ClutterActor *actor)
MetaShadowParams params;
cairo_rectangle_int_t shape_bounds;
cairo_region_t *clip = priv->shadow_clip;
MetaWindow *window = priv->window;
meta_window_actor_get_shape_bounds (self, &shape_bounds);
meta_window_actor_get_shadow_params (self, appears_focused, &params);
@@ -652,7 +699,7 @@ meta_window_actor_paint (ClutterActor *actor)
params.y_offset + shape_bounds.y,
shape_bounds.width,
shape_bounds.height,
(clutter_actor_get_paint_opacity (actor) * params.opacity * window->opacity) / (255 * 255),
(clutter_actor_get_paint_opacity (actor) * params.opacity * priv->opacity) / (255 * 255),
clip,
clip_shadow_under_window (self)); /* clip_strictly - not just as an optimization */
@@ -695,11 +742,7 @@ meta_window_actor_get_paint_volume (ClutterActor *actor,
}
if (priv->unobscured_region)
{
cairo_rectangle_int_t unobscured_bounds;
cairo_region_get_extents (priv->unobscured_region, &unobscured_bounds);
gdk_rectangle_intersect (&bounds, &unobscured_bounds, &bounds);
}
cairo_region_intersect_rectangle (priv->unobscured_region, &bounds);
origin.x = bounds.x;
origin.y = bounds.y;
@@ -743,10 +786,10 @@ meta_window_actor_has_shadow (MetaWindowActor *self)
return TRUE;
/*
* Do not add shadows to non-opaque windows; eventually we should generate
* a shadow from the input shape for such windows.
* Do not add shadows to ARGB windows; eventually we should generate a
* shadow from the input shape for such windows.
*/
if (is_non_opaque (self))
if (priv->argb32 || priv->opacity != 0xff)
return FALSE;
/*
@@ -777,6 +820,20 @@ meta_window_actor_has_shadow (MetaWindowActor *self)
return FALSE;
}
/**
* meta_window_actor_get_x_window: (skip)
* @self: a #MetaWindowActor
*
*/
Window
meta_window_actor_get_x_window (MetaWindowActor *self)
{
if (!self)
return None;
return self->priv->xwindow;
}
/**
* meta_window_actor_get_meta_window:
* @self: a #MetaWindowActor
@@ -1281,7 +1338,7 @@ meta_window_actor_should_unredirect (MetaWindowActor *self)
if (meta_window_requested_dont_bypass_compositor (metaWindow))
return FALSE;
if (metaWindow->opacity != 0xFF)
if (priv->opacity != 0xff)
return FALSE;
if (metaWindow->shape_region != NULL)
@@ -1312,7 +1369,7 @@ meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state)
MetaDisplay *display = meta_window_get_display (metaWindow);
Display *xdisplay = meta_display_get_xdisplay (display);
Window xwin = meta_window_get_toplevel_xwindow (metaWindow);
Window xwin = meta_window_actor_get_x_window (self);
if (state)
{
@@ -1566,10 +1623,22 @@ meta_window_actor_new (MetaWindow *window)
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
MetaWindowActor *self;
MetaWindowActorPrivate *priv;
MetaFrame *frame;
Window top_window;
ClutterActor *window_group;
frame = meta_window_get_frame (window);
if (frame)
top_window = meta_frame_get_xwindow (frame);
else
top_window = meta_window_get_xwindow (window);
meta_verbose ("add window: Meta %p, xwin 0x%x\n", window, (guint)top_window);
self = g_object_new (META_TYPE_WINDOW_ACTOR,
"meta-window", window,
"meta-window", window,
"x-window", top_window,
"meta-screen", screen,
NULL);
priv = self->priv;
@@ -1656,9 +1725,8 @@ static cairo_region_t *
meta_window_actor_get_obscured_region (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
MetaWindow *window = priv->window;
if (priv->back_pixmap && window->opacity != 0xFF && !priv->window->shaded)
if (priv->back_pixmap && priv->opacity == 0xff && !priv->window->shaded)
return priv->opaque_region;
else
return NULL;
@@ -1838,8 +1906,8 @@ check_needs_pixmap (MetaWindowActor *self)
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdisplay = meta_display_get_xdisplay (display);
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
Window xwindow = meta_window_get_toplevel_xwindow (priv->window);
MetaCompositor *compositor;
Window xwindow = priv->xwindow;
if (!priv->needs_pixmap)
return;
@@ -2572,9 +2640,23 @@ void
meta_window_actor_update_opacity (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
MetaWindow *window = priv->window;
MetaDisplay *display = meta_screen_get_display (priv->screen);
MetaCompositor *compositor = meta_display_get_compositor (display);
Window xwin = meta_window_get_xwindow (priv->window);
gulong value;
guint8 opacity;
clutter_actor_set_opacity (self->priv->actor, window->opacity);
if (meta_prop_get_cardinal (display, xwin,
compositor->atom_net_wm_window_opacity,
&value))
{
opacity = (guint8)((gfloat)value * 255.0 / ((gfloat)0xffffffff));
}
else
opacity = 255;
self->priv->opacity = opacity;
clutter_actor_set_opacity (self->priv->actor, opacity);
}
void

View File

@@ -199,30 +199,11 @@ meta_window_group_paint (ClutterActor *actor)
meta_cullable_reset_culling (META_CULLABLE (window_group));
}
/* Adapted from clutter_actor_update_default_paint_volume() */
static gboolean
meta_window_group_get_paint_volume (ClutterActor *self,
meta_window_group_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
{
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;
return clutter_paint_volume_set_from_allocation (volume, actor);
}
static void

View File

@@ -280,7 +280,8 @@ meta_core_lower_beneath_grab_window (Display *xdisplay,
return;
changes.stack_mode = Below;
changes.sibling = meta_window_get_toplevel_xwindow (grab_window);
changes.sibling = grab_window->frame ? grab_window->frame->xwindow
: grab_window->xwindow;
meta_stack_tracker_record_lower_below (screen->stack_tracker,
xwindow,
@@ -302,7 +303,7 @@ meta_core_user_focus (Display *xdisplay,
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
meta_window_focus (window, timestamp);
meta_window_focus_implicitly (window, timestamp);
}
void
@@ -481,7 +482,7 @@ meta_core_show_window_menu (Display *xdisplay,
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_focus (window, timestamp);
meta_window_focus_implicitly (window, timestamp);
meta_window_show_menu (window, root_x, root_y, button, timestamp);
}

View File

@@ -138,14 +138,6 @@ 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 >*/

View File

@@ -117,15 +117,6 @@ typedef struct
guint ping_timeout_id;
} MetaPingData;
typedef struct
{
MetaDisplay *display;
MetaWindow *window;
int pointer_x;
int pointer_y;
} MetaFocusData;
G_DEFINE_TYPE(MetaDisplay, meta_display, G_TYPE_OBJECT);
/* Signals */
@@ -918,6 +909,8 @@ 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)
@@ -969,6 +962,8 @@ meta_display_open (void)
meta_idle_monitor_init_dbus ();
meta_display_ungrab (the_display);
/* Done opening new display */
the_display->display_opening = FALSE;
@@ -1213,18 +1208,7 @@ meta_display_screen_for_x_screen (MetaDisplay *display,
return NULL;
}
/* 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).
*/
/* Grab/ungrab routines taken from fvwm */
void
meta_display_grab (MetaDisplay *display)
{
@@ -1568,21 +1552,6 @@ crossing_serial_is_ignored (MetaDisplay *display,
return FALSE;
}
static void
reset_ignored_crossing_serials (MetaDisplay *display)
{
int i;
i = 0;
while (i < N_IGNORED_CROSSING_SERIALS)
{
display->ignored_crossing_serials[i] = 0;
++i;
}
display->ungrab_should_not_cause_focus_window = None;
}
static gboolean
window_raise_with_delay_callback (void *data)
{
@@ -1623,110 +1592,6 @@ window_raise_with_delay_callback (void *data)
return FALSE;
}
static void
meta_display_mouse_mode_focus (MetaDisplay *display,
MetaWindow *window,
guint32 timestamp)
{
if (window->type != META_WINDOW_DESKTOP)
{
meta_topic (META_DEBUG_FOCUS,
"Focusing %s at time %u.\n", window->desc, timestamp);
meta_window_focus (window, timestamp);
if (meta_prefs_get_auto_raise ())
meta_display_queue_autoraise_callback (display, window);
else
meta_topic (META_DEBUG_FOCUS, "Auto raise is disabled\n");
}
else
{
/* In mouse focus mode, we defocus when the mouse *enters*
* the DESKTOP window, instead of defocusing on LeaveNotify.
* This is because having the mouse enter override-redirect
* child windows unfortunately causes LeaveNotify events that
* we can't distinguish from the mouse actually leaving the
* toplevel window as we expect. But, since we filter out
* EnterNotify events on override-redirect windows, this
* alternative mechanism works great.
*/
if (meta_prefs_get_focus_mode() == G_DESKTOP_FOCUS_MODE_MOUSE &&
display->focus_window != NULL)
{
meta_topic (META_DEBUG_FOCUS,
"Unsetting focus from %s due to mouse entering "
"the DESKTOP window\n",
display->focus_window->desc);
meta_display_focus_the_no_focus_window (display,
window->screen,
timestamp);
}
}
}
static gboolean
window_focus_on_pointer_rest_callback (gpointer data)
{
MetaFocusData *focus_data;
MetaDisplay *display;
MetaScreen *screen;
MetaWindow *window;
Window root, child;
double root_x, root_y, x, y;
guint32 timestamp;
XIButtonState buttons;
XIModifierState mods;
XIGroupState group;
focus_data = data;
display = focus_data->display;
screen = focus_data->window->screen;
if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK)
goto out;
meta_error_trap_push (display);
XIQueryPointer (display->xdisplay,
META_VIRTUAL_CORE_POINTER_ID,
screen->xroot,
&root, &child,
&root_x, &root_y, &x, &y,
&buttons, &mods, &group);
meta_error_trap_pop (display);
free (buttons.mask);
if (root_x != focus_data->pointer_x ||
root_y != focus_data->pointer_y)
{
focus_data->pointer_x = root_x;
focus_data->pointer_y = root_y;
return TRUE;
}
/* Explicitly check for the overlay window, as get_focus_window_at_point()
* may return windows that extend underneath the chrome (like
* override-redirect or DESKTOP windows)
*/
if (child == meta_get_overlay_window (screen))
goto out;
window =
meta_stack_get_default_focus_window_at_point (screen->stack,
screen->active_workspace,
None, root_x, root_y);
if (window == NULL)
goto out;
timestamp = meta_display_get_current_time_roundtrip (display);
meta_display_mouse_mode_focus (display, window, timestamp);
out:
display->focus_timeout_id = 0;
return FALSE;
}
void
meta_display_queue_autoraise_callback (MetaDisplay *display,
MetaWindow *window)
@@ -1747,37 +1612,6 @@ meta_display_queue_autoraise_callback (MetaDisplay *display,
display->autoraise_window = window;
}
/* The interval, in milliseconds, we use in focus-follows-mouse
* mode to check whether the pointer has stopped moving after a
* crossing event.
*/
#define FOCUS_TIMEOUT_DELAY 25
static void
meta_display_queue_focus_callback (MetaDisplay *display,
MetaWindow *window,
int pointer_x,
int pointer_y)
{
MetaFocusData *focus_data;
focus_data = g_new (MetaFocusData, 1);
focus_data->display = display;
focus_data->window = window;
focus_data->pointer_x = pointer_x;
focus_data->pointer_y = pointer_y;
if (display->focus_timeout_id != 0)
g_source_remove (display->focus_timeout_id);
display->focus_timeout_id =
g_timeout_add_full (G_PRIORITY_DEFAULT,
FOCUS_TIMEOUT_DELAY,
window_focus_on_pointer_rest_callback,
focus_data,
g_free);
}
#if 0
static void
handle_net_restack_window (MetaDisplay* display,
@@ -1872,11 +1706,9 @@ static void
update_focus_window (MetaDisplay *display,
MetaWindow *window,
Window xwindow,
gulong serial,
gboolean focused_by_us)
gulong serial)
{
display->focus_serial = serial;
display->focused_by_us = focused_by_us;
if (display->focus_xwindow == xwindow)
return;
@@ -1987,8 +1819,7 @@ request_xserver_input_focus_change (MetaDisplay *display,
update_focus_window (display,
meta_window,
xwindow,
serial,
TRUE);
serial);
meta_error_trap_pop (display);
@@ -2102,20 +1933,12 @@ handle_window_focus_event (MetaDisplay *display,
else
g_return_if_reached ();
/* 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))
if (display->server_focus_serial > display->focus_serial)
{
update_focus_window (display,
focus_window,
focus_window ? focus_window->xwindow : None,
display->server_focus_serial,
FALSE);
display->server_focus_serial);
}
}
@@ -2185,8 +2008,7 @@ event_callback (XEvent *event,
display->current_time = event_get_time (display, event);
display->monitor_cache_invalidated = TRUE;
if (display->focused_by_us &&
event->xany.serial > display->focus_serial &&
if (event->xany.serial > display->focus_serial &&
display->focus_window &&
!window_has_xwindow (display->focus_window, display->server_focus_window))
{
@@ -2195,8 +2017,7 @@ 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,
FALSE);
display->server_focus_serial);
}
screen = meta_display_screen_for_root (display, event->xany.window);
@@ -2312,7 +2133,7 @@ event_callback (XEvent *event,
XIEnterEvent *enter_event = (XIEnterEvent *) input_event;
if (window && !window->override_redirect &&
((input_event->evtype == XI_KeyPress) || (input_event->evtype == XI_ButtonPress)))
((input_event->type == XI_KeyPress) || (input_event->type == XI_ButtonPress)))
{
if (CurrentTime == display->current_time)
{
@@ -2423,7 +2244,7 @@ event_callback (XEvent *event,
meta_topic (META_DEBUG_FOCUS,
"Focusing %s due to unmodified button %u press (display.c)\n",
window->desc, device_event->detail);
meta_window_focus (window, device_event->time);
meta_window_focus_implicitly (window, device_event->time);
}
else
/* However, do allow terminals to lose focus due to new
@@ -2567,42 +2388,16 @@ event_callback (XEvent *event,
* avoid races.
*/
if (window && !crossing_serial_is_ignored (display, event->xany.serial) &&
enter_event->mode != XINotifyGrab &&
enter_event->mode != XINotifyGrab &&
enter_event->mode != XINotifyUngrab &&
enter_event->detail != XINotifyInferior &&
meta_display_focus_sentinel_clear (display))
{
switch (meta_prefs_get_focus_mode ())
{
case G_DESKTOP_FOCUS_MODE_SLOPPY:
case G_DESKTOP_FOCUS_MODE_MOUSE:
display->mouse_mode = TRUE;
if (window->type != META_WINDOW_DOCK)
{
meta_topic (META_DEBUG_FOCUS,
"Queuing a focus change for %s due to "
"enter notify with serial %lu at time %lu, "
"and setting display->mouse_mode to TRUE.\n",
window->desc,
event->xany.serial,
enter_event->time);
meta_window_handle_enter (window,
enter_event->time,
enter_event->root_x,
enter_event->root_y);
if (meta_prefs_get_focus_change_on_pointer_rest())
meta_display_queue_focus_callback (display, window,
enter_event->root_x,
enter_event->root_y);
else
meta_display_mouse_mode_focus (display, window,
enter_event->time);
/* stop ignoring stuff */
reset_ignored_crossing_serials (display);
}
break;
case G_DESKTOP_FOCUS_MODE_CLICK:
break;
}
if (window->type == META_WINDOW_DOCK)
meta_window_raise (window);
}
@@ -2782,14 +2577,14 @@ event_callback (XEvent *event,
&& meta_display_screen_for_root (display, event->xmap.event))
{
window = meta_window_new (display, event->xmap.window,
FALSE, META_COMP_EFFECT_CREATE);
FALSE);
}
break;
case MapRequest:
if (window == NULL)
{
window = meta_window_new (display, event->xmaprequest.window,
FALSE, META_COMP_EFFECT_CREATE);
FALSE);
}
/* if frame was receiver it's some malicious send event or something */
else if (!frame_was_receiver && window)
@@ -4028,7 +3823,7 @@ meta_display_begin_grab_op (MetaDisplay *display,
* key grab on the RootWindow.
*/
if (grab_window)
grab_xwindow = meta_window_get_toplevel_xwindow (grab_window);
grab_xwindow = grab_window->frame ? grab_window->frame->xwindow : grab_window->xwindow;
else
grab_xwindow = screen->xroot;

View File

@@ -51,6 +51,9 @@ 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;
@@ -114,6 +117,14 @@ 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)
{
@@ -155,6 +166,8 @@ meta_window_ensure_frame (MetaWindow *window)
/* Move keybindings to frame instead of window */
meta_window_grab_keys (window);
meta_display_ungrab (window->display);
}
void

View File

@@ -41,7 +41,6 @@
#include "ui.h"
#include "frame.h"
#include "place.h"
#include "screen-private.h"
#include <meta/prefs.h>
#include <meta/util.h>
@@ -1278,7 +1277,7 @@ meta_window_grab_keys (MetaWindow *window)
}
meta_window_change_keygrabs (window,
meta_window_get_toplevel_xwindow (window),
window->frame ? window->frame->xwindow : window->xwindow,
TRUE);
window->keys_grabbed = TRUE;
@@ -1579,9 +1578,9 @@ meta_window_grab_all_keys (MetaWindow *window,
meta_topic (META_DEBUG_FOCUS,
"Focusing %s because we're grabbing all its keys\n",
window->desc);
meta_window_focus (window, timestamp);
meta_window_focus_implicitly (window, timestamp);
grabwindow = meta_window_get_toplevel_xwindow (window);
grabwindow = window->frame ? window->frame->xwindow : window->xwindow;
meta_topic (META_DEBUG_KEYBINDINGS,
"Grabbing all keys on window %s\n", window->desc);
@@ -3974,26 +3973,6 @@ handle_move_to_workspace (MetaDisplay *display,
}
}
static void
handle_move_to_monitor (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XIDeviceEvent *event,
MetaKeyBinding *binding,
gpointer dummy)
{
gint which = binding->handler->data;
const MetaMonitorInfo *current, *new;
current = meta_screen_get_monitor_for_window (screen, window);
new = meta_screen_get_monitor_neighbor (screen, current->number, which);
if (new == NULL)
return;
meta_window_move_to_monitor (window, new->number);
}
static void
handle_raise_or_lower (MetaDisplay *display,
MetaScreen *screen,
@@ -4650,34 +4629,6 @@ init_builtin_key_bindings (MetaDisplay *display)
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_DOWN,
handle_move_to_workspace, META_MOTION_DOWN);
add_builtin_keybinding (display,
"move-to-monitor-left",
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_LEFT,
handle_move_to_monitor, META_SCREEN_LEFT);
add_builtin_keybinding (display,
"move-to-monitor-right",
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_RIGHT,
handle_move_to_monitor, META_SCREEN_RIGHT);
add_builtin_keybinding (display,
"move-to-monitor-down",
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_DOWN,
handle_move_to_monitor, META_SCREEN_DOWN);
add_builtin_keybinding (display,
"move-to-monitor-up",
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_UP,
handle_move_to_monitor, META_SCREEN_UP);
add_builtin_keybinding (display,
"raise-or-lower",
common_keybindings,

View File

@@ -453,10 +453,8 @@ 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++)
@@ -695,11 +693,10 @@ 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 (display);
meta_display_grab (meta_get_display ());
/* First compute the new size of the screen (framebuffer) */
width = 0; height = 0;
@@ -793,10 +790,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 (display);
meta_error_trap_push (meta_get_display ());
XRRSetScreenSize (manager_xrandr->xdisplay, DefaultRootWindow (manager_xrandr->xdisplay),
width, height, width_mm, height_mm);
meta_error_trap_pop (display);
meta_error_trap_pop (meta_get_display ());
for (i = 0; i < n_crtcs; i++)
{
@@ -853,7 +850,7 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager,
goto next;
}
meta_error_trap_push (display);
meta_error_trap_push (meta_get_display ());
ok = XRRSetCrtcConfig (manager_xrandr->xdisplay,
manager_xrandr->resources,
(XID)crtc->crtc_id,
@@ -862,7 +859,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 (display);
meta_error_trap_pop (meta_get_display ());
if (ok != Success)
{
@@ -903,11 +900,9 @@ 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,
@@ -933,7 +928,7 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager,
output->is_primary = FALSE;
}
meta_display_ungrab (display);
meta_display_ungrab (meta_get_display ());
}
static void

View File

@@ -691,60 +691,46 @@ static char *
make_display_name (MetaMonitorManager *manager,
MetaOutput *output)
{
char *inches = NULL;
char *vendor_name = NULL;
char *ret;
if (g_str_has_prefix (output->name, "LVDS") ||
g_str_has_prefix (output->name, "eDP"))
{
ret = g_strdup (_("Built-in display"));
goto out;
}
return g_strdup (_("Built-in display"));
if (output->width_mm > 0 && output->height_mm > 0)
if (output->width_mm != -1 && output->height_mm != -1)
{
double d = sqrt (output->width_mm * output->width_mm +
output->height_mm * output->height_mm);
inches = diagonal_to_str (d / 25.4);
}
char *inches = diagonal_to_str (d / 25.4);
char *vendor_name;
char *ret;
if (g_strcmp0 (output->vendor, "unknown") != 0)
{
if (!manager->pnp_ids)
manager->pnp_ids = gnome_pnp_ids_new ();
if (g_strcmp0 (output->vendor, "unknown") != 0)
{
if (!manager->pnp_ids)
manager->pnp_ids = gnome_pnp_ids_new ();
vendor_name = gnome_pnp_ids_get_pnp_id (manager->pnp_ids,
output->vendor);
vendor_name = gnome_pnp_ids_get_pnp_id (manager->pnp_ids,
output->vendor);
if (!vendor_name)
vendor_name = g_strdup (output->vendor);
}
else
{
if (inches != NULL)
vendor_name = g_strdup (_("Unknown"));
ret = g_strdup_printf ("%s %s", vendor_name, inches);
g_free (vendor_name);
}
else
vendor_name = g_strdup (_("Unknown Display"));
}
{
/* 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"'
*/
ret = g_strdup_printf (_("Unknown %s"), inches);
}
if (inches != NULL)
{
/* TRANSLATORS: this is a monitor vendor name, followed by a
* size in inches, like 'Dell 15"'
*/
ret = g_strdup_printf (_("%s %s"), vendor_name, inches);
g_free (inches);
return ret;
}
else
{
ret = g_strdup (vendor_name);
return g_strdup (output->vendor);
}
out:
g_free (inches);
g_free (vendor_name);
return ret;
}
static gboolean

View File

@@ -880,31 +880,83 @@ 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)
{
Window *_children;
Window *children;
int n_children, i;
GList *windows;
GList *list;
meta_display_grab (screen->display);
if (screen->guard_window == None)
screen->guard_window = create_guard_window (screen->display->xdisplay,
screen);
windows = list_windows (screen);
meta_stack_freeze (screen->stack);
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)
for (list = windows; list != NULL; list = list->next)
{
meta_window_new (screen->display, children[i], TRUE,
META_COMP_EFFECT_NONE);
}
WindowInfo *info = list->data;
g_free (children);
meta_window_new_with_attrs (screen->display, info->xwindow, TRUE,
META_COMP_EFFECT_NONE,
&info->attrs);
}
meta_stack_thaw (screen->stack);
g_list_foreach (windows, (GFunc)g_free, NULL);
g_list_free (windows);
meta_display_ungrab (screen->display);
}
/**
@@ -2932,7 +2984,7 @@ meta_screen_show_desktop (MetaScreen *screen,
if (w->screen == screen &&
w->type == META_WINDOW_DESKTOP)
{
meta_window_focus (w, timestamp);
meta_window_focus_explicitly (w, timestamp);
break;
}

View File

@@ -355,9 +355,6 @@ struct _MetaWindow
/* the input shape region for picking */
cairo_region_t *input_region;
/* _NET_WM_WINDOW_OPACITY */
guint opacity;
/* if TRUE, the we have the new form of sync request counter which
* also handles application frames */
guint extended_sync_request_counter : 1;
@@ -490,8 +487,12 @@ struct _MetaWindowClass
MetaWindow* meta_window_new (MetaDisplay *display,
Window xwindow,
gboolean must_be_viewable,
MetaCompEffect effect);
gboolean must_be_viewable);
MetaWindow* meta_window_new_with_attrs (MetaDisplay *display,
Window xwindow,
gboolean must_be_viewable,
MetaCompEffect effect,
XWindowAttributes *attrs);
void meta_window_unmanage (MetaWindow *window,
guint32 timestamp);
void meta_window_calc_showing (MetaWindow *window);
@@ -694,9 +695,13 @@ void meta_window_update_input_region_x11 (MetaWindow *window);
void meta_window_set_shape_region (MetaWindow *window,
cairo_region_t *region);
void meta_window_update_shape_region_x11 (MetaWindow *window);
void meta_window_set_opacity (MetaWindow *window,
guint opacity);
Window meta_window_get_toplevel_xwindow (MetaWindow *window);
void meta_window_handle_enter (MetaWindow *window,
guint32 timestamp,
guint root_x,
guint root_y);
void meta_window_focus_implicitly (MetaWindow *window,
guint32 timestamp);
#endif

View File

@@ -316,9 +316,6 @@ reload_gtk_frame_extents (MetaWindow *window,
{
window->has_custom_frame_extents = FALSE;
}
if (!initial)
meta_window_queue(window, META_QUEUE_MOVE_RESIZE);
}
static void
@@ -1709,20 +1706,6 @@ reload_bypass_compositor (MetaWindow *window,
window->bypass_compositor = requested_value;
}
static void
reload_window_opacity (MetaWindow *window,
MetaPropValue *value,
gboolean initial)
{
int requested_value = 0xFF;
if (value->type != META_PROP_VALUE_INVALID)
requested_value = (int) value->v.cardinal;
meta_window_set_opacity (window, requested_value);
}
#define RELOAD_STRING(var_name, propname) \
static void \
reload_ ## var_name (MetaWindow *window, \
@@ -1825,7 +1808,6 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
{ display->atom__NET_WM_STRUT, META_PROP_VALUE_INVALID, reload_struts, FALSE, FALSE },
{ display->atom__NET_WM_STRUT_PARTIAL, META_PROP_VALUE_INVALID, reload_struts, FALSE, FALSE },
{ display->atom__NET_WM_BYPASS_COMPOSITOR, META_PROP_VALUE_CARDINAL, reload_bypass_compositor, FALSE, FALSE },
{ display->atom__NET_WM_WINDOW_OPACITY, META_PROP_VALUE_CARDINAL, reload_window_opacity, TRUE, TRUE },
{ 0 },
};

View File

@@ -49,6 +49,7 @@
#include "constraints.h"
#include "mutter-enum-types.h"
#include "core.h"
#include <meta/compositor-mutter.h>
#include <X11/Xatom.h>
#include <X11/Xlibint.h> /* For display->resource_mask */
@@ -659,6 +660,53 @@ 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
@@ -769,12 +817,12 @@ meta_window_should_attach_to_parent (MetaWindow *window)
}
MetaWindow*
meta_window_new (MetaDisplay *display,
Window xwindow,
gboolean must_be_viewable,
MetaCompEffect effect)
meta_window_new_with_attrs (MetaDisplay *display,
Window xwindow,
gboolean must_be_viewable,
MetaCompEffect effect,
XWindowAttributes *attrs)
{
XWindowAttributes attrs;
MetaWindow *window;
GSList *tmp;
MetaWorkspace *space;
@@ -783,6 +831,8 @@ meta_window_new (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))
@@ -792,28 +842,12 @@ meta_window_new (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;
@@ -823,14 +857,14 @@ meta_window_new (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 &&
@@ -840,28 +874,34 @@ meta_window_new (MetaDisplay *display,
)
) {
meta_verbose ("Not managing our own windows\n");
goto error;
return NULL;
}
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");
goto error;
return NULL;
}
meta_verbose ("must_be_viewable = %d attrs.map_state = %d (%s)\n",
/* 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",
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;
@@ -874,7 +914,9 @@ meta_window_new (MetaDisplay *display,
(state == IconicState || state == NormalState)))
{
meta_verbose ("Deciding not to manage unmapped or unviewable window 0x%lx\n", xwindow);
goto error;
meta_error_trap_pop (display);
meta_display_ungrab (display);
return NULL;
}
existing_wm_state = state;
@@ -882,26 +924,29 @@ meta_window_new (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). 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.
* 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).
*/
XAddToSaveSet (display->xdisplay, xwindow);
meta_error_trap_push_with_return (display);
XAddToSaveSet (display->xdisplay, xwindow);
meta_error_trap_pop_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 };
@@ -923,11 +968,11 @@ meta_window_new (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;
@@ -943,7 +988,9 @@ meta_window_new (MetaDisplay *display,
{
meta_verbose ("Window 0x%lx disappeared just as we tried to manage it\n",
xwindow);
goto error;
meta_error_trap_pop (display);
meta_display_ungrab (display);
return NULL;
}
@@ -972,22 +1019,22 @@ meta_window_new (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);
@@ -995,9 +1042,9 @@ meta_window_new (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;
@@ -1032,7 +1079,7 @@ meta_window_new (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;
@@ -1155,8 +1202,6 @@ meta_window_new (MetaDisplay *display,
*/
window->stable_sequence = ++display->window_sequence_counter;
window->opacity = 0xFF;
/* assign the window to its group, or create a new group if needed
*/
window->group = NULL;
@@ -1440,6 +1485,7 @@ meta_window_new (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;
@@ -1452,10 +1498,6 @@ meta_window_new (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 () */
@@ -2254,6 +2296,7 @@ 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);
@@ -2306,6 +2349,10 @@ 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)
{
@@ -2378,6 +2425,8 @@ idle_calc_showing (gpointer data)
}
}
meta_display_ungrab (first_window->display);
g_slist_free (copy);
g_slist_free (unplaced);
@@ -3134,7 +3183,7 @@ meta_window_show (MetaWindow *window)
timestamp = meta_display_get_current_time_roundtrip (window->display);
meta_window_focus (window, timestamp);
meta_window_focus_explicitly (window, timestamp);
}
else
{
@@ -3852,10 +3901,8 @@ meta_window_unmaximize_internal (MetaWindow *window,
{
MetaRectangle target_rect;
MetaRectangle work_area;
MetaRectangle old_rect;
meta_window_get_work_area_for_monitor (window, window->monitor->number, &work_area);
meta_window_get_frame_rect (window, &old_rect);
meta_topic (META_DEBUG_WINDOW_OPS,
"Unmaximizing %s%s\n",
@@ -3869,12 +3916,6 @@ meta_window_unmaximize_internal (MetaWindow *window,
window->maximized_vertically =
window->maximized_vertically && !unmaximize_vertically;
/* recalc_window_features() will eventually clear the cached frame
* extents, but we need the correct frame extents in the code below,
* so invalidate the old frame extents manually up front.
*/
meta_window_frame_size_changed (window);
/* Unmaximize to the saved_rect position in the direction(s)
* being unmaximized.
*/
@@ -3919,7 +3960,9 @@ meta_window_unmaximize_internal (MetaWindow *window,
if (window->display->compositor)
{
MetaRectangle new_rect;
MetaRectangle old_rect, new_rect;
meta_window_get_frame_rect (window, &old_rect);
meta_window_move_resize_internal (window,
META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION,
@@ -4182,7 +4225,7 @@ meta_window_shade (MetaWindow *window,
meta_topic (META_DEBUG_FOCUS,
"Re-focusing window %s after shading it\n",
window->desc);
meta_window_focus (window, timestamp);
meta_window_focus_explicitly (window, timestamp);
set_net_wm_state (window);
}
@@ -4206,7 +4249,7 @@ meta_window_unshade (MetaWindow *window,
meta_topic (META_DEBUG_FOCUS,
"Focusing window %s after unshading it\n",
window->desc);
meta_window_focus (window, timestamp);
meta_window_focus_explicitly (window, timestamp);
set_net_wm_state (window);
}
@@ -4305,7 +4348,7 @@ window_activate (MetaWindow *window,
meta_topic (META_DEBUG_FOCUS,
"Focusing window %s due to activation\n",
window->desc);
meta_window_focus (window, timestamp);
meta_window_focus_explicitly (window, timestamp);
meta_window_check_alive (window, timestamp);
}
@@ -4933,11 +4976,6 @@ meta_window_move_resize_internal (MetaWindow *window,
&old_rect,
&new_rect);
/* meta_window_constrain() might have maximized the window after placement,
* changing the borders.
*/
meta_frame_calc_borders (window->frame, &borders);
w = new_rect.width;
h = new_rect.height;
root_x_nw = new_rect.x;
@@ -5727,37 +5765,11 @@ meta_window_get_input_rect (const MetaWindow *window,
*rect = window->rect;
}
static void
get_custom_frame_extents (MetaWindow *window,
GtkBorder *extents)
{
if (!window->has_custom_frame_extents)
return;
*extents = window->custom_frame_extents;
if (META_WINDOW_MAXIMIZED_HORIZONTALLY (window))
{
extents->left = 0;
extents->right = 0;
}
else if (META_WINDOW_TILED_LEFT (window))
extents->left = 0;
else if (META_WINDOW_TILED_RIGHT (window))
extents->right = 0;
if (META_WINDOW_MAXIMIZED_VERTICALLY (window))
{
extents->top = 0;
extents->bottom = 0;
}
}
/**
* meta_window_client_rect_to_frame_rect:
* @window: a #MetaWindow
* @client_rect: client rectangle in root coordinates
* @frame_rect: (out): location to store the computed corresponding frame bounds.
* @frame_rect: client rectangle in root coordinates
* @client_rect: (out): location to store the computed corresponding frame bounds.
*
* Converts a desired bounds of the client window - what is passed to meta_window_move_resize() -
* into the corresponding bounds of the window frame (excluding invisible borders
@@ -5765,13 +5777,13 @@ get_custom_frame_extents (MetaWindow *window,
*/
void
meta_window_client_rect_to_frame_rect (MetaWindow *window,
MetaRectangle *client_rect,
MetaRectangle *frame_rect)
MetaRectangle *frame_rect,
MetaRectangle *client_rect)
{
if (!frame_rect)
if (!client_rect)
return;
*frame_rect = *client_rect;
*client_rect = *frame_rect;
/* The support for G_MAXINT here to mean infinity is a convenience for
* constraints.c:get_size_limits() and not something that we provide
@@ -5782,24 +5794,25 @@ meta_window_client_rect_to_frame_rect (MetaWindow *window,
MetaFrameBorders borders;
meta_frame_calc_borders (window->frame, &borders);
frame_rect->x -= borders.visible.left;
frame_rect->y -= borders.visible.top;
if (frame_rect->width != G_MAXINT)
frame_rect->width += borders.visible.left + borders.visible.right;
if (frame_rect->height != G_MAXINT)
frame_rect->height += borders.visible.top + borders.visible.bottom;
client_rect->x -= borders.visible.left;
client_rect->y -= borders.visible.top;
if (client_rect->width != G_MAXINT)
client_rect->width += borders.visible.left + borders.visible.right;
if (client_rect->height != G_MAXINT)
client_rect->height += borders.visible.top + borders.visible.bottom;
}
else
{
GtkBorder extents = { 0 };
get_custom_frame_extents (window, &extents);
frame_rect->x += extents.left;
frame_rect->y += extents.top;
if (frame_rect->width != G_MAXINT)
frame_rect->width -= extents.left + extents.right;
if (frame_rect->height != G_MAXINT)
frame_rect->height -= extents.top + extents.bottom;
if (window->has_custom_frame_extents)
{
const GtkBorder *extents = &window->custom_frame_extents;
client_rect->x += extents->left;
client_rect->y += extents->top;
if (client_rect->width != G_MAXINT)
client_rect->width -= extents->left + extents->right;
if (client_rect->height != G_MAXINT)
client_rect->height -= extents->top + extents->bottom;
}
}
}
@@ -5834,13 +5847,14 @@ meta_window_frame_rect_to_client_rect (MetaWindow *window,
}
else
{
GtkBorder extents = { 0 };
get_custom_frame_extents (window, &extents);
client_rect->x -= extents.left;
client_rect->y -= extents.top;
client_rect->width += extents.left + extents.right;
client_rect->height += extents.top + extents.bottom;
if (window->has_custom_frame_extents)
{
const GtkBorder *extents = &window->custom_frame_extents;
client_rect->x -= extents->left;
client_rect->y -= extents->top;
client_rect->width += extents->left + extents->right;
client_rect->height += extents->top + extents->bottom;
}
}
}
@@ -5894,7 +5908,7 @@ meta_window_get_frame_rect (const MetaWindow *window,
* area that we or the client adds to the window, or any area that the
* client adds to draw a client-side shadow.
*
* Deprecated: 3.12: Use meta_window_get_frame_rect() instead.
* Deprecated: 3.10: Use meta_window_get_frame_rect() instead.
*/
void
meta_window_get_outer_rect (const MetaWindow *window,
@@ -5958,21 +5972,21 @@ get_modal_transient (MetaWindow *window)
}
/* XXX META_EFFECT_FOCUS */
void
meta_window_focus (MetaWindow *window,
guint32 timestamp)
static void
meta_window_focus_internal (MetaWindow *window,
guint32 timestamp,
gboolean explicit_focus)
{
MetaWindow *modal_transient;
g_return_if_fail (!window->override_redirect);
meta_topic (META_DEBUG_FOCUS,
"Setting input focus to window %s, input: %d take_focus: %d\n",
window->desc, window->input, window->take_focus);
"%s setting input focus to window %s, input: %d take_focus: %d\n",
explicit_focus ? "Explicitly" : "Implicitly", window->desc, window->input, window->take_focus);
if (window->display->grab_window &&
window->display->grab_window->all_keys_grabbed &&
!window->display->grab_window->unmanaging)
window->display->grab_window->all_keys_grabbed)
{
meta_topic (META_DEBUG_FOCUS,
"Current focus window %s has global keygrab, not focusing window %s after all\n",
@@ -6004,15 +6018,16 @@ meta_window_focus (MetaWindow *window,
return;
}
/* For output-only or shaded windows, focus the frame.
* This seems to result in the client window getting key events
* though, so I don't know if it's icccm-compliant.
/* For output-only or shaded windows, focus the frame if it was
* an explicit focus event. This seems to result in the client
* window getting key events though, so I don't know if it's
* icccm-compliant.
*
* Still, we have to do this or keynav breaks for these windows.
*/
if (window->frame &&
(window->shaded ||
!(window->input || window->take_focus)))
(explicit_focus && !window->input && !window->take_focus)))
{
if (window->frame)
{
@@ -6043,25 +6058,6 @@ 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);
@@ -6074,6 +6070,40 @@ meta_window_focus (MetaWindow *window,
/* meta_effect_run_focus(window, NULL, NULL); */
}
/**
* meta_window_focus_explicitly:
* @window: A #MetaWindow
* @timestamp: The timestamp to focus the window with
*
* Explicitly grab the window's focus. This should be used in cases
* where the user wants to focus the window with Alt-Tab, pagers,
* or other means like that, as opposed to simply clicking on the
* window or other focus-modes like focus-follows-mouse.
*/
void
meta_window_focus_explicitly (MetaWindow *window,
guint32 timestamp)
{
meta_window_focus_internal (window, timestamp, TRUE);
}
/**
* meta_window_focus_implicitly:
* @window: A #MetaWindow
* @timestamp: The timestamp to focus the window with
*
* Implicitly focus the window. This should be done if the user
* simply clicks on the window. Most of the time, this should be
* handled by mutter internally, and you should never have to
* call this.
*/
void
meta_window_focus_implicitly (MetaWindow *window,
guint32 timestamp)
{
meta_window_focus_internal (window, timestamp, FALSE);
}
static void
meta_window_change_workspace_without_transients (MetaWindow *window,
MetaWorkspace *workspace)
@@ -11440,18 +11470,184 @@ meta_window_can_close (MetaWindow *window)
return window->has_close_func;
}
Window
meta_window_get_toplevel_xwindow (MetaWindow *window)
static void
reset_ignored_crossing_serials (MetaDisplay *display)
{
return window->frame ? window->frame->xwindow : window->xwindow;
int i;
i = 0;
while (i < N_IGNORED_CROSSING_SERIALS)
{
display->ignored_crossing_serials[i] = 0;
++i;
}
display->ungrab_should_not_cause_focus_window = None;
}
typedef struct
{
MetaWindow *window;
int pointer_x;
int pointer_y;
} MetaFocusData;
static void
mouse_mode_focus (MetaWindow *window,
guint32 timestamp)
{
MetaDisplay *display = window->display;
if (window->type != META_WINDOW_DESKTOP)
{
meta_topic (META_DEBUG_FOCUS,
"Focusing %s at time %u.\n", window->desc, timestamp);
meta_window_focus_implicitly (window, timestamp);
if (meta_prefs_get_auto_raise ())
meta_display_queue_autoraise_callback (display, window);
else
meta_topic (META_DEBUG_FOCUS, "Auto raise is disabled\n");
}
else
{
/* In mouse focus mode, we defocus when the mouse *enters*
* the DESKTOP window, instead of defocusing on LeaveNotify.
* This is because having the mouse enter override-redirect
* child windows unfortunately causes LeaveNotify events that
* we can't distinguish from the mouse actually leaving the
* toplevel window as we expect. But, since we filter out
* EnterNotify events on override-redirect windows, this
* alternative mechanism works great.
*/
if (meta_prefs_get_focus_mode() == G_DESKTOP_FOCUS_MODE_MOUSE &&
display->focus_window != NULL)
{
meta_topic (META_DEBUG_FOCUS,
"Unsetting focus from %s due to mouse entering "
"the DESKTOP window\n",
display->focus_window->desc);
meta_display_focus_the_no_focus_window (display,
window->screen,
timestamp);
}
}
}
static gboolean
window_focus_on_pointer_rest_callback (gpointer data)
{
MetaFocusData *focus_data = data;
MetaWindow *window = focus_data->window;
MetaDisplay *display = window->display;
MetaScreen *screen = window->screen;
Window root, child;
double root_x, root_y, x, y;
guint32 timestamp;
XIButtonState buttons;
XIModifierState mods;
XIGroupState group;
if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK)
goto out;
meta_error_trap_push (display);
XIQueryPointer (display->xdisplay,
META_VIRTUAL_CORE_POINTER_ID,
screen->xroot,
&root, &child,
&root_x, &root_y, &x, &y,
&buttons, &mods, &group);
meta_error_trap_pop (display);
free (buttons.mask);
if (root_x != focus_data->pointer_x ||
root_y != focus_data->pointer_y)
{
focus_data->pointer_x = root_x;
focus_data->pointer_y = root_y;
return TRUE;
}
/* Explicitly check for the overlay window, as get_focus_window_at_point()
* may return windows that extend underneath the chrome (like
* override-redirect or DESKTOP windows)
*/
if (child == meta_get_overlay_window (screen))
goto out;
window =
meta_stack_get_default_focus_window_at_point (screen->stack,
screen->active_workspace,
None, root_x, root_y);
if (window == NULL)
goto out;
timestamp = meta_display_get_current_time_roundtrip (display);
mouse_mode_focus (window, timestamp);
out:
display->focus_timeout_id = 0;
return FALSE;
}
/* The interval, in milliseconds, we use in focus-follows-mouse
* mode to check whether the pointer has stopped moving after a
* crossing event.
*/
#define FOCUS_TIMEOUT_DELAY 25
static void
queue_focus_callback (MetaDisplay *display,
MetaWindow *window,
int pointer_x,
int pointer_y)
{
MetaFocusData *focus_data;
focus_data = g_new (MetaFocusData, 1);
focus_data->window = window;
focus_data->pointer_x = pointer_x;
focus_data->pointer_y = pointer_y;
if (display->focus_timeout_id != 0)
g_source_remove (display->focus_timeout_id);
display->focus_timeout_id =
g_timeout_add_full (G_PRIORITY_DEFAULT,
FOCUS_TIMEOUT_DELAY,
window_focus_on_pointer_rest_callback,
focus_data,
g_free);
}
void
meta_window_set_opacity (MetaWindow *window,
guint opacity)
meta_window_handle_enter (MetaWindow *window,
guint32 timestamp,
guint root_x,
guint root_y)
{
window->opacity = opacity;
MetaDisplay *display = window->display;
if (window->display->compositor)
meta_compositor_window_opacity_changed (window->display->compositor, window);
switch (meta_prefs_get_focus_mode ())
{
case G_DESKTOP_FOCUS_MODE_SLOPPY:
case G_DESKTOP_FOCUS_MODE_MOUSE:
display->mouse_mode = TRUE;
if (window->type != META_WINDOW_DOCK)
{
if (meta_prefs_get_focus_change_on_pointer_rest())
queue_focus_callback (display, window, root_x, root_y);
else
mouse_mode_focus (window, timestamp);
/* stop ignoring stuff */
reset_ignored_crossing_serials (display);
}
break;
case G_DESKTOP_FOCUS_MODE_CLICK:
break;
}
}

View File

@@ -1256,7 +1256,7 @@ meta_workspace_focus_default_window (MetaWorkspace *workspace,
{
meta_topic (META_DEBUG_FOCUS,
"Focusing mouse window %s\n", window->desc);
meta_window_focus (window, timestamp);
meta_window_focus_explicitly (window, timestamp);
}
if (workspace->screen->display->autoraise_window != window &&
@@ -1319,7 +1319,7 @@ focus_ancestor_or_top_window (MetaWorkspace *workspace,
"Focusing %s, ancestor of %s\n",
ancestor->desc, not_this_one->desc);
meta_window_focus (ancestor, timestamp);
meta_window_focus_explicitly (ancestor, timestamp);
/* Also raise the window if in click-to-focus */
if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK)
@@ -1338,7 +1338,7 @@ focus_ancestor_or_top_window (MetaWorkspace *workspace,
meta_topic (META_DEBUG_FOCUS,
"Focusing workspace MRU window %s\n", window->desc);
meta_window_focus (window, timestamp);
meta_window_focus_explicitly (window, timestamp);
/* Also raise the window if in click-to-focus */
if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK)

View File

@@ -179,7 +179,6 @@ item(_NET_WM_BYPASS_COMPOSITOR)
item(_NET_WM_OPAQUE_REGION)
item(_NET_WM_FRAME_DRAWN)
item(_NET_WM_FRAME_TIMINGS)
item(_NET_WM_WINDOW_OPACITY)
#if 0
/* We apparently never use: */

View File

@@ -66,8 +66,6 @@ void meta_compositor_unmanage_screen (MetaCompositor *compositor,
void meta_compositor_window_shape_changed (MetaCompositor *compositor,
MetaWindow *window);
void meta_compositor_window_opacity_changed (MetaCompositor *compositor,
MetaWindow *window);
gboolean meta_compositor_process_event (MetaCompositor *compositor,
XEvent *event,

View File

@@ -243,15 +243,12 @@ void meta_prefs_set_ignore_request_hide_titlebar (gboolean whether);
* @META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_RIGHT: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_UP: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_DOWN: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_MONITOR_LEFT: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_MONITOR_RIGHT: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_MONITOR_UP: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_MONITOR_DOWN: FILLME
* @META_KEYBINDING_ACTION_RAISE_OR_LOWER: FILLME
* @META_KEYBINDING_ACTION_RAISE: FILLME
* @META_KEYBINDING_ACTION_LOWER: FILLME
* @META_KEYBINDING_ACTION_MAXIMIZE_VERTICALLY: FILLME
* @META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY: FILLME
* @META_KEYBINDING_ACTION_ALWAYS_ON_TOP: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_CORNER_NW: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_CORNER_NE: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_CORNER_SW: FILLME
@@ -262,7 +259,6 @@ void meta_prefs_set_ignore_request_hide_titlebar (gboolean whether);
* @META_KEYBINDING_ACTION_MOVE_TO_SIDE_W: FILLME
* @META_KEYBINDING_ACTION_MOVE_TO_CENTER: FILLME
* @META_KEYBINDING_ACTION_OVERLAY_KEY: FILLME
* @META_KEYBINDING_ACTION_ALWAYS_ON_TOP: FILLME
* @META_KEYBINDING_ACTION_LAST: FILLME
*/
/* XXX FIXME This should be x-macroed, but isn't yet because it would be
@@ -340,14 +336,11 @@ typedef enum _MetaKeyBindingAction
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_RIGHT,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_UP,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_DOWN,
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_LEFT,
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_RIGHT,
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_UP,
META_KEYBINDING_ACTION_MOVE_TO_MONITOR_DOWN,
META_KEYBINDING_ACTION_RAISE_OR_LOWER,
META_KEYBINDING_ACTION_RAISE,
META_KEYBINDING_ACTION_LOWER,
META_KEYBINDING_ACTION_MAXIMIZE_VERTICALLY,
META_KEYBINDING_ACTION_ALWAYS_ON_TOP,
META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY,
META_KEYBINDING_ACTION_MOVE_TO_CORNER_NW,
META_KEYBINDING_ACTION_MOVE_TO_CORNER_NE,
@@ -360,7 +353,6 @@ typedef enum _MetaKeyBindingAction
META_KEYBINDING_ACTION_MOVE_TO_CENTER,
META_KEYBINDING_ACTION_OVERLAY_KEY,
META_KEYBINDING_ACTION_ISO_NEXT_GROUP,
META_KEYBINDING_ACTION_ALWAYS_ON_TOP,
META_KEYBINDING_ACTION_LAST
} MetaKeyBindingAction;

View File

@@ -105,8 +105,8 @@ void meta_window_get_frame_rect (const MetaWindow *window, MetaRectangle *rect);
void meta_window_get_outer_rect (const MetaWindow *window, MetaRectangle *rect) G_GNUC_DEPRECATED;
void meta_window_client_rect_to_frame_rect (MetaWindow *window,
MetaRectangle *client_rect,
MetaRectangle *frame_rect);
MetaRectangle *frame_rect,
MetaRectangle *client_rect);
void meta_window_frame_rect_to_client_rect (MetaWindow *window,
MetaRectangle *frame_rect,
MetaRectangle *client_rect);
@@ -227,7 +227,7 @@ void meta_window_stick (MetaWindow *window);
void meta_window_unstick (MetaWindow *window);
void meta_window_kill (MetaWindow *window);
void meta_window_focus (MetaWindow *window,
void meta_window_focus_explicitly (MetaWindow *window,
guint32 timestamp);
void meta_window_check_alive (MetaWindow *window,