Compare commits

..

1 Commits

Author SHA1 Message Date
Jasper St. Pierre
bb9501dbdf compositor: Remove meta_compositor_window_[un]mapped
We no longer unmap the toplevel windows during normal operation. The
toplevel state is tied to the window's lifetime.

Call meta_compositor_add_window / meta_compositor_remove_window instead...
2013-12-09 15:49:50 -05:00
155 changed files with 2463 additions and 2183 deletions

41
COPYING
View File

@@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -303,16 +303,17 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
@@ -335,5 +336,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

52
NEWS
View File

@@ -1,55 +1,3 @@
3.11.5
======
* Fix CSD titlebars being placed off-screen [Jasper; #719772]
* Expose MetaWindow:skip-taskbar property [Florian; #723307]
* Fix legacy tray icons showing up blank [Adel; #721596]
* Fix configuration of cloned monitors [Adel; #710610]
* Misc bug fixes and cleanups [Jasper, Adel, Jonas; #720631, #723468, #723563]
Contributors:
Jonas Ådahl, Marek Ch, Adel Gadllah, Florian Müllner, Jasper St. Pierre
Translations:
Rafael Ferreira [pt_BR], Enrico Nicoletto [pt_BR], Fran Diéguez [gl],
Chao-Hsiung Liao [zh_HK, zh_TW]
3.11.4
======
* Don't leave focus on windows that are being unmanaged [Owen; #711618]
* Reduce server grabs [Daniel Drake; #721345, #721709]
* Improve heuristic to determine display output name [Cosimo Cecchi; #721674]
* Atomically unmaximize both directions [Jasper; #722108]
* Misc bug fixes [Debarshi, Andika; #721517, #721674]
Contributors:
Cosimo Cecchi, Daniel Drake, Debarshi Ray, Jasper St. Pierre,
Andika Triwidada, Owen W. Taylor
Translations:
Rafael Ferreira [pt_BR], Dimitris Spingos [el], Daniel Mustieles [es],
Milo Casagrande [it], Yosef Or Boczko [he]
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], [5])
m4_define([mutter_micro_version], [2])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])
@@ -76,7 +76,7 @@ MUTTER_PC_MODULES="
gsettings-desktop-schemas >= 3.7.3
xcomposite >= 0.2 xfixes xrender xdamage xi >= 1.6.0
$CLUTTER_PACKAGE >= 1.15.90
cogl-1.0 >= 1.17.1
cogl-1.0 >= 1.15.6
upower-glib >= 0.99.0
gnome-desktop-3.0
"

View File

@@ -96,8 +96,6 @@ meta_compositor_hide_window
meta_compositor_switch_workspace
meta_compositor_maximize_window
meta_compositor_unmaximize_window
meta_compositor_window_mapped
meta_compositor_window_unmapped
meta_compositor_sync_window_geometry
meta_compositor_set_updates_frozen
meta_compositor_queue_frame_drawn

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

745
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"

471
po/gl.po

File diff suppressed because it is too large Load Diff

471
po/he.po

File diff suppressed because it is too large Load Diff

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"

File diff suppressed because it is too large Load Diff

View File

@@ -8,18 +8,17 @@
msgid ""
msgstr ""
"Project-Id-Version: metacity 3.3.4\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-02-02 20:44+0800\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-06 16:30+0800\n"
"PO-Revision-Date: 2013-09-06 16:30+0800\n"
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
"Language: zh_TW\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 1.6.3\n"
"X-Generator: Poedit 1.5.5\n"
#: ../src/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@@ -212,7 +211,7 @@ msgstr "檢視分割於右側"
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
#. 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,24 +254,24 @@ msgstr "等待(_W)"
msgid "_Force Quit"
msgstr "強制結束(_F)"
#: ../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 "無法開啟 X Window 畫面‘%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 "
"binding\n"
msgstr "其它程式已經使用了按鍵 %s 加上特殊按鍵 %x 作為按鍵組合\n"
#: ../src/core/keybindings.c:1334
#: ../src/core/keybindings.c:1333
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "「%s」不是有效的捷徑鍵\n"
@@ -312,27 +311,18 @@ msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
msgstr "找不到任何佈景主題!請確定 %s 存在及其中存放了平常使用的佈景主題。\n"
#: ../src/core/monitor.c:702
#: ../src/core/monitor.c:699
msgid "Built-in display"
msgstr "內置顯示"
#: ../src/core/monitor.c:727
#| msgid "Unknown %s"
msgid "Unknown"
msgstr "不明"
#: ../src/core/monitor.c:729
#| msgid "Unknown %s"
msgid "Unknown Display"
msgstr "不明的顯示器"
#. 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:727
#, c-format
msgid "%s %s"
msgstr "%s %s"
msgid "Unknown %s"
msgstr "不明的 %s"
#: ../src/core/mutter.c:40
#, c-format
@@ -387,12 +377,12 @@ msgstr "組態資料庫中的“%s”不是按鍵組合“%s”的有效設定
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 "畫面‘%2$s中的第 %1$d 個螢幕無效\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 --"
@@ -400,18 +390,18 @@ msgid ""
msgstr "畫面‘%2$s中的第 %1$d 個螢幕已經有了視窗管理員;請嘗試使用 --replace 選項來替換目前的視窗管理員。\n"
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
#: ../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 "無法在畫面“%2$s”中的第 %1$d 個螢幕進行視窗管理員選擇程序\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 "畫面“%2$s”中的第 %1$d 個螢幕已經有了視窗總管\n"
#: ../src/core/screen.c:853
#: ../src/core/screen.c:850
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "無法釋放畫面“%2$s”中的第 %1$d 個螢幕\n"
@@ -505,7 +495,7 @@ msgid "Window manager error: "
msgstr "視窗總管錯誤:"
#. first time through
#: ../src/core/window.c:7597
#: ../src/core/window.c:7512
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -519,29 +509,29 @@ msgstr "視窗 %s 將 SM_CLIENT_ID 設定為該視窗本身,而不是 ICCCM
#. * 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:8342
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
"%d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr "視窗 %s 設定了 MWM 提示,表示它不可以調整大小,但又將大小下限定為 %d×%d 及將大小上限定為 %d×%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 "%2$s 指定了無效的 WM_TRANSIENT_FOR 視窗 0x%1$lx。\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 "%2$s 的 WM_TRANSIENT_FOR 視窗 0x%1$lx 會造成迴圈。\n"

View File

@@ -8,18 +8,17 @@
msgid ""
msgstr ""
"Project-Id-Version: metacity 3.3.4\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-02-01 20:42+0800\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-06 16:30+0800\n"
"PO-Revision-Date: 2013-09-04 16:26+0800\n"
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
"Language: zh_TW\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 1.6.3\n"
"X-Generator: Poedit 1.5.5\n"
#: ../src/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@@ -212,7 +211,7 @@ msgstr "檢視分割於右側"
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
#. 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,24 +254,24 @@ msgstr "等待(_W)"
msgid "_Force Quit"
msgstr "強制結束(_F)"
#: ../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 "無法開啟 X Window 畫面‘%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 "
"binding\n"
msgstr "其它程式已經使用了按鍵 %s 加上特殊按鍵 %x 作為按鍵組合\n"
#: ../src/core/keybindings.c:1334
#: ../src/core/keybindings.c:1333
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "「%s」不是有效的捷徑鍵\n"
@@ -312,27 +311,18 @@ msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
msgstr "找不到任何佈景主題!請確定 %s 存在及其中存放了平常使用的佈景主題。\n"
#: ../src/core/monitor.c:702
#: ../src/core/monitor.c:699
msgid "Built-in display"
msgstr "內建顯示"
#: ../src/core/monitor.c:727
#| msgid "Unknown %s"
msgid "Unknown"
msgstr "不明"
#: ../src/core/monitor.c:729
#| msgid "Unknown %s"
msgid "Unknown Display"
msgstr "不明的顯示器"
#. 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:727
#, c-format
msgid "%s %s"
msgstr "%s %s"
msgid "Unknown %s"
msgstr "不明的 %s"
#: ../src/core/mutter.c:40
#, c-format
@@ -387,12 +377,12 @@ msgstr "組態資料庫中的“%s”不是按鍵組合“%s”的有效設定
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 "畫面‘%2$s中的第 %1$d 個螢幕無效\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 --"
@@ -402,18 +392,18 @@ msgstr ""
"換目前的視窗管理員。\n"
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
#: ../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 "無法在畫面“%2$s”中的第 %1$d 個螢幕進行視窗管理員選擇程序\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 "畫面“%2$s”中的第 %1$d 個螢幕已經有了視窗總管\n"
#: ../src/core/screen.c:853
#: ../src/core/screen.c:850
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "無法釋放畫面“%2$s”中的第 %1$d 個螢幕\n"
@@ -507,7 +497,7 @@ msgid "Window manager error: "
msgstr "視窗總管錯誤:"
#. first time through
#: ../src/core/window.c:7597
#: ../src/core/window.c:7512
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -523,7 +513,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:8342
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -532,22 +522,22 @@ msgstr ""
"視窗 %s 設定了 MWM 提示,表示它不可以調整大小,但又將大小下限定為 %d×%d 及將"
"大小上限定為 %d×%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 "%2$s 指定了無效的 WM_TRANSIENT_FOR 視窗 0x%1$lx。\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 "%2$s 的 WM_TRANSIENT_FOR 視窗 0x%1$lx 會造成迴圈。\n"

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "clutter-utils.h"
@@ -93,10 +95,8 @@ meta_actor_vertices_are_untransformed (ClutterVertex *verts,
v3x != v1x || v3y != v2y)
return FALSE;
if (x_origin)
*x_origin = x;
if (y_origin)
*y_origin = y;
*x_origin = x;
*y_origin = y;
return TRUE;
}

View File

@@ -15,7 +15,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef __META_CLUTTER_UTILS_H__

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <clutter/clutter.h>

View File

@@ -15,7 +15,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef __META_COGL_UTILS_H__

View File

@@ -46,8 +46,11 @@ struct _MetaCompScreen
CoglFrameClosure *frame_closure;
/* Used for unredirecting fullscreen windows */
guint disable_unredirect_count;
MetaWindow *unredirected_window;
guint disable_unredirect_count;
MetaWindowActor *unredirected_window;
/* Before we create the output window */
XserverRegion pending_input_region;
gint switch_workspace_in_progress;

View File

@@ -42,15 +42,6 @@
* the call, so it may be necessary to readjust the display based on the
* old_rect to start the animation.
*
* meta_compositor_window_mapped() and meta_compositor_window_unmapped() are
* notifications when the toplevel window (frame or client window) is mapped or
* unmapped. That is, when the result of meta_window_toplevel_is_mapped()
* changes. The main use of this is to drop resources when a window is unmapped.
* A window will always be mapped before meta_compositor_show_window()
* is called and will not be unmapped until after meta_compositor_hide_window()
* is called. If the live_hidden_windows preference is set, windows will never
* be unmapped.
*
* # Containers #
*
* There's two containers in the stage that are used to place window actors, here
@@ -279,14 +270,14 @@ meta_get_window_actors (MetaScreen *screen)
return info->windows;
}
void
meta_set_stage_input_region (MetaScreen *screen,
XserverRegion region)
static void
do_set_stage_input_region (MetaScreen *screen,
XserverRegion region)
{
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdpy = meta_display_get_xdisplay (display);
Window xstage = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage));
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdpy = meta_display_get_xdisplay (display);
Window xstage = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage));
XFixesSetWindowShapeRegion (xdpy, xstage, ShapeInput, 0, 0, region);
@@ -298,6 +289,35 @@ meta_set_stage_input_region (MetaScreen *screen,
XFixesSetWindowShapeRegion (xdpy, info->output, ShapeInput, 0, 0, region);
}
void
meta_set_stage_input_region (MetaScreen *screen,
XserverRegion region)
{
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdpy = meta_display_get_xdisplay (display);
if (info->stage && info->output)
{
do_set_stage_input_region (screen, region);
}
else
{
/* Reset info->pending_input_region if one existed before and set the new
* one to use it later. */
if (info->pending_input_region)
{
XFixesDestroyRegion (xdpy, info->pending_input_region);
info->pending_input_region = None;
}
if (region != None)
{
info->pending_input_region = XFixesCreateRegion (xdpy, NULL, 0);
XFixesCopyRegion (xdpy, info->pending_input_region, region);
}
}
}
void
meta_empty_stage_input_region (MetaScreen *screen)
{
@@ -563,6 +583,14 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
return;
info = g_new0 (MetaCompScreen, 1);
/*
* We use an empty input region for Clutter as a default because that allows
* the user to interact with all the windows displayed on the screen.
* We have to initialize info->pending_input_region to an empty region explicitly,
* because None value is used to mean that the whole screen is an input region.
*/
info->pending_input_region = XFixesCreateRegion (xdisplay, NULL, 0);
info->screen = screen;
meta_screen_set_compositor_data (screen, info);
@@ -636,20 +664,14 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
*/
XFixesSetWindowShapeRegion (xdisplay, info->output, ShapeBounding, 0, 0, None);
info->output = get_output_window (screen);
XReparentWindow (xdisplay, xwin, info->output, 0, 0);
do_set_stage_input_region (screen, info->pending_input_region);
if (info->pending_input_region != None)
{
XFixesDestroyRegion (xdisplay, info->pending_input_region);
info->pending_input_region = None;
}
meta_empty_stage_input_region (screen);
/* Make sure there isn't any left-over output shape on the
* overlay window by setting the whole screen to be an
* output region.
*
* Note: there doesn't seem to be any real chance of that
* because the X server will destroy the overlay window
* when the last client using it exits.
*/
XFixesSetWindowShapeRegion (xdisplay, info->output, ShapeBounding, 0, 0, None);
info->plugin_mgr = meta_plugin_manager_new (screen);
/* Map overlay window before redirecting windows offscreen so we catch their
* contents until we show the stage.
@@ -657,8 +679,6 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
XMapWindow (xdisplay, info->output);
redirect_windows (compositor, screen);
info->plugin_mgr = meta_plugin_manager_new (screen);
}
void
@@ -716,30 +736,6 @@ meta_shape_cow_for_window (MetaScreen *screen,
}
}
static void
set_unredirected_window (MetaCompScreen *info,
MetaWindow *window)
{
if (info->unredirected_window == window)
return;
if (info->unredirected_window != NULL)
{
MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (info->unredirected_window));
meta_window_actor_set_unredirected (window_actor, FALSE);
}
info->unredirected_window = window;
if (info->unredirected_window != NULL)
{
MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (info->unredirected_window));
meta_window_actor_set_unredirected (window_actor, TRUE);
}
meta_shape_cow_for_window (info->screen, info->unredirected_window);
}
void
meta_compositor_add_window (MetaCompositor *compositor,
MetaWindow *window)
@@ -771,8 +767,13 @@ meta_compositor_remove_window (MetaCompositor *compositor,
screen = meta_window_get_screen (window);
info = meta_screen_get_compositor_data (screen);
if (info->unredirected_window == window)
set_unredirected_window (info, NULL);
if (window_actor == info->unredirected_window)
{
meta_window_actor_set_redirected (window_actor, TRUE);
meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (info->unredirected_window)),
NULL);
info->unredirected_window = NULL;
}
meta_window_actor_destroy (window_actor);
}
@@ -1272,30 +1273,6 @@ meta_compositor_sync_stack (MetaCompositor *compositor,
sync_actor_stacking (info);
}
void
meta_compositor_window_mapped (MetaCompositor *compositor,
MetaWindow *window)
{
MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
DEBUG_TRACE ("meta_compositor_window_mapped\n");
if (!window_actor)
return;
meta_window_actor_mapped (window_actor);
}
void
meta_compositor_window_unmapped (MetaCompositor *compositor,
MetaWindow *window)
{
MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
DEBUG_TRACE ("meta_compositor_window_unmapped\n");
if (!window_actor)
return;
meta_window_actor_unmapped (window_actor);
}
void
meta_compositor_sync_window_geometry (MetaCompositor *compositor,
MetaWindow *window,
@@ -1385,6 +1362,7 @@ pre_paint_windows (MetaCompScreen *info)
{
GList *l;
MetaWindowActor *top_window;
MetaWindowActor *expected_unredirected_window = NULL;
if (info->onscreen == NULL)
{
@@ -1402,9 +1380,26 @@ pre_paint_windows (MetaCompScreen *info)
if (meta_window_actor_should_unredirect (top_window) &&
info->disable_unredirect_count == 0)
set_unredirected_window (info, meta_window_actor_get_meta_window (top_window));
else
set_unredirected_window (info, NULL);
expected_unredirected_window = top_window;
if (info->unredirected_window != expected_unredirected_window)
{
if (info->unredirected_window != NULL)
{
meta_window_actor_set_redirected (info->unredirected_window, TRUE);
meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (info->unredirected_window)),
NULL);
}
if (expected_unredirected_window != NULL)
{
meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (top_window)),
meta_window_actor_get_meta_window (top_window));
meta_window_actor_set_redirected (top_window, FALSE);
}
info->unredirected_window = expected_unredirected_window;
}
for (l = info->windows; l; l = l->next)
meta_window_actor_pre_paint (l->data);

View File

@@ -14,7 +14,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Portions adapted from gnome-shell/src/shell-global.c
*/

View File

@@ -14,7 +14,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**

View File

@@ -13,7 +13,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Owen Taylor <otaylor@redhat.com>
@@ -69,7 +71,7 @@ meta_cullable_cull_out_children (MetaCullable *cullable,
clutter_actor_iter_init (&iter, actor);
while (clutter_actor_iter_prev (&iter, &child))
{
float x, y;
int x, y;
if (!CLUTTER_ACTOR_IS_VISIBLE (child))
continue;
@@ -96,11 +98,9 @@ meta_cullable_cull_out_children (MetaCullable *cullable,
if (!META_IS_CULLABLE (child))
continue;
if (!meta_actor_is_untransformed (child, NULL, NULL))
if (!meta_actor_is_untransformed (child, &x, &y))
continue;
clutter_actor_get_position (child, &x, &y);
/* Temporarily move to the coordinate system of the actor */
cairo_region_translate (unobscured_region, - x, - y);
cairo_region_translate (clip_region, - x, - y);

View File

@@ -14,7 +14,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Owen Taylor <otaylor@redhat.com>

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <meta/meta-plugin.h>

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_MODULE_H_

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "config.h"

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_PLUGIN_MANAGER_H_

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef __META_SHADOW_FACTORY_PRIVATE_H__

View File

@@ -13,7 +13,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
@@ -35,7 +37,6 @@
#include <cogl/cogl.h>
#include <cogl/cogl-texture-pixmap-x11.h>
#include <gdk/gdk.h> /* for gdk_rectangle_intersect() */
#include "meta-cullable.h"
static void meta_shaped_texture_dispose (GObject *object);
@@ -55,10 +56,8 @@ static void meta_shaped_texture_get_preferred_height (ClutterActor *self,
static gboolean meta_shaped_texture_get_paint_volume (ClutterActor *self, ClutterPaintVolume *volume);
static void cullable_iface_init (MetaCullableInterface *iface);
G_DEFINE_TYPE_WITH_CODE (MetaShapedTexture, meta_shaped_texture, CLUTTER_TYPE_ACTOR,
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init));
G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture,
CLUTTER_TYPE_ACTOR);
#define META_SHAPED_TEXTURE_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_SHAPED_TEXTURE, \
@@ -110,17 +109,6 @@ meta_shaped_texture_init (MetaShapedTexture *self)
priv->create_mipmaps = TRUE;
}
static void
set_clip_region (MetaShapedTexture *self,
cairo_region_t *clip_region)
{
MetaShapedTexturePrivate *priv = self->priv;
g_clear_pointer (&priv->clip_region, (GDestroyNotify) cairo_region_destroy);
if (clip_region)
priv->clip_region = cairo_region_copy (clip_region);
}
static void
meta_shaped_texture_dispose (GObject *object)
{
@@ -135,7 +123,7 @@ meta_shaped_texture_dispose (GObject *object)
g_clear_pointer (&priv->opaque_region, cairo_region_destroy);
meta_shaped_texture_set_mask_texture (self, NULL);
set_clip_region (self, NULL);
meta_shaped_texture_set_clip_region (self, NULL);
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
}
@@ -266,8 +254,15 @@ meta_shaped_texture_paint (ClutterActor *actor)
filter = COGL_PIPELINE_FILTER_LINEAR;
if (!clutter_actor_is_in_clone_paint (actor) && meta_actor_is_untransformed (actor, NULL, NULL))
filter = COGL_PIPELINE_FILTER_NEAREST;
if (!clutter_actor_is_in_clone_paint (actor))
{
int x_origin, y_origin;
if (meta_actor_is_untransformed (actor,
&x_origin,
&y_origin))
filter = COGL_PIPELINE_FILTER_NEAREST;
}
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
fb = cogl_get_draw_framebuffer ();
@@ -503,6 +498,14 @@ meta_shaped_texture_get_paint_volume (ClutterActor *self,
return clutter_paint_volume_set_from_allocation (volume, self);
}
ClutterActor *
meta_shaped_texture_new (void)
{
ClutterActor *self = g_object_new (META_TYPE_SHAPED_TEXTURE, NULL);
return self;
}
void
meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex,
gboolean create_mipmaps)
@@ -739,6 +742,39 @@ meta_shaped_texture_set_input_shape_region (MetaShapedTexture *stex,
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
}
/**
* meta_shaped_texture_set_clip_region:
* @stex: a #MetaShapedTexture
* @clip_region: the region of the texture that is visible and
* should be painted.
*
* Provides a hint to the texture about what areas of the texture
* are not completely obscured and thus need to be painted. This
* is an optimization and is not supposed to have any effect on
* the output.
*
* Typically a parent container will set the clip region before
* painting its children, and then unset it afterwards.
*/
void
meta_shaped_texture_set_clip_region (MetaShapedTexture *stex,
cairo_region_t *clip_region)
{
MetaShapedTexturePrivate *priv;
g_return_if_fail (META_IS_SHAPED_TEXTURE (stex));
priv = stex->priv;
if (priv->clip_region)
cairo_region_destroy (priv->clip_region);
if (clip_region)
priv->clip_region = cairo_region_copy (clip_region);
else
priv->clip_region = NULL;
}
/**
* meta_shaped_texture_set_opaque_region:
* @stex: a #MetaShapedTexture
@@ -866,43 +902,3 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
return surface;
}
static void
meta_shaped_texture_cull_out (MetaCullable *cullable,
cairo_region_t *unobscured_region,
cairo_region_t *clip_region)
{
MetaShapedTexture *self = META_SHAPED_TEXTURE (cullable);
MetaShapedTexturePrivate *priv = self->priv;
set_clip_region (self, clip_region);
if (clutter_actor_get_paint_opacity (CLUTTER_ACTOR (self)) == 0xff)
{
if (priv->opaque_region)
{
cairo_region_subtract (unobscured_region, priv->opaque_region);
cairo_region_subtract (clip_region, priv->opaque_region);
}
}
}
static void
meta_shaped_texture_reset_culling (MetaCullable *cullable)
{
MetaShapedTexture *self = META_SHAPED_TEXTURE (cullable);
set_clip_region (self, NULL);
}
static void
cullable_iface_init (MetaCullableInterface *iface)
{
iface->cull_out = meta_shaped_texture_cull_out;
iface->reset_culling = meta_shaped_texture_reset_culling;
}
ClutterActor *
meta_shaped_texture_new (void)
{
return g_object_new (META_TYPE_SHAPED_TEXTURE, NULL);
}

View File

@@ -18,7 +18,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
@@ -26,6 +28,41 @@
#include <clutter/clutter.h>
#include "meta-texture-rectangle.h"
CoglTexture *
meta_texture_rectangle_new (unsigned int width,
unsigned int height,
CoglPixelFormat format,
CoglPixelFormat internal_format,
unsigned int rowstride,
const guint8 *data,
GError **error)
{
ClutterBackend *backend =
clutter_get_default_backend ();
CoglContext *context =
clutter_backend_get_cogl_context (backend);
CoglTextureRectangle *tex_rect;
tex_rect = cogl_texture_rectangle_new_with_size (context,
width, height,
internal_format,
error);
if (tex_rect == NULL)
return NULL;
if (data)
cogl_texture_set_region (COGL_TEXTURE (tex_rect),
0, 0, /* src_x/y */
0, 0, /* dst_x/y */
width, height, /* dst_width/height */
width, height, /* width/height */
format,
rowstride,
data);
return COGL_TEXTURE (tex_rect);
}
static void
texture_rectangle_check_cb (CoglTexture *sub_texture,
const float *sub_texture_coords,

View File

@@ -18,7 +18,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef __META_TEXTURE_RECTANGLE_H__
@@ -28,6 +30,15 @@
G_BEGIN_DECLS
CoglTexture *
meta_texture_rectangle_new (unsigned int width,
unsigned int height,
CoglPixelFormat format,
CoglPixelFormat internal_format,
unsigned int rowstride,
const guint8 *data,
GError **error);
gboolean
meta_texture_rectangle_check (CoglTexture *texture);

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <math.h>
@@ -359,10 +361,18 @@ texture_tower_create_texture (MetaTextureTower *tower,
if ((!is_power_of_two (width) || !is_power_of_two (height)) &&
meta_texture_rectangle_check (tower->textures[level - 1]))
{
ClutterBackend *backend = clutter_get_default_backend ();
CoglContext *context = clutter_backend_get_cogl_context (backend);
tower->textures[level] = cogl_texture_rectangle_new_with_size (context, width, height);
tower->textures[level] =
meta_texture_rectangle_new (width, height,
/* data format */
TEXTURE_FORMAT,
/* internal cogl format */
TEXTURE_FORMAT,
/* rowstride */
width * 4,
/* data */
NULL,
/* error */
NULL);
}
else
{

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef __META_TEXTURE_TOWER_H__

View File

@@ -35,13 +35,13 @@ void meta_window_actor_frame_complete (MetaWindowActor *self,
void meta_window_actor_invalidate_shadow (MetaWindowActor *self);
void meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state);
gboolean meta_window_actor_should_unredirect (MetaWindowActor *self);
void meta_window_actor_get_shape_bounds (MetaWindowActor *self,
cairo_rectangle_int_t *bounds);
gboolean meta_window_actor_should_unredirect (MetaWindowActor *self);
void meta_window_actor_set_unredirected (MetaWindowActor *self,
gboolean unredirected);
gboolean meta_window_actor_effect_in_progress (MetaWindowActor *self);
void meta_window_actor_sync_actor_geometry (MetaWindowActor *self,
gboolean did_placement);

View File

@@ -70,6 +70,11 @@ struct _MetaWindowActorPrivate
/* 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 */
cairo_region_t *input_region;
/* The opaque region, from _NET_WM_OPAQUE_REGION, intersected with
* the shape region. */
cairo_region_t *opaque_region;
/* The region we should clip to when painting the shadow */
cairo_region_t *shadow_clip;
@@ -104,7 +109,6 @@ struct _MetaWindowActorPrivate
GList *frames;
guint visible : 1;
guint mapped : 1;
guint argb32 : 1;
guint disposed : 1;
guint redecorating : 1;
@@ -361,8 +365,8 @@ meta_window_actor_constructed (GObject *object)
meta_window_actor_update_opacity (self);
/* Start off with an empty shape region to maintain the invariant
* that it's always set */
/* Start off with an empty region to maintain the invariant that
the shape region is always set */
priv->shape_region = cairo_region_create ();
}
@@ -396,6 +400,8 @@ meta_window_actor_dispose (GObject *object)
g_clear_pointer (&priv->unobscured_region, cairo_region_destroy);
g_clear_pointer (&priv->shape_region, cairo_region_destroy);
g_clear_pointer (&priv->input_region, cairo_region_destroy);
g_clear_pointer (&priv->opaque_region, cairo_region_destroy);
g_clear_pointer (&priv->shadow_clip, cairo_region_destroy);
g_clear_pointer (&priv->shadow_class, g_free);
@@ -687,12 +693,8 @@ meta_window_actor_get_paint_volume (ClutterActor *actor,
gdk_rectangle_union (&bounds, &shadow_bounds, &bounds);
}
if (priv->unobscured_region && !clutter_actor_has_mapped_clones (actor))
{
cairo_rectangle_int_t unobscured_bounds;
cairo_region_get_extents (priv->unobscured_region, &unobscured_bounds);
gdk_rectangle_intersect (&bounds, &unobscured_bounds, &bounds);
}
if (priv->unobscured_region)
cairo_region_intersect_rectangle (priv->unobscured_region, &bounds);
origin.x = bounds.x;
origin.y = bounds.y;
@@ -812,6 +814,59 @@ meta_window_actor_is_destroyed (MetaWindowActor *self)
return self->priv->disposed;
}
gboolean
meta_window_actor_is_override_redirect (MetaWindowActor *self)
{
return meta_window_is_override_redirect (self->priv->window);
}
/**
* meta_window_actor_get_workspace:
* @self: #MetaWindowActor
*
* Returns the index of workspace on which this window is located; if the
* window is sticky, or is not currently located on any workspace, returns -1.
* This function is deprecated and should not be used in newly written code;
* meta_window_get_workspace() instead.
*
* Return value: (transfer none): index of workspace on which this window is
* located.
*/
gint
meta_window_actor_get_workspace (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv;
MetaWorkspace *workspace;
if (!self)
return -1;
priv = self->priv;
if (!priv->window || meta_window_is_on_all_workspaces (priv->window))
return -1;
workspace = meta_window_get_workspace (priv->window);
if (!workspace)
return -1;
return meta_workspace_index (workspace);
}
gboolean
meta_window_actor_showing_on_its_workspace (MetaWindowActor *self)
{
if (!self)
return FALSE;
/* If override redirect: */
if (!self->priv->window)
return TRUE;
return meta_window_showing_on_its_workspace (self->priv->window);
}
static void
meta_window_actor_freeze (MetaWindowActor *self)
{
@@ -884,7 +939,7 @@ meta_window_actor_damage_all (MetaWindowActor *self)
texture = meta_shaped_texture_get_texture (META_SHAPED_TEXTURE (priv->actor));
if (!priv->mapped || priv->needs_pixmap)
if (priv->needs_pixmap)
return;
redraw_queued = meta_shaped_texture_update_area (META_SHAPED_TEXTURE (priv->actor),
@@ -973,7 +1028,7 @@ meta_window_actor_queue_frame_drawn (MetaWindowActor *self,
{
queue_send_frame_messages_timeout (self);
}
else if (priv->mapped && !priv->needs_pixmap)
else
{
const cairo_rectangle_int_t clip = { 0, 0, 1, 1 };
clutter_actor_queue_redraw_with_clip (priv->actor, &clip);
@@ -1005,9 +1060,6 @@ meta_window_actor_queue_create_pixmap (MetaWindowActor *self)
priv->needs_pixmap = TRUE;
if (!priv->mapped)
return;
if (is_frozen (self))
return;
@@ -1246,8 +1298,7 @@ meta_window_actor_should_unredirect (MetaWindowActor *self)
}
void
meta_window_actor_set_unredirected (MetaWindowActor *self,
gboolean unredirected)
meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state)
{
MetaWindow *metaWindow = meta_window_actor_get_meta_window (self);
MetaDisplay *display = meta_window_get_display (metaWindow);
@@ -1255,20 +1306,21 @@ meta_window_actor_set_unredirected (MetaWindowActor *self,
Display *xdisplay = meta_display_get_xdisplay (display);
Window xwin = meta_window_get_toplevel_xwindow (metaWindow);
meta_error_trap_push (display);
if (unredirected)
if (state)
{
XCompositeUnredirectWindow (xdisplay, xwin, CompositeRedirectManual);
meta_error_trap_push (display);
XCompositeRedirectWindow (xdisplay, xwin, CompositeRedirectManual);
meta_error_trap_pop (display);
meta_window_actor_detach (self);
self->priv->unredirected = FALSE;
}
else
{
XCompositeRedirectWindow (xdisplay, xwin, CompositeRedirectManual);
meta_window_actor_detach (self);
meta_error_trap_push (display);
XCompositeUnredirectWindow (xdisplay, xwin, CompositeRedirectManual);
meta_error_trap_pop (display);
self->priv->unredirected = TRUE;
}
self->priv->unredirected = unredirected;
meta_error_trap_pop (display);
}
void
@@ -1285,12 +1337,6 @@ meta_window_actor_destroy (MetaWindowActor *self)
window_type = meta_window_get_window_type (window);
meta_window_set_compositor_private (window, NULL);
if (priv->send_frame_messages_timer != 0)
{
g_source_remove (priv->send_frame_messages_timer);
priv->send_frame_messages_timer = 0;
}
/*
* We remove the window from internal lookup hashes and thus any other
* unmap events etc fail
@@ -1523,10 +1569,6 @@ meta_window_actor_new (MetaWindow *window)
priv->last_width = -1;
priv->last_height = -1;
priv->mapped = meta_window_toplevel_is_mapped (priv->window);
if (priv->mapped)
meta_window_actor_queue_create_pixmap (self);
meta_window_actor_set_updates_frozen (self,
meta_window_updates_are_frozen (priv->window));
@@ -1560,32 +1602,26 @@ meta_window_actor_new (MetaWindow *window)
return self;
}
void
meta_window_actor_mapped (MetaWindowActor *self)
/**
* meta_window_actor_get_obscured_region:
* @self: a #MetaWindowActor
*
* Gets the region that is completely obscured by the window. Coordinates
* are relative to the upper-left of the window.
*
* Return value: (transfer none): the area obscured by the window,
* %NULL is the same as an empty region.
*/
static cairo_region_t *
meta_window_actor_get_obscured_region (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
MetaWindow *window = priv->window;
g_return_if_fail (!priv->mapped);
priv->mapped = TRUE;
meta_window_actor_queue_create_pixmap (self);
}
void
meta_window_actor_unmapped (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
g_return_if_fail (priv->mapped);
priv->mapped = FALSE;
if (meta_window_actor_effect_in_progress (self))
return;
meta_window_actor_detach (self);
priv->needs_pixmap = FALSE;
if (priv->back_pixmap && window->opacity != 0xFF && !priv->window->shaded)
return priv->opaque_region;
else
return NULL;
}
#if 0
@@ -1637,6 +1673,8 @@ see_region (cairo_region_t *region,
*
* Provides a hint as to what areas of the window need to queue
* redraws when damaged. Regions not in @unobscured_region are completely obscured.
* Unlike meta_window_actor_set_clip_region(), the region here
* doesn't take into account any clipping that is in effect while drawing.
*/
void
meta_window_actor_set_unobscured_region (MetaWindowActor *self,
@@ -1653,6 +1691,27 @@ meta_window_actor_set_unobscured_region (MetaWindowActor *self,
priv->unobscured_region = NULL;
}
/**
* meta_window_actor_set_clip_region:
* @self: a #MetaWindowActor
* @clip_region: the region of the screen that isn't completely
* obscured.
*
* Provides a hint as to what areas of the window need to be
* drawn. Regions not in @clip_region are completely obscured or
* not drawn in this frame.
* This will be set before painting then unset afterwards.
*/
static void
meta_window_actor_set_clip_region (MetaWindowActor *self,
cairo_region_t *clip_region)
{
MetaWindowActorPrivate *priv = self->priv;
meta_shaped_texture_set_clip_region (META_SHAPED_TEXTURE (priv->actor),
clip_region);
}
/**
* meta_window_actor_set_clip_region_beneath:
* @self: a #MetaWindowActor
@@ -1691,14 +1750,25 @@ meta_window_actor_cull_out (MetaCullable *cullable,
cairo_region_t *clip_region)
{
MetaWindowActor *self = META_WINDOW_ACTOR (cullable);
MetaWindowActorPrivate *priv = self->priv;
MetaCompScreen *info = meta_screen_get_compositor_data (self->priv->screen);
/* Don't do any culling for the unredirected window */
if (priv->unredirected)
if (self == info->unredirected_window)
return;
meta_window_actor_set_unobscured_region (self, unobscured_region);
meta_cullable_cull_out_children (cullable, unobscured_region, clip_region);
meta_window_actor_set_clip_region (self, clip_region);
if (clutter_actor_get_paint_opacity (CLUTTER_ACTOR (self)) == 0xff)
{
cairo_region_t *obscured_region = meta_window_actor_get_obscured_region (self);
if (obscured_region)
{
cairo_region_subtract (unobscured_region, obscured_region);
cairo_region_subtract (clip_region, obscured_region);
}
}
meta_window_actor_set_clip_region_beneath (self, clip_region);
}
@@ -1708,8 +1778,9 @@ meta_window_actor_reset_culling (MetaCullable *cullable)
MetaWindowActor *self = META_WINDOW_ACTOR (cullable);
MetaWindowActorPrivate *priv = self->priv;
meta_shaped_texture_set_clip_region (META_SHAPED_TEXTURE (priv->actor),
NULL);
g_clear_pointer (&priv->shadow_clip, cairo_region_destroy);
meta_cullable_reset_culling_children (cullable);
}
static void
@@ -1733,9 +1804,6 @@ check_needs_pixmap (MetaWindowActor *self)
if (!priv->needs_pixmap)
return;
if (!priv->mapped)
return;
if (xwindow == meta_screen_get_xroot (screen) ||
xwindow == clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage)))
return;
@@ -1821,9 +1889,6 @@ check_needs_shadow (MetaWindowActor *self)
gboolean should_have_shadow;
gboolean appears_focused;
if (!priv->mapped)
return;
/* Calling meta_window_actor_has_shadow() here at every pre-paint is cheap
* and avoids the need to explicitly handle window type changes, which
* we would do if tried to keep track of when we might be adding or removing
@@ -1927,7 +1992,7 @@ meta_window_actor_process_damage (MetaWindowActor *self,
return;
}
if (!priv->mapped || priv->needs_pixmap)
if (priv->needs_pixmap)
return;
redraw_queued = meta_shaped_texture_update_area (META_SHAPED_TEXTURE (priv->actor),
@@ -2054,18 +2119,12 @@ build_and_scan_frame_mask (MetaWindowActor *self,
if (meta_texture_rectangle_check (paint_tex))
{
ClutterBackend *backend = clutter_get_default_backend ();
CoglContext *context = clutter_backend_get_cogl_context (backend);
mask_texture = COGL_TEXTURE (cogl_texture_rectangle_new_with_size (context, tex_width, tex_height));
cogl_texture_set_components (mask_texture, COGL_TEXTURE_COMPONENTS_A);
cogl_texture_set_region (mask_texture,
0, 0, /* src_x/y */
0, 0, /* dst_x/y */
tex_width, tex_height, /* dst_width/height */
tex_width, tex_height, /* width/height */
COGL_PIXEL_FORMAT_A_8,
stride, mask_data);
mask_texture = meta_texture_rectangle_new (tex_width, tex_height,
COGL_PIXEL_FORMAT_A_8,
COGL_PIXEL_FORMAT_A_8,
stride,
mask_data,
NULL /* error */);
}
else
{
@@ -2163,7 +2222,8 @@ static void
meta_window_actor_update_opaque_region (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
cairo_region_t *opaque_region;
g_clear_pointer (&priv->opaque_region, cairo_region_destroy);
if (priv->argb32 && priv->window->opaque_region != NULL)
{
@@ -2181,17 +2241,17 @@ meta_window_actor_update_opaque_region (MetaWindowActor *self)
* to be undefined, and considered a client bug. In mutter's
* case, graphical glitches will occur.
*/
opaque_region = cairo_region_copy (priv->window->opaque_region);
cairo_region_translate (opaque_region, borders.total.left, borders.total.top);
cairo_region_intersect (opaque_region, priv->shape_region);
priv->opaque_region = cairo_region_copy (priv->window->opaque_region);
cairo_region_translate (priv->opaque_region, borders.total.left, borders.total.top);
cairo_region_intersect (priv->opaque_region, priv->shape_region);
}
else if (priv->argb32)
opaque_region = NULL;
priv->opaque_region = NULL;
else
opaque_region = cairo_region_reference (priv->shape_region);
priv->opaque_region = cairo_region_reference (priv->shape_region);
meta_shaped_texture_set_opaque_region (META_SHAPED_TEXTURE (priv->actor), opaque_region);
cairo_region_destroy (opaque_region);
meta_shaped_texture_set_opaque_region (META_SHAPED_TEXTURE (priv->actor),
priv->opaque_region);
}
static void
@@ -2201,9 +2261,6 @@ check_needs_reshape (MetaWindowActor *self)
MetaFrameBorders borders;
cairo_rectangle_int_t client_area;
if (!priv->mapped)
return;
if (!priv->needs_reshape)
return;

View File

@@ -182,8 +182,9 @@ meta_window_group_paint (ClutterActor *actor)
if (info->unredirected_window != NULL)
{
cairo_rectangle_int_t unredirected_rect;
MetaWindow *window = meta_window_actor_get_meta_window (info->unredirected_window);
meta_window_get_frame_rect (info->unredirected_window, (MetaRectangle *)&unredirected_rect);
meta_window_get_frame_rect (window, (MetaRectangle *)&unredirected_rect);
cairo_region_subtract_rectangle (unobscured_region, &unredirected_rect);
cairo_region_subtract_rectangle (clip_region, &unredirected_rect);
}

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <string.h>

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef __META_WINDOW_SHAPE_H__

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <meta/meta-plugin.h>
@@ -408,11 +410,9 @@ switch_workspace (MetaPlugin *plugin,
MetaWindowActor *window_actor = l->data;
ActorPrivate *apriv = get_actor_private (window_actor);
ClutterActor *actor = CLUTTER_ACTOR (window_actor);
MetaWorkspace *workspace;
gint win_workspace;
workspace = meta_window_get_workspace (meta_window_actor_get_meta_window (window_actor));
win_workspace = meta_workspace_index (workspace);
win_workspace = meta_window_actor_get_workspace (window_actor);
if (win_workspace == to || win_workspace == from)
{

View File

@@ -15,7 +15,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "region-utils.h"

View File

@@ -15,7 +15,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef __META_REGION_UTILS_H__

View File

@@ -15,7 +15,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/* The standard cycle-windows keybinding should be the key above the

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/*

View File

@@ -14,7 +14,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <X11/Xlib.h>

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_BOXES_PRIVATE_H

View File

@@ -25,7 +25,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "boxes-private.h"

View File

@@ -18,7 +18,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
@@ -1353,6 +1355,7 @@ constrain_titlebar_visible (MetaWindow *window,
window->type == META_WINDOW_DOCK ||
window->fullscreen ||
!window->require_titlebar_visible ||
!window->decorated ||
unconstrained_user_action)
return TRUE;

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_CONSTRAINTS_H

View File

@@ -18,7 +18,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_CORE_H

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#define _XOPEN_SOURCE /* for kill() */

View File

@@ -19,7 +19,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DISPLAY_PRIVATE_H
@@ -136,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

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
@@ -916,6 +918,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)
@@ -967,6 +971,8 @@ meta_display_open (void)
meta_idle_monitor_init_dbus ();
meta_display_ungrab (the_display);
/* Done opening new display */
the_display->display_opening = FALSE;
@@ -1211,18 +1217,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)
{
@@ -1870,11 +1865,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;
@@ -1985,8 +1978,7 @@ request_xserver_input_focus_change (MetaDisplay *display,
update_focus_window (display,
meta_window,
xwindow,
serial,
TRUE);
serial);
meta_error_trap_pop (display);
@@ -2100,20 +2092,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);
}
}
@@ -2183,8 +2167,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))
{
@@ -2193,8 +2176,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);
@@ -2780,14 +2762,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)

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_EDGE_RESISTANCE_H

View File

@@ -15,7 +15,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**

View File

@@ -18,7 +18,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
@@ -49,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;
@@ -112,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)
{
@@ -153,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

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_FRAME_PRIVATE_H

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_GROUP_PRIVATE_H

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_GROUP_PROPS_H

View File

@@ -15,7 +15,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_ICON_CACHE_H

View File

@@ -21,7 +21,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_KEYBINDINGS_PRIVATE_H

View File

@@ -18,7 +18,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
@@ -39,7 +41,6 @@
#include "ui.h"
#include "frame.h"
#include "place.h"
#include "screen-private.h"
#include <meta/prefs.h>
#include <meta/util.h>
@@ -3972,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,
@@ -4648,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

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
@@ -285,12 +287,8 @@ event_dispatch (GSource *source,
gpointer user_data)
{
ClutterEvent *event = clutter_event_get ();
if (event)
{
clutter_do_event (event);
clutter_event_free (event);
}
clutter_do_event (event);
return TRUE;
}

View File

@@ -14,7 +14,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Giovanni Campagna <gcampagn@redhat.com>
*/

View File

@@ -14,7 +14,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Giovanni Campagna <gcampagn@redhat.com>
*/
@@ -307,6 +309,7 @@ ensure_xfixes_cursor (MetaCursorTracker *tracker)
cursor_image->width,
cursor_image->height,
CLUTTER_CAIRO_FORMAT_ARGB32,
COGL_PIXEL_FORMAT_ANY,
cursor_image->width * 4, /* stride */
cursor_data,
NULL);

View File

@@ -14,7 +14,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Adapted from gnome-session/gnome-session/gs-idle-monitor.c and
* from gnome-desktop/libgnome-desktop/gnome-idle-monitor.c

View File

@@ -14,7 +14,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Adapted from gnome-session/gnome-session/gs-idle-monitor.c and
* from gnome-desktop/libgnome-desktop/gnome-idle-monitor.c

View File

@@ -13,7 +13,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/* This file is shared between mutter (src/core/meta-xrandr-shared.h)

View File

@@ -20,7 +20,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/*

View File

@@ -29,7 +29,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_MONITOR_PRIVATE_H

View File

@@ -20,7 +20,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "config.h"

View File

@@ -20,7 +20,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "config.h"
@@ -404,7 +406,7 @@ make_logical_config (MetaMonitorManager *manager)
for (j = 0; j < monitor_infos->len; j++)
{
MetaMonitorInfo *info = &g_array_index (monitor_infos, MetaMonitorInfo, j);
MetaMonitorInfo *info = &g_array_index (monitor_infos, MetaMonitorInfo, i);
if (meta_rectangle_equal (&crtc->rect,
&info->rect))
{
@@ -689,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

@@ -14,7 +14,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "config.h"

View File

@@ -19,7 +19,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_PLACE_H

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**

View File

@@ -25,7 +25,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_SCREEN_PRIVATE_H

View File

@@ -19,7 +19,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
@@ -452,9 +454,10 @@ create_guard_window (Display *xdisplay, MetaScreen *screen)
XSetWindowAttributes attributes;
Window guard_window;
gulong create_serial;
attributes.event_mask = NoEventMask;
attributes.override_redirect = True;
attributes.background_pixel = BlackPixel (xdisplay, screen->number);
/* We have to call record_add() after we have the new window ID,
* so save the serial for the CreateWindow request until then */
@@ -467,10 +470,10 @@ create_guard_window (Display *xdisplay, MetaScreen *screen)
screen->rect.width,
screen->rect.height,
0, /* border width */
0, /* depth */
InputOnly, /* class */
CopyFromParent, /* depth */
CopyFromParent, /* class */
CopyFromParent, /* visual */
CWEventMask|CWOverrideRedirect,
CWEventMask|CWOverrideRedirect|CWBackPixel,
&attributes);
/* https://bugzilla.gnome.org/show_bug.cgi?id=710346 */
@@ -877,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);
}
/**

View File

@@ -18,7 +18,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>

View File

@@ -23,7 +23,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_SESSION_H

View File

@@ -29,7 +29,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>

View File

@@ -28,7 +28,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_STACK_TRACKER_H

View File

@@ -22,7 +22,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>

View File

@@ -15,7 +15,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_STACK_H

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "boxes-private.h"

View File

@@ -15,7 +15,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**

View File

@@ -26,7 +26,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_WINDOW_PRIVATE_H
@@ -488,8 +490,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);

View File

@@ -31,7 +31,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#define _GNU_SOURCE

View File

@@ -25,7 +25,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_WINDOW_PROPS_H

View File

@@ -17,7 +17,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**
@@ -74,6 +76,7 @@ static void update_net_frame_extents (MetaWindow *window);
static void recalc_window_type (MetaWindow *window);
static void recalc_window_features (MetaWindow *window);
static void invalidate_work_areas (MetaWindow *window);
static void recalc_window_type (MetaWindow *window);
static void set_wm_state_on_xwindow (MetaDisplay *display,
Window xwindow,
int state);
@@ -172,7 +175,6 @@ enum {
PROP_USER_TIME,
PROP_DEMANDS_ATTENTION,
PROP_URGENT,
PROP_SKIP_TASKBAR,
PROP_MUTTER_HINTS,
PROP_APPEARS_FOCUSED,
PROP_RESIZEABLE,
@@ -306,9 +308,6 @@ meta_window_get_property(GObject *object,
case PROP_URGENT:
g_value_set_boolean (value, win->wm_hints_urgent);
break;
case PROP_SKIP_TASKBAR:
g_value_set_boolean (value, win->skip_taskbar);
break;
case PROP_MUTTER_HINTS:
g_value_set_string (value, win->mutter_hints);
break;
@@ -469,14 +468,6 @@ meta_window_class_init (MetaWindowClass *klass)
FALSE,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_SKIP_TASKBAR,
g_param_spec_boolean ("skip-taskbar",
"Skip taskbar",
"Whether the skip-taskbar flag of WM_HINTS is set",
FALSE,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_MUTTER_HINTS,
g_param_spec_string ("mutter-hints",
@@ -668,6 +659,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
@@ -778,12 +816,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;
@@ -792,6 +830,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))
@@ -801,28 +841,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;
@@ -832,14 +856,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 &&
@@ -849,28 +873,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;
@@ -883,7 +913,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;
@@ -891,26 +923,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 };
@@ -932,11 +967,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;
@@ -952,7 +987,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;
}
@@ -981,22 +1018,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);
@@ -1004,9 +1041,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;
@@ -1041,7 +1078,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;
@@ -1410,9 +1447,6 @@ meta_window_new (MetaDisplay *display,
set_net_wm_state (window);
}
if (screen->display->compositor)
meta_compositor_add_window (screen->display->compositor, window);
/* Sync stack changes */
meta_stack_thaw (window->screen->stack);
@@ -1449,6 +1483,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;
@@ -1461,10 +1496,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 () */
@@ -1638,8 +1669,6 @@ meta_window_unmanage (MetaWindow *window,
if (window->visible_to_compositor)
meta_compositor_hide_window (window->display->compositor, window,
META_COMP_EFFECT_DESTROY);
meta_compositor_remove_window (window->display->compositor, window);
}
if (window->display->window_with_menu == window)
@@ -2263,6 +2292,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);
@@ -2315,6 +2345,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)
{
@@ -2387,6 +2421,8 @@ idle_calc_showing (gpointer data)
}
}
meta_display_ungrab (first_window->display);
g_slist_free (copy);
g_slist_free (unplaced);
@@ -3102,7 +3138,7 @@ meta_window_show (MetaWindow *window)
if (toplevel_now_mapped != toplevel_was_mapped)
{
if (window->display->compositor)
meta_compositor_window_mapped (window->display->compositor, window);
meta_compositor_add_window (window->display->compositor, window);
}
if (!window->visible_to_compositor)
@@ -3251,13 +3287,7 @@ meta_window_hide (MetaWindow *window)
if (toplevel_now_mapped != toplevel_was_mapped)
{
if (window->display->compositor)
{
/* As above, we may be *mapping* live hidden windows */
if (toplevel_now_mapped)
meta_compositor_window_mapped (window->display->compositor, window);
else
meta_compositor_window_unmapped (window->display->compositor, window);
}
meta_compositor_remove_window (window->display->compositor, window);
}
set_net_wm_state (window);
@@ -4942,11 +4972,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;
@@ -5956,8 +5981,7 @@ meta_window_focus (MetaWindow *window,
window->desc, window->input, window->take_focus);
if (window->display->grab_window &&
window->display->grab_window->all_keys_grabbed &&
!window->display->grab_window->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",
@@ -6028,25 +6052,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);
@@ -6871,36 +6876,46 @@ meta_window_client_message (MetaWindow *window,
}
if (first == display->atom__NET_WM_STATE_MAXIMIZED_HORZ ||
second == display->atom__NET_WM_STATE_MAXIMIZED_HORZ ||
first == display->atom__NET_WM_STATE_MAXIMIZED_VERT ||
second == display->atom__NET_WM_STATE_MAXIMIZED_VERT)
second == display->atom__NET_WM_STATE_MAXIMIZED_HORZ)
{
gboolean max;
MetaMaximizeFlags directions = 0;
max = (action == _NET_WM_STATE_ADD ||
(action == _NET_WM_STATE_TOGGLE &&
!window->maximized_horizontally));
if (first == display->atom__NET_WM_STATE_MAXIMIZED_HORZ ||
second == display->atom__NET_WM_STATE_MAXIMIZED_HORZ)
directions |= META_MAXIMIZE_HORIZONTAL;
if (first == display->atom__NET_WM_STATE_MAXIMIZED_VERT ||
second == display->atom__NET_WM_STATE_MAXIMIZED_VERT)
directions |= META_MAXIMIZE_VERTICAL;
if (max && window->has_maximize_func)
{
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_maximize (window, directions);
meta_window_maximize (window, META_MAXIMIZE_HORIZONTAL);
}
else
{
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_unmaximize (window, directions);
meta_window_unmaximize (window, META_MAXIMIZE_HORIZONTAL);
}
}
if (first == display->atom__NET_WM_STATE_MAXIMIZED_VERT ||
second == display->atom__NET_WM_STATE_MAXIMIZED_VERT)
{
gboolean max;
max = (action == _NET_WM_STATE_ADD ||
(action == _NET_WM_STATE_TOGGLE &&
!window->maximized_vertically));
if (max && window->has_maximize_func)
{
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_maximize (window, META_MAXIMIZE_VERTICAL);
}
else
{
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_unmaximize (window, META_MAXIMIZE_VERTICAL);
}
}
@@ -8476,7 +8491,6 @@ recalc_window_features (MetaWindow *window)
gboolean old_has_resize_func;
gboolean old_has_shade_func;
gboolean old_always_sticky;
gboolean old_skip_taskbar;
old_has_close_func = window->has_close_func;
old_has_minimize_func = window->has_minimize_func;
@@ -8484,7 +8498,6 @@ recalc_window_features (MetaWindow *window)
old_has_resize_func = window->has_resize_func;
old_has_shade_func = window->has_shade_func;
old_always_sticky = window->always_sticky;
old_skip_taskbar = window->skip_taskbar;
/* Use MWM hints initially */
window->decorated = window->mwm_decorated;
@@ -8672,9 +8685,6 @@ recalc_window_features (MetaWindow *window)
window->skip_taskbar,
window->skip_pager);
if (old_skip_taskbar != window->skip_taskbar)
g_object_notify (G_OBJECT (window), "skip-taskbar");
/* FIXME:
* Lame workaround for recalc_window_features
* being used overzealously. The fix is to
@@ -9024,7 +9034,7 @@ meta_window_titlebar_is_onscreen (MetaWindow *window)
gboolean is_onscreen;
const int min_height_needed = 8;
const float min_width_percent = 0.5;
const int min_width_percent = 0.5;
const int min_width_absolute = 50;
/* Titlebar can't be offscreen if there is no titlebar... */

View File

@@ -25,7 +25,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_WORKSPACE_PRIVATE_H

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/**

View File

@@ -22,7 +22,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
/***********************************************************

View File

@@ -16,7 +16,9 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_XPROPS_H

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