Compare commits
71 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
27de94b915 | ||
![]() |
9e31f2b1de | ||
![]() |
13ad103823 | ||
![]() |
ff5a73de49 | ||
![]() |
275a6ec63f | ||
![]() |
604da0f6ea | ||
![]() |
72a19dd448 | ||
![]() |
3a73f6b8ec | ||
![]() |
343474a570 | ||
![]() |
91d82bf8c7 | ||
![]() |
ed19060074 | ||
![]() |
f230a67b94 | ||
![]() |
849f101feb | ||
![]() |
f45083ce82 | ||
![]() |
4c143ae9af | ||
![]() |
cd1a1d5778 | ||
![]() |
e28e7a72aa | ||
![]() |
fc9488211f | ||
![]() |
28767c4d34 | ||
![]() |
c6c7b05d7b | ||
![]() |
5526e91b6e | ||
![]() |
9e123695d0 | ||
![]() |
092cc47afc | ||
![]() |
fd20059f68 | ||
![]() |
609aae684f | ||
![]() |
49940877d1 | ||
![]() |
22ae86104b | ||
![]() |
f8dd4c160b | ||
![]() |
11061a23b1 | ||
![]() |
d8b0f213b2 | ||
![]() |
e9fbe4b2c1 | ||
![]() |
edcb351107 | ||
![]() |
0c14640352 | ||
![]() |
cfa30f9876 | ||
![]() |
af60dd3634 | ||
![]() |
ccabce1b34 | ||
![]() |
9915a18810 | ||
![]() |
a78373f324 | ||
![]() |
1d7476a725 | ||
![]() |
e8e78ebfdd | ||
![]() |
b77b0a3d81 | ||
![]() |
95b260f3a9 | ||
![]() |
97a9726845 | ||
![]() |
020aea033c | ||
![]() |
0ac46316af | ||
![]() |
94d47dc25e | ||
![]() |
debf08cac0 | ||
![]() |
ce1393d2d4 | ||
![]() |
fac482c442 | ||
![]() |
ee35540b6e | ||
![]() |
f77507e825 | ||
![]() |
0021efd593 | ||
![]() |
0d955bb873 | ||
![]() |
7fa2e8d2d3 | ||
![]() |
713d94d881 | ||
![]() |
4ecf8964b8 | ||
![]() |
11d044fa6e | ||
![]() |
a2104c5404 | ||
![]() |
1abed05413 | ||
![]() |
1465895ff7 | ||
![]() |
452025e984 | ||
![]() |
d537dd93d5 | ||
![]() |
650a1e807c | ||
![]() |
67f8a33cad | ||
![]() |
ff4f096f1d | ||
![]() |
b5cb353ab5 | ||
![]() |
17a38dfbed | ||
![]() |
f773683601 | ||
![]() |
abeaf828a3 | ||
![]() |
23a8a4201a | ||
![]() |
2d409e5c09 |
18
configure.in
18
configure.in
@@ -1,13 +1,13 @@
|
||||
AC_PREREQ(2.50)
|
||||
|
||||
m4_define([mutter_major_version], [2])
|
||||
m4_define([mutter_minor_version], [29])
|
||||
m4_define([mutter_micro_version], [0])
|
||||
m4_define([mutter_minor_version], [31])
|
||||
m4_define([mutter_micro_version], [4])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
|
||||
m4_define([mutter_plugin_api_version], [2])
|
||||
m4_define([mutter_plugin_api_version], [3])
|
||||
|
||||
AC_INIT([mutter], [mutter_version],
|
||||
[http://bugzilla.gnome.org/enter_bug.cgi?product=mutter])
|
||||
@@ -124,7 +124,7 @@ if test "x$GCC" = "xyes"; then
|
||||
fi
|
||||
changequote([,])dnl
|
||||
|
||||
MUTTER_PC_MODULES='gtk+-2.0 >= 2.10.0 pango >= 1.2.0'
|
||||
MUTTER_PC_MODULES='gtk+-2.0 >= 2.18 pango >= 1.2.0'
|
||||
|
||||
AC_ARG_ENABLE(gconf,
|
||||
AC_HELP_STRING([--disable-gconf],
|
||||
@@ -181,11 +181,11 @@ AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])
|
||||
AM_GLIB_GNU_GETTEXT
|
||||
|
||||
## here we get the flags we'll actually use
|
||||
# GOptionEntry requires glib-2.6.0
|
||||
PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.6.0)
|
||||
# GRegex requires Glib-2.14.0
|
||||
PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.14.0)
|
||||
# gtk_window_set_icon_name requires gtk2+-2.6.0
|
||||
PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-2.0 >= 2.6.0)
|
||||
PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-2.0 >= 2.6.0)
|
||||
PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-2.0 >= 2.18)
|
||||
PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-2.0 >= 2.18)
|
||||
|
||||
# Unconditionally use this dir to avoid a circular dep with gnomecc
|
||||
GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings"
|
||||
@@ -249,7 +249,7 @@ else
|
||||
AC_MSG_ERROR([no. Mutter requires the Xcomposite extension to build.])
|
||||
fi
|
||||
|
||||
CLUTTER_VERSION=1.0.0
|
||||
CLUTTER_VERSION=1.2.0
|
||||
CLUTTER_PACKAGE=clutter-1.0
|
||||
AC_SUBST(CLUTTER_PACKAGE)
|
||||
if $PKG_CONFIG --atleast-version $CLUTTER_VERSION $CLUTTER_PACKAGE ; then
|
||||
|
@@ -4,6 +4,7 @@ of the theme format, and a given theme can support more than one format.
|
||||
Version 1: THEMEDIR/metacity-1/metacity-theme-1.xml
|
||||
(original metacity format)
|
||||
Version 2: THEMEDIR/metacity-1/metacity-theme-2.xml
|
||||
Version 3: THEMEDIR/metacity-1/metacity-theme-3.xml
|
||||
|
||||
The subdirectory name is "metacity-1" in all versions.
|
||||
|
||||
@@ -21,6 +22,41 @@ This document has separate sections for each format version. You may
|
||||
want to read the document in reverse order, since the base features
|
||||
are discussed under version 1.
|
||||
|
||||
New Features in Theme Format Version 3.1
|
||||
========================================
|
||||
|
||||
Additional predefined variables are added for positioning expressions:
|
||||
|
||||
frame_x_center: the X center of the entire frame, with respect to the
|
||||
piece currently being drawn.
|
||||
frame_y_center: the Y center of the entire frame, with respect to the
|
||||
piece currently being drawn.
|
||||
|
||||
The <title/> element now supports an "ellipsize_width" attribute. When
|
||||
specified, this gives a width at which to ellipsize the title. If not
|
||||
specified, the title will simply be clipped to the title area.
|
||||
|
||||
New Features in Theme Format Version 3
|
||||
======================================
|
||||
|
||||
Format version 3 has exactly one new feature; any element in the file
|
||||
can now have a version attribute:
|
||||
|
||||
version="[<|<=|=>|>] MAJOR.MINOR"
|
||||
|
||||
(< and > should be to be entity escaped as < and >). If this
|
||||
version check is not met, then the element and its children will be
|
||||
ignored. This allows having alternate sections of the theme file for
|
||||
older and newer version of the Metacity theme format.
|
||||
|
||||
When placed on the toplevel <metacity_theme> element, an unsatisfied
|
||||
version check will not just cause the contents of the file to be
|
||||
ignored, it will also cause the lookup of a theme file to proceed on
|
||||
and look for an older format 2 or format 1 file. This allows making a
|
||||
metacity-theme-3.xml file that is only used the format version 3.2 or
|
||||
newer is supported, and using metacity-theme-1.xml for older window
|
||||
managers.
|
||||
|
||||
New Features in Theme Format Version 2
|
||||
======================================
|
||||
|
||||
|
343
po/cs.po
343
po/cs.po
@@ -5,13 +5,13 @@
|
||||
# Miloslav Trmac <mitr@volny.cz>, 2002, 2003, 2004, 2005, 2006.
|
||||
# Petr Tomeš <ptomes@gmail.com>, 2006.
|
||||
# Jakub Friedl <jfriedl@suse.cz>, 2006, 2007.
|
||||
# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009.
|
||||
# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-10-10 18:41+0200\n"
|
||||
"PO-Revision-Date: 2009-10-10 18:40+0200\n"
|
||||
"POT-Creation-Date: 2010-03-20 02:52+0100\n"
|
||||
"PO-Revision-Date: 2010-03-20 02:52+0100\n"
|
||||
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
|
||||
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -20,48 +20,53 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Lokalize 1.0\n"
|
||||
|
||||
#: ../src/core/bell.c:302
|
||||
msgid "Bell event"
|
||||
msgstr "Událost zvonku"
|
||||
|
||||
#: ../src/core/core.c:213
|
||||
#, c-format
|
||||
msgid "Unknown window information request: %d"
|
||||
msgstr "Neznámý informační požadavek okna: %d"
|
||||
|
||||
#: ../src/core/delete.c:105
|
||||
#. Translators: %s is a window title
|
||||
#: ../src/core/delete.c:95
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<big><b><tt>%s</tt> is not responding.</b></big>\n"
|
||||
"\n"
|
||||
"<i>You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely.</i>"
|
||||
msgstr ""
|
||||
"<big><b><tt>%s</tt> neodpovídá.</b></big>\n"
|
||||
"\n"
|
||||
"<i>Je možné chvíli počkat, aby aplikace mohla pokračovat, nebo si vynutit "
|
||||
"úplné ukončení aplikace.</i>"
|
||||
msgid "<tt>%s</tt> is not responding."
|
||||
msgstr "<tt>%s</tt> neodpovídá."
|
||||
|
||||
#: ../src/core/delete.c:116
|
||||
#: ../src/core/delete.c:100
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr ""
|
||||
"Je možné chvíli počkat, aby aplikace mohla pokračovat, nebo si vynutit úplné "
|
||||
"ukončení aplikace."
|
||||
|
||||
#: ../src/core/delete.c:109
|
||||
msgid "_Wait"
|
||||
msgstr "_Počkat"
|
||||
|
||||
#: ../src/core/delete.c:116
|
||||
#: ../src/core/delete.c:109
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Vynutit ukončení"
|
||||
|
||||
#: ../src/core/delete.c:217
|
||||
#: ../src/core/delete.c:207
|
||||
#, c-format
|
||||
msgid "Failed to get hostname: %s\n"
|
||||
msgstr "Nelze získat název počítače: %s\n"
|
||||
|
||||
#: ../src/core/display.c:329
|
||||
#: ../src/core/display.c:362
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Schází rozšíření %s vyžadované funkcemi kompozitoru"
|
||||
|
||||
#: ../src/core/display.c:414
|
||||
#: ../src/core/display.c:447
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Nelze otevřít displej X Window System \"%s\"\n"
|
||||
|
||||
#: ../src/core/errors.c:236
|
||||
#: ../src/core/errors.c:233
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Lost connection to the display '%s';\n"
|
||||
@@ -72,12 +77,12 @@ msgstr ""
|
||||
"pravděpodobně byl ukončen server X nebo jste zabili/zrušili\n"
|
||||
"správce oken.\n"
|
||||
|
||||
#: ../src/core/errors.c:243
|
||||
#: ../src/core/errors.c:240
|
||||
#, c-format
|
||||
msgid "Fatal IO error %d (%s) on display '%s'.\n"
|
||||
msgstr "Kritická chyba V/V %d (%s) na displeji \"%s\".\n"
|
||||
|
||||
#: ../src/core/keybindings.c:697
|
||||
#: ../src/core/keybindings.c:708
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
@@ -88,7 +93,7 @@ msgstr ""
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2388
|
||||
#: ../src/core/keybindings.c:2399
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -99,88 +104,95 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2478
|
||||
#: ../src/core/keybindings.c:2489
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "Nebyl definován příkaz %d.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3491
|
||||
#: ../src/core/keybindings.c:3502
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "Nebyl definován příkaz terminálu.\n"
|
||||
|
||||
#: ../src/core/main.c:127
|
||||
#: ../src/core/main.c:130
|
||||
#, c-format
|
||||
msgid ""
|
||||
"mutter %s\n"
|
||||
"Copyright (C) 2001-2008 Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"This is free software; see the source for copying conditions.\n"
|
||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
"PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
"mutter %s\n"
|
||||
"Copyright (C) 2001-2008 Havoc Pennington, Red Hat, Inc. a další.\n"
|
||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc. a další.\n"
|
||||
"Toto je svobodný software; podmínky kopírování a rozšiřování naleznete ve "
|
||||
"zdrojových textech.\n"
|
||||
"Tento software je BEZ JAKÉKOLIV ZÁRUKY; neposkytují se ani záruky "
|
||||
"PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ ÚČEL.\n"
|
||||
|
||||
#: ../src/core/main.c:257
|
||||
#: ../src/core/main.c:261
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Zakáže připojení ke správci sezení"
|
||||
|
||||
#: ../src/core/main.c:263
|
||||
#: ../src/core/main.c:267
|
||||
msgid "Replace the running window manager with Mutter"
|
||||
msgstr "Nahradí běžícího správce oken správcem Mutter"
|
||||
|
||||
#: ../src/core/main.c:269
|
||||
#: ../src/core/main.c:273
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Určení ID správy sezení"
|
||||
|
||||
#: ../src/core/main.c:274
|
||||
#: ../src/core/main.c:278
|
||||
msgid "X Display to use"
|
||||
msgstr "Displej X, který použije"
|
||||
|
||||
#: ../src/core/main.c:280
|
||||
#: ../src/core/main.c:284
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Spustí sezení z uloženého souboru"
|
||||
|
||||
#: ../src/core/main.c:286
|
||||
#: ../src/core/main.c:290
|
||||
msgid "Print version"
|
||||
msgstr "Vypíše verzi"
|
||||
|
||||
#: ../src/core/main.c:292
|
||||
#: ../src/core/main.c:296
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Provede volání X synchronně"
|
||||
|
||||
#: ../src/core/main.c:298
|
||||
#: ../src/core/main.c:302
|
||||
msgid "Turn compositing on"
|
||||
msgstr "Zapnout funkci kompozitoru"
|
||||
|
||||
#: ../src/core/main.c:304
|
||||
#: ../src/core/main.c:308
|
||||
msgid "Turn compositing off"
|
||||
msgstr "Vypnout funkci kompozitoru"
|
||||
|
||||
#: ../src/core/main.c:310
|
||||
#: ../src/core/main.c:314
|
||||
msgid ""
|
||||
"Don't make fullscreen windows that are maximized and have no decorations"
|
||||
msgstr ""
|
||||
"Nevytvářet okna přes celou obrazovku, která jsou maximalizovaná a nemají "
|
||||
"dekorace"
|
||||
|
||||
#: ../src/core/main.c:320
|
||||
msgid "Comma-separated list of compositor plugins"
|
||||
msgstr "Čárkou oddělený seznam zásuvných modulů kompozitoru"
|
||||
|
||||
#: ../src/core/main.c:316
|
||||
#: ../src/core/main.c:326
|
||||
msgid "Whether window popup/frame should be shown when cycling windows."
|
||||
msgstr ""
|
||||
"Zda se má při procházení okny zobrazovat automaticky otevírané okno či "
|
||||
"rámeček okna."
|
||||
|
||||
#: ../src/core/main.c:323
|
||||
#: ../src/core/main.c:333
|
||||
msgid "Internal argument for GObject introspection"
|
||||
msgstr "Vnitřní argument GObject introspection"
|
||||
|
||||
#: ../src/core/main.c:668
|
||||
#: ../src/core/main.c:663
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Nelze prohledat adresář motivů: %s\n"
|
||||
|
||||
#: ../src/core/main.c:684
|
||||
#: ../src/core/main.c:679
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -188,7 +200,7 @@ msgstr ""
|
||||
"Nelze najít motiv! Ujistěte se prosím, že existuje %s a obsahuje obvyklé "
|
||||
"motivy.\n"
|
||||
|
||||
#: ../src/core/main.c:745
|
||||
#: ../src/core/main.c:743
|
||||
#, c-format
|
||||
msgid "Failed to restart: %s\n"
|
||||
msgstr "Nezdařil se restart: %s\n"
|
||||
@@ -204,24 +216,24 @@ msgstr "Nezdařil se restart: %s\n"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:522 ../src/core/prefs.c:683
|
||||
#: ../src/core/prefs.c:529 ../src/core/prefs.c:690
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "Klíč GConf \"%s\" je nastaven na neplatnou hodnotu\n"
|
||||
|
||||
#: ../src/core/prefs.c:609 ../src/core/prefs.c:852
|
||||
#: ../src/core/prefs.c:616 ../src/core/prefs.c:859
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "%d uloženo v klíči GConf %s je mimo rozsah %d až %d\n"
|
||||
|
||||
#: ../src/core/prefs.c:653 ../src/core/prefs.c:730 ../src/core/prefs.c:778
|
||||
#: ../src/core/prefs.c:842 ../src/core/prefs.c:1142 ../src/core/prefs.c:1158
|
||||
#: ../src/core/prefs.c:1175 ../src/core/prefs.c:1191
|
||||
#: ../src/core/prefs.c:660 ../src/core/prefs.c:737 ../src/core/prefs.c:785
|
||||
#: ../src/core/prefs.c:849 ../src/core/prefs.c:1149 ../src/core/prefs.c:1165
|
||||
#: ../src/core/prefs.c:1182 ../src/core/prefs.c:1198
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "Klíč GConf \"%s\" je nastaven na neplatný typ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1282
|
||||
#: ../src/core/prefs.c:1289
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -229,12 +241,12 @@ msgstr ""
|
||||
"Bylo zakázáno obcházení chyb aplikací. Některé aplikace se možná nebudou "
|
||||
"chovat správně.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1353
|
||||
#: ../src/core/prefs.c:1360
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "Nelze analyzovat popis písma \"%s\" v klíči GConf %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1415
|
||||
#: ../src/core/prefs.c:1422
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -243,17 +255,17 @@ msgstr ""
|
||||
"\"%s\" nalezené v databázi nastavení není platnou hodnotou modifikátoru "
|
||||
"tlačítka myši\n"
|
||||
|
||||
#: ../src/core/prefs.c:1839
|
||||
#: ../src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "Chyba při nastavování počtu ploch na %d: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2023 ../src/core/prefs.c:2529
|
||||
#: ../src/core/prefs.c:2028 ../src/core/prefs.c:2531
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Plocha %d"
|
||||
|
||||
#: ../src/core/prefs.c:2056 ../src/core/prefs.c:2234
|
||||
#: ../src/core/prefs.c:2061 ../src/core/prefs.c:2239
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -262,39 +274,39 @@ msgstr ""
|
||||
"\"%s\" nalezené v databázi nastavení není platnou hodnotou klávesové zkratky "
|
||||
"\"%s\"\n"
|
||||
|
||||
#: ../src/core/prefs.c:2610
|
||||
#: ../src/core/prefs.c:2612
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "Chyba při nastavování názvu plochy %d na \"%s\": %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2808
|
||||
#: ../src/core/prefs.c:2816
|
||||
#, c-format
|
||||
msgid "Error setting compositor status: %s\n"
|
||||
msgstr "Chyba při nastavování stavu kompozitoru: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2836
|
||||
#: ../src/core/prefs.c:2845
|
||||
#, c-format
|
||||
msgid "Error setting clutter plugin list: %s\n"
|
||||
msgstr "Chyba při nastavování seznamu zásuvných modulů clutter: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2879
|
||||
#: ../src/core/prefs.c:2889
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr "Chyba při nastavování stavu aktivních oken, která jsou skrytá: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2907
|
||||
#: ../src/core/prefs.c:2917
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr ""
|
||||
"Chyba při nastavování stavu bez automaticky otevíraného okna tabulátorem: %"
|
||||
"s\n"
|
||||
|
||||
#: ../src/core/screen.c:570
|
||||
#: ../src/core/screen.c:577
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Obrazovka %d na displeji \"%s\" je neplatná\n"
|
||||
|
||||
#: ../src/core/screen.c:586
|
||||
#: ../src/core/screen.c:593
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -303,76 +315,70 @@ msgstr ""
|
||||
"Obrazovka %d na displeji \"%s\" již správce oken má; zkuste prosím nahradit "
|
||||
"aktuálního správce oken pomocí přepínače --replace.\n"
|
||||
|
||||
#: ../src/core/screen.c:613
|
||||
#: ../src/core/screen.c:620
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "Nelze získat výběr správce oken na obrazovce %d displeje \"%s\"\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:675
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "Obrazovka %d na displeji \"%s\" již má správce oken\n"
|
||||
|
||||
#: ../src/core/screen.c:880
|
||||
#: ../src/core/screen.c:857
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Nelze uvolnit obrazovku %d na displeji \"%s\"\n"
|
||||
|
||||
#: ../src/core/session.c:851 ../src/core/session.c:858
|
||||
#: ../src/core/session.c:856 ../src/core/session.c:863
|
||||
#, c-format
|
||||
msgid "Could not create directory '%s': %s\n"
|
||||
msgstr "Nelze vytvořit adresář \"%s\": %s\n"
|
||||
|
||||
#: ../src/core/session.c:868
|
||||
#: ../src/core/session.c:873
|
||||
#, c-format
|
||||
msgid "Could not open session file '%s' for writing: %s\n"
|
||||
msgstr "Nelze otevřít soubor sezení \"%s\" k zápisu: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1009
|
||||
#: ../src/core/session.c:1014
|
||||
#, c-format
|
||||
msgid "Error writing session file '%s': %s\n"
|
||||
msgstr "Chyba při zápisu souboru sezení \"%s\": %s\n"
|
||||
|
||||
#: ../src/core/session.c:1014
|
||||
#: ../src/core/session.c:1019
|
||||
#, c-format
|
||||
msgid "Error closing session file '%s': %s\n"
|
||||
msgstr "Chyba při zavírání souboru sezení \"%s\": %s\n"
|
||||
|
||||
#. oh, just give up
|
||||
#: ../src/core/session.c:1107
|
||||
#, c-format
|
||||
msgid "Failed to read saved session file %s: %s\n"
|
||||
msgstr "Chyba při čtení uloženého souboru sezení %s: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1146
|
||||
#: ../src/core/session.c:1149
|
||||
#, c-format
|
||||
msgid "Failed to parse saved session file: %s\n"
|
||||
msgstr "Chyba při analyzování uloženého souboru sezení: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1195
|
||||
#: ../src/core/session.c:1198
|
||||
#, c-format
|
||||
msgid "<mutter_session> attribute seen but we already have the session ID"
|
||||
msgstr "nalezen atribut <mutter_session>, ale ID sezení už k dispozici je"
|
||||
|
||||
#: ../src/core/session.c:1208 ../src/core/session.c:1283
|
||||
#: ../src/core/session.c:1315 ../src/core/session.c:1387
|
||||
#: ../src/core/session.c:1447
|
||||
#: ../src/core/session.c:1211 ../src/core/session.c:1286
|
||||
#: ../src/core/session.c:1318 ../src/core/session.c:1390
|
||||
#: ../src/core/session.c:1450
|
||||
#, c-format
|
||||
msgid "Unknown attribute %s on <%s> element"
|
||||
msgstr "Neznámý atribut %s prvku <%s>"
|
||||
|
||||
#: ../src/core/session.c:1225
|
||||
#: ../src/core/session.c:1228
|
||||
#, c-format
|
||||
msgid "nested <window> tag"
|
||||
msgstr "vnořená značka <window>"
|
||||
|
||||
#: ../src/core/session.c:1467
|
||||
#: ../src/core/session.c:1470
|
||||
#, c-format
|
||||
msgid "Unknown element %s"
|
||||
msgstr "Neznámý prvek %s"
|
||||
|
||||
#: ../src/core/session.c:1818
|
||||
#: ../src/core/session.c:1822
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
@@ -380,39 +386,39 @@ msgstr ""
|
||||
"Tato okna nepodporují "ukládání aktuálního nastavení" a po vašem "
|
||||
"příštím přihlášení je budete muset spustit ručně."
|
||||
|
||||
#: ../src/core/util.c:106
|
||||
#: ../src/core/util.c:104
|
||||
#, c-format
|
||||
msgid "Failed to open debug log: %s\n"
|
||||
msgstr "Nelze otevřít ladicí záznam: %s\n"
|
||||
|
||||
#: ../src/core/util.c:116
|
||||
#: ../src/core/util.c:114
|
||||
#, c-format
|
||||
msgid "Failed to fdopen() log file %s: %s\n"
|
||||
msgstr "Nelze provést fdopen() soubor záznamu %s: %s\n"
|
||||
|
||||
#: ../src/core/util.c:122
|
||||
#: ../src/core/util.c:120
|
||||
#, c-format
|
||||
msgid "Opened log file %s\n"
|
||||
msgstr "Otevřen soubor záznamu %s\n"
|
||||
|
||||
#: ../src/core/util.c:141 ../src/tools/mutter-message.c:176
|
||||
#: ../src/core/util.c:139 ../src/tools/mutter-message.c:176
|
||||
#, c-format
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter bylo přeloženo bez podpory podrobného režimu\n"
|
||||
|
||||
#: ../src/core/util.c:241
|
||||
#: ../src/core/util.c:239
|
||||
msgid "Window manager: "
|
||||
msgstr "Správce oken: "
|
||||
|
||||
#: ../src/core/util.c:393
|
||||
#: ../src/core/util.c:391
|
||||
msgid "Bug in window manager: "
|
||||
msgstr "Chyba ve správci oken: "
|
||||
|
||||
#: ../src/core/util.c:426
|
||||
#: ../src/core/util.c:424
|
||||
msgid "Window manager warning: "
|
||||
msgstr "Varování správce oken: "
|
||||
|
||||
#: ../src/core/util.c:454
|
||||
#: ../src/core/util.c:452
|
||||
msgid "Window manager error: "
|
||||
msgstr "Chyba správce oken: "
|
||||
|
||||
@@ -424,7 +430,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6098
|
||||
#: ../src/core/window.c:6217
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -440,7 +446,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:6761
|
||||
#: ../src/core/window.c:6880
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -460,7 +466,7 @@ msgstr "Aplikace nastavila neplatný _NET_WM_PID %lu\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1419
|
||||
#: ../src/core/window-props.c:1435
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Neplatné okno WM_TRANSIENT_FOR 0x%lx specifikováno pro %s.\n"
|
||||
@@ -480,12 +486,12 @@ msgstr ""
|
||||
"To je pravděpodobně chyba aplikace, nikoliv správce oken.\n"
|
||||
"Okno má nadpis=\"%s\", třída=\"%s\", název=\"%s\".\n"
|
||||
|
||||
#: ../src/core/xprops.c:401
|
||||
#: ../src/core/xprops.c:411
|
||||
#, c-format
|
||||
msgid "Property %s on window 0x%lx contained invalid UTF-8\n"
|
||||
msgstr "Vlastnost %s okna 0x%lx obsahovala neplatné UTF-8\n"
|
||||
|
||||
#: ../src/core/xprops.c:484
|
||||
#: ../src/core/xprops.c:494
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"
|
||||
@@ -1300,7 +1306,7 @@ msgstr "Souřadnicový výraz zřejmě nemá žádné operátory nebo operandy"
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Motiv obsahoval výraz, který způsobil chybu: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4187
|
||||
#: ../src/ui/theme.c:4203
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1309,25 +1315,25 @@ msgstr ""
|
||||
"U tohoto stylu rámu musí být zadáno <button function=\"%s\" state=\"%s\" "
|
||||
"draw_ops=\"cokoliv\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:4695 ../src/ui/theme.c:4720
|
||||
#: ../src/ui/theme.c:4711 ../src/ui/theme.c:4736
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"Chybí <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"cokoliv\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:4764
|
||||
#: ../src/ui/theme.c:4780
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Nelze načíst motiv \"%s\": %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4894 ../src/ui/theme.c:4901 ../src/ui/theme.c:4908
|
||||
#: ../src/ui/theme.c:4915 ../src/ui/theme.c:4922
|
||||
#: ../src/ui/theme.c:4910 ../src/ui/theme.c:4917 ../src/ui/theme.c:4924
|
||||
#: ../src/ui/theme.c:4931 ../src/ui/theme.c:4938
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Není nastaveno <%s> motivu \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:4930
|
||||
#: ../src/ui/theme.c:4946
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1336,7 +1342,7 @@ msgstr ""
|
||||
"U typu okna \"%s\" motivu \"%s\" není nastaven typ rámu, přidejte prosím "
|
||||
"prvek <window type=\"%s\" style_set=\"cokoliv\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5383 ../src/ui/theme.c:5445 ../src/ui/theme.c:5508
|
||||
#: ../src/ui/theme.c:5389 ../src/ui/theme.c:5451 ../src/ui/theme.c:5514
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@@ -1344,7 +1350,7 @@ msgstr ""
|
||||
"Uživatelem definované konstanty musí začínat velkým písmenem; \"%s\" toto "
|
||||
"nesplňuje"
|
||||
|
||||
#: ../src/ui/theme.c:5391 ../src/ui/theme.c:5453 ../src/ui/theme.c:5516
|
||||
#: ../src/ui/theme.c:5397 ../src/ui/theme.c:5459 ../src/ui/theme.c:5522
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Konstanta \"%s\" již byla definována"
|
||||
@@ -1465,10 +1471,10 @@ msgid "Window type \"%s\" has already been assigned a style set"
|
||||
msgstr "Typu okna \"%s\" již byla přiřazena sada stylů"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1229 ../src/ui/theme-parser.c:1293
|
||||
#: ../src/ui/theme-parser.c:1519 ../src/ui/theme-parser.c:2732
|
||||
#: ../src/ui/theme-parser.c:2778 ../src/ui/theme-parser.c:2926
|
||||
#: ../src/ui/theme-parser.c:3118 ../src/ui/theme-parser.c:3156
|
||||
#: ../src/ui/theme-parser.c:3194 ../src/ui/theme-parser.c:3232
|
||||
#: ../src/ui/theme-parser.c:1519 ../src/ui/theme-parser.c:2740
|
||||
#: ../src/ui/theme-parser.c:2786 ../src/ui/theme-parser.c:2934
|
||||
#: ../src/ui/theme-parser.c:3126 ../src/ui/theme-parser.c:3164
|
||||
#: ../src/ui/theme-parser.c:3202 ../src/ui/theme-parser.c:3240
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed below <%s>"
|
||||
msgstr "Prvek <%s> není povolen pod <%s>"
|
||||
@@ -1497,108 +1503,108 @@ msgstr "Poměr stran \"%s\" není znám"
|
||||
msgid "Border \"%s\" is unknown"
|
||||
msgstr "Okraj \"%s\" není znám"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1776
|
||||
#: ../src/ui/theme-parser.c:1784
|
||||
#, c-format
|
||||
msgid "No \"start_angle\" or \"from\" attribute on element <%s>"
|
||||
msgstr "Chybí atribut \"start_angle\" nebo \"from\" v prvku <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1783
|
||||
#: ../src/ui/theme-parser.c:1791
|
||||
#, c-format
|
||||
msgid "No \"extent_angle\" or \"to\" attribute on element <%s>"
|
||||
msgstr "Chybí atribut \"extent_angle\" nebo \"to\" v prvku <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2023
|
||||
#: ../src/ui/theme-parser.c:2031
|
||||
#, c-format
|
||||
msgid "Did not understand value \"%s\" for type of gradient"
|
||||
msgstr "Nerozuměno hodnotě \"%s\" typu přechodu"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2101 ../src/ui/theme-parser.c:2476
|
||||
#: ../src/ui/theme-parser.c:2109 ../src/ui/theme-parser.c:2484
|
||||
#, c-format
|
||||
msgid "Did not understand fill type \"%s\" for <%s> element"
|
||||
msgstr "Nerozuměno typu výplně \"%s\" prvku <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2268 ../src/ui/theme-parser.c:2351
|
||||
#: ../src/ui/theme-parser.c:2414
|
||||
#: ../src/ui/theme-parser.c:2276 ../src/ui/theme-parser.c:2359
|
||||
#: ../src/ui/theme-parser.c:2422
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" for <%s> element"
|
||||
msgstr "Nerozuměno stavu \"%s\" prvku <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2278 ../src/ui/theme-parser.c:2361
|
||||
#: ../src/ui/theme-parser.c:2286 ../src/ui/theme-parser.c:2369
|
||||
#, c-format
|
||||
msgid "Did not understand shadow \"%s\" for <%s> element"
|
||||
msgstr "Nerozuměno stínu \"%s\" prvku <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2288
|
||||
#: ../src/ui/theme-parser.c:2296
|
||||
#, c-format
|
||||
msgid "Did not understand arrow \"%s\" for <%s> element"
|
||||
msgstr "Nerozuměno šipce \"%s\" prvku <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2588 ../src/ui/theme-parser.c:2684
|
||||
#: ../src/ui/theme-parser.c:2596 ../src/ui/theme-parser.c:2692
|
||||
#, c-format
|
||||
msgid "No <draw_ops> called \"%s\" has been defined"
|
||||
msgstr "Nebyly definovány žádné <draw_ops> nazvané \"%s\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:2600 ../src/ui/theme-parser.c:2696
|
||||
#: ../src/ui/theme-parser.c:2608 ../src/ui/theme-parser.c:2704
|
||||
#, c-format
|
||||
msgid "Including draw_ops \"%s\" here would create a circular reference"
|
||||
msgstr "Vložení draw_ops \"%s\" na tomto místě by vytvořilo zacyklený odkaz"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2811
|
||||
#: ../src/ui/theme-parser.c:2819
|
||||
#, c-format
|
||||
msgid "Unknown position \"%s\" for frame piece"
|
||||
msgstr "Neznámá pozice položky rámu \"%s\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:2819
|
||||
#: ../src/ui/theme-parser.c:2827
|
||||
#, c-format
|
||||
msgid "Frame style already has a piece at position %s"
|
||||
msgstr "Styl rámu již má položku na pozici %s"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2836 ../src/ui/theme-parser.c:2911
|
||||
#: ../src/ui/theme-parser.c:2844 ../src/ui/theme-parser.c:2919
|
||||
#, c-format
|
||||
msgid "No <draw_ops> with the name \"%s\" has been defined"
|
||||
msgstr "Nebyly definované žádné <draw_ops> s názvem \"%s\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:2865
|
||||
#: ../src/ui/theme-parser.c:2873
|
||||
#, c-format
|
||||
msgid "Unknown function \"%s\" for button"
|
||||
msgstr "Neznámá funkce tlačítka \"%s\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:2874
|
||||
#: ../src/ui/theme-parser.c:2882
|
||||
#, c-format
|
||||
msgid "Button function \"%s\" does not exist in this version (%d, need %d)"
|
||||
msgstr "Funkce tlačítka \"%s\" v této verzi neexistuje (%d, potřeba je %d)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2886
|
||||
#: ../src/ui/theme-parser.c:2894
|
||||
#, c-format
|
||||
msgid "Unknown state \"%s\" for button"
|
||||
msgstr "Neznámý stav tlačítka \"%s\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:2894
|
||||
#: ../src/ui/theme-parser.c:2902
|
||||
#, c-format
|
||||
msgid "Frame style already has a button for function %s state %s"
|
||||
msgstr "Styl rámu již má tlačítko funkce %s stavu %s"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2965
|
||||
#: ../src/ui/theme-parser.c:2973
|
||||
#, c-format
|
||||
msgid "\"%s\" is not a valid value for focus attribute"
|
||||
msgstr "\"%s\" není platná hodnota atributu focus"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2974
|
||||
#: ../src/ui/theme-parser.c:2982
|
||||
#, c-format
|
||||
msgid "\"%s\" is not a valid value for state attribute"
|
||||
msgstr "\"%s\" není platná hodnota atributu state"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2984
|
||||
#: ../src/ui/theme-parser.c:2992
|
||||
#, c-format
|
||||
msgid "A style called \"%s\" has not been defined"
|
||||
msgstr "Nebyl definován styl \"%s\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:3005 ../src/ui/theme-parser.c:3028
|
||||
#: ../src/ui/theme-parser.c:3013 ../src/ui/theme-parser.c:3036
|
||||
#, c-format
|
||||
msgid "\"%s\" is not a valid value for resize attribute"
|
||||
msgstr "\"%s\" není platná hodnota atributu resize"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3039
|
||||
#: ../src/ui/theme-parser.c:3047
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Should not have \"resize\" attribute on <%s> element for maximized/shaded "
|
||||
@@ -1607,23 +1613,23 @@ msgstr ""
|
||||
"Atribut \"resize\" by neměl být na prvku <%s> maximalizovaného/svinutého "
|
||||
"stavu"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3053
|
||||
#: ../src/ui/theme-parser.c:3061
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Should not have \"resize\" attribute on <%s> element for maximized states"
|
||||
msgstr "Atribut \"resize\" by neměl být na prvku <%s> maximalizovaného stavu"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3067 ../src/ui/theme-parser.c:3089
|
||||
#: ../src/ui/theme-parser.c:3075 ../src/ui/theme-parser.c:3097
|
||||
#, c-format
|
||||
msgid "Style has already been specified for state %s resize %s focus %s"
|
||||
msgstr "U state %s resize %s focus %s již byl definován styl"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3078 ../src/ui/theme-parser.c:3100
|
||||
#: ../src/ui/theme-parser.c:3086 ../src/ui/theme-parser.c:3108
|
||||
#, c-format
|
||||
msgid "Style has already been specified for state %s focus %s"
|
||||
msgstr "U state %s focus %s již byl definován styl"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3139
|
||||
#: ../src/ui/theme-parser.c:3147
|
||||
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)"
|
||||
@@ -1631,7 +1637,7 @@ msgstr ""
|
||||
"Nelze mít dvě draw_ops u prvku <piece> (motiv definoval atribut draw_ops i "
|
||||
"prvek <draw_ops>, nebo definoval dva prvky)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3177
|
||||
#: ../src/ui/theme-parser.c:3185
|
||||
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)"
|
||||
@@ -1639,7 +1645,7 @@ msgstr ""
|
||||
"Nelze mít dvě draw_ops u prvku <button> (motiv definoval atribut draw_ops i "
|
||||
"prvek <draw_ops>, nebo definoval dva prvky)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3215
|
||||
#: ../src/ui/theme-parser.c:3223
|
||||
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)"
|
||||
@@ -1647,78 +1653,65 @@ msgstr ""
|
||||
"Nelze mít dvě draw_ops u prvku <menu_icon> (motiv definoval atribut draw_ops "
|
||||
"i prvek <draw_ops>, nebo definoval dva prvky)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3263
|
||||
#: ../src/ui/theme-parser.c:3271
|
||||
#, c-format
|
||||
msgid "Outermost element in theme must be <metacity_theme> not <%s>"
|
||||
msgstr "Vnější prvek motivu musí být <metacity_theme>, nikoliv <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3283
|
||||
#: ../src/ui/theme-parser.c:3291
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Element <%s> is not allowed inside a name/author/date/description element"
|
||||
msgstr "Prvek <%s> není dovolen v prvku name/author/date/description"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3288
|
||||
#: ../src/ui/theme-parser.c:3296
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a <constant> element"
|
||||
msgstr "Prvek <%s> není dovolen v prvku <constant>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3300
|
||||
#: ../src/ui/theme-parser.c:3308
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Element <%s> is not allowed inside a distance/border/aspect_ratio element"
|
||||
msgstr "Prvek <%s> není dovolen v prvku distance/border/aspect_ratio"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3322
|
||||
#: ../src/ui/theme-parser.c:3330
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a draw operation element"
|
||||
msgstr "Prvek <%s> není dovolen v prvku operace kreslení"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3332 ../src/ui/theme-parser.c:3362
|
||||
#: ../src/ui/theme-parser.c:3367 ../src/ui/theme-parser.c:3372
|
||||
#: ../src/ui/theme-parser.c:3340 ../src/ui/theme-parser.c:3370
|
||||
#: ../src/ui/theme-parser.c:3375 ../src/ui/theme-parser.c:3380
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a <%s> element"
|
||||
msgstr "Prvek <%s> není dovolen v prvku <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3594
|
||||
#: ../src/ui/theme-parser.c:3602
|
||||
msgid "No draw_ops provided for frame piece"
|
||||
msgstr "U položky rámu neposkytnuty draw_ops"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3609
|
||||
#: ../src/ui/theme-parser.c:3617
|
||||
msgid "No draw_ops provided for button"
|
||||
msgstr "U tlačítka neposkytnuty draw_ops"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3661
|
||||
#: ../src/ui/theme-parser.c:3669
|
||||
#, c-format
|
||||
msgid "No text is allowed inside element <%s>"
|
||||
msgstr "V prvku <%s> není dovolen žádný text"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3716
|
||||
msgid "<name> specified twice for this theme"
|
||||
msgstr "<name> u tohoto motivu definováno dvakrát"
|
||||
#: ../src/ui/theme-parser.c:3724 ../src/ui/theme-parser.c:3736
|
||||
#: ../src/ui/theme-parser.c:3748 ../src/ui/theme-parser.c:3760
|
||||
#: ../src/ui/theme-parser.c:3772
|
||||
#, c-format
|
||||
msgid "<%s> specified twice for this theme"
|
||||
msgstr "<%s> u tohoto motivu definováno dvakrát"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3727
|
||||
msgid "<author> specified twice for this theme"
|
||||
msgstr "<author> u tohoto motivu definováno dvakrát"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3738
|
||||
msgid "<copyright> specified twice for this theme"
|
||||
msgstr "<copyright> u tohoto motivu definováno dvakrát"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3749
|
||||
msgid "<date> specified twice for this theme"
|
||||
msgstr "<date> u tohoto motivu definováno dvakrát"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3760
|
||||
msgid "<description> specified twice for this theme"
|
||||
msgstr "<description> u tohoto motivu definováno dvakrát"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4027
|
||||
#: ../src/ui/theme-parser.c:4040
|
||||
#, c-format
|
||||
msgid "Failed to find a valid file for theme %s\n"
|
||||
msgstr "Nelze nalézt platný soubor motivu %s\n"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4083
|
||||
#: ../src/ui/theme-parser.c:4096
|
||||
#, c-format
|
||||
msgid "Theme file %s did not contain a root <metacity_theme> element"
|
||||
msgstr "Soubor motivu %s neobsahoval kořenový prvek <metacity_theme>"
|
||||
@@ -1920,6 +1913,21 @@ msgstr "Hodnota y byla %d, bylo očekáváno %d"
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "Zpracováno %d výrazů souřadnic za %g sekund (průměr %g sekund)\n"
|
||||
|
||||
#~ msgid "Failed to read saved session file %s: %s\n"
|
||||
#~ msgstr "Chyba při čtení uloženého souboru sezení %s: %s\n"
|
||||
|
||||
#~ msgid "<author> specified twice for this theme"
|
||||
#~ msgstr "<author> u tohoto motivu definováno dvakrát"
|
||||
|
||||
#~ msgid "<copyright> specified twice for this theme"
|
||||
#~ msgstr "<copyright> u tohoto motivu definováno dvakrát"
|
||||
|
||||
#~ msgid "<date> specified twice for this theme"
|
||||
#~ msgstr "<date> u tohoto motivu definováno dvakrát"
|
||||
|
||||
#~ msgid "<description> specified twice for this theme"
|
||||
#~ msgstr "<description> u tohoto motivu definováno dvakrát"
|
||||
|
||||
#~ msgid "Desktop"
|
||||
#~ msgstr "Pracovní prostředí"
|
||||
|
||||
@@ -2396,9 +2404,6 @@ msgstr "Zpracováno %d výrazů souřadnic za %g sekund (průměr %g sekund)\n"
|
||||
#~ msgid "Window title font"
|
||||
#~ msgstr "Písmo nadpisu oken"
|
||||
|
||||
#~ msgid "\"%s\" is not responding."
|
||||
#~ msgstr "\"%s\" neodpovídá."
|
||||
|
||||
#~ msgid "Title"
|
||||
#~ msgstr "Nadpis"
|
||||
|
||||
|
267
po/es.po
267
po/es.po
@@ -12,8 +12,8 @@ msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&component=general\n"
|
||||
"POT-Creation-Date: 2010-02-11 18:07+0000\n"
|
||||
"PO-Revision-Date: 2010-02-15 11:30+0100\n"
|
||||
"POT-Creation-Date: 2010-04-13 17:54+0000\n"
|
||||
"PO-Revision-Date: 2010-04-14 19:51+0200\n"
|
||||
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -31,18 +31,12 @@ msgid "Unknown window information request: %d"
|
||||
msgstr "Petición de información de ventana desconocida: %d"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: ../src/core/delete.c:94
|
||||
#: ../src/core/delete.c:95
|
||||
#, c-format
|
||||
#| msgid "\"%s\" is not responding."
|
||||
msgid "<tt>%s</tt> is not responding."
|
||||
msgstr "<tt>%s</tt> no está respondiendo."
|
||||
|
||||
#: ../src/core/delete.c:99
|
||||
#| msgid ""
|
||||
#| "<big><b><tt>%s</tt> is not responding.</b></big>\n"
|
||||
#| "\n"
|
||||
#| "<i>You may choose to wait a short while for it to continue or force the "
|
||||
#| "application to quit entirely.</i>"
|
||||
#: ../src/core/delete.c:100
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@@ -50,15 +44,15 @@ msgstr ""
|
||||
"Puede elegir esperar un rato para ver si continua o forzar la aplicación "
|
||||
"para cerrarla completamente."
|
||||
|
||||
#: ../src/core/delete.c:108
|
||||
#: ../src/core/delete.c:109
|
||||
msgid "_Wait"
|
||||
msgstr "_Esperar"
|
||||
|
||||
#: ../src/core/delete.c:108
|
||||
#: ../src/core/delete.c:109
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forzar la salida"
|
||||
|
||||
#: ../src/core/delete.c:206
|
||||
#: ../src/core/delete.c:207
|
||||
#, c-format
|
||||
msgid "Failed to get hostname: %s\n"
|
||||
msgstr "Ocurrió un error al obtener el nombre del host: %s\n"
|
||||
@@ -89,7 +83,7 @@ msgstr ""
|
||||
msgid "Fatal IO error %d (%s) on display '%s'.\n"
|
||||
msgstr "Error fatal de E/S %d (%s) en la pantalla «%s».\n"
|
||||
|
||||
#: ../src/core/keybindings.c:697
|
||||
#: ../src/core/keybindings.c:708
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
@@ -101,7 +95,7 @@ msgstr ""
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2388
|
||||
#: ../src/core/keybindings.c:2399
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -112,24 +106,18 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2478
|
||||
#: ../src/core/keybindings.c:2489
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "No ha sido definido ningún comando %d.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3491
|
||||
#: ../src/core/keybindings.c:3502
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "No ha sido definido ningún comando de terminal.\n"
|
||||
|
||||
#: ../src/core/main.c:130
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "mutter %s\n"
|
||||
#| "Copyright (C) 2001-2008 Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
#| "This is free software; see the source for copying conditions.\n"
|
||||
#| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
#| "PARTICULAR PURPOSE.\n"
|
||||
msgid ""
|
||||
"mutter %s\n"
|
||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
@@ -199,12 +187,12 @@ msgstr ""
|
||||
msgid "Internal argument for GObject introspection"
|
||||
msgstr "Argumento interno para introspección de GObject"
|
||||
|
||||
#: ../src/core/main.c:662
|
||||
#: ../src/core/main.c:663
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Falló al inspeccionar el directorio de temas: %s\n"
|
||||
|
||||
#: ../src/core/main.c:678
|
||||
#: ../src/core/main.c:679
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -212,7 +200,7 @@ msgstr ""
|
||||
"No se ha podido encontrar un tema. Asegúrese de que %s existe y contiene los "
|
||||
"temas usuales.\n"
|
||||
|
||||
#: ../src/core/main.c:742
|
||||
#: ../src/core/main.c:743
|
||||
#, c-format
|
||||
msgid "Failed to restart: %s\n"
|
||||
msgstr "No se pudo reiniciar: %s\n"
|
||||
@@ -228,25 +216,37 @@ msgstr "No se pudo reiniciar: %s\n"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:525 ../src/core/prefs.c:686
|
||||
#: ../src/core/prefs.c:542 ../src/core/prefs.c:703
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "La clave GConf «%s» está configurada con un valor inválido\n"
|
||||
|
||||
#: ../src/core/prefs.c:612 ../src/core/prefs.c:855
|
||||
#: ../src/core/prefs.c:629 ../src/core/prefs.c:872
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr ""
|
||||
"%d almacenado en la clave de GConf %s está fuera de rango %d hasta %d\n"
|
||||
|
||||
#: ../src/core/prefs.c:656 ../src/core/prefs.c:733 ../src/core/prefs.c:781
|
||||
#: ../src/core/prefs.c:845 ../src/core/prefs.c:1145 ../src/core/prefs.c:1161
|
||||
#: ../src/core/prefs.c:1178 ../src/core/prefs.c:1194
|
||||
#: ../src/core/prefs.c:673 ../src/core/prefs.c:750 ../src/core/prefs.c:798
|
||||
#: ../src/core/prefs.c:862 ../src/core/prefs.c:1319 ../src/core/prefs.c:1335
|
||||
#: ../src/core/prefs.c:1352 ../src/core/prefs.c:1368
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "La clave GConf «%s» está configurada con un tipo inválido\n"
|
||||
|
||||
#: ../src/core/prefs.c:1285
|
||||
#: ../src/core/prefs.c:1198
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr ""
|
||||
"La clave de GConf %s ya está en uso y no se puede usar para sobreescribir %"
|
||||
"s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1257
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "No se puede sobreescribir la clave de GConf, no se encontró %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1459
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -254,14 +254,14 @@ msgstr ""
|
||||
"Los arreglos para aplicaciones rotas se han deshabilitado. Algunas "
|
||||
"aplicaciones podrían no comportarse correctamente.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1356
|
||||
#: ../src/core/prefs.c:1530
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr ""
|
||||
"No se ha podido interpretar la descripción de la tipografía «%s» de la clave "
|
||||
"GConf %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1418
|
||||
#: ../src/core/prefs.c:1592
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -270,18 +270,18 @@ msgstr ""
|
||||
"«%s» encontrado en la base de datos de configuración no es un valor válido "
|
||||
"para el modificador del botón del ratón\n"
|
||||
|
||||
#: ../src/core/prefs.c:1845
|
||||
#: ../src/core/prefs.c:2019
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr ""
|
||||
"Ocurrió un error configurando la número de espacios de trabajo para %d: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2005 ../src/core/prefs.c:2511
|
||||
#: ../src/core/prefs.c:2201 ../src/core/prefs.c:2703
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Área de trabajo %d"
|
||||
|
||||
#: ../src/core/prefs.c:2038 ../src/core/prefs.c:2216
|
||||
#: ../src/core/prefs.c:2233 ../src/core/prefs.c:2411
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -290,29 +290,29 @@ msgstr ""
|
||||
"«%s» encontrado en la base de datos de configuración no es un valor válido "
|
||||
"para la combinación de teclas «%s»\n"
|
||||
|
||||
#: ../src/core/prefs.c:2592
|
||||
#: ../src/core/prefs.c:2784
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr ""
|
||||
"Ocurrió un error al establecer el nombre del área de trabajo %d como «%s»: %"
|
||||
"s \n"
|
||||
|
||||
#: ../src/core/prefs.c:2796
|
||||
#: ../src/core/prefs.c:2988
|
||||
#, c-format
|
||||
msgid "Error setting compositor status: %s\n"
|
||||
msgstr "Error al establecer el estado del compositor: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2824
|
||||
#: ../src/core/prefs.c:3017
|
||||
#, c-format
|
||||
msgid "Error setting clutter plugin list: %s\n"
|
||||
msgstr "Error al establecer la lista de complementos de «Clutter»: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2867
|
||||
#: ../src/core/prefs.c:3061
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr "Error al establecer el estado de vida de las ventanas ocultas: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2895
|
||||
#: ../src/core/prefs.c:3089
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr ""
|
||||
@@ -451,7 +451,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6183
|
||||
#: ../src/core/window.c:6217
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -467,7 +467,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:6846
|
||||
#: ../src/core/window.c:6880
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -1403,69 +1403,69 @@ msgstr "La constante «%s» ya ha sido definida"
|
||||
#. Translators: This means that an attribute which should have been found
|
||||
#. * on an XML element was not in fact found.
|
||||
#.
|
||||
#: ../src/ui/theme-parser.c:202
|
||||
#: ../src/ui/theme-parser.c:236
|
||||
#, c-format
|
||||
msgid "No \"%s\" attribute on element <%s>"
|
||||
msgstr "El atributo «%s» no está definido en el elemento <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:231 ../src/ui/theme-parser.c:249
|
||||
#: ../src/ui/theme-parser.c:265 ../src/ui/theme-parser.c:283
|
||||
#, c-format
|
||||
msgid "Line %d character %d: %s"
|
||||
msgstr "Línea %d carácter %d: %s"
|
||||
|
||||
#: ../src/ui/theme-parser.c:413
|
||||
#: ../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:437 ../src/ui/theme-parser.c:480
|
||||
#: ../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 inválido en el elemento <%s> en este contexto"
|
||||
|
||||
#: ../src/ui/theme-parser.c:522
|
||||
#: ../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:531 ../src/ui/theme-parser.c:586
|
||||
#: ../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:541
|
||||
#: ../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:549
|
||||
#: ../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:577 ../src/ui/theme-parser.c:693
|
||||
#: ../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:608 ../src/ui/theme-parser.c:636
|
||||
#: ../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:663
|
||||
#: ../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:726
|
||||
#: ../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:791
|
||||
#: ../src/ui/theme-parser.c:863
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,"
|
||||
@@ -1474,59 +1474,59 @@ msgstr ""
|
||||
"Escala de título inválida «%s» (debe ser una de xx-small,x-small,small,medium,"
|
||||
"large,x-large,xx-large)\n"
|
||||
|
||||
#: ../src/ui/theme-parser.c:936 ../src/ui/theme-parser.c:999
|
||||
#: ../src/ui/theme-parser.c:1033 ../src/ui/theme-parser.c:1136
|
||||
#: ../src/ui/theme-parser.c:1008 ../src/ui/theme-parser.c:1071
|
||||
#: ../src/ui/theme-parser.c:1105 ../src/ui/theme-parser.c:1208
|
||||
#, c-format
|
||||
msgid "<%s> name \"%s\" used a second time"
|
||||
msgstr "<%s> nombre «%s» usado una segunda vez"
|
||||
|
||||
#: ../src/ui/theme-parser.c:948 ../src/ui/theme-parser.c:1045
|
||||
#: ../src/ui/theme-parser.c:1148
|
||||
#: ../src/ui/theme-parser.c:1020 ../src/ui/theme-parser.c:1117
|
||||
#: ../src/ui/theme-parser.c:1220
|
||||
#, c-format
|
||||
msgid "<%s> parent \"%s\" has not been defined"
|
||||
msgstr "El <%s> padre «%s» no ha sido definido"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1058
|
||||
#: ../src/ui/theme-parser.c:1130
|
||||
#, 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:1071
|
||||
#: ../src/ui/theme-parser.c:1143
|
||||
#, 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:1113
|
||||
#: ../src/ui/theme-parser.c:1185
|
||||
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:1180
|
||||
#: ../src/ui/theme-parser.c:1252
|
||||
#, c-format
|
||||
msgid "Unknown type \"%s\" on <%s> element"
|
||||
msgstr "Tipo «%s» desconocido en el elemento <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1191
|
||||
#: ../src/ui/theme-parser.c:1263
|
||||
#, c-format
|
||||
msgid "Unknown style_set \"%s\" on <%s> element"
|
||||
msgstr "style_set «%s» desconocido en el elemento <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1199
|
||||
#: ../src/ui/theme-parser.c:1271
|
||||
#, 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:1229 ../src/ui/theme-parser.c:1293
|
||||
#: ../src/ui/theme-parser.c:1519 ../src/ui/theme-parser.c:2740
|
||||
#: ../src/ui/theme-parser.c:2786 ../src/ui/theme-parser.c:2934
|
||||
#: ../src/ui/theme-parser.c:3126 ../src/ui/theme-parser.c:3164
|
||||
#: ../src/ui/theme-parser.c:3202 ../src/ui/theme-parser.c:3240
|
||||
#: ../src/ui/theme-parser.c:1301 ../src/ui/theme-parser.c:1365
|
||||
#: ../src/ui/theme-parser.c:1591 ../src/ui/theme-parser.c:2812
|
||||
#: ../src/ui/theme-parser.c:2858 ../src/ui/theme-parser.c:3006
|
||||
#: ../src/ui/theme-parser.c:3198 ../src/ui/theme-parser.c:3236
|
||||
#: ../src/ui/theme-parser.c:3274 ../src/ui/theme-parser.c:3312
|
||||
#, 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:1343 ../src/ui/theme-parser.c:1357
|
||||
#: ../src/ui/theme-parser.c:1402
|
||||
#: ../src/ui/theme-parser.c:1415 ../src/ui/theme-parser.c:1429
|
||||
#: ../src/ui/theme-parser.c:1474
|
||||
msgid ""
|
||||
"Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio\" "
|
||||
"for buttons"
|
||||
@@ -1534,123 +1534,123 @@ msgstr ""
|
||||
"No se puede especificar ambos «button_width»/«button_height» y «aspect ratio» "
|
||||
"para los botones"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1366
|
||||
#: ../src/ui/theme-parser.c:1438
|
||||
#, c-format
|
||||
msgid "Distance \"%s\" is unknown"
|
||||
msgstr "La distancia «%s» es desconocida"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1411
|
||||
#: ../src/ui/theme-parser.c:1483
|
||||
#, c-format
|
||||
msgid "Aspect ratio \"%s\" is unknown"
|
||||
msgstr "La proporción «%s» es desconocido"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1473
|
||||
#: ../src/ui/theme-parser.c:1545
|
||||
#, c-format
|
||||
msgid "Border \"%s\" is unknown"
|
||||
msgstr "El borde «%s» es desconocido"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1784
|
||||
#: ../src/ui/theme-parser.c:1856
|
||||
#, 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:1791
|
||||
#: ../src/ui/theme-parser.c:1863
|
||||
#, 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:2031
|
||||
#: ../src/ui/theme-parser.c:2103
|
||||
#, 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:2109 ../src/ui/theme-parser.c:2484
|
||||
#: ../src/ui/theme-parser.c:2181 ../src/ui/theme-parser.c:2556
|
||||
#, 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:2276 ../src/ui/theme-parser.c:2359
|
||||
#: ../src/ui/theme-parser.c:2422
|
||||
#: ../src/ui/theme-parser.c:2348 ../src/ui/theme-parser.c:2431
|
||||
#: ../src/ui/theme-parser.c:2494
|
||||
#, 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:2286 ../src/ui/theme-parser.c:2369
|
||||
#: ../src/ui/theme-parser.c:2358 ../src/ui/theme-parser.c:2441
|
||||
#, 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:2296
|
||||
#: ../src/ui/theme-parser.c:2368
|
||||
#, 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:2596 ../src/ui/theme-parser.c:2692
|
||||
#: ../src/ui/theme-parser.c:2668 ../src/ui/theme-parser.c:2764
|
||||
#, 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:2608 ../src/ui/theme-parser.c:2704
|
||||
#: ../src/ui/theme-parser.c:2680 ../src/ui/theme-parser.c:2776
|
||||
#, 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:2819
|
||||
#: ../src/ui/theme-parser.c:2891
|
||||
#, c-format
|
||||
msgid "Unknown position \"%s\" for frame piece"
|
||||
msgstr "Posición desconocida «%s» para la pieza del marco"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2827
|
||||
#: ../src/ui/theme-parser.c:2899
|
||||
#, 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:2844 ../src/ui/theme-parser.c:2919
|
||||
#: ../src/ui/theme-parser.c:2916 ../src/ui/theme-parser.c:2991
|
||||
#, 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:2873
|
||||
#: ../src/ui/theme-parser.c:2945
|
||||
#, c-format
|
||||
msgid "Unknown function \"%s\" for button"
|
||||
msgstr "Función desconocida «%s» para el botón"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2882
|
||||
#: ../src/ui/theme-parser.c:2954
|
||||
#, 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:2894
|
||||
#: ../src/ui/theme-parser.c:2966
|
||||
#, c-format
|
||||
msgid "Unknown state \"%s\" for button"
|
||||
msgstr "Estado desconocido «%s» para el botón"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2902
|
||||
#: ../src/ui/theme-parser.c:2974
|
||||
#, 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:2973
|
||||
#: ../src/ui/theme-parser.c:3045
|
||||
#, 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:2982
|
||||
#: ../src/ui/theme-parser.c:3054
|
||||
#, 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:2992
|
||||
#: ../src/ui/theme-parser.c:3064
|
||||
#, 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:3013 ../src/ui/theme-parser.c:3036
|
||||
#: ../src/ui/theme-parser.c:3085 ../src/ui/theme-parser.c:3108
|
||||
#, 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:3047
|
||||
#: ../src/ui/theme-parser.c:3119
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Should not have \"resize\" attribute on <%s> element for maximized/shaded "
|
||||
@@ -1659,7 +1659,7 @@ msgstr ""
|
||||
"No debería tener un atributo «resize» en el elemento <%s> para los estados "
|
||||
"maximizado/enrollado"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3061
|
||||
#: ../src/ui/theme-parser.c:3133
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Should not have \"resize\" attribute on <%s> element for maximized states"
|
||||
@@ -1667,18 +1667,18 @@ msgstr ""
|
||||
"No debería tener un atributo «resize» en el elemento <%s> para los estados "
|
||||
"maximizados."
|
||||
|
||||
#: ../src/ui/theme-parser.c:3075 ../src/ui/theme-parser.c:3097
|
||||
#: ../src/ui/theme-parser.c:3147 ../src/ui/theme-parser.c:3169
|
||||
#, 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:3086 ../src/ui/theme-parser.c:3108
|
||||
#: ../src/ui/theme-parser.c:3158 ../src/ui/theme-parser.c:3180
|
||||
#, 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:3147
|
||||
#: ../src/ui/theme-parser.c:3219
|
||||
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)"
|
||||
@@ -1687,7 +1687,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:3185
|
||||
#: ../src/ui/theme-parser.c:3257
|
||||
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)"
|
||||
@@ -1696,7 +1696,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:3223
|
||||
#: ../src/ui/theme-parser.c:3295
|
||||
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)"
|
||||
@@ -1705,12 +1705,32 @@ msgstr ""
|
||||
"especificado un atributo draw_ops y también un elemento <draw_ops> o ha "
|
||||
"especificado los dos elementos)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3271
|
||||
#: ../src/ui/theme-parser.c:3359
|
||||
#, c-format
|
||||
msgid "Bad version specification '%s'"
|
||||
msgstr "Especificación de versión «%s» errónea"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3432
|
||||
msgid ""
|
||||
"\"version\" attribute cannot be used in metacity-theme-1.xml or metacity-"
|
||||
"theme-2.xml"
|
||||
msgstr ""
|
||||
"No se puede usar el atributo «version» con metacity-theme-1.xml o metacity-"
|
||||
"theme-2.xml"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3455
|
||||
#, 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:3487
|
||||
#, 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:3291
|
||||
#: ../src/ui/theme-parser.c:3507
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Element <%s> is not allowed inside a name/author/date/description element"
|
||||
@@ -1718,12 +1738,12 @@ msgstr ""
|
||||
"El elemento <%s> no esta permitido dentro de un elemento name/author/date/"
|
||||
"description"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3296
|
||||
#: ../src/ui/theme-parser.c:3512
|
||||
#, 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:3308
|
||||
#: ../src/ui/theme-parser.c:3524
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Element <%s> is not allowed inside a distance/border/aspect_ratio element"
|
||||
@@ -1731,50 +1751,44 @@ msgstr ""
|
||||
"El elemento <%s> no esta permitido dentro de un elemento distance/border/"
|
||||
"aspect_ratio"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3330
|
||||
#: ../src/ui/theme-parser.c:3546
|
||||
#, 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:3340 ../src/ui/theme-parser.c:3370
|
||||
#: ../src/ui/theme-parser.c:3375 ../src/ui/theme-parser.c:3380
|
||||
#: ../src/ui/theme-parser.c:3556 ../src/ui/theme-parser.c:3586
|
||||
#: ../src/ui/theme-parser.c:3591 ../src/ui/theme-parser.c:3596
|
||||
#, 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:3602
|
||||
#: ../src/ui/theme-parser.c:3824
|
||||
msgid "No draw_ops provided for frame piece"
|
||||
msgstr "No se dio draw_ops para la pieza del cuadro"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3617
|
||||
#: ../src/ui/theme-parser.c:3839
|
||||
msgid "No draw_ops provided for button"
|
||||
msgstr "No se dio draw_ops para botón"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3669
|
||||
#: ../src/ui/theme-parser.c:3893
|
||||
#, c-format
|
||||
msgid "No text is allowed inside element <%s>"
|
||||
msgstr "No se permite texto dentro del elemento <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3724 ../src/ui/theme-parser.c:3736
|
||||
#: ../src/ui/theme-parser.c:3748 ../src/ui/theme-parser.c:3760
|
||||
#: ../src/ui/theme-parser.c:3772
|
||||
#: ../src/ui/theme-parser.c:3951 ../src/ui/theme-parser.c:3963
|
||||
#: ../src/ui/theme-parser.c:3975 ../src/ui/theme-parser.c:3987
|
||||
#: ../src/ui/theme-parser.c:3999
|
||||
#, c-format
|
||||
#| msgid "<name> specified twice for this theme"
|
||||
msgid "<%s> specified twice for this theme"
|
||||
msgstr "<%s> especificado dos veces para este tema"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4040
|
||||
#: ../src/ui/theme-parser.c:4269
|
||||
#, 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"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4096
|
||||
#, c-format
|
||||
msgid "Theme file %s did not contain a root <metacity_theme> element"
|
||||
msgstr "El archivo de tema %s no contiene un elemento raíz <metacity_theme>"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:75
|
||||
msgid "/_Windows"
|
||||
msgstr "/_Ventanas"
|
||||
@@ -1977,6 +1991,9 @@ msgstr ""
|
||||
"%d expresiones de coordenadas interpretadas en %g segundos (%g segundos de "
|
||||
"media)\n"
|
||||
|
||||
#~ msgid "Theme file %s did not contain a root <metacity_theme> element"
|
||||
#~ msgstr "El archivo de tema %s no contiene un elemento raíz <metacity_theme>"
|
||||
|
||||
#~ msgid "Failed to read saved session file %s: %s\n"
|
||||
#~ msgstr "Ocurrió un error al leer el archivo de sesión guardado %s: %s\n"
|
||||
|
||||
|
336
po/eu.po
336
po/eu.po
@@ -3,14 +3,14 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
|
||||
#
|
||||
# Hizkuntza Politikarako Sailburuordetza <hizpol@ej-gv.es>, 2004.
|
||||
# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2004, 2005, 2006, 2008, 2009.
|
||||
# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2004, 2005, 2006, 2008, 2009, 2010.
|
||||
# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2007.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: eu\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-09-04 11:40+0200\n"
|
||||
"PO-Revision-Date: 2009-09-04 11:56+0200\n"
|
||||
"POT-Creation-Date: 2010-03-19 17:23+0100\n"
|
||||
"PO-Revision-Date: 2010-03-19 17:27+0100\n"
|
||||
"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>\n"
|
||||
"Language-Team: Basque <itzulpena@euskalgnu.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -20,48 +20,53 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"\n"
|
||||
|
||||
#: ../src/core/bell.c:302
|
||||
msgid "Bell event"
|
||||
msgstr "Soinuaren gertaera"
|
||||
|
||||
#: ../src/core/core.c:213
|
||||
#, c-format
|
||||
msgid "Unknown window information request: %d"
|
||||
msgstr "Leihoaren informazio eskaera ezezaguna: %d"
|
||||
|
||||
#: ../src/core/delete.c:105
|
||||
#. Translators: %s is a window title
|
||||
#: ../src/core/delete.c:95
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<big><b><tt>%s</tt> is not responding.</b></big>\n"
|
||||
"\n"
|
||||
"<i>You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely.</i>"
|
||||
msgstr ""
|
||||
"<big><b><tt>%s</tt>(e)k ez du erantzuten.</b></big>\n"
|
||||
"\n"
|
||||
"<i>Aukeratu piskatean zai egotea aplikazioak jarraitzeko edo derrigortu "
|
||||
"aplikazioa erabat ixtea.</i>"
|
||||
msgid "<tt>%s</tt> is not responding."
|
||||
msgstr "<tt>%s</tt>(e)k ez du erantzuten."
|
||||
|
||||
#: ../src/core/delete.c:116
|
||||
#: ../src/core/delete.c:100
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr ""
|
||||
"Aukeratu piskatean zai egotea aplikazioak jarraitzeko edo derrigortu "
|
||||
"aplikazioa erabat ixtea."
|
||||
|
||||
#: ../src/core/delete.c:109
|
||||
msgid "_Wait"
|
||||
msgstr "_Itxaron"
|
||||
|
||||
#: ../src/core/delete.c:116
|
||||
#: ../src/core/delete.c:109
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Behartu ixtera"
|
||||
|
||||
#: ../src/core/delete.c:217
|
||||
#: ../src/core/delete.c:207
|
||||
#, c-format
|
||||
msgid "Failed to get hostname: %s\n"
|
||||
msgstr "Huts egin du ostalari-izena hartzean: %s\n"
|
||||
|
||||
#: ../src/core/display.c:329
|
||||
#: ../src/core/display.c:362
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Konposaketa lantzeko beharrezkoa den %s hedapena falta da"
|
||||
|
||||
#: ../src/core/display.c:414
|
||||
#: ../src/core/display.c:447
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Huts egin du X Window sistemaren '%s' pantaila irekitzean\n"
|
||||
|
||||
#: ../src/core/errors.c:236
|
||||
#: ../src/core/errors.c:233
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Lost connection to the display '%s';\n"
|
||||
@@ -72,12 +77,12 @@ msgstr ""
|
||||
"seguru asko X zerbitzaria itzalita egongo da edo leiho-kudeatzailea \n"
|
||||
"hilko/hondatuko zenuen.\n"
|
||||
|
||||
#: ../src/core/errors.c:243
|
||||
#: ../src/core/errors.c:240
|
||||
#, c-format
|
||||
msgid "Fatal IO error %d (%s) on display '%s'.\n"
|
||||
msgstr "S/Iko %d (%s) errore konponezina '%s' pantailan.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:697
|
||||
#: ../src/core/keybindings.c:708
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
@@ -89,7 +94,7 @@ msgstr ""
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2392
|
||||
#: ../src/core/keybindings.c:2399
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -100,92 +105,96 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2482
|
||||
#: ../src/core/keybindings.c:2489
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "%d komandoa ez dago definituta.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3495
|
||||
#: ../src/core/keybindings.c:3502
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "Ez da terminalaren komandoa definitu.\n"
|
||||
|
||||
#: ../src/core/main.c:127
|
||||
#: ../src/core/main.c:130
|
||||
#, c-format
|
||||
msgid ""
|
||||
"mutter %s\n"
|
||||
"Copyright (C) 2001-2008 Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"This is free software; see the source for copying conditions.\n"
|
||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
"PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
"mutter %s\n"
|
||||
"Copyright-a (C) 2001-2008 Havoc Pennington, Red Hat, Inc., eta beste batzuk\n"
|
||||
"Copyright-a (C) 2001-%d Havoc Pennington, Red Hat, Inc., eta beste batzuk\n"
|
||||
"Hau software librea da; ikus kopiatzeko baldintzak iturburu-kodean.\n"
|
||||
"EZ du bermerik; ezta MERKATURATZEKO edo XEDE JAKIN BATERAKO EGOKITASUNAREN "
|
||||
"BERMERIK ERE.\n"
|
||||
|
||||
#: ../src/core/main.c:257
|
||||
#: ../src/core/main.c:261
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Desgaitu saio-kudeatzailearen konexioa"
|
||||
|
||||
#: ../src/core/main.c:263
|
||||
#: ../src/core/main.c:267
|
||||
msgid "Replace the running window manager with Mutter"
|
||||
msgstr "Ordeztu exekutatzen dagoen leiho-kudeatzailea Mutter-rekin"
|
||||
|
||||
#: ../src/core/main.c:269
|
||||
#: ../src/core/main.c:273
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Zehaztu saio-kudeatzailearen IDa"
|
||||
|
||||
#: ../src/core/main.c:274
|
||||
#: ../src/core/main.c:278
|
||||
msgid "X Display to use"
|
||||
msgstr "X pantaila erabiltzeko"
|
||||
|
||||
#: ../src/core/main.c:280
|
||||
#: ../src/core/main.c:284
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Hasieratu saioa babes-fitxategitik"
|
||||
|
||||
#: ../src/core/main.c:286
|
||||
#: ../src/core/main.c:290
|
||||
msgid "Print version"
|
||||
msgstr "Erakutsi bertsioa"
|
||||
|
||||
#: ../src/core/main.c:292
|
||||
#: ../src/core/main.c:296
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Egin X deiak sinkronoak izatea"
|
||||
|
||||
#: ../src/core/main.c:298
|
||||
#: ../src/core/main.c:302
|
||||
msgid "Turn compositing on"
|
||||
msgstr "Aktibatu konposaketa"
|
||||
|
||||
#: ../src/core/main.c:304
|
||||
#: ../src/core/main.c:308
|
||||
msgid "Turn compositing off"
|
||||
msgstr "Desaktibatu konposaketa"
|
||||
|
||||
#: ../src/core/main.c:310
|
||||
#: ../src/core/main.c:314
|
||||
msgid "Don't make fullscreen windows that are maximized and have no decorations"
|
||||
msgstr "Ez jarri pantaila osoan maximizatuta dauden eta dekoraziorik ez duten leihoak"
|
||||
|
||||
#: ../src/core/main.c:320
|
||||
msgid "Comma-separated list of compositor plugins"
|
||||
msgstr "Konpositoreen pluginen komaz bereiztutako zerrenda"
|
||||
|
||||
#: ../src/core/main.c:316
|
||||
#: ../src/core/main.c:326
|
||||
msgid "Whether window popup/frame should be shown when cycling windows."
|
||||
msgstr "Leihoak begiztan sartzean laster-leihoak/-markoak erakutsiko diren edo ez."
|
||||
|
||||
#: ../src/core/main.c:323
|
||||
#: ../src/core/main.c:333
|
||||
msgid "Internal argument for GObject introspection"
|
||||
msgstr "Barneko argumentua GObject objektua aztertzeko"
|
||||
|
||||
#: ../src/core/main.c:668
|
||||
#: ../src/core/main.c:663
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Huts egin du gaien direktorioa aztertzean: %s\n"
|
||||
|
||||
#: ../src/core/main.c:684
|
||||
#: ../src/core/main.c:679
|
||||
#, c-format
|
||||
msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
msgstr ""
|
||||
"Gai bat ezin izan da aurkitu. Ziurtatu %s badagoela eta ohiko gaiak "
|
||||
"dituela.\n"
|
||||
|
||||
#: ../src/core/main.c:745
|
||||
#: ../src/core/main.c:743
|
||||
#, c-format
|
||||
msgid "Failed to restart: %s\n"
|
||||
msgstr "Ezin izan da berrabiarazi: %s\n"
|
||||
@@ -201,24 +210,24 @@ msgstr "Ezin izan da berrabiarazi: %s\n"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:522 ../src/core/prefs.c:683
|
||||
#: ../src/core/prefs.c:529 ../src/core/prefs.c:690
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "\"%s\" GConf gakoa balio baliogabean ezarrita dago\n"
|
||||
|
||||
#: ../src/core/prefs.c:609 ../src/core/prefs.c:852
|
||||
#: ../src/core/prefs.c:616 ../src/core/prefs.c:859
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "%2$s GConf gakoko %1$d balioa %3$d - %4$d barrutitik kanpo dago\n"
|
||||
|
||||
#: ../src/core/prefs.c:653 ../src/core/prefs.c:730 ../src/core/prefs.c:778
|
||||
#: ../src/core/prefs.c:842 ../src/core/prefs.c:1142 ../src/core/prefs.c:1158
|
||||
#: ../src/core/prefs.c:1175 ../src/core/prefs.c:1191
|
||||
#: ../src/core/prefs.c:660 ../src/core/prefs.c:737 ../src/core/prefs.c:785
|
||||
#: ../src/core/prefs.c:849 ../src/core/prefs.c:1149 ../src/core/prefs.c:1165
|
||||
#: ../src/core/prefs.c:1182 ../src/core/prefs.c:1198
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "\"%s\" GConf gakoa mota baliogabean ezarrita dago\n"
|
||||
|
||||
#: ../src/core/prefs.c:1282
|
||||
#: ../src/core/prefs.c:1289
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -226,12 +235,12 @@ msgstr ""
|
||||
"Aplikazio hautsien konponbidea desgaituta. Aplikazio batzuk ez dira behar "
|
||||
"den bezala ibiliko.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1353
|
||||
#: ../src/core/prefs.c:1360
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "Ezin izan da analizatu \"%s\" letra-tipoaren deskribapena %s GConf gakoan\n"
|
||||
|
||||
#: ../src/core/prefs.c:1415
|
||||
#: ../src/core/prefs.c:1422
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -240,17 +249,17 @@ msgstr ""
|
||||
"Konfigurazioaren datu-basean aurkitutako \"%s\" balioa ez da baliozkoa sagu-"
|
||||
"botoiaren aldatzailearentzat\n"
|
||||
|
||||
#: ../src/core/prefs.c:1839
|
||||
#: ../src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "Errorea laneko %d area ezartzean: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2023 ../src/core/prefs.c:2529
|
||||
#: ../src/core/prefs.c:2028 ../src/core/prefs.c:2531
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "%d. laneko area"
|
||||
|
||||
#: ../src/core/prefs.c:2056 ../src/core/prefs.c:2234
|
||||
#: ../src/core/prefs.c:2061 ../src/core/prefs.c:2239
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -259,37 +268,37 @@ msgstr ""
|
||||
"Konfigurazioaren datu-basean aurkitutako \"%s\" balioa ez da baliozkoa \"%s"
|
||||
"\" laster-teklarentzat.\n"
|
||||
|
||||
#: ../src/core/prefs.c:2610
|
||||
#: ../src/core/prefs.c:2612
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "Errorea %d. laneko areari \"%s\" izena ezartzean: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2808
|
||||
#: ../src/core/prefs.c:2816
|
||||
#, c-format
|
||||
msgid "Error setting compositor status: %s\n"
|
||||
msgstr "Errorea konposaketaren egoera ezartzean: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2836
|
||||
#: ../src/core/prefs.c:2845
|
||||
#, c-format
|
||||
msgid "Error setting clutter plugin list: %s\n"
|
||||
msgstr "Errorea 'clutter' pluginen zerrenda ezartzean: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2879
|
||||
#: ../src/core/prefs.c:2889
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr "Errorea ezkutuko leihoen bizitzen egoera ezartzean: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2907
|
||||
#: ../src/core/prefs.c:2917
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "Errorea fitxarik gabeko laster-leihoen egoera ezartzean: %s\n"
|
||||
|
||||
#: ../src/core/screen.c:561
|
||||
#: ../src/core/screen.c:577
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "'%2$s' bistaratzeko %1$d pantaila ez da baliozkoa\n"
|
||||
|
||||
#: ../src/core/screen.c:577
|
||||
#: ../src/core/screen.c:593
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -298,77 +307,71 @@ msgstr ""
|
||||
"\"%2$s\" bistaratzeko %1$d pantailak badu leiho-kudeatzailea; leiho-"
|
||||
"kudeatzaile hori ordeztu nahi baduzu, saiatu --replace aukerarekin.\n"
|
||||
|
||||
#: ../src/core/screen.c:604
|
||||
#: ../src/core/screen.c:620
|
||||
#, c-format
|
||||
msgid "Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr ""
|
||||
"Ezin izan da eskuratu leiho-kudeatzailearen hautapena \"%2$s\" bistaratzeko %"
|
||||
"1$d pantailan\n"
|
||||
|
||||
#: ../src/core/screen.c:659
|
||||
#: ../src/core/screen.c:675
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "\"%2$s\" bistaratzeko %1$d pantailak badu leiho-kudeatzailea\n"
|
||||
|
||||
#: ../src/core/screen.c:871
|
||||
#: ../src/core/screen.c:857
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Ezin izan da askatu \"%2$s\" bistaratzeko %1$d pantaila\n"
|
||||
|
||||
#: ../src/core/session.c:851 ../src/core/session.c:858
|
||||
#: ../src/core/session.c:856 ../src/core/session.c:863
|
||||
#, c-format
|
||||
msgid "Could not create directory '%s': %s\n"
|
||||
msgstr "Ezin izan da '%s' direktorioa sortu: %s\n"
|
||||
|
||||
#: ../src/core/session.c:868
|
||||
#: ../src/core/session.c:873
|
||||
#, c-format
|
||||
msgid "Could not open session file '%s' for writing: %s\n"
|
||||
msgstr "Ezin izan da '%s' saio-fitxategia idazteko ireki: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1009
|
||||
#: ../src/core/session.c:1014
|
||||
#, c-format
|
||||
msgid "Error writing session file '%s': %s\n"
|
||||
msgstr "Errorea '%s' saio-fitxategia idaztean: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1014
|
||||
#: ../src/core/session.c:1019
|
||||
#, c-format
|
||||
msgid "Error closing session file '%s': %s\n"
|
||||
msgstr "Errorea '%s' saio-fitxategia ixtean: %s\n"
|
||||
|
||||
#. oh, just give up
|
||||
#: ../src/core/session.c:1107
|
||||
#, c-format
|
||||
msgid "Failed to read saved session file %s: %s\n"
|
||||
msgstr "Huts egin du gordetako %s saio-fitxategia irakurtzean: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1146
|
||||
#: ../src/core/session.c:1149
|
||||
#, c-format
|
||||
msgid "Failed to parse saved session file: %s\n"
|
||||
msgstr "Huts egin du gordetako saio-fitxategia analizatzean: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1195
|
||||
#: ../src/core/session.c:1198
|
||||
#, c-format
|
||||
msgid "<mutter_session> attribute seen but we already have the session ID"
|
||||
msgstr "<mutter_session> atributua ikusi da baina dagoeneko badugu saio-IDa"
|
||||
|
||||
#: ../src/core/session.c:1208 ../src/core/session.c:1283
|
||||
#: ../src/core/session.c:1315 ../src/core/session.c:1387
|
||||
#: ../src/core/session.c:1447
|
||||
#: ../src/core/session.c:1211 ../src/core/session.c:1286
|
||||
#: ../src/core/session.c:1318 ../src/core/session.c:1390
|
||||
#: ../src/core/session.c:1450
|
||||
#, c-format
|
||||
msgid "Unknown attribute %s on <%s> element"
|
||||
msgstr "%s atributu ezezaguna <%s> elementuan"
|
||||
|
||||
#: ../src/core/session.c:1225
|
||||
#: ../src/core/session.c:1228
|
||||
#, c-format
|
||||
msgid "nested <window> tag"
|
||||
msgstr "<window> etiketa habiaratua"
|
||||
|
||||
#: ../src/core/session.c:1467
|
||||
#: ../src/core/session.c:1470
|
||||
#, c-format
|
||||
msgid "Unknown element %s"
|
||||
msgstr "%s elementu ezezaguna"
|
||||
|
||||
#: ../src/core/session.c:1818
|
||||
#: ../src/core/session.c:1822
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
@@ -376,51 +379,51 @@ msgstr ""
|
||||
"Leiho hauek ez dute onartzen "gorde uneko konfigurazioa" eta eskuz "
|
||||
"berrabiarazi beharko dituzu hurrengo saioa hasten duzunean."
|
||||
|
||||
#: ../src/core/util.c:103
|
||||
#: ../src/core/util.c:104
|
||||
#, c-format
|
||||
msgid "Failed to open debug log: %s\n"
|
||||
msgstr "Huts egin du arazketako egunkaria irekitzean: %s\n"
|
||||
|
||||
#: ../src/core/util.c:113
|
||||
#: ../src/core/util.c:114
|
||||
#, c-format
|
||||
msgid "Failed to fdopen() log file %s: %s\n"
|
||||
msgstr "Huts egin du %s egunkari-fitxategian fdopen() egitean: %s\n"
|
||||
|
||||
#: ../src/core/util.c:119
|
||||
#: ../src/core/util.c:120
|
||||
#, c-format
|
||||
msgid "Opened log file %s\n"
|
||||
msgstr "%s egunkari-fitxategia irekita\n"
|
||||
|
||||
#: ../src/core/util.c:138 ../src/tools/mutter-message.c:176
|
||||
#: ../src/core/util.c:139 ../src/tools/mutter-message.c:176
|
||||
#, c-format
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter modu xehatuaren euskarririk gabe konpilatu da\n"
|
||||
|
||||
#: ../src/core/util.c:238
|
||||
#: ../src/core/util.c:239
|
||||
msgid "Window manager: "
|
||||
msgstr "Leiho-kudeatzailea: "
|
||||
|
||||
#: ../src/core/util.c:390
|
||||
#: ../src/core/util.c:391
|
||||
msgid "Bug in window manager: "
|
||||
msgstr "Akatsa leiho-kudeatzailean: "
|
||||
|
||||
#: ../src/core/util.c:423
|
||||
#: ../src/core/util.c:424
|
||||
msgid "Window manager warning: "
|
||||
msgstr "Leiho-kudeatzailearen abisua: "
|
||||
|
||||
#: ../src/core/util.c:451
|
||||
#: ../src/core/util.c:452
|
||||
msgid "Window manager error: "
|
||||
msgstr "Leiho-kudeatzailearen errorea: "
|
||||
|
||||
#. Translators: This is the title used on dialog boxes
|
||||
#. eof all-keybindings.h
|
||||
#: ../src/core/util.c:570 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/core/util.c:573 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/mutter-wm.desktop.in.h:1
|
||||
msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6086
|
||||
#: ../src/core/window.c:6217
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -436,7 +439,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:6749
|
||||
#: ../src/core/window.c:6880
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -456,7 +459,7 @@ msgstr "Aplikazioak _NET_WM_PID %lu faltsua ezarri du\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s)"
|
||||
|
||||
#: ../src/core/window-props.c:1419
|
||||
#: ../src/core/window-props.c:1435
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "%2$s(e)n baliogabeko WM_TRANSIENT_FOR 0x%1$lx leihoa zehaztu da.\n"
|
||||
@@ -476,12 +479,12 @@ msgstr ""
|
||||
"Gehiago ematen du aplikazioaren akatsa leiho-kudeatzailearena baino.\n"
|
||||
"Leihoak title=\"%s\" class=\"%s\" name=\"%s\" du\n"
|
||||
|
||||
#: ../src/core/xprops.c:401
|
||||
#: ../src/core/xprops.c:411
|
||||
#, c-format
|
||||
msgid "Property %s on window 0x%lx contained invalid UTF-8\n"
|
||||
msgstr "0x%2$lx leihoko %1$s propietateak UTF-8 baliogabea du\n"
|
||||
|
||||
#: ../src/core/xprops.c:484
|
||||
#: ../src/core/xprops.c:494
|
||||
#, c-format
|
||||
msgid "Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"
|
||||
msgstr ""
|
||||
@@ -804,7 +807,9 @@ msgstr "Clutter pluginak"
|
||||
msgid ""
|
||||
"Determines whether hidden windows (i.e., minimized windows and windows on "
|
||||
"other workspaces than the current one) should be kept alive."
|
||||
msgstr "Ezkutuko leihoak (adib. ikonotutakoak, beste laneko arekoak) bizirik iraungo diren edo ez zehazten du."
|
||||
msgstr ""
|
||||
"Ezkutuko leihoak (adib. ikonotutakoak, beste laneko arekoak) bizirik iraungo "
|
||||
"diren edo ez zehazten du."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:3
|
||||
msgid "Live Hidden Windows"
|
||||
@@ -816,7 +821,9 @@ msgstr "Aldatzailea leihoak kudeatzeko eragiketa hedatuetan erabiltzeko"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Plugins to load for the Clutter-based compositing manager."
|
||||
msgstr "Kargatuko diren puginak Clutter-en oinarritutako konposaketa-kudeatzailearentzako"
|
||||
msgstr ""
|
||||
"Kargatuko diren puginak Clutter-en oinarritutako konposaketa-"
|
||||
"kudeatzailearentzako"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid ""
|
||||
@@ -825,8 +832,8 @@ msgid ""
|
||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
|
||||
"default or set to the empty string."
|
||||
msgstr ""
|
||||
"Gako honek \"overlay\" (gainjarria) hasieratuko du: hau leihoaren "
|
||||
"ikuspegi orokorraren eta aplikazioa abiarazteko sistemaren arteko konbinazioa da. "
|
||||
"Gako honek \"overlay\" (gainjarria) hasieratuko du: hau leihoaren ikuspegi "
|
||||
"orokorraren eta aplikazioa abiarazteko sistemaren arteko konbinazioa da. "
|
||||
"Lehenetsi gisa, PC ordenagailuko \"Windows tekla\" da. Tekla konbinazio hau "
|
||||
"lehenetsia izatea edo kate hutz gisa ezartzea da."
|
||||
|
||||
@@ -1289,7 +1296,7 @@ msgstr "Koordenatuen adierazpenak ez dirudi eragilerik edo eragigairik duenik"
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Gaiak errorea ematen duen adierazpen bat dauka: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4187
|
||||
#: ../src/ui/theme.c:4203
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1298,23 +1305,23 @@ msgstr ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> zehaztu behar "
|
||||
"da marko-estilo honetan"
|
||||
|
||||
#: ../src/ui/theme.c:4695 ../src/ui/theme.c:4720
|
||||
#: ../src/ui/theme.c:4711 ../src/ui/theme.c:4736
|
||||
#, c-format
|
||||
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> falta da"
|
||||
|
||||
#: ../src/ui/theme.c:4764
|
||||
#: ../src/ui/theme.c:4780
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Huts egin du \"%s\" gaia kargatzean: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4894 ../src/ui/theme.c:4901 ../src/ui/theme.c:4908
|
||||
#: ../src/ui/theme.c:4915 ../src/ui/theme.c:4922
|
||||
#: ../src/ui/theme.c:4910 ../src/ui/theme.c:4917 ../src/ui/theme.c:4924
|
||||
#: ../src/ui/theme.c:4931 ../src/ui/theme.c:4938
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "<%s> ez da ezarri \"%s\" gaian"
|
||||
|
||||
#: ../src/ui/theme.c:4930
|
||||
#: ../src/ui/theme.c:4946
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1323,14 +1330,14 @@ msgstr ""
|
||||
"Ez da marko-estilorik ezarri set \"%s\" leiho-motarentzat \"%s\" gaian, "
|
||||
"gehitu <window type=\"%s\" style_set=\"whatever\"/> elementu bat"
|
||||
|
||||
#: ../src/ui/theme.c:5383 ../src/ui/theme.c:5445 ../src/ui/theme.c:5508
|
||||
#: ../src/ui/theme.c:5389 ../src/ui/theme.c:5451 ../src/ui/theme.c:5514
|
||||
#, c-format
|
||||
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"Erabiltzaileak definitutako konstanteak maiuskulaz hasi behar du; \"%s\" ez "
|
||||
"da maiuskulaz hasten"
|
||||
|
||||
#: ../src/ui/theme.c:5391 ../src/ui/theme.c:5453 ../src/ui/theme.c:5516
|
||||
#: ../src/ui/theme.c:5397 ../src/ui/theme.c:5459 ../src/ui/theme.c:5522
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "\"%s\" konstantea lehendik definituta dago"
|
||||
@@ -1449,10 +1456,10 @@ msgid "Window type \"%s\" has already been assigned a style set"
|
||||
msgstr "\"%s\" leiho-motak dagoeneko esleituta du estilo-multzoa"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1229 ../src/ui/theme-parser.c:1293
|
||||
#: ../src/ui/theme-parser.c:1519 ../src/ui/theme-parser.c:2732
|
||||
#: ../src/ui/theme-parser.c:2778 ../src/ui/theme-parser.c:2926
|
||||
#: ../src/ui/theme-parser.c:3118 ../src/ui/theme-parser.c:3156
|
||||
#: ../src/ui/theme-parser.c:3194 ../src/ui/theme-parser.c:3232
|
||||
#: ../src/ui/theme-parser.c:1519 ../src/ui/theme-parser.c:2740
|
||||
#: ../src/ui/theme-parser.c:2786 ../src/ui/theme-parser.c:2934
|
||||
#: ../src/ui/theme-parser.c:3126 ../src/ui/theme-parser.c:3164
|
||||
#: ../src/ui/theme-parser.c:3202 ../src/ui/theme-parser.c:3240
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed below <%s>"
|
||||
msgstr "Ez da onartzen <%s> elementua <%s>(r)en azpian jartzea"
|
||||
@@ -1481,108 +1488,108 @@ msgstr "\"%s\" aspektu-erlazioa ezezaguna da"
|
||||
msgid "Border \"%s\" is unknown"
|
||||
msgstr "\"%s\" ertza ezezaguna da"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1776
|
||||
#: ../src/ui/theme-parser.c:1784
|
||||
#, c-format
|
||||
msgid "No \"start_angle\" or \"from\" attribute on element <%s>"
|
||||
msgstr "Ez dago \"start_angle\" edo \"from\" atributurik <%s> elementuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1783
|
||||
#: ../src/ui/theme-parser.c:1791
|
||||
#, c-format
|
||||
msgid "No \"extent_angle\" or \"to\" attribute on element <%s>"
|
||||
msgstr "Ez dago \"extent_angle\" edo \"to\" atributurik <%s> elementuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2023
|
||||
#: ../src/ui/theme-parser.c:2031
|
||||
#, c-format
|
||||
msgid "Did not understand value \"%s\" for type of gradient"
|
||||
msgstr "Gradiente-motan ez da ulertu \"%s\" balioa"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2101 ../src/ui/theme-parser.c:2476
|
||||
#: ../src/ui/theme-parser.c:2109 ../src/ui/theme-parser.c:2484
|
||||
#, c-format
|
||||
msgid "Did not understand fill type \"%s\" for <%s> element"
|
||||
msgstr "Ez da ulertu \"%s\" betetze-mota <%s> elementuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2268 ../src/ui/theme-parser.c:2351
|
||||
#: ../src/ui/theme-parser.c:2414
|
||||
#: ../src/ui/theme-parser.c:2276 ../src/ui/theme-parser.c:2359
|
||||
#: ../src/ui/theme-parser.c:2422
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" for <%s> element"
|
||||
msgstr "Ez da ulertu \"%s\" egoera <%s> elementuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2278 ../src/ui/theme-parser.c:2361
|
||||
#: ../src/ui/theme-parser.c:2286 ../src/ui/theme-parser.c:2369
|
||||
#, c-format
|
||||
msgid "Did not understand shadow \"%s\" for <%s> element"
|
||||
msgstr "Ez da ulertu \"%s\" itzala <%s> elementuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2288
|
||||
#: ../src/ui/theme-parser.c:2296
|
||||
#, c-format
|
||||
msgid "Did not understand arrow \"%s\" for <%s> element"
|
||||
msgstr "Ez da ulertu \"%s\" gezia <%s> elementuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2588 ../src/ui/theme-parser.c:2684
|
||||
#: ../src/ui/theme-parser.c:2596 ../src/ui/theme-parser.c:2692
|
||||
#, c-format
|
||||
msgid "No <draw_ops> called \"%s\" has been defined"
|
||||
msgstr "Ez da \"%s\" izeneko <draw_ops> bat ere definitu"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2600 ../src/ui/theme-parser.c:2696
|
||||
#: ../src/ui/theme-parser.c:2608 ../src/ui/theme-parser.c:2704
|
||||
#, c-format
|
||||
msgid "Including draw_ops \"%s\" here would create a circular reference"
|
||||
msgstr "Hemen \"%s\" draw_ops sartzen bada, erreferentzia zirkularra sortuko da"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2811
|
||||
#: ../src/ui/theme-parser.c:2819
|
||||
#, c-format
|
||||
msgid "Unknown position \"%s\" for frame piece"
|
||||
msgstr "\"%s\" kokaleku ezezaguna markoarentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2819
|
||||
#: ../src/ui/theme-parser.c:2827
|
||||
#, c-format
|
||||
msgid "Frame style already has a piece at position %s"
|
||||
msgstr "Marko-estiloak badu zati bat %s posizioan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2836 ../src/ui/theme-parser.c:2911
|
||||
#: ../src/ui/theme-parser.c:2844 ../src/ui/theme-parser.c:2919
|
||||
#, c-format
|
||||
msgid "No <draw_ops> with the name \"%s\" has been defined"
|
||||
msgstr "Ez da \"%s\" izeneko <draw_ops> bat ere definitu"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2865
|
||||
#: ../src/ui/theme-parser.c:2873
|
||||
#, c-format
|
||||
msgid "Unknown function \"%s\" for button"
|
||||
msgstr "\"%s\" funtzioa ezezaguna botoiarentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2874
|
||||
#: ../src/ui/theme-parser.c:2882
|
||||
#, c-format
|
||||
msgid "Button function \"%s\" does not exist in this version (%d, need %d)"
|
||||
msgstr "\"%s\" botoi-funtzioa ez da existitzen bertsio honetan (%d, %d behar du)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2886
|
||||
#: ../src/ui/theme-parser.c:2894
|
||||
#, c-format
|
||||
msgid "Unknown state \"%s\" for button"
|
||||
msgstr "\"%s\" egoera ezezaguna botoiarentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2894
|
||||
#: ../src/ui/theme-parser.c:2902
|
||||
#, c-format
|
||||
msgid "Frame style already has a button for function %s state %s"
|
||||
msgstr "Marko-estiloak badu botoi bat %s funtzioan %s egoeran"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2965
|
||||
#: ../src/ui/theme-parser.c:2973
|
||||
#, c-format
|
||||
msgid "\"%s\" is not a valid value for focus attribute"
|
||||
msgstr "\"%s\" ez da baliozko balioa foku-atributuarentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2974
|
||||
#: ../src/ui/theme-parser.c:2982
|
||||
#, c-format
|
||||
msgid "\"%s\" is not a valid value for state attribute"
|
||||
msgstr "\"%s\" ez da baliozko balioa egoera-atributuarentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2984
|
||||
#: ../src/ui/theme-parser.c:2992
|
||||
#, c-format
|
||||
msgid "A style called \"%s\" has not been defined"
|
||||
msgstr "\"%s\" izeneko estiloa ez da definitu"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3005 ../src/ui/theme-parser.c:3028
|
||||
#: ../src/ui/theme-parser.c:3013 ../src/ui/theme-parser.c:3036
|
||||
#, c-format
|
||||
msgid "\"%s\" is not a valid value for resize attribute"
|
||||
msgstr "\"%s\" ez da baliozko balioa tamainaz aldatzeko atributuarentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3039
|
||||
#: ../src/ui/theme-parser.c:3047
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Should not have \"resize\" attribute on <%s> element for maximized/shaded "
|
||||
@@ -1591,24 +1598,24 @@ msgstr ""
|
||||
"Ez luke izan behar \"resize\" atributurik <%s> elementuan maximizatutako/"
|
||||
"bildutako egoerentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3053
|
||||
#: ../src/ui/theme-parser.c:3061
|
||||
#, c-format
|
||||
msgid "Should not have \"resize\" attribute on <%s> element for maximized states"
|
||||
msgstr ""
|
||||
"Ez luke izan behar \"resize\" atributurik <%s> elementuan maximizatutako "
|
||||
"egoerentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3067 ../src/ui/theme-parser.c:3089
|
||||
#: ../src/ui/theme-parser.c:3075 ../src/ui/theme-parser.c:3097
|
||||
#, c-format
|
||||
msgid "Style has already been specified for state %s resize %s focus %s"
|
||||
msgstr "Estiloa dagoeneko zehaztu da %s egoeran %s tamaina-aldatzean %s fokuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3078 ../src/ui/theme-parser.c:3100
|
||||
#: ../src/ui/theme-parser.c:3086 ../src/ui/theme-parser.c:3108
|
||||
#, c-format
|
||||
msgid "Style has already been specified for state %s focus %s"
|
||||
msgstr "Estiloa dagoeneko zehaztu da %s egoeran %s fokuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3139
|
||||
#: ../src/ui/theme-parser.c:3147
|
||||
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)"
|
||||
@@ -1616,7 +1623,7 @@ msgstr ""
|
||||
"Ezin dira bi draw_ops izan <piece> elementu batean (gaiak draw_ops atributu "
|
||||
"bat eta <draw_ops> elementu bat zehaztu ditu, edo bi elementu zehaztu ditu)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3177
|
||||
#: ../src/ui/theme-parser.c:3185
|
||||
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)"
|
||||
@@ -1624,7 +1631,7 @@ msgstr ""
|
||||
"Ezin dira bi draw_ops izan <button> elementu batean (gaiak draw_ops atributu "
|
||||
"bat eta <draw_ops> elementu bat zehaztu ditu, edo bi elementu zehaztu ditu)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3215
|
||||
#: ../src/ui/theme-parser.c:3223
|
||||
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)"
|
||||
@@ -1633,76 +1640,63 @@ msgstr ""
|
||||
"atributu bat eta <draw_ops> elementu bat zehaztu ditu, edo bi elementu "
|
||||
"zehaztu ditu)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3263
|
||||
#: ../src/ui/theme-parser.c:3271
|
||||
#, c-format
|
||||
msgid "Outermost element in theme must be <metacity_theme> not <%s>"
|
||||
msgstr "Gaian kanporen dagoen elementuak <metacity_theme> izan behar du, ez <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3283
|
||||
#: ../src/ui/theme-parser.c:3291
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a name/author/date/description element"
|
||||
msgstr "<%s> elementua ez da onartzen name/author/date/description elementuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3288
|
||||
#: ../src/ui/theme-parser.c:3296
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a <constant> element"
|
||||
msgstr "<%s> elementua ez da onartzen <constant> elementuaren barnean"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3300
|
||||
#: ../src/ui/theme-parser.c:3308
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a distance/border/aspect_ratio element"
|
||||
msgstr "<%s> elementua ez da onartzen distance/border/aspect_ratio elementuan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3322
|
||||
#: ../src/ui/theme-parser.c:3330
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a draw operation element"
|
||||
msgstr "<%s> elementua ez da onartzen marrazteko eragiketaren elementuaren barnean"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3332 ../src/ui/theme-parser.c:3362
|
||||
#: ../src/ui/theme-parser.c:3367 ../src/ui/theme-parser.c:3372
|
||||
#: ../src/ui/theme-parser.c:3340 ../src/ui/theme-parser.c:3370
|
||||
#: ../src/ui/theme-parser.c:3375 ../src/ui/theme-parser.c:3380
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a <%s> element"
|
||||
msgstr "<%s> elementua ez da onartzen <%s> elementuaren barnean"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3594
|
||||
#: ../src/ui/theme-parser.c:3602
|
||||
msgid "No draw_ops provided for frame piece"
|
||||
msgstr "Ez da draw_ops-ik eman marko-zatiarentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3609
|
||||
#: ../src/ui/theme-parser.c:3617
|
||||
msgid "No draw_ops provided for button"
|
||||
msgstr "Ez da draw_ops-ik eman botoiarentzat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3661
|
||||
#: ../src/ui/theme-parser.c:3669
|
||||
#, c-format
|
||||
msgid "No text is allowed inside element <%s>"
|
||||
msgstr "Ez da testurik onartzen <%s> elementuaren barnean"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3716
|
||||
msgid "<name> specified twice for this theme"
|
||||
msgstr "<izena> birritan zehaztu da gai honetan"
|
||||
#: ../src/ui/theme-parser.c:3724 ../src/ui/theme-parser.c:3736
|
||||
#: ../src/ui/theme-parser.c:3748 ../src/ui/theme-parser.c:3760
|
||||
#: ../src/ui/theme-parser.c:3772
|
||||
#, c-format
|
||||
msgid "<%s> specified twice for this theme"
|
||||
msgstr "<%s> birritan zehaztu da gai honetan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3727
|
||||
msgid "<author> specified twice for this theme"
|
||||
msgstr "<egilea> birritan zehaztu da gai honetan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3738
|
||||
msgid "<copyright> specified twice for this theme"
|
||||
msgstr "<copyright-a> birritan zehaztu da gai honetan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3749
|
||||
msgid "<date> specified twice for this theme"
|
||||
msgstr "<data> birritan zehaztu da gai honetan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3760
|
||||
msgid "<description> specified twice for this theme"
|
||||
msgstr "<azalpena> birritan zehaztu da gai honetan"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4027
|
||||
#: ../src/ui/theme-parser.c:4040
|
||||
#, c-format
|
||||
msgid "Failed to find a valid file for theme %s\n"
|
||||
msgstr "Huts egin du %s gaiaren fitxategi egokia bilatzean\n"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4083
|
||||
#: ../src/ui/theme-parser.c:4096
|
||||
#, c-format
|
||||
msgid "Theme file %s did not contain a root <metacity_theme> element"
|
||||
msgstr "%s gai-fitxategiak ez du erroko <metacity_theme> elementurik"
|
||||
|
34
po/nds.po
34
po/nds.po
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&component=general\n"
|
||||
"POT-Creation-Date: 2009-11-24 21:04+0000\n"
|
||||
"PO-Revision-Date: 2009-11-26 21:39+0100\n"
|
||||
"PO-Revision-Date: 2010-02-25 16:58+0100\n"
|
||||
"Last-Translator: Nils-Christoph Fiedler <fiedler@medienkompanie.de>\n"
|
||||
"Language-Team: Low German <nds-lowgerman@lists.sourceforge.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -335,7 +335,7 @@ msgstr ""
|
||||
#: ../src/core/session.c:1468
|
||||
#, c-format
|
||||
msgid "Unknown element %s"
|
||||
msgstr ""
|
||||
msgstr "Unbekanntes Element %s"
|
||||
|
||||
#: ../src/core/session.c:1820
|
||||
msgid "These windows do not support "save current setup" and will have to be restarted manually next time you log in."
|
||||
@@ -364,7 +364,7 @@ msgstr ""
|
||||
|
||||
#: ../src/core/util.c:239
|
||||
msgid "Window manager: "
|
||||
msgstr ""
|
||||
msgstr "Finsteroppasser:"
|
||||
|
||||
#: ../src/core/util.c:391
|
||||
msgid "Bug in window manager: "
|
||||
@@ -384,7 +384,7 @@ msgstr ""
|
||||
#: ../src/mutter.desktop.in.h:1
|
||||
#: ../src/mutter-wm.desktop.in.h:1
|
||||
msgid "Mutter"
|
||||
msgstr ""
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6161
|
||||
@@ -441,51 +441,51 @@ msgstr ""
|
||||
|
||||
#: ../src/include/all-keybindings.h:88
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 1 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:90
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 2 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:92
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 3 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:94
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 4 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:96
|
||||
msgid "Switch to workspace 5"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 5 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:98
|
||||
msgid "Switch to workspace 6"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 6 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:100
|
||||
msgid "Switch to workspace 7"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 7 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:102
|
||||
msgid "Switch to workspace 8"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 8 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:104
|
||||
msgid "Switch to workspace 9"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 9 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:106
|
||||
msgid "Switch to workspace 10"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 10 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:108
|
||||
msgid "Switch to workspace 11"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 11 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:110
|
||||
msgid "Switch to workspace 12"
|
||||
msgstr ""
|
||||
msgstr "Nah Schrievdisk 12 wesseln"
|
||||
|
||||
#: ../src/include/all-keybindings.h:122
|
||||
msgid "Switch to workspace on the left of the current workspace"
|
||||
@@ -577,7 +577,7 @@ msgstr ""
|
||||
|
||||
#: ../src/include/all-keybindings.h:256
|
||||
msgid "Run a terminal"
|
||||
msgstr ""
|
||||
msgstr "Een Terminal lööpen laten"
|
||||
|
||||
#: ../src/include/all-keybindings.h:271
|
||||
msgid "Activate the window menu"
|
||||
|
397
po/sl.po
397
po/sl.po
@@ -10,8 +10,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&component=general\n"
|
||||
"POT-Creation-Date: 2010-02-11 18:07+0000\n"
|
||||
"PO-Revision-Date: 2010-02-11 20:58+0100\n"
|
||||
"POT-Creation-Date: 2010-04-15 02:19+0000\n"
|
||||
"PO-Revision-Date: 2010-04-17 19:38+0100\n"
|
||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -32,24 +32,24 @@ msgid "Unknown window information request: %d"
|
||||
msgstr "Zahteva izpisa podrobnosti neznanega okna: %d"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: ../src/core/delete.c:94
|
||||
#: ../src/core/delete.c:95
|
||||
#, c-format
|
||||
msgid "<tt>%s</tt> is not responding."
|
||||
msgstr "<tt>%s</tt> se ne odziva."
|
||||
|
||||
#: ../src/core/delete.c:99
|
||||
#: ../src/core/delete.c:100
|
||||
msgid "You may choose to wait a short while for it to continue or force the application to quit entirely."
|
||||
msgstr "Lahko še malo počakate, če se program morda zbudi, ali pa vsilite končanje delovanja."
|
||||
|
||||
#: ../src/core/delete.c:108
|
||||
#: ../src/core/delete.c:109
|
||||
msgid "_Wait"
|
||||
msgstr "_Počakaj"
|
||||
|
||||
#: ../src/core/delete.c:108
|
||||
#: ../src/core/delete.c:109
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Vsili izhod"
|
||||
msgstr "_Vsili konec"
|
||||
|
||||
#: ../src/core/delete.c:206
|
||||
#: ../src/core/delete.c:207
|
||||
#, c-format
|
||||
msgid "Failed to get hostname: %s\n"
|
||||
msgstr "Ni mogoče dobiti gostitelja z imenom: %s\n"
|
||||
@@ -81,7 +81,7 @@ msgid "Fatal IO error %d (%s) on display '%s'.\n"
|
||||
msgstr "Usodna napaka IO %d (%s) na zaslonu '%s'.\n"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/core/keybindings.c:697
|
||||
#: ../src/core/keybindings.c:708
|
||||
#, c-format
|
||||
msgid "Some other program is already using the key %s with modifiers %x as a binding\n"
|
||||
msgstr "Tipko %s s spremenilnikom %x uporablja že nek drug program\n"
|
||||
@@ -89,7 +89,7 @@ msgstr "Tipko %s s spremenilnikom %x uporablja že nek drug program\n"
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2388
|
||||
#: ../src/core/keybindings.c:2399
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -100,12 +100,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2478
|
||||
#: ../src/core/keybindings.c:2489
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "Ukaz %d ni bil naveden.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3491
|
||||
#: ../src/core/keybindings.c:3502
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "Ni bilo navedenih ukazov terminala.\n"
|
||||
@@ -175,17 +175,17 @@ msgstr "Ali naj bo prikazan okvir okna med kroženjem oken."
|
||||
msgid "Internal argument for GObject introspection"
|
||||
msgstr "Notranji argument za GObject"
|
||||
|
||||
#: ../src/core/main.c:662
|
||||
#: ../src/core/main.c:663
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Ni mogoče preiskati mape tem: %s\n"
|
||||
|
||||
#: ../src/core/main.c:678
|
||||
#: ../src/core/main.c:679
|
||||
#, c-format
|
||||
msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
msgstr "Ni mogoče najti teme! Prepričajte se, da %s obstaja in vsebuje običajne teme.\n"
|
||||
|
||||
#: ../src/core/main.c:742
|
||||
#: ../src/core/main.c:743
|
||||
#, c-format
|
||||
msgid "Failed to restart: %s\n"
|
||||
msgstr "Ni mogoče znova pognati: %s\n"
|
||||
@@ -201,84 +201,94 @@ msgstr "Ni mogoče znova pognati: %s\n"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:525
|
||||
#: ../src/core/prefs.c:686
|
||||
#: ../src/core/prefs.c:536
|
||||
#: ../src/core/prefs.c:697
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "Ključ GConf '%s' je nastavljen na neveljavno vrednost\n"
|
||||
|
||||
#: ../src/core/prefs.c:612
|
||||
#: ../src/core/prefs.c:855
|
||||
#: ../src/core/prefs.c:623
|
||||
#: ../src/core/prefs.c:866
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "%d shranjen v GConf ključu %s je izven meja med %d in %d\n"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/core/prefs.c:656
|
||||
#: ../src/core/prefs.c:733
|
||||
#: ../src/core/prefs.c:781
|
||||
#: ../src/core/prefs.c:845
|
||||
#: ../src/core/prefs.c:1145
|
||||
#: ../src/core/prefs.c:1161
|
||||
#: ../src/core/prefs.c:1178
|
||||
#: ../src/core/prefs.c:1194
|
||||
#: ../src/core/prefs.c:667
|
||||
#: ../src/core/prefs.c:744
|
||||
#: ../src/core/prefs.c:792
|
||||
#: ../src/core/prefs.c:856
|
||||
#: ../src/core/prefs.c:1323
|
||||
#: ../src/core/prefs.c:1339
|
||||
#: ../src/core/prefs.c:1356
|
||||
#: ../src/core/prefs.c:1372
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "Ključ GConf \"%s\" je nastavljen na neveljavno vrsto\n"
|
||||
|
||||
#: ../src/core/prefs.c:1285
|
||||
#: ../src/core/prefs.c:1202
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr "Ključ GConf %s je že v uporabi in ga ni mogoče uporabiti za prepis %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1261
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "Ni mogoče prepisati ključa GConf, saj %s ni mogoče najti.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1463
|
||||
msgid "Workarounds for broken applications disabled. Some applications may not behave properly.\n"
|
||||
msgstr "Obhodi za pokvarjene programe so izključeni. Nekateri programi se morda ne bodo pravilno obnašali.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1356
|
||||
#: ../src/core/prefs.c:1534
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "Ni mogoče razčleniti opisa \"%s\" iz ključa GConf %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1418
|
||||
#: ../src/core/prefs.c:1596
|
||||
#, c-format
|
||||
msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
|
||||
msgstr "\"%s\", ki je bil najden v podatkovni zbirki nastavitev ni veljaven spremenilnik za miškine gumbe.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1845
|
||||
#: ../src/core/prefs.c:2023
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "Napaka ob nastavljanju števila delovnih površin na %d: %s\n"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/core/prefs.c:2005
|
||||
#: ../src/core/prefs.c:2511
|
||||
#: ../src/core/prefs.c:2205
|
||||
#: ../src/core/prefs.c:2707
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Delovna površina %d"
|
||||
|
||||
#: ../src/core/prefs.c:2038
|
||||
#: ../src/core/prefs.c:2216
|
||||
#: ../src/core/prefs.c:2237
|
||||
#: ../src/core/prefs.c:2415
|
||||
#, c-format
|
||||
msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
|
||||
msgstr "\"%s\" najden v podatkovni zbirki nastavitev ni veljaven ključ za tipkovno vez \"%s\"\n"
|
||||
|
||||
#: ../src/core/prefs.c:2592
|
||||
#: ../src/core/prefs.c:2788
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "Napaka ob nastavljanju imena delovne površine %d na \"%s\": %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2796
|
||||
#: ../src/core/prefs.c:2992
|
||||
#, c-format
|
||||
msgid "Error setting compositor status: %s\n"
|
||||
msgstr "Napaka pri nastavljanju stanja skladanja: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2824
|
||||
#: ../src/core/prefs.c:3021
|
||||
#, c-format
|
||||
msgid "Error setting clutter plugin list: %s\n"
|
||||
msgstr "Napaka pri nastavljanju seznama vstavkov clutter: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2867
|
||||
#: ../src/core/prefs.c:3065
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr "Napaka pri nastavljanju stanja skritih oken: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2895
|
||||
#: ../src/core/prefs.c:3093
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "Napaka pri nastavljanju stanja pojavnih oken: %s\n"
|
||||
@@ -411,7 +421,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6183
|
||||
#: ../src/core/window.c:6217
|
||||
#, c-format
|
||||
msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
|
||||
msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LEADER kot je zavedeno v ICCCM.\n"
|
||||
@@ -423,7 +433,7 @@ msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LE
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:6846
|
||||
#: ../src/core/window.c:6880
|
||||
#, 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 "Okno %s določi namig MWM, ki pove, da ni mogoče spremeniti velikosti, hkrati pa določi najmanjšo velikost na %d x %d in največjo na %d x %d; vrednost ni smiselna.\n"
|
||||
@@ -810,51 +820,51 @@ msgstr "Ta vrednost začne \"prevleko\", ki združuje predogled okna in zaganjal
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Uporaba: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1118
|
||||
#: ../src/ui/frames.c:1119
|
||||
msgid "Close Window"
|
||||
msgstr "Zapri okno"
|
||||
|
||||
# G:1 K:1 O:0
|
||||
#: ../src/ui/frames.c:1121
|
||||
#: ../src/ui/frames.c:1122
|
||||
msgid "Window Menu"
|
||||
msgstr "Meni okna"
|
||||
|
||||
# G:0 K:1 O:0
|
||||
#: ../src/ui/frames.c:1124
|
||||
#: ../src/ui/frames.c:1125
|
||||
msgid "Minimize Window"
|
||||
msgstr "Skrči okno"
|
||||
|
||||
#: ../src/ui/frames.c:1127
|
||||
#: ../src/ui/frames.c:1128
|
||||
msgid "Maximize Window"
|
||||
msgstr "Razpri okno"
|
||||
|
||||
#: ../src/ui/frames.c:1130
|
||||
#: ../src/ui/frames.c:1131
|
||||
msgid "Restore Window"
|
||||
msgstr "Obnovi okno"
|
||||
|
||||
# G:2 K:0 O:0
|
||||
#: ../src/ui/frames.c:1133
|
||||
#: ../src/ui/frames.c:1134
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Zavij okno"
|
||||
|
||||
#: ../src/ui/frames.c:1136
|
||||
#: ../src/ui/frames.c:1137
|
||||
msgid "Unroll Window"
|
||||
msgstr "Odvij okno"
|
||||
|
||||
#: ../src/ui/frames.c:1139
|
||||
#: ../src/ui/frames.c:1140
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Ohrani okno na vrhu"
|
||||
|
||||
#: ../src/ui/frames.c:1142
|
||||
#: ../src/ui/frames.c:1143
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Odstrani okno z vrha"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/ui/frames.c:1145
|
||||
#: ../src/ui/frames.c:1146
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Vedno na vidni delovni površini"
|
||||
|
||||
#: ../src/ui/frames.c:1148
|
||||
#: ../src/ui/frames.c:1149
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Postavi okno na samo eno delovno površino"
|
||||
|
||||
@@ -1233,79 +1243,79 @@ msgstr "Izraz koordinat se konča z operatorjem namesto z operandom"
|
||||
msgid "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between"
|
||||
msgstr "Izraz koordinat vsebuje operator \"%c\", ki sledi operatorju \"%c\", brez vmesnega operanda"
|
||||
|
||||
#: ../src/ui/theme.c:2195
|
||||
#: ../src/ui/theme.c:2236
|
||||
#: ../src/ui/theme.c:2199
|
||||
#: ../src/ui/theme.c:2244
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Izraz koordinat vsebuje neznano spremenljivko ali konstanto \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2290
|
||||
#: ../src/ui/theme.c:2298
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Razčlenjevalnik izrazov koordinat je preplavil medpomnilnik."
|
||||
|
||||
#: ../src/ui/theme.c:2319
|
||||
#: ../src/ui/theme.c:2327
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Izraz koordinat vsebuje zaklepaj, a ne oklepaja"
|
||||
|
||||
#: ../src/ui/theme.c:2383
|
||||
#: ../src/ui/theme.c:2391
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "Izraz koordinat vsebuje uklepaj, vendar je brez zaklepaja"
|
||||
|
||||
#: ../src/ui/theme.c:2394
|
||||
#: ../src/ui/theme.c:2402
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "Videti je, da izraz koordinat ne vsebuje operatorjev ali operandov"
|
||||
|
||||
#: ../src/ui/theme.c:2596
|
||||
#: ../src/ui/theme.c:2616
|
||||
#: ../src/ui/theme.c:2636
|
||||
#: ../src/ui/theme.c:2604
|
||||
#: ../src/ui/theme.c:2624
|
||||
#: ../src/ui/theme.c:2644
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Tema vsebuje izraz, ki je povzročil napako: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4203
|
||||
#: ../src/ui/theme.c:4255
|
||||
#, c-format
|
||||
msgid "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style"
|
||||
msgstr "za ta slog okvirja mora biti naveden <button function=\"%s\" state=\"%s\" draw_ops=\"karkoli\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:4711
|
||||
#: ../src/ui/theme.c:4736
|
||||
#: ../src/ui/theme.c:4763
|
||||
#: ../src/ui/theme.c:4788
|
||||
#, c-format
|
||||
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "Manjka <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"karkoli\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:4780
|
||||
#: ../src/ui/theme.c:4832
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Nalaganje teme \"%s\" ni uspelo: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4910
|
||||
#: ../src/ui/theme.c:4917
|
||||
#: ../src/ui/theme.c:4924
|
||||
#: ../src/ui/theme.c:4931
|
||||
#: ../src/ui/theme.c:4938
|
||||
#: ../src/ui/theme.c:4964
|
||||
#: ../src/ui/theme.c:4971
|
||||
#: ../src/ui/theme.c:4978
|
||||
#: ../src/ui/theme.c:4985
|
||||
#: ../src/ui/theme.c:4992
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Ni nastavljen <%s> za temo \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:4946
|
||||
#: ../src/ui/theme.c:5000
|
||||
#, c-format
|
||||
msgid "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"
|
||||
msgstr "Slog okvirja za okno vrste \"%s\" v temi \"%s\" ni nastavljen, dodajte element <window type=\"%s\" style_set=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5389
|
||||
#: ../src/ui/theme.c:5451
|
||||
#: ../src/ui/theme.c:5514
|
||||
#: ../src/ui/theme.c:5443
|
||||
#: ../src/ui/theme.c:5505
|
||||
#: ../src/ui/theme.c:5568
|
||||
#, c-format
|
||||
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "Uporabniško določene konstante se morajo začeti z veliko črko; \"%s\" se ne"
|
||||
|
||||
#: ../src/ui/theme.c:5397
|
||||
#: ../src/ui/theme.c:5459
|
||||
#: ../src/ui/theme.c:5522
|
||||
#: ../src/ui/theme.c:5451
|
||||
#: ../src/ui/theme.c:5513
|
||||
#: ../src/ui/theme.c:5576
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Konstanta \"%s\" je bila že določena"
|
||||
@@ -1313,362 +1323,371 @@ msgstr "Konstanta \"%s\" je bila že določena"
|
||||
#. Translators: This means that an attribute which should have been found
|
||||
#. * on an XML element was not in fact found.
|
||||
#.
|
||||
#: ../src/ui/theme-parser.c:202
|
||||
#: ../src/ui/theme-parser.c:236
|
||||
#, c-format
|
||||
msgid "No \"%s\" attribute on element <%s>"
|
||||
msgstr "Ni atributa \"%s\" za element <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:231
|
||||
#: ../src/ui/theme-parser.c:249
|
||||
#: ../src/ui/theme-parser.c:265
|
||||
#: ../src/ui/theme-parser.c:283
|
||||
#, c-format
|
||||
msgid "Line %d character %d: %s"
|
||||
msgstr "Vrstica %d, znak %d: %s"
|
||||
|
||||
#: ../src/ui/theme-parser.c:413
|
||||
#: ../src/ui/theme-parser.c:479
|
||||
#, c-format
|
||||
msgid "Attribute \"%s\" repeated twice on the same <%s> element"
|
||||
msgstr "Atribut \"%s\" je bil v enakem elementu <%s> ponovljen dvakrat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:437
|
||||
#: ../src/ui/theme-parser.c:480
|
||||
#: ../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 "Atribut \"%s\" je v tem kontekstu v elementu <%s> neveljaven"
|
||||
|
||||
#: ../src/ui/theme-parser.c:522
|
||||
#: ../src/ui/theme-parser.c:594
|
||||
#, c-format
|
||||
msgid "Could not parse \"%s\" as an integer"
|
||||
msgstr "Ni mogoče razčleniti \"%s\" kot celoštevilčne vrednosti"
|
||||
|
||||
#: ../src/ui/theme-parser.c:531
|
||||
#: ../src/ui/theme-parser.c:586
|
||||
#: ../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 "Ni mogoče razumeti končnih znakov \"%s\" v nizu \"%s\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:541
|
||||
#: ../src/ui/theme-parser.c:613
|
||||
#, c-format
|
||||
msgid "Integer %ld must be positive"
|
||||
msgstr "Celoštevilska vrednost %ld mora biti pozitivna"
|
||||
|
||||
#: ../src/ui/theme-parser.c:549
|
||||
#: ../src/ui/theme-parser.c:621
|
||||
#, c-format
|
||||
msgid "Integer %ld is too large, current max is %d"
|
||||
msgstr "Celoštevilska vrednost %ld je prevelika, trenutna omejitev je %d"
|
||||
|
||||
#: ../src/ui/theme-parser.c:577
|
||||
#: ../src/ui/theme-parser.c:693
|
||||
#: ../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 "Ni mogoče razčleniti \"%s\" kot števila s plavajočo vejico"
|
||||
|
||||
#: ../src/ui/theme-parser.c:608
|
||||
#: ../src/ui/theme-parser.c:636
|
||||
#: ../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 "Logične vrednosti morajo biti \"prav\" ali \"napak\" in ne \"%s\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:663
|
||||
#: ../src/ui/theme-parser.c:735
|
||||
#, c-format
|
||||
msgid "Angle must be between 0.0 and 360.0, was %g\n"
|
||||
msgstr "Kot mora biti med 0.0 in 360.0, bil pa je %g\n"
|
||||
|
||||
#: ../src/ui/theme-parser.c:726
|
||||
#: ../src/ui/theme-parser.c:798
|
||||
#, c-format
|
||||
msgid "Alpha must be between 0.0 (invisible) and 1.0 (fully opaque), was %g\n"
|
||||
msgstr "Alfa mora biti med 0.0 (nevidno) in 1.0 (popolnoma vidno), bilo je %g\n"
|
||||
|
||||
#: ../src/ui/theme-parser.c:791
|
||||
#: ../src/ui/theme-parser.c:863
|
||||
#, c-format
|
||||
msgid "Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,large,x-large,xx-large)\n"
|
||||
msgstr "Neveljavna velikost naziva \"%s\" (mora biti eno od xx-small,x-small,small,medium,large,x-large,xx-large)\n"
|
||||
|
||||
#: ../src/ui/theme-parser.c:936
|
||||
#: ../src/ui/theme-parser.c:999
|
||||
#: ../src/ui/theme-parser.c:1033
|
||||
#: ../src/ui/theme-parser.c:1136
|
||||
#: ../src/ui/theme-parser.c:1008
|
||||
#: ../src/ui/theme-parser.c:1071
|
||||
#: ../src/ui/theme-parser.c:1105
|
||||
#: ../src/ui/theme-parser.c:1208
|
||||
#, c-format
|
||||
msgid "<%s> name \"%s\" used a second time"
|
||||
msgstr "ime <%s> \"%s\" je uporabljeno drugič"
|
||||
|
||||
#: ../src/ui/theme-parser.c:948
|
||||
#: ../src/ui/theme-parser.c:1045
|
||||
#: ../src/ui/theme-parser.c:1148
|
||||
#: ../src/ui/theme-parser.c:1020
|
||||
#: ../src/ui/theme-parser.c:1117
|
||||
#: ../src/ui/theme-parser.c:1220
|
||||
#, c-format
|
||||
msgid "<%s> parent \"%s\" has not been defined"
|
||||
msgstr "nadrejeni predmet <%s> \"%s\" ni bil naveden"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1058
|
||||
#: ../src/ui/theme-parser.c:1130
|
||||
#, c-format
|
||||
msgid "<%s> geometry \"%s\" has not been defined"
|
||||
msgstr "geometrija <%s> \"%s\" ni bila navedena"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1071
|
||||
#: ../src/ui/theme-parser.c:1143
|
||||
#, c-format
|
||||
msgid "<%s> must specify either a geometry or a parent that has a geometry"
|
||||
msgstr "<%s> mora navesti ali geometrijo ali nadrejeni predmet, ki ima geometrijo"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1113
|
||||
#: ../src/ui/theme-parser.c:1185
|
||||
msgid "You must specify a background for an alpha value to be meaningful"
|
||||
msgstr "Določiti morate ozadje, v kolikor želite, da ima alfa vrednost pomen."
|
||||
|
||||
#: ../src/ui/theme-parser.c:1180
|
||||
#: ../src/ui/theme-parser.c:1252
|
||||
#, c-format
|
||||
msgid "Unknown type \"%s\" on <%s> element"
|
||||
msgstr "Neznana vrsta \"%s\" v elementu <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1191
|
||||
#: ../src/ui/theme-parser.c:1263
|
||||
#, c-format
|
||||
msgid "Unknown style_set \"%s\" on <%s> element"
|
||||
msgstr "Neznan style_set \"%s\" v elementu <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1199
|
||||
#: ../src/ui/theme-parser.c:1271
|
||||
#, c-format
|
||||
msgid "Window type \"%s\" has already been assigned a style set"
|
||||
msgstr "Vrsti okna \"%s\" je bil nabor sloga že določen"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1229
|
||||
#: ../src/ui/theme-parser.c:1293
|
||||
#: ../src/ui/theme-parser.c:1519
|
||||
#: ../src/ui/theme-parser.c:2740
|
||||
#: ../src/ui/theme-parser.c:2786
|
||||
#: ../src/ui/theme-parser.c:2934
|
||||
#: ../src/ui/theme-parser.c:3126
|
||||
#: ../src/ui/theme-parser.c:3164
|
||||
#: ../src/ui/theme-parser.c:3202
|
||||
#: ../src/ui/theme-parser.c:3240
|
||||
#: ../src/ui/theme-parser.c:1301
|
||||
#: ../src/ui/theme-parser.c:1365
|
||||
#: ../src/ui/theme-parser.c:1591
|
||||
#: ../src/ui/theme-parser.c:2826
|
||||
#: ../src/ui/theme-parser.c:2872
|
||||
#: ../src/ui/theme-parser.c:3020
|
||||
#: ../src/ui/theme-parser.c:3212
|
||||
#: ../src/ui/theme-parser.c:3250
|
||||
#: ../src/ui/theme-parser.c:3288
|
||||
#: ../src/ui/theme-parser.c:3326
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed below <%s>"
|
||||
msgstr "Element <%s> ni dovoljen pod <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1343
|
||||
#: ../src/ui/theme-parser.c:1357
|
||||
#: ../src/ui/theme-parser.c:1402
|
||||
#: ../src/ui/theme-parser.c:1415
|
||||
#: ../src/ui/theme-parser.c:1429
|
||||
#: ../src/ui/theme-parser.c:1474
|
||||
msgid "Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio\" for buttons"
|
||||
msgstr "Ni mogoče navesti obojega \"button_width\"/\"button_height\" in razmerja\"aspect_ratio\" gumba"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1366
|
||||
#: ../src/ui/theme-parser.c:1438
|
||||
#, c-format
|
||||
msgid "Distance \"%s\" is unknown"
|
||||
msgstr "Razdalja \"%s\" ni znana"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1411
|
||||
#: ../src/ui/theme-parser.c:1483
|
||||
#, c-format
|
||||
msgid "Aspect ratio \"%s\" is unknown"
|
||||
msgstr "Razmerje \"%s\" ni znano"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1473
|
||||
#: ../src/ui/theme-parser.c:1545
|
||||
#, c-format
|
||||
msgid "Border \"%s\" is unknown"
|
||||
msgstr "Rob \"%s\" ni znane vrste"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1784
|
||||
#: ../src/ui/theme-parser.c:1856
|
||||
#, c-format
|
||||
msgid "No \"start_angle\" or \"from\" attribute on element <%s>"
|
||||
msgstr "Element <%s> nima atributa \"start_angle\" ali \"from\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:1791
|
||||
#: ../src/ui/theme-parser.c:1863
|
||||
#, c-format
|
||||
msgid "No \"extent_angle\" or \"to\" attribute on element <%s>"
|
||||
msgstr "Element <%s> nima atributa \"extent_angle\" ali \"to\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:2031
|
||||
#: ../src/ui/theme-parser.c:2103
|
||||
#, c-format
|
||||
msgid "Did not understand value \"%s\" for type of gradient"
|
||||
msgstr "Ni mogoče razumeti vrednost za vrsto preliva \"%s\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:2109
|
||||
#: ../src/ui/theme-parser.c:2484
|
||||
#: ../src/ui/theme-parser.c:2181
|
||||
#: ../src/ui/theme-parser.c:2556
|
||||
#, c-format
|
||||
msgid "Did not understand fill type \"%s\" for <%s> element"
|
||||
msgstr "Nerazpoznavna vrsta polnjenja \"%s\" za element <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2276
|
||||
#: ../src/ui/theme-parser.c:2359
|
||||
#: ../src/ui/theme-parser.c:2422
|
||||
#: ../src/ui/theme-parser.c:2348
|
||||
#: ../src/ui/theme-parser.c:2431
|
||||
#: ../src/ui/theme-parser.c:2494
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" for <%s> element"
|
||||
msgstr "Ni mogoče razumeti stanja \"%s\" za element <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2286
|
||||
#: ../src/ui/theme-parser.c:2369
|
||||
#: ../src/ui/theme-parser.c:2358
|
||||
#: ../src/ui/theme-parser.c:2441
|
||||
#, c-format
|
||||
msgid "Did not understand shadow \"%s\" for <%s> element"
|
||||
msgstr "Ni mogoče razumeti senčenja \"%s\" za element <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2296
|
||||
#: ../src/ui/theme-parser.c:2368
|
||||
#, c-format
|
||||
msgid "Did not understand arrow \"%s\" for <%s> element"
|
||||
msgstr "Ni mogoče razumeti puščice \"%s\" za element <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2596
|
||||
#: ../src/ui/theme-parser.c:2692
|
||||
#: ../src/ui/theme-parser.c:2682
|
||||
#: ../src/ui/theme-parser.c:2778
|
||||
#, c-format
|
||||
msgid "No <draw_ops> called \"%s\" has been defined"
|
||||
msgstr "<draw_ops> imenovan \"%s\" ni bil naveden"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2608
|
||||
#: ../src/ui/theme-parser.c:2704
|
||||
#: ../src/ui/theme-parser.c:2694
|
||||
#: ../src/ui/theme-parser.c:2790
|
||||
#, c-format
|
||||
msgid "Including draw_ops \"%s\" here would create a circular reference"
|
||||
msgstr "Vključevanje draw_ops \"%s\" tu, bi ustvarilo krožno nanašanje"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2819
|
||||
#: ../src/ui/theme-parser.c:2905
|
||||
#, c-format
|
||||
msgid "Unknown position \"%s\" for frame piece"
|
||||
msgstr "Neznan položaj \"%s\" za del okvirja"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2827
|
||||
#: ../src/ui/theme-parser.c:2913
|
||||
#, c-format
|
||||
msgid "Frame style already has a piece at position %s"
|
||||
msgstr "Slog okvirja že ima del na položaju %s"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2844
|
||||
#: ../src/ui/theme-parser.c:2919
|
||||
#: ../src/ui/theme-parser.c:2930
|
||||
#: ../src/ui/theme-parser.c:3005
|
||||
#, c-format
|
||||
msgid "No <draw_ops> with the name \"%s\" has been defined"
|
||||
msgstr "Za ime \"%s\" ni bilo navedenega <draw_ops>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2873
|
||||
#: ../src/ui/theme-parser.c:2959
|
||||
#, c-format
|
||||
msgid "Unknown function \"%s\" for button"
|
||||
msgstr "Neznana funkcija \"%s\" za gumb"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2882
|
||||
#: ../src/ui/theme-parser.c:2968
|
||||
#, c-format
|
||||
msgid "Button function \"%s\" does not exist in this version (%d, need %d)"
|
||||
msgstr "Funkcija gumba \"%s\" ne obstaja v tej različici (%d, zahtevana %d)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2894
|
||||
#: ../src/ui/theme-parser.c:2980
|
||||
#, c-format
|
||||
msgid "Unknown state \"%s\" for button"
|
||||
msgstr "Neznano stanje \"%s\" za gumb"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2902
|
||||
#: ../src/ui/theme-parser.c:2988
|
||||
#, c-format
|
||||
msgid "Frame style already has a button for function %s state %s"
|
||||
msgstr "Slog okvirja že ima gumb za funkcijo %s stanje %s"
|
||||
|
||||
#: ../src/ui/theme-parser.c:2973
|
||||
#: ../src/ui/theme-parser.c:3059
|
||||
#, c-format
|
||||
msgid "\"%s\" is not a valid value for focus attribute"
|
||||
msgstr "\"%s\" ni veljavna vrednost za atribut \"focus\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:2982
|
||||
#: ../src/ui/theme-parser.c:3068
|
||||
#, c-format
|
||||
msgid "\"%s\" is not a valid value for state attribute"
|
||||
msgstr "\"%s\" ni veljavna vrednost za atribut \"state\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:2992
|
||||
#: ../src/ui/theme-parser.c:3078
|
||||
#, c-format
|
||||
msgid "A style called \"%s\" has not been defined"
|
||||
msgstr "Slog imenovan \"%s\" ni bil določen"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3013
|
||||
#: ../src/ui/theme-parser.c:3036
|
||||
#: ../src/ui/theme-parser.c:3099
|
||||
#: ../src/ui/theme-parser.c:3122
|
||||
#, c-format
|
||||
msgid "\"%s\" is not a valid value for resize attribute"
|
||||
msgstr "\"%s\" ni veljavna vrednost za atribut \"resize\""
|
||||
|
||||
#: ../src/ui/theme-parser.c:3047
|
||||
#: ../src/ui/theme-parser.c:3133
|
||||
#, c-format
|
||||
msgid "Should not have \"resize\" attribute on <%s> element for maximized/shaded states"
|
||||
msgstr "Element <%s> ne bi smel imeti atributa \"resize\" za razpeta/senčena stanja"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3061
|
||||
#: ../src/ui/theme-parser.c:3147
|
||||
#, c-format
|
||||
msgid "Should not have \"resize\" attribute on <%s> element for maximized states"
|
||||
msgstr "Element <%s> ne bi smel imeti atributa \"resize\" za razpeta stanja"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3075
|
||||
#: ../src/ui/theme-parser.c:3097
|
||||
#: ../src/ui/theme-parser.c:3161
|
||||
#: ../src/ui/theme-parser.c:3183
|
||||
#, c-format
|
||||
msgid "Style has already been specified for state %s resize %s focus %s"
|
||||
msgstr "Slog za stanje %s resize %s fokus %s je bil že naveden"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3086
|
||||
#: ../src/ui/theme-parser.c:3108
|
||||
#: ../src/ui/theme-parser.c:3172
|
||||
#: ../src/ui/theme-parser.c:3194
|
||||
#, c-format
|
||||
msgid "Style has already been specified for state %s focus %s"
|
||||
msgstr "Slog za stanje %s fokus %s je bil že naveden"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3147
|
||||
#: ../src/ui/theme-parser.c:3233
|
||||
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)"
|
||||
msgstr "Za element <piece> ni mogoče imeti dveh draw_ops (tema je navedla atribut draw_ops in hkrati element <draw_ops> ali navedena dva elementa)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3185
|
||||
#: ../src/ui/theme-parser.c:3271
|
||||
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)"
|
||||
msgstr "Za element <button> ni mogoče imeti dveh draw_ops (tema je navedla atribut draw_ops in hkrati element <draw_ops> ali navedena dva elementa)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3223
|
||||
#: ../src/ui/theme-parser.c:3309
|
||||
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)"
|
||||
msgstr "Za element <menu_icon> ni mogoče imeti dveh draw_ops (tema je navedla atribut draw_ops in hkrati element <draw_ops> ali navedena dva elementa)"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3271
|
||||
#: ../src/ui/theme-parser.c:3373
|
||||
#, c-format
|
||||
msgid "Bad version specification '%s'"
|
||||
msgstr "Slabo določilo različice '%s'"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3446
|
||||
msgid "\"version\" attribute cannot be used in metacity-theme-1.xml or metacity-theme-2.xml"
|
||||
msgstr "atributa \"version\" ni mogoče uporabiti v temi metacity-theme-1.xml oziroma metacity-theme-2.xml"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3469
|
||||
#, c-format
|
||||
msgid "Theme requires version %s but latest supported theme version is %d.%d"
|
||||
msgstr "Tema zahteva različico %s, zadnja podprta različica teme pa je %d.%d"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3501
|
||||
#, c-format
|
||||
msgid "Outermost element in theme must be <metacity_theme> not <%s>"
|
||||
msgstr "Najbolj zunanji element teme mora biti <metacity_theme> in ne <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3291
|
||||
#: ../src/ui/theme-parser.c:3521
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a name/author/date/description element"
|
||||
msgstr "Element <%s> ni dovoljen znotraj elementov name, author, date ali description"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3296
|
||||
#: ../src/ui/theme-parser.c:3526
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a <constant> element"
|
||||
msgstr "Element <%s> ni dovoljen znotraj elementa <constant>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3308
|
||||
#: ../src/ui/theme-parser.c:3538
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a distance/border/aspect_ratio element"
|
||||
msgstr "Element <%s> ni dovoljen znotraj elementov distance/border/aspect_ration"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3330
|
||||
#: ../src/ui/theme-parser.c:3560
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a draw operation element"
|
||||
msgstr "Element <%s> ni dovoljen znotraj elementa operacije draw"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3340
|
||||
#: ../src/ui/theme-parser.c:3370
|
||||
#: ../src/ui/theme-parser.c:3375
|
||||
#: ../src/ui/theme-parser.c:3380
|
||||
#: ../src/ui/theme-parser.c:3570
|
||||
#: ../src/ui/theme-parser.c:3600
|
||||
#: ../src/ui/theme-parser.c:3605
|
||||
#: ../src/ui/theme-parser.c:3610
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a <%s> element"
|
||||
msgstr "Element <%s> ni dovoljen znotraj elementa <%s>"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3602
|
||||
#: ../src/ui/theme-parser.c:3838
|
||||
msgid "No draw_ops provided for frame piece"
|
||||
msgstr "Za del okvirja ni naveden draw_ops"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3617
|
||||
#: ../src/ui/theme-parser.c:3853
|
||||
msgid "No draw_ops provided for button"
|
||||
msgstr "Za gumb ni naveden draw_ops"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3669
|
||||
#: ../src/ui/theme-parser.c:3907
|
||||
#, c-format
|
||||
msgid "No text is allowed inside element <%s>"
|
||||
msgstr "Znotraj elementa <%s> besedilo ni dovoljeno"
|
||||
|
||||
#: ../src/ui/theme-parser.c:3724
|
||||
#: ../src/ui/theme-parser.c:3736
|
||||
#: ../src/ui/theme-parser.c:3748
|
||||
#: ../src/ui/theme-parser.c:3760
|
||||
#: ../src/ui/theme-parser.c:3772
|
||||
#: ../src/ui/theme-parser.c:3965
|
||||
#: ../src/ui/theme-parser.c:3977
|
||||
#: ../src/ui/theme-parser.c:3989
|
||||
#: ../src/ui/theme-parser.c:4001
|
||||
#: ../src/ui/theme-parser.c:4013
|
||||
#, c-format
|
||||
msgid "<%s> specified twice for this theme"
|
||||
msgstr "<%s> je za to temo naveden dvakrat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4040
|
||||
#: ../src/ui/theme-parser.c:4283
|
||||
#, c-format
|
||||
msgid "Failed to find a valid file for theme %s\n"
|
||||
msgstr "Ni mogoče najti veljavne datoteke za temo %s\n"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4096
|
||||
#, c-format
|
||||
msgid "Theme file %s did not contain a root <metacity_theme> element"
|
||||
msgstr "Datoteka teme %s ne vsebuje korenskega elementa <metacity_theme>"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:75
|
||||
msgid "/_Windows"
|
||||
msgstr "/_Okna"
|
||||
@@ -1839,12 +1858,12 @@ msgstr "Pričakovana je napaka, vendar odziva ni bilo"
|
||||
#: ../src/ui/theme-viewer.c:1255
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "Pričakovana je napaka %d, vrnjena pa je bilo %d"
|
||||
msgstr "Pričakovana je napaka %d, vrnjena pa je bila %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1261
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "Napaka ni pričakovana, vendar je vrnjena: %s"
|
||||
msgstr "Napaka ni pričakovana, vendar je vrnjen odziv: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1265
|
||||
#, c-format
|
||||
@@ -1854,13 +1873,15 @@ msgstr "vrednost x je %d, pričakovana pa je %d"
|
||||
#: ../src/ui/theme-viewer.c:1268
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "vrednost z je %d, pričakovana pa je %d"
|
||||
msgstr "vrednost y je %d, pričakovana pa je %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1333
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "%d izjav koordinat razčlenjenih v %g sekundah (%g sekund v povprečju)\n"
|
||||
|
||||
#~ msgid "Theme file %s did not contain a root <metacity_theme> element"
|
||||
#~ msgstr "Datoteka teme %s ne vsebuje korenskega elementa <metacity_theme>"
|
||||
#~ msgid "Failed to read saved session file %s: %s\n"
|
||||
#~ msgstr "Ni mogoče prebrati datoteke shranjene seje %s: %s\n"
|
||||
#~ msgid "<author> specified twice for this theme"
|
||||
|
1735
po/zh_CN.po
1735
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
@@ -39,6 +39,7 @@ mutter_SOURCES= \
|
||||
compositor/mutter-shaped-texture.h \
|
||||
compositor/tidy/tidy-texture-frame.c \
|
||||
compositor/tidy/tidy-texture-frame.h \
|
||||
gtk-compat.h \
|
||||
include/compositor.h \
|
||||
include/mutter-plugin.h \
|
||||
include/mutter-window.h \
|
||||
|
@@ -33,59 +33,6 @@ composite_at_least_version (MetaDisplay *display, int maj, int min)
|
||||
return (major > maj || (major == maj && minor >= min));
|
||||
}
|
||||
|
||||
static MutterWindow*
|
||||
find_window_for_screen (MetaScreen *screen, Window xwindow)
|
||||
{
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||
|
||||
if (info == NULL)
|
||||
return NULL;
|
||||
|
||||
return g_hash_table_lookup (info->windows_by_xid,
|
||||
(gpointer) xwindow);
|
||||
}
|
||||
|
||||
static MutterWindow *
|
||||
find_window_in_display (MetaDisplay *display, Window xwindow)
|
||||
{
|
||||
GSList *index;
|
||||
MetaWindow *window = meta_display_lookup_x_window (display, xwindow);
|
||||
|
||||
if (window)
|
||||
{
|
||||
void *priv = meta_window_get_compositor_private (window);
|
||||
if (priv)
|
||||
return priv;
|
||||
}
|
||||
|
||||
for (index = meta_display_get_screens (display);
|
||||
index;
|
||||
index = index->next)
|
||||
{
|
||||
MutterWindow *cw = find_window_for_screen (index->data, xwindow);
|
||||
|
||||
if (cw != NULL)
|
||||
return cw;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static MutterWindow *
|
||||
find_window_for_child_window_in_display (MetaDisplay *display, Window xwindow)
|
||||
{
|
||||
Window ignored1, *ignored2, parent;
|
||||
guint ignored_children;
|
||||
|
||||
XQueryTree (meta_display_get_xdisplay (display), xwindow, &ignored1,
|
||||
&parent, &ignored2, &ignored_children);
|
||||
|
||||
if (parent != None)
|
||||
return find_window_in_display (display, parent);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void sync_actor_stacking (GList *windows);
|
||||
|
||||
static void
|
||||
@@ -144,9 +91,15 @@ add_win (MetaWindow *window)
|
||||
|
||||
static void
|
||||
process_damage (MetaCompositor *compositor,
|
||||
XDamageNotifyEvent *event)
|
||||
XDamageNotifyEvent *event,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MutterWindow *cw = find_window_in_display (compositor->display, event->drawable);
|
||||
MutterWindow *cw;
|
||||
|
||||
if (window == NULL)
|
||||
return;
|
||||
|
||||
cw = MUTTER_WINDOW (meta_window_get_compositor_private (window));
|
||||
if (cw == NULL)
|
||||
return;
|
||||
|
||||
@@ -156,10 +109,15 @@ process_damage (MetaCompositor *compositor,
|
||||
#ifdef HAVE_SHAPE
|
||||
static void
|
||||
process_shape (MetaCompositor *compositor,
|
||||
XShapeEvent *event)
|
||||
XShapeEvent *event,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MutterWindow *cw = find_window_in_display (compositor->display,
|
||||
event->window);
|
||||
MutterWindow *cw;
|
||||
|
||||
if (window == NULL)
|
||||
return;
|
||||
|
||||
cw = MUTTER_WINDOW (meta_window_get_compositor_private (window));
|
||||
if (cw == NULL)
|
||||
return;
|
||||
|
||||
@@ -172,43 +130,29 @@ process_shape (MetaCompositor *compositor,
|
||||
|
||||
static void
|
||||
process_property_notify (MetaCompositor *compositor,
|
||||
XPropertyEvent *event)
|
||||
XPropertyEvent *event,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MetaDisplay *display = compositor->display;
|
||||
MutterWindow *cw;
|
||||
|
||||
if (window == NULL)
|
||||
return;
|
||||
|
||||
cw = MUTTER_WINDOW (meta_window_get_compositor_private (window));
|
||||
if (cw == NULL)
|
||||
return;
|
||||
|
||||
/* Check for the opacity changing */
|
||||
if (event->atom == compositor->atom_net_wm_window_opacity)
|
||||
{
|
||||
MutterWindow *cw = find_window_in_display (display, event->window);
|
||||
|
||||
if (!cw)
|
||||
{
|
||||
/* Applications can set this for their toplevel windows, so
|
||||
* this must be propagated to the window managed by the compositor
|
||||
*/
|
||||
cw = find_window_for_child_window_in_display (display,
|
||||
event->window);
|
||||
}
|
||||
|
||||
if (!cw)
|
||||
{
|
||||
DEBUG_TRACE ("process_property_notify: opacity, early exit\n");
|
||||
return;
|
||||
}
|
||||
|
||||
mutter_window_update_opacity (cw);
|
||||
DEBUG_TRACE ("process_property_notify: net_wm_window_opacity\n");
|
||||
return;
|
||||
}
|
||||
else if (event->atom == meta_display_get_atom (display,
|
||||
META_ATOM__NET_WM_WINDOW_TYPE))
|
||||
{
|
||||
MutterWindow *cw = find_window_in_display (display, event->window);
|
||||
|
||||
if (!cw)
|
||||
{
|
||||
DEBUG_TRACE ("process_property_notify: net_wm_type, early exit\n");
|
||||
return;
|
||||
}
|
||||
|
||||
mutter_window_update_window_type (cw);
|
||||
DEBUG_TRACE ("process_property_notify: net_wm_type\n");
|
||||
return;
|
||||
@@ -505,7 +449,6 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
|
||||
info->output = None;
|
||||
info->windows = NULL;
|
||||
info->windows_by_xid = g_hash_table_new (g_direct_hash, g_direct_equal);
|
||||
|
||||
meta_screen_set_cm_selection (screen);
|
||||
|
||||
@@ -545,9 +488,17 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
clutter_actor_hide (info->hidden_group);
|
||||
|
||||
info->plugin_mgr =
|
||||
mutter_plugin_manager_new (screen);
|
||||
if (!mutter_plugin_manager_load (info->plugin_mgr))
|
||||
g_critical ("failed to load plugins");
|
||||
mutter_plugin_manager_get (screen);
|
||||
|
||||
if (info->plugin_mgr != mutter_plugin_manager_get_default ())
|
||||
{
|
||||
/* The default plugin manager has been initialized during
|
||||
* global preferences load.
|
||||
*/
|
||||
if (!mutter_plugin_manager_load (info->plugin_mgr))
|
||||
g_critical ("failed to load plugins");
|
||||
}
|
||||
|
||||
if (!mutter_plugin_manager_initialize (info->plugin_mgr))
|
||||
g_critical ("failed to initialize plugins");
|
||||
|
||||
@@ -634,8 +585,8 @@ is_grabbed_event (XEvent *event)
|
||||
case EnterNotify:
|
||||
case LeaveNotify:
|
||||
case MotionNotify:
|
||||
case KeyPressMask:
|
||||
case KeyReleaseMask:
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -696,38 +647,37 @@ meta_compositor_process_event (MetaCompositor *compositor,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This trap is so that none of the compositor functions cause
|
||||
* X errors. This is really a hack, but I'm afraid I don't understand
|
||||
* enough about Metacity/X to know how else you are supposed to do it
|
||||
*/
|
||||
|
||||
|
||||
meta_error_trap_push (compositor->display);
|
||||
switch (event->type)
|
||||
{
|
||||
case PropertyNotify:
|
||||
process_property_notify (compositor, (XPropertyEvent *) event);
|
||||
process_property_notify (compositor, (XPropertyEvent *) event, window);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (event->type == meta_display_get_damage_event_base (compositor->display) + XDamageNotify)
|
||||
{
|
||||
/* Core code doesn't handle damage events, so we need to extract the MetaWindow
|
||||
* ourselves
|
||||
*/
|
||||
if (window == NULL)
|
||||
{
|
||||
Window xwin = ((XDamageNotifyEvent *) event)->drawable;
|
||||
window = meta_display_lookup_x_window (compositor->display, xwin);
|
||||
}
|
||||
|
||||
DEBUG_TRACE ("meta_compositor_process_event (process_damage)\n");
|
||||
process_damage (compositor, (XDamageNotifyEvent *) event);
|
||||
process_damage (compositor, (XDamageNotifyEvent *) event, window);
|
||||
}
|
||||
#ifdef HAVE_SHAPE
|
||||
else if (event->type == meta_display_get_shape_event_base (compositor->display) + ShapeNotify)
|
||||
{
|
||||
DEBUG_TRACE ("meta_compositor_process_event (process_shape)\n");
|
||||
process_shape (compositor, (XShapeEvent *) event);
|
||||
process_shape (compositor, (XShapeEvent *) event, window);
|
||||
}
|
||||
#endif /* HAVE_SHAPE */
|
||||
break;
|
||||
}
|
||||
|
||||
meta_error_trap_pop (compositor->display, FALSE);
|
||||
|
||||
/* Clutter needs to know about MapNotify events otherwise it will
|
||||
think the stage is invisible */
|
||||
if (event->type == MapNotify)
|
||||
@@ -840,7 +790,6 @@ meta_compositor_switch_workspace (MetaCompositor *compositor,
|
||||
|
||||
if (!info->plugin_mgr ||
|
||||
!mutter_plugin_manager_switch_workspace (info->plugin_mgr,
|
||||
(const GList **)&info->windows,
|
||||
from_indx,
|
||||
to_indx,
|
||||
direction))
|
||||
|
@@ -39,26 +39,27 @@
|
||||
*/
|
||||
static GHashTable *plugin_modules = NULL;
|
||||
|
||||
/*
|
||||
* We have one "default plugin manager" that acts for the first screen,
|
||||
* but also can be used before we open any screens, and additional
|
||||
* plugin managers for each screen. (This is ugly. Probably we should
|
||||
* have one plugin manager and only make the plugins per-screen.)
|
||||
*/
|
||||
|
||||
static MutterPluginManager *default_plugin_manager;
|
||||
|
||||
static gboolean mutter_plugin_manager_reload (MutterPluginManager *plugin_mgr);
|
||||
|
||||
struct MutterPluginManager
|
||||
{
|
||||
MetaScreen *screen;
|
||||
|
||||
GList /* MutterPluginPending */ *pending_plugin_modules; /* Plugins not yet fully loaded */
|
||||
GList /* MutterPlugin */ *plugins; /* TODO -- maybe use hash table */
|
||||
GList *unload; /* Plugins that are disabled and pending unload */
|
||||
|
||||
guint idle_unload_id;
|
||||
};
|
||||
|
||||
typedef struct MutterPluginPending
|
||||
{
|
||||
MutterModule *module;
|
||||
char *path;
|
||||
char *params;
|
||||
} MutterPluginPending;
|
||||
|
||||
/*
|
||||
* Checks that the plugin is compatible with the WM and sets up the plugin
|
||||
* struct.
|
||||
@@ -78,7 +79,6 @@ mutter_plugin_load (MutterPluginManager *mgr,
|
||||
}
|
||||
|
||||
plugin = g_object_new (plugin_type,
|
||||
"screen", mgr->screen,
|
||||
"params", params,
|
||||
NULL);
|
||||
|
||||
@@ -270,12 +270,14 @@ mutter_plugin_manager_load (MutterPluginManager *plugin_mgr)
|
||||
|
||||
if (use_succeeded)
|
||||
{
|
||||
MutterPluginPending *pending = g_new0 (MutterPluginPending, 1);
|
||||
pending->module = module;
|
||||
pending->path = g_strdup (path);
|
||||
pending->params = g_strdup (params);
|
||||
plugin_mgr->pending_plugin_modules =
|
||||
g_list_prepend (plugin_mgr->pending_plugin_modules, pending);
|
||||
MutterPlugin *plugin = mutter_plugin_load (plugin_mgr, module, params);
|
||||
|
||||
if (plugin)
|
||||
plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin);
|
||||
else
|
||||
g_warning ("Plugin load for [%s] failed", path);
|
||||
|
||||
g_type_module_unuse (G_TYPE_MODULE (module));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -293,7 +295,7 @@ mutter_plugin_manager_load (MutterPluginManager *plugin_mgr)
|
||||
if (fallback)
|
||||
g_slist_free (fallback);
|
||||
|
||||
if (plugin_mgr->pending_plugin_modules != NULL)
|
||||
if (plugin_mgr->plugins != NULL)
|
||||
{
|
||||
meta_prefs_add_listener (prefs_changed_callback, plugin_mgr);
|
||||
return TRUE;
|
||||
@@ -307,27 +309,19 @@ mutter_plugin_manager_initialize (MutterPluginManager *plugin_mgr)
|
||||
{
|
||||
GList *iter;
|
||||
|
||||
for (iter = plugin_mgr->pending_plugin_modules; iter; iter = iter->next)
|
||||
for (iter = plugin_mgr->plugins; iter; iter = iter->next)
|
||||
{
|
||||
MutterPluginPending *pending = (MutterPluginPending*) iter->data;
|
||||
MutterPlugin *p;
|
||||
MutterPlugin *plugin = (MutterPlugin*) iter->data;
|
||||
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
if ((p = mutter_plugin_load (plugin_mgr, pending->module, pending->params)))
|
||||
{
|
||||
plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, p);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("Plugin load for [%s] failed", pending->path);
|
||||
}
|
||||
g_object_set (plugin,
|
||||
"screen", plugin_mgr->screen,
|
||||
NULL);
|
||||
|
||||
g_type_module_unuse (G_TYPE_MODULE (pending->module));
|
||||
g_free (pending->path);
|
||||
g_free (pending->params);
|
||||
g_free (pending);
|
||||
if (klass->start)
|
||||
klass->start (plugin);
|
||||
}
|
||||
g_list_free (plugin_mgr->pending_plugin_modules);
|
||||
plugin_mgr->pending_plugin_modules = NULL;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -349,7 +343,7 @@ mutter_plugin_manager_reload (MutterPluginManager *plugin_mgr)
|
||||
return mutter_plugin_manager_load (plugin_mgr);
|
||||
}
|
||||
|
||||
MutterPluginManager *
|
||||
static MutterPluginManager *
|
||||
mutter_plugin_manager_new (MetaScreen *screen)
|
||||
{
|
||||
MutterPluginManager *plugin_mgr;
|
||||
@@ -364,13 +358,52 @@ mutter_plugin_manager_new (MetaScreen *screen)
|
||||
|
||||
plugin_mgr->screen = screen;
|
||||
|
||||
if (screen)
|
||||
g_object_set_data (G_OBJECT (screen), "mutter-plugin-manager", plugin_mgr);
|
||||
|
||||
return plugin_mgr;
|
||||
}
|
||||
|
||||
MutterPluginManager *
|
||||
mutter_plugin_manager_get_default (void)
|
||||
{
|
||||
if (!default_plugin_manager)
|
||||
{
|
||||
default_plugin_manager = mutter_plugin_manager_new (NULL);
|
||||
}
|
||||
|
||||
return default_plugin_manager;
|
||||
}
|
||||
|
||||
MutterPluginManager *
|
||||
mutter_plugin_manager_get (MetaScreen *screen)
|
||||
{
|
||||
MutterPluginManager *plugin_mgr;
|
||||
|
||||
plugin_mgr = g_object_get_data (G_OBJECT (screen), "mutter-plugin-manager");
|
||||
if (plugin_mgr)
|
||||
return plugin_mgr;
|
||||
|
||||
if (!default_plugin_manager)
|
||||
mutter_plugin_manager_get_default ();
|
||||
|
||||
if (!default_plugin_manager->screen)
|
||||
{
|
||||
/* The default plugin manager is so far unused, we can recycle it */
|
||||
default_plugin_manager->screen = screen;
|
||||
g_object_set_data (G_OBJECT (screen), "mutter-plugin-manager", default_plugin_manager);
|
||||
|
||||
return default_plugin_manager;
|
||||
}
|
||||
else
|
||||
{
|
||||
return mutter_plugin_manager_new (screen);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
mutter_plugin_manager_kill_effect (MutterPluginManager *plugin_mgr,
|
||||
MutterWindow *actor,
|
||||
unsigned long events)
|
||||
mutter_plugin_manager_kill_window_effects (MutterPluginManager *plugin_mgr,
|
||||
MutterWindow *actor)
|
||||
{
|
||||
GList *l = plugin_mgr->plugins;
|
||||
|
||||
@@ -380,17 +413,32 @@ mutter_plugin_manager_kill_effect (MutterPluginManager *plugin_mgr,
|
||||
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
if (!mutter_plugin_disabled (plugin)
|
||||
&& (mutter_plugin_features (plugin) & events)
|
||||
&& klass->kill_effect)
|
||||
klass->kill_effect (plugin, actor, events);
|
||||
&& klass->kill_window_effects)
|
||||
klass->kill_window_effects (plugin, actor);
|
||||
|
||||
l = l->next;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
mutter_plugin_manager_kill_switch_workspace (MutterPluginManager *plugin_mgr)
|
||||
{
|
||||
GList *l = plugin_mgr->plugins;
|
||||
|
||||
while (l)
|
||||
{
|
||||
MutterPlugin *plugin = l->data;
|
||||
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
if (!mutter_plugin_disabled (plugin)
|
||||
&& (mutter_plugin_features (plugin) & MUTTER_PLUGIN_SWITCH_WORKSPACE)
|
||||
&& klass->kill_switch_workspace)
|
||||
klass->kill_switch_workspace (plugin);
|
||||
|
||||
l = l->next;
|
||||
}
|
||||
}
|
||||
|
||||
#define ALL_BUT_SWITCH \
|
||||
MUTTER_PLUGIN_ALL_EFFECTS & \
|
||||
~MUTTER_PLUGIN_SWITCH_WORKSPACE
|
||||
/*
|
||||
* Public method that the compositor hooks into for events that require
|
||||
* no additional parameters.
|
||||
@@ -427,10 +475,9 @@ mutter_plugin_manager_event_simple (MutterPluginManager *plugin_mgr,
|
||||
case MUTTER_PLUGIN_MINIMIZE:
|
||||
if (klass->minimize)
|
||||
{
|
||||
mutter_plugin_manager_kill_effect (
|
||||
mutter_plugin_manager_kill_window_effects (
|
||||
plugin_mgr,
|
||||
actor,
|
||||
ALL_BUT_SWITCH);
|
||||
actor);
|
||||
|
||||
_mutter_plugin_effect_started (plugin);
|
||||
klass->minimize (plugin, actor);
|
||||
@@ -439,10 +486,9 @@ mutter_plugin_manager_event_simple (MutterPluginManager *plugin_mgr,
|
||||
case MUTTER_PLUGIN_MAP:
|
||||
if (klass->map)
|
||||
{
|
||||
mutter_plugin_manager_kill_effect (
|
||||
mutter_plugin_manager_kill_window_effects (
|
||||
plugin_mgr,
|
||||
actor,
|
||||
ALL_BUT_SWITCH);
|
||||
actor);
|
||||
|
||||
_mutter_plugin_effect_started (plugin);
|
||||
klass->map (plugin, actor);
|
||||
@@ -506,10 +552,9 @@ mutter_plugin_manager_event_maximize (MutterPluginManager *plugin_mgr,
|
||||
case MUTTER_PLUGIN_MAXIMIZE:
|
||||
if (klass->maximize)
|
||||
{
|
||||
mutter_plugin_manager_kill_effect (
|
||||
mutter_plugin_manager_kill_window_effects (
|
||||
plugin_mgr,
|
||||
actor,
|
||||
ALL_BUT_SWITCH);
|
||||
actor);
|
||||
|
||||
_mutter_plugin_effect_started (plugin);
|
||||
klass->maximize (plugin, actor,
|
||||
@@ -520,10 +565,9 @@ mutter_plugin_manager_event_maximize (MutterPluginManager *plugin_mgr,
|
||||
case MUTTER_PLUGIN_UNMAXIMIZE:
|
||||
if (klass->unmaximize)
|
||||
{
|
||||
mutter_plugin_manager_kill_effect (
|
||||
mutter_plugin_manager_kill_window_effects (
|
||||
plugin_mgr,
|
||||
actor,
|
||||
ALL_BUT_SWITCH);
|
||||
actor);
|
||||
|
||||
_mutter_plugin_effect_started (plugin);
|
||||
klass->unmaximize (plugin, actor,
|
||||
@@ -552,7 +596,6 @@ mutter_plugin_manager_event_maximize (MutterPluginManager *plugin_mgr,
|
||||
*/
|
||||
gboolean
|
||||
mutter_plugin_manager_switch_workspace (MutterPluginManager *plugin_mgr,
|
||||
const GList **actors,
|
||||
gint from,
|
||||
gint to,
|
||||
MetaMotionDirection direction)
|
||||
@@ -570,19 +613,15 @@ mutter_plugin_manager_switch_workspace (MutterPluginManager *plugin_mgr,
|
||||
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
if (!mutter_plugin_disabled (plugin) &&
|
||||
(mutter_plugin_features (plugin) & MUTTER_PLUGIN_SWITCH_WORKSPACE) &&
|
||||
(actors && *actors))
|
||||
(mutter_plugin_features (plugin) & MUTTER_PLUGIN_SWITCH_WORKSPACE))
|
||||
{
|
||||
if (klass->switch_workspace)
|
||||
{
|
||||
retval = TRUE;
|
||||
mutter_plugin_manager_kill_effect (
|
||||
plugin_mgr,
|
||||
MUTTER_WINDOW ((*actors)->data),
|
||||
MUTTER_PLUGIN_SWITCH_WORKSPACE);
|
||||
mutter_plugin_manager_kill_switch_workspace (plugin_mgr);
|
||||
|
||||
_mutter_plugin_effect_started (plugin);
|
||||
klass->switch_workspace (plugin, actors, from, to, direction);
|
||||
klass->switch_workspace (plugin, from, to, direction);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -31,9 +31,20 @@
|
||||
#include "mutter-plugin.h"
|
||||
#undef MUTTER_PLUGIN_FROM_MANAGER_
|
||||
|
||||
#define MUTTER_PLUGIN_MINIMIZE (1<<0)
|
||||
#define MUTTER_PLUGIN_MAXIMIZE (1<<1)
|
||||
#define MUTTER_PLUGIN_UNMAXIMIZE (1<<2)
|
||||
#define MUTTER_PLUGIN_MAP (1<<3)
|
||||
#define MUTTER_PLUGIN_DESTROY (1<<4)
|
||||
#define MUTTER_PLUGIN_SWITCH_WORKSPACE (1<<5)
|
||||
|
||||
#define MUTTER_PLUGIN_ALL_EFFECTS (~0)
|
||||
|
||||
typedef struct MutterPluginManager MutterPluginManager;
|
||||
|
||||
MutterPluginManager * mutter_plugin_manager_new (MetaScreen *screen);
|
||||
MutterPluginManager * mutter_plugin_manager_get (MetaScreen *screen);
|
||||
MutterPluginManager * mutter_plugin_manager_get_default (void);
|
||||
|
||||
gboolean mutter_plugin_manager_load (MutterPluginManager *mgr);
|
||||
gboolean mutter_plugin_manager_initialize (MutterPluginManager *plugin_mgr);
|
||||
gboolean mutter_plugin_manager_event_simple (MutterPluginManager *mgr,
|
||||
@@ -52,7 +63,6 @@ void mutter_plugin_manager_update_workspaces (MutterPluginManager *mgr);
|
||||
void mutter_plugin_manager_update_workspace (MutterPluginManager *mgr, MetaWorkspace *w);
|
||||
|
||||
gboolean mutter_plugin_manager_switch_workspace (MutterPluginManager *mgr,
|
||||
const GList **actors,
|
||||
gint from,
|
||||
gint to,
|
||||
MetaMotionDirection direction);
|
||||
|
@@ -238,8 +238,7 @@ mutter_plugin_class_init (MutterPluginClass *klass)
|
||||
"MetaScreen",
|
||||
"MetaScreen",
|
||||
META_TYPE_SCREEN,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_PARAMS,
|
||||
@@ -368,9 +367,25 @@ _mutter_plugin_effect_started (MutterPlugin *plugin)
|
||||
}
|
||||
|
||||
void
|
||||
mutter_plugin_effect_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor,
|
||||
unsigned long event)
|
||||
mutter_plugin_switch_workspace_completed (MutterPlugin *plugin)
|
||||
{
|
||||
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
|
||||
|
||||
MetaScreen *screen = mutter_plugin_get_screen (plugin);
|
||||
|
||||
if (priv->running-- < 0)
|
||||
{
|
||||
g_warning ("Error in running effect accounting, adjusting.");
|
||||
priv->running = 0;
|
||||
}
|
||||
|
||||
mutter_switch_workspace_completed (screen);
|
||||
}
|
||||
|
||||
static void
|
||||
mutter_plugin_window_effect_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor,
|
||||
unsigned long event)
|
||||
{
|
||||
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
|
||||
|
||||
@@ -392,17 +407,42 @@ mutter_plugin_effect_completed (MutterPlugin *plugin,
|
||||
name ? name : "unknown");
|
||||
}
|
||||
|
||||
if (event == MUTTER_PLUGIN_SWITCH_WORKSPACE)
|
||||
{
|
||||
/* The window is just used to identify the screen */
|
||||
MetaWindow *window = mutter_window_get_meta_window (actor);
|
||||
MetaScreen *screen = meta_window_get_screen (window);
|
||||
mutter_switch_workspace_completed (screen);
|
||||
}
|
||||
else
|
||||
{
|
||||
mutter_window_effect_completed (actor, event);
|
||||
}
|
||||
mutter_window_effect_completed (actor, event);
|
||||
}
|
||||
|
||||
void
|
||||
mutter_plugin_minimize_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor)
|
||||
{
|
||||
mutter_plugin_window_effect_completed (plugin, actor, MUTTER_PLUGIN_MINIMIZE);
|
||||
}
|
||||
|
||||
void
|
||||
mutter_plugin_maximize_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor)
|
||||
{
|
||||
mutter_plugin_window_effect_completed (plugin, actor, MUTTER_PLUGIN_MAXIMIZE);
|
||||
}
|
||||
|
||||
void
|
||||
mutter_plugin_unmaximize_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor)
|
||||
{
|
||||
mutter_plugin_window_effect_completed (plugin, actor, MUTTER_PLUGIN_UNMAXIMIZE);
|
||||
}
|
||||
|
||||
void
|
||||
mutter_plugin_map_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor)
|
||||
{
|
||||
mutter_plugin_window_effect_completed (plugin, actor, MUTTER_PLUGIN_MAP);
|
||||
}
|
||||
|
||||
void
|
||||
mutter_plugin_destroy_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor)
|
||||
{
|
||||
mutter_plugin_window_effect_completed (plugin, actor, MUTTER_PLUGIN_DESTROY);
|
||||
}
|
||||
|
||||
void
|
||||
|
40
src/compositor/mutter-shaped-texture.c
Executable file → Normal file
40
src/compositor/mutter-shaped-texture.c
Executable file → Normal file
@@ -124,18 +124,18 @@ mutter_shaped_texture_dispose (GObject *object)
|
||||
|
||||
if (priv->material != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_material_unref (priv->material);
|
||||
cogl_handle_unref (priv->material);
|
||||
priv->material = COGL_INVALID_HANDLE;
|
||||
}
|
||||
if (priv->material_unshaped != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_material_unref (priv->material_unshaped);
|
||||
cogl_handle_unref (priv->material_unshaped);
|
||||
priv->material_unshaped = COGL_INVALID_HANDLE;
|
||||
}
|
||||
#if 1 /* see comment in mutter_shaped_texture_paint */
|
||||
if (priv->material_workaround != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_material_unref (priv->material_workaround);
|
||||
cogl_handle_unref (priv->material_workaround);
|
||||
priv->material_workaround = COGL_INVALID_HANDLE;
|
||||
}
|
||||
#endif
|
||||
@@ -194,7 +194,7 @@ mutter_shaped_texture_dirty_mask (MutterShapedTexture *stex)
|
||||
if (mask_gl_target == GL_TEXTURE_RECTANGLE_ARB)
|
||||
glDeleteTextures (1, &mask_gl_tex);
|
||||
|
||||
cogl_texture_unref (priv->mask_texture);
|
||||
cogl_handle_unref (priv->mask_texture);
|
||||
priv->mask_texture = COGL_INVALID_HANDLE;
|
||||
}
|
||||
}
|
||||
@@ -299,9 +299,6 @@ mutter_shaped_texture_paint (ClutterActor *actor)
|
||||
guint tex_width, tex_height;
|
||||
ClutterActorBox alloc;
|
||||
CoglHandle material;
|
||||
#if 1 /* please see comment below about workaround */
|
||||
guint depth;
|
||||
#endif
|
||||
|
||||
if (priv->clip_region && gdk_region_empty (priv->clip_region))
|
||||
return;
|
||||
@@ -363,35 +360,6 @@ mutter_shaped_texture_paint (ClutterActor *actor)
|
||||
}
|
||||
material = priv->material;
|
||||
|
||||
#if 1
|
||||
/* This was added as a workaround. It seems that with the intel
|
||||
* drivers when multi-texturing using an RGB TFP texture, the
|
||||
* texture is actually setup internally as an RGBA texture, where
|
||||
* the alpha channel is mostly 0.0 so you only see a shimmer of the
|
||||
* window. This workaround forcibly defines the alpha channel as
|
||||
* 1.0. Maybe there is some clutter/cogl state that is interacting
|
||||
* with this that is being overlooked, but for now this seems to
|
||||
* work. */
|
||||
g_object_get (stex, "pixmap-depth", &depth, NULL);
|
||||
if (depth == 24)
|
||||
{
|
||||
if (priv->material_workaround == COGL_INVALID_HANDLE)
|
||||
{
|
||||
material = priv->material_workaround = cogl_material_new ();
|
||||
|
||||
cogl_material_set_layer_combine (material, 0,
|
||||
"RGB = MODULATE (TEXTURE, PREVIOUS)"
|
||||
"A = REPLACE (PREVIOUS)",
|
||||
NULL);
|
||||
cogl_material_set_layer_combine (material, 1,
|
||||
"RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
|
||||
NULL);
|
||||
}
|
||||
|
||||
material = priv->material_workaround;
|
||||
}
|
||||
#endif
|
||||
|
||||
cogl_material_set_layer (material, 1, priv->mask_texture);
|
||||
}
|
||||
|
||||
|
@@ -31,15 +31,6 @@
|
||||
#define M_LOG2E 1.4426950408889634074
|
||||
#endif
|
||||
|
||||
#if !CLUTTER_CHECK_VERSION(1,1,3)
|
||||
static PFNGLACTIVETEXTUREARBPROC activeTexture;
|
||||
static PFNGLGENFRAMEBUFFERSPROC genFramebuffers;
|
||||
static PFNGLDELETEFRAMEBUFFERSPROC deleteFramebuffers;
|
||||
static PFNGLBINDFRAMEBUFFERPROC bindFramebuffer;
|
||||
static PFNGLFRAMEBUFFERTEXTURE2DPROC framebufferTexture2D;
|
||||
#endif
|
||||
|
||||
|
||||
#define MAX_TEXTURE_LEVELS 12
|
||||
|
||||
/* If the texture format in memory doesn't match this, then Mesa
|
||||
@@ -68,11 +59,7 @@ struct _MutterTextureTower
|
||||
{
|
||||
int n_levels;
|
||||
CoglHandle textures[MAX_TEXTURE_LEVELS];
|
||||
#if CLUTTER_CHECK_VERSION(1,1,3)
|
||||
CoglHandle fbos[MAX_TEXTURE_LEVELS];
|
||||
#else
|
||||
GLuint fbos[MAX_TEXTURE_LEVELS];
|
||||
#endif
|
||||
Box invalid[MAX_TEXTURE_LEVELS];
|
||||
};
|
||||
|
||||
@@ -131,7 +118,7 @@ free_texture (CoglHandle texture)
|
||||
if (gl_target == GL_TEXTURE_RECTANGLE_ARB)
|
||||
glDeleteTextures (1, &gl_tex);
|
||||
|
||||
cogl_texture_unref (texture);
|
||||
cogl_handle_unref (texture);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -165,22 +152,14 @@ mutter_texture_tower_set_base_texture (MutterTextureTower *tower,
|
||||
tower->textures[i] = COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
#if CLUTTER_CHECK_VERSION(1,1,3)
|
||||
if (tower->fbos[i] != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (tower->fbos[i]);
|
||||
tower->fbos[i] = COGL_INVALID_HANDLE;
|
||||
}
|
||||
#else
|
||||
if (tower->fbos[i] != 0)
|
||||
{
|
||||
(*deleteFramebuffers) (1, &tower->fbos[i]);
|
||||
tower->fbos[i] = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
cogl_texture_unref (tower->textures[0]);
|
||||
cogl_handle_unref (tower->textures[0]);
|
||||
}
|
||||
|
||||
tower->textures[0] = texture;
|
||||
@@ -189,7 +168,7 @@ mutter_texture_tower_set_base_texture (MutterTextureTower *tower,
|
||||
{
|
||||
int width, height;
|
||||
|
||||
cogl_texture_ref (tower->textures[0]);
|
||||
cogl_handle_ref (tower->textures[0]);
|
||||
|
||||
width = cogl_texture_get_width (tower->textures[0]);
|
||||
height = cogl_texture_get_height (tower->textures[0]);
|
||||
@@ -429,17 +408,6 @@ texture_tower_create_texture (MutterTextureTower *tower,
|
||||
tower->invalid[level].y2 = height;
|
||||
}
|
||||
|
||||
/* The COGL fbo (render-to-texture) support is pretty hard to use in
|
||||
* Clutter 1.0; there's no way to save and restore the old projection
|
||||
* matrix and viewport without ugly workarounds that require explicit
|
||||
* access to the ClutterStage. In Clutter 1.2, the save/restore is
|
||||
* automatic. For now, until we depend on Clutter 1.2, we use GL
|
||||
* directly for render-to-texture. The main downside (other than
|
||||
* a lot of verbosity) is that we have to save the state, reset anything
|
||||
* that we think COGL might have left in a way we don't want it, then
|
||||
* restore the old state.
|
||||
*/
|
||||
#if CLUTTER_CHECK_VERSION(1,1,3)
|
||||
static gboolean
|
||||
texture_tower_revalidate_fbo (MutterTextureTower *tower,
|
||||
int level)
|
||||
@@ -454,7 +422,12 @@ texture_tower_revalidate_fbo (MutterTextureTower *tower,
|
||||
CoglMatrix modelview;
|
||||
|
||||
if (tower->fbos[level] == COGL_INVALID_HANDLE)
|
||||
tower->fbos[level] = cogl_offscreen_new_to_texture (dest_texture);
|
||||
{
|
||||
/* Work around http://bugzilla.openedhand.com/show_bug.cgi?id=2110 */
|
||||
cogl_flush();
|
||||
|
||||
tower->fbos[level] = cogl_offscreen_new_to_texture (dest_texture);
|
||||
}
|
||||
|
||||
if (tower->fbos[level] == COGL_INVALID_HANDLE)
|
||||
return FALSE;
|
||||
@@ -478,162 +451,6 @@ texture_tower_revalidate_fbo (MutterTextureTower *tower,
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#else
|
||||
static void
|
||||
initialize_gl_functions (void)
|
||||
{
|
||||
static gboolean initialized = FALSE;
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
initialized = TRUE;
|
||||
|
||||
activeTexture = (PFNGLACTIVETEXTUREARBPROC) cogl_get_proc_address ("glActiveTextureARB");
|
||||
genFramebuffers = (PFNGLGENFRAMEBUFFERSPROC) cogl_get_proc_address ("glGenFramebuffersEXT");
|
||||
deleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC) cogl_get_proc_address ("glDeleteFramebuffersEXT");
|
||||
bindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) cogl_get_proc_address ("glBindFramebufferEXT");
|
||||
framebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC) cogl_get_proc_address ("glFramebufferTexture2D");
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
texture_tower_revalidate_fbo (MutterTextureTower *tower,
|
||||
int level)
|
||||
{
|
||||
CoglHandle source_texture = tower->textures[level - 1];
|
||||
int source_texture_width = cogl_texture_get_width (source_texture);
|
||||
int source_texture_height = cogl_texture_get_height (source_texture);
|
||||
CoglHandle dest_texture = tower->textures[level];
|
||||
int dest_texture_width = cogl_texture_get_width (dest_texture);
|
||||
int dest_texture_height = cogl_texture_get_height (dest_texture);
|
||||
ClutterActorBox source_box;
|
||||
Box *dest_box;
|
||||
|
||||
GLuint source_gl_tex;
|
||||
GLenum source_gl_target;
|
||||
|
||||
if (!cogl_features_available (COGL_FEATURE_OFFSCREEN))
|
||||
return FALSE;
|
||||
|
||||
initialize_gl_functions ();
|
||||
|
||||
/* Create the frame-buffer object that renders to the texture, if
|
||||
* it doesn't exist; just bind it for rendering if it does */
|
||||
if (tower->fbos[level] == 0)
|
||||
{
|
||||
GLuint dest_gl_tex;
|
||||
GLenum dest_gl_target;
|
||||
|
||||
cogl_texture_get_gl_texture (dest_texture, &dest_gl_tex, &dest_gl_target);
|
||||
|
||||
(*genFramebuffers) (1, &tower->fbos[level]);
|
||||
(*bindFramebuffer) (GL_FRAMEBUFFER_EXT, tower->fbos[level]);
|
||||
(*framebufferTexture2D) (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
dest_gl_target, dest_gl_tex, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
(*bindFramebuffer) (GL_FRAMEBUFFER_EXT, tower->fbos[level]);
|
||||
}
|
||||
|
||||
/* Save the old state (other than the transformation matrices) */
|
||||
glPushAttrib (GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TEXTURE_BIT | GL_VIEWPORT_BIT);
|
||||
|
||||
/* And set up the state we need */
|
||||
glDisable (GL_BLEND);
|
||||
glDisable (GL_SCISSOR_TEST);
|
||||
glDisable (GL_STENCIL_TEST);
|
||||
|
||||
glDisable (GL_CLIP_PLANE3);
|
||||
glDisable (GL_CLIP_PLANE2);
|
||||
glDisable (GL_CLIP_PLANE1);
|
||||
glDisable (GL_CLIP_PLANE0);
|
||||
|
||||
cogl_texture_get_gl_texture (source_texture, &source_gl_tex, &source_gl_target);
|
||||
|
||||
(*activeTexture) (GL_TEXTURE0_ARB);
|
||||
if (source_gl_target == GL_TEXTURE_2D)
|
||||
glDisable (GL_TEXTURE_RECTANGLE_ARB);
|
||||
else
|
||||
glDisable (GL_TEXTURE_2D);
|
||||
glEnable (source_gl_target);
|
||||
glBindTexture (source_gl_target, source_gl_tex);
|
||||
glTexParameteri (source_gl_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri (source_gl_target, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri (source_gl_target, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
|
||||
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
||||
|
||||
/* In theory, we should loop over all the texture units supported
|
||||
* by the GL implementation, but here we just assume that no more
|
||||
* than three are used by Mutter and all GL implementations we care
|
||||
* about will support at least 3.
|
||||
*/
|
||||
(*activeTexture) (GL_TEXTURE1_ARB);
|
||||
glDisable (GL_TEXTURE_2D);
|
||||
glDisable (GL_TEXTURE_RECTANGLE_ARB);
|
||||
(*activeTexture) (GL_TEXTURE2_ARB);
|
||||
glDisable (GL_TEXTURE_2D);
|
||||
glDisable (GL_TEXTURE_RECTANGLE_ARB);
|
||||
|
||||
glViewport (0, 0, dest_texture_width, dest_texture_height);
|
||||
|
||||
/* Save the transformation matrices and set up new ones that map
|
||||
* coordinates directly onto the destination texture */
|
||||
glMatrixMode (GL_MODELVIEW);
|
||||
glPushMatrix ();
|
||||
glLoadIdentity ();
|
||||
|
||||
glMatrixMode (GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glLoadIdentity ();
|
||||
glOrtho (0, dest_texture_width, 0, dest_texture_height, -1., 1.);
|
||||
|
||||
/* Draw */
|
||||
|
||||
dest_box = &tower->invalid[level];
|
||||
if (texture_is_rectangle (source_texture))
|
||||
{
|
||||
source_box.x1 = 2 * dest_box->x1;
|
||||
source_box.y1 = 2 * dest_box->y1;
|
||||
source_box.x2 = 2 * dest_box->x2;
|
||||
source_box.y2 = 2 * dest_box->y2;
|
||||
}
|
||||
else
|
||||
{
|
||||
source_box.x1 = (2. * dest_box->x1) / source_texture_width;
|
||||
source_box.y1 = (2. * dest_box->y1) / source_texture_height;
|
||||
source_box.x2 = (2. * dest_box->x2) / source_texture_width;
|
||||
source_box.y2 = (2. * dest_box->y2) / source_texture_height;
|
||||
}
|
||||
|
||||
glColor3f (0., 1., 1.);
|
||||
|
||||
glBegin (GL_QUADS);
|
||||
glTexCoord2f (source_box.x1, source_box.y1);
|
||||
glVertex2f (dest_box->x1, dest_box->y1);
|
||||
glTexCoord2f (source_box.x2, source_box.y1);
|
||||
glVertex2f (dest_box->x2, dest_box->y1);
|
||||
glTexCoord2f (source_box.x2, source_box.y2);
|
||||
glVertex2f (dest_box->x2, dest_box->y2);
|
||||
glTexCoord2f (source_box.x1, source_box.y2);
|
||||
glVertex2f (dest_box->x1, dest_box->y2);
|
||||
glEnd ();
|
||||
|
||||
/* And restore everything back the way we found it */
|
||||
|
||||
glMatrixMode (GL_PROJECTION);
|
||||
glPopMatrix ();
|
||||
glMatrixMode (GL_MODELVIEW);
|
||||
glPopMatrix ();
|
||||
|
||||
glPopAttrib ();
|
||||
|
||||
(*bindFramebuffer) (GL_FRAMEBUFFER_EXT, 0);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
fill_copy (guchar *buf,
|
||||
|
@@ -47,6 +47,8 @@ struct _MutterWindowPrivate
|
||||
* texture */
|
||||
GdkRegion *bounding_region;
|
||||
|
||||
gint freeze_count;
|
||||
|
||||
/*
|
||||
* These need to be counters rather than flags, since more plugins
|
||||
* can implement same effect; the practicality of stacking effects
|
||||
@@ -65,7 +67,10 @@ struct _MutterWindowPrivate
|
||||
guint disposed : 1;
|
||||
guint redecorating : 1;
|
||||
|
||||
guint needs_repair : 1;
|
||||
guint needs_damage_all : 1;
|
||||
guint received_damage : 1;
|
||||
|
||||
guint needs_pixmap : 1;
|
||||
guint needs_reshape : 1;
|
||||
guint size_changed : 1;
|
||||
|
||||
@@ -272,9 +277,6 @@ mutter_meta_window_decorated_notify (MetaWindow *mw,
|
||||
priv->damage = None;
|
||||
}
|
||||
|
||||
g_hash_table_remove (info->windows_by_xid, (gpointer) priv->xwindow);
|
||||
g_hash_table_insert (info->windows_by_xid, (gpointer) new_xwindow, self);
|
||||
|
||||
g_free (priv->desc);
|
||||
priv->desc = NULL;
|
||||
|
||||
@@ -335,7 +337,8 @@ mutter_window_constructed (GObject *object)
|
||||
if (priv->attrs.class == InputOnly)
|
||||
priv->damage = None;
|
||||
else
|
||||
priv->damage = XDamageCreate (xdisplay, xwindow, XDamageReportNonEmpty);
|
||||
priv->damage = XDamageCreate (xdisplay, xwindow,
|
||||
XDamageReportBoundingBox);
|
||||
|
||||
format = XRenderFindVisualFormat (xdisplay, priv->attrs.visual);
|
||||
|
||||
@@ -421,7 +424,6 @@ mutter_window_dispose (GObject *object)
|
||||
}
|
||||
|
||||
info->windows = g_list_remove (info->windows, (gconstpointer) self);
|
||||
g_hash_table_remove (info->windows_by_xid, (gpointer) priv->xwindow);
|
||||
|
||||
/*
|
||||
* Release the extra reference we took on the actor.
|
||||
@@ -769,6 +771,60 @@ mutter_window_showing_on_its_workspace (MutterWindow *self)
|
||||
return meta_window_showing_on_its_workspace (self->priv->window);
|
||||
}
|
||||
|
||||
static void
|
||||
mutter_window_freeze (MutterWindow *self)
|
||||
{
|
||||
self->priv->freeze_count++;
|
||||
}
|
||||
|
||||
static void
|
||||
mutter_window_damage_all (MutterWindow *self)
|
||||
{
|
||||
MutterWindowPrivate *priv = self->priv;
|
||||
ClutterX11TexturePixmap *texture_x11 = CLUTTER_X11_TEXTURE_PIXMAP (priv->actor);
|
||||
guint pixmap_width = 0;
|
||||
guint pixmap_height = 0;
|
||||
|
||||
if (!priv->needs_damage_all)
|
||||
return;
|
||||
|
||||
g_object_get (texture_x11,
|
||||
"pixmap-width", &pixmap_width,
|
||||
"pixmap-height", &pixmap_height,
|
||||
NULL);
|
||||
|
||||
clutter_x11_texture_pixmap_update_area (texture_x11,
|
||||
0,
|
||||
0,
|
||||
pixmap_width,
|
||||
pixmap_height);
|
||||
|
||||
priv->needs_damage_all = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
mutter_window_thaw (MutterWindow *self)
|
||||
{
|
||||
self->priv->freeze_count--;
|
||||
|
||||
if (G_UNLIKELY (self->priv->freeze_count < 0))
|
||||
{
|
||||
g_warning ("Error in freeze/thaw accounting.");
|
||||
self->priv->freeze_count = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (self->priv->freeze_count)
|
||||
return;
|
||||
|
||||
/* Since we ignore damage events while a window is frozen for certain effects
|
||||
* we may need to issue an update_area() covering the whole pixmap if we
|
||||
* don't know what real damage has happened. */
|
||||
|
||||
if (self->priv->needs_damage_all)
|
||||
mutter_window_damage_all (self);
|
||||
}
|
||||
|
||||
gboolean
|
||||
mutter_window_effect_in_progress (MutterWindow *self)
|
||||
{
|
||||
@@ -780,11 +836,11 @@ mutter_window_effect_in_progress (MutterWindow *self)
|
||||
}
|
||||
|
||||
static void
|
||||
mutter_window_mark_for_repair (MutterWindow *self)
|
||||
mutter_window_queue_create_pixmap (MutterWindow *self)
|
||||
{
|
||||
MutterWindowPrivate *priv = self->priv;
|
||||
|
||||
priv->needs_repair = TRUE;
|
||||
priv->needs_pixmap = TRUE;
|
||||
|
||||
if (!priv->mapped)
|
||||
return;
|
||||
@@ -800,6 +856,21 @@ mutter_window_mark_for_repair (MutterWindow *self)
|
||||
clutter_actor_queue_redraw (priv->actor);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_freeze_thaw_effect (gulong event)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case MUTTER_PLUGIN_DESTROY:
|
||||
case MUTTER_PLUGIN_MAXIMIZE:
|
||||
case MUTTER_PLUGIN_UNMAXIMIZE:
|
||||
return TRUE;
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
start_simple_effect (MutterWindow *self,
|
||||
gulong event)
|
||||
@@ -807,6 +878,7 @@ start_simple_effect (MutterWindow *self,
|
||||
MutterWindowPrivate *priv = self->priv;
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (priv->screen);
|
||||
gint *counter = NULL;
|
||||
gboolean use_freeze_thaw = FALSE;
|
||||
|
||||
if (!info->plugin_mgr)
|
||||
return FALSE;
|
||||
@@ -831,6 +903,11 @@ start_simple_effect (MutterWindow *self,
|
||||
|
||||
g_assert (counter);
|
||||
|
||||
use_freeze_thaw = is_freeze_thaw_effect (event);
|
||||
|
||||
if (use_freeze_thaw)
|
||||
mutter_window_freeze (self);
|
||||
|
||||
(*counter)++;
|
||||
|
||||
if (!mutter_plugin_manager_event_simple (info->plugin_mgr,
|
||||
@@ -838,6 +915,8 @@ start_simple_effect (MutterWindow *self,
|
||||
event))
|
||||
{
|
||||
(*counter)--;
|
||||
if (use_freeze_thaw)
|
||||
mutter_window_thaw (self);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -861,7 +940,7 @@ mutter_window_after_effects (MutterWindow *self)
|
||||
if (!meta_window_is_mapped (priv->window))
|
||||
mutter_window_detach (self);
|
||||
|
||||
if (priv->needs_repair)
|
||||
if (priv->needs_pixmap)
|
||||
clutter_actor_queue_redraw (priv->actor);
|
||||
}
|
||||
|
||||
@@ -930,6 +1009,9 @@ mutter_window_effect_completed (MutterWindow *self,
|
||||
break;
|
||||
}
|
||||
|
||||
if (is_freeze_thaw_effect (event))
|
||||
mutter_window_thaw (self);
|
||||
|
||||
if (!mutter_window_effect_in_progress (self))
|
||||
mutter_window_after_effects (self);
|
||||
}
|
||||
@@ -955,7 +1037,7 @@ mutter_window_detach (MutterWindow *self)
|
||||
clutter_x11_texture_pixmap_set_pixmap (CLUTTER_X11_TEXTURE_PIXMAP (priv->actor),
|
||||
None);
|
||||
|
||||
mutter_window_mark_for_repair (self);
|
||||
mutter_window_queue_create_pixmap (self);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -976,7 +1058,6 @@ mutter_window_destroy (MutterWindow *self)
|
||||
*/
|
||||
info = meta_screen_get_compositor_data (priv->screen);
|
||||
info->windows = g_list_remove (info->windows, (gconstpointer) self);
|
||||
g_hash_table_remove (info->windows_by_xid, (gpointer)priv->xwindow);
|
||||
|
||||
if (priv->type == META_COMP_WINDOW_DROPDOWN_MENU ||
|
||||
priv->type == META_COMP_WINDOW_POPUP_MENU ||
|
||||
@@ -1019,7 +1100,7 @@ mutter_window_sync_actor_position (MutterWindow *self)
|
||||
priv->attrs.height != window_rect.height)
|
||||
{
|
||||
priv->size_changed = TRUE;
|
||||
mutter_window_mark_for_repair (self);
|
||||
mutter_window_queue_create_pixmap (self);
|
||||
}
|
||||
|
||||
/* XXX deprecated: please use meta_window_get_outer_rect instead */
|
||||
@@ -1136,6 +1217,7 @@ mutter_window_maximize (MutterWindow *self,
|
||||
clutter_actor_set_size (CLUTTER_ACTOR (self), old_rect->width, old_rect->height);
|
||||
|
||||
self->priv->maximize_in_progress++;
|
||||
mutter_window_freeze (self);
|
||||
|
||||
if (!info->plugin_mgr ||
|
||||
!mutter_plugin_manager_event_maximize (info->plugin_mgr,
|
||||
@@ -1146,6 +1228,7 @@ mutter_window_maximize (MutterWindow *self,
|
||||
|
||||
{
|
||||
self->priv->maximize_in_progress--;
|
||||
mutter_window_thaw (self);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1163,6 +1246,7 @@ mutter_window_unmaximize (MutterWindow *self,
|
||||
clutter_actor_set_size (CLUTTER_ACTOR (self), old_rect->width, old_rect->height);
|
||||
|
||||
self->priv->unmaximize_in_progress++;
|
||||
mutter_window_freeze (self);
|
||||
|
||||
if (!info->plugin_mgr ||
|
||||
!mutter_plugin_manager_event_maximize (info->plugin_mgr,
|
||||
@@ -1172,6 +1256,7 @@ mutter_window_unmaximize (MutterWindow *self,
|
||||
new_rect->width, new_rect->height))
|
||||
{
|
||||
self->priv->unmaximize_in_progress--;
|
||||
mutter_window_thaw (self);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1210,6 +1295,8 @@ mutter_window_new (MetaWindow *window)
|
||||
priv = self->priv;
|
||||
|
||||
priv->mapped = meta_window_toplevel_is_mapped (priv->window);
|
||||
if (priv->mapped)
|
||||
mutter_window_queue_create_pixmap (self);
|
||||
|
||||
mutter_window_sync_actor_position (self);
|
||||
|
||||
@@ -1224,7 +1311,6 @@ mutter_window_new (MetaWindow *window)
|
||||
* before we first paint.
|
||||
*/
|
||||
info->windows = g_list_append (info->windows, self);
|
||||
g_hash_table_insert (info->windows_by_xid, (gpointer) top_window, self);
|
||||
|
||||
return self;
|
||||
}
|
||||
@@ -1238,7 +1324,7 @@ mutter_window_mapped (MutterWindow *self)
|
||||
|
||||
priv->mapped = TRUE;
|
||||
|
||||
mutter_window_mark_for_repair (self);
|
||||
mutter_window_queue_create_pixmap (self);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1254,7 +1340,7 @@ mutter_window_unmapped (MutterWindow *self)
|
||||
return;
|
||||
|
||||
mutter_window_detach (self);
|
||||
priv->needs_repair = FALSE;
|
||||
priv->needs_pixmap = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1466,7 +1552,7 @@ mutter_window_reset_visible_regions (MutterWindow *self)
|
||||
}
|
||||
|
||||
static void
|
||||
check_needs_repair (MutterWindow *self)
|
||||
check_needs_pixmap (MutterWindow *self)
|
||||
{
|
||||
MutterWindowPrivate *priv = self->priv;
|
||||
MetaScreen *screen = priv->screen;
|
||||
@@ -1477,7 +1563,7 @@ check_needs_repair (MutterWindow *self)
|
||||
Window xwindow = priv->xwindow;
|
||||
gboolean full = FALSE;
|
||||
|
||||
if (!priv->needs_repair)
|
||||
if (!priv->needs_pixmap)
|
||||
return;
|
||||
|
||||
if (!priv->mapped)
|
||||
@@ -1549,74 +1635,52 @@ check_needs_repair (MutterWindow *self)
|
||||
full = TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO -- on some gfx hardware updating the whole texture instead of
|
||||
* the individual rectangles is actually quicker, so we might want to
|
||||
* make this a configurable option (on desktop HW with multiple pipelines
|
||||
* it is usually quicker to just update the damaged parts).
|
||||
*
|
||||
* If we are using TFP we update the whole texture (this simply trigers
|
||||
* the texture rebind).
|
||||
*/
|
||||
if (full
|
||||
#ifdef HAVE_GLX_TEXTURE_PIXMAP
|
||||
|| (CLUTTER_GLX_IS_TEXTURE_PIXMAP (priv->actor) &&
|
||||
clutter_glx_texture_pixmap_using_extension
|
||||
(CLUTTER_GLX_TEXTURE_PIXMAP (priv->actor)))
|
||||
#endif /* HAVE_GLX_TEXTURE_PIXMAP */
|
||||
)
|
||||
{
|
||||
XDamageSubtract (xdisplay, priv->damage, None, None);
|
||||
|
||||
clutter_x11_texture_pixmap_update_area
|
||||
(CLUTTER_X11_TEXTURE_PIXMAP (priv->actor),
|
||||
0,
|
||||
0,
|
||||
clutter_actor_get_width (priv->actor),
|
||||
clutter_actor_get_height (priv->actor));
|
||||
}
|
||||
else
|
||||
{
|
||||
XRectangle *r_damage;
|
||||
XRectangle r_bounds;
|
||||
XserverRegion parts;
|
||||
int i, r_count;
|
||||
|
||||
parts = XFixesCreateRegion (xdisplay, 0, 0);
|
||||
XDamageSubtract (xdisplay, priv->damage, None, parts);
|
||||
|
||||
r_damage = XFixesFetchRegionAndBounds (xdisplay,
|
||||
parts,
|
||||
&r_count,
|
||||
&r_bounds);
|
||||
|
||||
if (r_damage)
|
||||
{
|
||||
for (i = 0; i < r_count; ++i)
|
||||
{
|
||||
clutter_x11_texture_pixmap_update_area
|
||||
(CLUTTER_X11_TEXTURE_PIXMAP (priv->actor),
|
||||
r_damage[i].x,
|
||||
r_damage[i].y,
|
||||
r_damage[i].width,
|
||||
r_damage[i].height);
|
||||
}
|
||||
}
|
||||
|
||||
XFree (r_damage);
|
||||
XFixesDestroyRegion (xdisplay, parts);
|
||||
}
|
||||
|
||||
meta_error_trap_pop (display, FALSE);
|
||||
|
||||
priv->needs_repair = FALSE;
|
||||
priv->needs_pixmap = FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_frozen (MutterWindow *self)
|
||||
{
|
||||
return self->priv->freeze_count ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
mutter_window_process_damage (MutterWindow *self,
|
||||
XDamageNotifyEvent *event)
|
||||
{
|
||||
mutter_window_mark_for_repair (self);
|
||||
MutterWindowPrivate *priv = self->priv;
|
||||
ClutterX11TexturePixmap *texture_x11 = CLUTTER_X11_TEXTURE_PIXMAP (priv->actor);
|
||||
|
||||
priv->received_damage = TRUE;
|
||||
|
||||
if (is_frozen (self))
|
||||
{
|
||||
/* The window is frozen due to an effect in progress: we ignore damage
|
||||
* here on the off chance that this will stop the corresponding
|
||||
* texture_from_pixmap from being update.
|
||||
*
|
||||
* needs_damage_all tracks that some unknown damage happened while the
|
||||
* window was frozen so that when the window becomes unfrozen we can
|
||||
* issue a full window update to cover any lost damage.
|
||||
*
|
||||
* It should be noted that this is an unreliable mechanism since it's
|
||||
* quite likely that drivers will aim to provide a zero-copy
|
||||
* implementation of the texture_from_pixmap extension and in those cases
|
||||
* any drawing done to the window is always immediately reflected in the
|
||||
* texture regardless of damage event handling.
|
||||
*/
|
||||
priv->needs_damage_all = TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
clutter_x11_texture_pixmap_update_area (texture_x11,
|
||||
event->area.x,
|
||||
event->area.y,
|
||||
event->area.width,
|
||||
event->area.height);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1688,16 +1752,25 @@ void
|
||||
mutter_window_pre_paint (MutterWindow *self)
|
||||
{
|
||||
MutterWindowPrivate *priv = self->priv;
|
||||
MetaScreen *screen = priv->screen;
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
|
||||
/* The window is frozen due to a pending animation: we'll wait until
|
||||
* the animation finishes to reshape and repair the window */
|
||||
if (priv->destroy_in_progress ||
|
||||
priv->maximize_in_progress ||
|
||||
priv->unmaximize_in_progress)
|
||||
return;
|
||||
if (is_frozen (self))
|
||||
{
|
||||
/* The window is frozen due to a pending animation: we'll wait until
|
||||
* the animation finishes to reshape and repair the window */
|
||||
return;
|
||||
}
|
||||
|
||||
if (priv->received_damage)
|
||||
{
|
||||
XDamageSubtract (xdisplay, priv->damage, None, None);
|
||||
priv->received_damage = FALSE;
|
||||
}
|
||||
|
||||
check_needs_reshape (self);
|
||||
check_needs_repair (self);
|
||||
check_needs_pixmap (self);
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -81,11 +81,12 @@ static void unmaximize (MutterPlugin *plugin,
|
||||
gint x, gint y, gint width, gint height);
|
||||
|
||||
static void switch_workspace (MutterPlugin *plugin,
|
||||
const GList **actors, gint from, gint to,
|
||||
gint from, gint to,
|
||||
MetaMotionDirection direction);
|
||||
|
||||
static void kill_effect (MutterPlugin *plugin,
|
||||
MutterWindow *actor, gulong event);
|
||||
static void kill_window_effects (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
static void kill_switch_workspace (MutterPlugin *plugin);
|
||||
|
||||
static const MutterPluginInfo * plugin_info (MutterPlugin *plugin);
|
||||
|
||||
@@ -99,7 +100,6 @@ struct _MutterDefaultPluginPrivate
|
||||
/* Valid only when switch_workspace effect is in progress */
|
||||
ClutterTimeline *tml_switch_workspace1;
|
||||
ClutterTimeline *tml_switch_workspace2;
|
||||
GList **actors;
|
||||
ClutterActor *desktop1;
|
||||
ClutterActor *desktop2;
|
||||
|
||||
@@ -175,10 +175,9 @@ mutter_default_plugin_get_property (GObject *object,
|
||||
}
|
||||
|
||||
static void
|
||||
mutter_default_plugin_constructed (GObject *object)
|
||||
start (MutterPlugin *plugin)
|
||||
{
|
||||
MutterPlugin *plugin = MUTTER_PLUGIN (object);
|
||||
MutterDefaultPluginPrivate *priv = MUTTER_DEFAULT_PLUGIN (object)->priv;
|
||||
MutterDefaultPluginPrivate *priv = MUTTER_DEFAULT_PLUGIN (plugin)->priv;
|
||||
|
||||
guint destroy_timeout = DESTROY_TIMEOUT;
|
||||
guint minimize_timeout = MINIMIZE_TIMEOUT;
|
||||
@@ -201,7 +200,6 @@ mutter_default_plugin_constructed (GObject *object)
|
||||
map_timeout *= 2;
|
||||
switch_timeout *= 2;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -212,18 +210,19 @@ mutter_default_plugin_class_init (MutterDefaultPluginClass *klass)
|
||||
|
||||
gobject_class->finalize = mutter_default_plugin_finalize;
|
||||
gobject_class->dispose = mutter_default_plugin_dispose;
|
||||
gobject_class->constructed = mutter_default_plugin_constructed;
|
||||
gobject_class->set_property = mutter_default_plugin_set_property;
|
||||
gobject_class->get_property = mutter_default_plugin_get_property;
|
||||
|
||||
plugin_class->start = start;
|
||||
plugin_class->map = map;
|
||||
plugin_class->minimize = minimize;
|
||||
plugin_class->maximize = maximize;
|
||||
plugin_class->unmaximize = unmaximize;
|
||||
plugin_class->destroy = destroy;
|
||||
plugin_class->switch_workspace = switch_workspace;
|
||||
plugin_class->kill_effect = kill_effect;
|
||||
plugin_class->plugin_info = plugin_info;
|
||||
plugin_class->kill_window_effects = kill_window_effects;
|
||||
plugin_class->kill_switch_workspace = kill_switch_workspace;
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (MutterDefaultPluginPrivate));
|
||||
}
|
||||
@@ -272,20 +271,12 @@ get_actor_private (MutterWindow *actor)
|
||||
return priv;
|
||||
}
|
||||
|
||||
typedef struct SwitchWorkspaceData
|
||||
{
|
||||
MutterPlugin *plugin;
|
||||
const GList **actors;
|
||||
} SwitchWorkspaceData;
|
||||
|
||||
static void
|
||||
on_switch_workspace_effect_complete (ClutterTimeline *timeline, gpointer data)
|
||||
{
|
||||
SwitchWorkspaceData *sw_data = data;
|
||||
MutterPlugin *plugin = sw_data->plugin;
|
||||
MutterPlugin *plugin = MUTTER_PLUGIN (data);
|
||||
MutterDefaultPluginPrivate *priv = MUTTER_DEFAULT_PLUGIN (plugin)->priv;
|
||||
GList *l = *((GList**)sw_data->actors);
|
||||
MutterWindow *actor_for_cb = l->data;
|
||||
GList *l = mutter_plugin_get_windows (plugin);
|
||||
|
||||
while (l)
|
||||
{
|
||||
@@ -305,21 +296,17 @@ on_switch_workspace_effect_complete (ClutterTimeline *timeline, gpointer data)
|
||||
clutter_actor_destroy (priv->desktop1);
|
||||
clutter_actor_destroy (priv->desktop2);
|
||||
|
||||
priv->actors = NULL;
|
||||
priv->tml_switch_workspace1 = NULL;
|
||||
priv->tml_switch_workspace2 = NULL;
|
||||
priv->desktop1 = NULL;
|
||||
priv->desktop2 = NULL;
|
||||
|
||||
g_free (data);
|
||||
|
||||
mutter_plugin_effect_completed (plugin, actor_for_cb,
|
||||
MUTTER_PLUGIN_SWITCH_WORKSPACE);
|
||||
mutter_plugin_switch_workspace_completed (plugin);
|
||||
}
|
||||
|
||||
static void
|
||||
switch_workspace (MutterPlugin *plugin,
|
||||
const GList **actors, gint from, gint to,
|
||||
gint from, gint to,
|
||||
MetaMotionDirection direction)
|
||||
{
|
||||
MutterDefaultPluginPrivate *priv = MUTTER_DEFAULT_PLUGIN (plugin)->priv;
|
||||
@@ -330,12 +317,8 @@ switch_workspace (MutterPlugin *plugin,
|
||||
ClutterActor *stage;
|
||||
int screen_width, screen_height;
|
||||
MetaScreen *screen = mutter_plugin_get_screen (plugin);
|
||||
SwitchWorkspaceData *sw_data = g_new (SwitchWorkspaceData, 1);
|
||||
ClutterAnimation *animation;
|
||||
|
||||
sw_data->plugin = plugin;
|
||||
sw_data->actors = actors;
|
||||
|
||||
stage = mutter_plugin_get_stage (plugin);
|
||||
|
||||
mutter_plugin_query_screen_size (plugin,
|
||||
@@ -355,14 +338,13 @@ switch_workspace (MutterPlugin *plugin,
|
||||
|
||||
if (from == to)
|
||||
{
|
||||
mutter_plugin_effect_completed (plugin, NULL,
|
||||
MUTTER_PLUGIN_SWITCH_WORKSPACE);
|
||||
mutter_plugin_switch_workspace_completed (plugin);
|
||||
return;
|
||||
}
|
||||
|
||||
n_workspaces = meta_screen_get_n_workspaces (screen);
|
||||
|
||||
l = g_list_last (*((GList**) actors));
|
||||
l = g_list_last (mutter_plugin_get_windows (plugin));
|
||||
|
||||
while (l)
|
||||
{
|
||||
@@ -397,7 +379,6 @@ switch_workspace (MutterPlugin *plugin,
|
||||
l = l->prev;
|
||||
}
|
||||
|
||||
priv->actors = (GList **)actors;
|
||||
priv->desktop1 = workspace0;
|
||||
priv->desktop2 = workspace1;
|
||||
|
||||
@@ -410,7 +391,7 @@ switch_workspace (MutterPlugin *plugin,
|
||||
g_signal_connect (priv->tml_switch_workspace1,
|
||||
"completed",
|
||||
G_CALLBACK (on_switch_workspace_effect_complete),
|
||||
sw_data);
|
||||
plugin);
|
||||
|
||||
animation = clutter_actor_animate (workspace1, CLUTTER_EASE_IN_SINE,
|
||||
SWITCH_TIMEOUT,
|
||||
@@ -448,8 +429,7 @@ on_minimize_effect_complete (ClutterTimeline *timeline, EffectCompleteData *data
|
||||
CLUTTER_GRAVITY_NORTH_WEST);
|
||||
|
||||
/* Now notify the manager that we are done with this effect */
|
||||
mutter_plugin_effect_completed (plugin, mc_window,
|
||||
MUTTER_PLUGIN_MINIMIZE);
|
||||
mutter_plugin_minimize_completed (plugin, mc_window);
|
||||
|
||||
g_free (data);
|
||||
}
|
||||
@@ -492,8 +472,7 @@ minimize (MutterPlugin *plugin, MutterWindow *mc_window)
|
||||
|
||||
}
|
||||
else
|
||||
mutter_plugin_effect_completed (plugin, mc_window,
|
||||
MUTTER_PLUGIN_MINIMIZE);
|
||||
mutter_plugin_minimize_completed (plugin, mc_window);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -518,8 +497,7 @@ on_maximize_effect_complete (ClutterTimeline *timeline, EffectCompleteData *data
|
||||
CLUTTER_GRAVITY_NORTH_WEST);
|
||||
|
||||
/* Now notify the manager that we are done with this effect */
|
||||
mutter_plugin_effect_completed (plugin, mc_window,
|
||||
MUTTER_PLUGIN_MAXIMIZE);
|
||||
mutter_plugin_maximize_completed (plugin, mc_window);
|
||||
|
||||
g_free (data);
|
||||
}
|
||||
@@ -589,8 +567,7 @@ maximize (MutterPlugin *plugin,
|
||||
return;
|
||||
}
|
||||
|
||||
mutter_plugin_effect_completed (plugin, mc_window,
|
||||
MUTTER_PLUGIN_MAXIMIZE);
|
||||
mutter_plugin_maximize_completed (plugin, mc_window);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -613,8 +590,7 @@ unmaximize (MutterPlugin *plugin,
|
||||
}
|
||||
|
||||
/* Do this conditionally, if the effect requires completion callback. */
|
||||
mutter_plugin_effect_completed (plugin, mc_window,
|
||||
MUTTER_PLUGIN_UNMAXIMIZE);
|
||||
mutter_plugin_unmaximize_completed (plugin, mc_window);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -633,7 +609,7 @@ on_map_effect_complete (ClutterTimeline *timeline, EffectCompleteData *data)
|
||||
CLUTTER_GRAVITY_NORTH_WEST);
|
||||
|
||||
/* Now notify the manager that we are done with this effect */
|
||||
mutter_plugin_effect_completed (plugin, mc_window, MUTTER_PLUGIN_MAP);
|
||||
mutter_plugin_map_completed (plugin, mc_window);
|
||||
|
||||
g_free (data);
|
||||
}
|
||||
@@ -679,8 +655,7 @@ map (MutterPlugin *plugin, MutterWindow *mc_window)
|
||||
|
||||
}
|
||||
else
|
||||
mutter_plugin_effect_completed (plugin, mc_window,
|
||||
MUTTER_PLUGIN_MAP);
|
||||
mutter_plugin_map_completed (plugin, mc_window);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -696,8 +671,7 @@ on_destroy_effect_complete (ClutterTimeline *timeline, EffectCompleteData *data)
|
||||
|
||||
apriv->tml_destroy = NULL;
|
||||
|
||||
mutter_plugin_effect_completed (plugin, mc_window,
|
||||
MUTTER_PLUGIN_DESTROY);
|
||||
mutter_plugin_destroy_completed (plugin, mc_window);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -734,54 +708,48 @@ destroy (MutterPlugin *plugin, MutterWindow *mc_window)
|
||||
data);
|
||||
}
|
||||
else
|
||||
mutter_plugin_effect_completed (plugin, mc_window,
|
||||
MUTTER_PLUGIN_DESTROY);
|
||||
mutter_plugin_destroy_completed (plugin, mc_window);
|
||||
}
|
||||
|
||||
static void
|
||||
kill_effect (MutterPlugin *plugin, MutterWindow *mc_window, gulong event)
|
||||
kill_switch_workspace (MutterPlugin *plugin)
|
||||
{
|
||||
MutterDefaultPluginPrivate *priv = MUTTER_DEFAULT_PLUGIN (plugin)->priv;
|
||||
|
||||
if (priv->tml_switch_workspace1)
|
||||
{
|
||||
clutter_timeline_stop (priv->tml_switch_workspace1);
|
||||
clutter_timeline_stop (priv->tml_switch_workspace2);
|
||||
g_signal_emit_by_name (priv->tml_switch_workspace1, "completed", NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
kill_window_effects (MutterPlugin *plugin, MutterWindow *mc_window)
|
||||
{
|
||||
ActorPrivate *apriv;
|
||||
|
||||
if (event & MUTTER_PLUGIN_SWITCH_WORKSPACE)
|
||||
{
|
||||
MutterDefaultPluginPrivate *priv = MUTTER_DEFAULT_PLUGIN (plugin)->priv;
|
||||
|
||||
if (priv->tml_switch_workspace1)
|
||||
{
|
||||
clutter_timeline_stop (priv->tml_switch_workspace1);
|
||||
clutter_timeline_stop (priv->tml_switch_workspace2);
|
||||
g_signal_emit_by_name (priv->tml_switch_workspace1, "completed", NULL);
|
||||
}
|
||||
|
||||
if (!(event & ~MUTTER_PLUGIN_SWITCH_WORKSPACE))
|
||||
{
|
||||
/* Workspace switch only, nothing more to do */
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
apriv = get_actor_private (mc_window);
|
||||
|
||||
if ((event & MUTTER_PLUGIN_MINIMIZE) && apriv->tml_minimize)
|
||||
if (apriv->tml_minimize)
|
||||
{
|
||||
clutter_timeline_stop (apriv->tml_minimize);
|
||||
g_signal_emit_by_name (apriv->tml_minimize, "completed", NULL);
|
||||
}
|
||||
|
||||
if ((event & MUTTER_PLUGIN_MAXIMIZE) && apriv->tml_maximize)
|
||||
if (apriv->tml_maximize)
|
||||
{
|
||||
clutter_timeline_stop (apriv->tml_maximize);
|
||||
g_signal_emit_by_name (apriv->tml_maximize, "completed", NULL);
|
||||
}
|
||||
|
||||
if ((event & MUTTER_PLUGIN_MAP) && apriv->tml_map)
|
||||
if (apriv->tml_map)
|
||||
{
|
||||
clutter_timeline_stop (apriv->tml_map);
|
||||
g_signal_emit_by_name (apriv->tml_map, "completed", NULL);
|
||||
}
|
||||
|
||||
if ((event & MUTTER_PLUGIN_DESTROY) && apriv->tml_destroy)
|
||||
if (apriv->tml_destroy)
|
||||
{
|
||||
clutter_timeline_stop (apriv->tml_destroy);
|
||||
g_signal_emit_by_name (apriv->tml_destroy, "completed", NULL);
|
||||
|
@@ -155,7 +155,7 @@ tidy_texture_frame_unrealize (ClutterActor *self)
|
||||
if (priv->material == COGL_INVALID_HANDLE)
|
||||
return;
|
||||
|
||||
cogl_material_unref (priv->material);
|
||||
cogl_handle_unref (priv->material);
|
||||
priv->material = COGL_INVALID_HANDLE;
|
||||
|
||||
CLUTTER_ACTOR_UNSET_FLAGS (self, CLUTTER_ACTOR_REALIZED);
|
||||
@@ -415,7 +415,7 @@ tidy_texture_frame_dispose (GObject *gobject)
|
||||
|
||||
if (priv->material)
|
||||
{
|
||||
cogl_material_unref (priv->material);
|
||||
cogl_handle_unref (priv->material);
|
||||
priv->material = COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
|
@@ -526,6 +526,9 @@ meta_core_get_menu_accelerator (MetaMenuOp menu_op,
|
||||
|
||||
switch (menu_op)
|
||||
{
|
||||
case META_MENU_OP_NONE:
|
||||
/* No keybinding for this one */
|
||||
break;
|
||||
case META_MENU_OP_DELETE:
|
||||
name = "close";
|
||||
break;
|
||||
|
@@ -22,8 +22,7 @@
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#define _SVID_SOURCE /* for gethostname() */
|
||||
#define _XOPEN_SOURCE /* for kill() */
|
||||
|
||||
#include <config.h>
|
||||
#include "util.h"
|
||||
@@ -32,6 +31,7 @@
|
||||
#include "workspace.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
@@ -178,36 +178,23 @@ meta_window_delete (MetaWindow *window,
|
||||
void
|
||||
meta_window_kill (MetaWindow *window)
|
||||
{
|
||||
char buf[257];
|
||||
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Killing %s brutally\n",
|
||||
window->desc);
|
||||
|
||||
if (window->wm_client_machine != NULL &&
|
||||
if (!meta_window_is_remote (window) &&
|
||||
window->net_wm_pid > 0)
|
||||
{
|
||||
if (gethostname (buf, sizeof(buf)-1) == 0)
|
||||
{
|
||||
if (strcmp (buf, window->wm_client_machine) == 0)
|
||||
{
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Killing %s with kill()\n",
|
||||
window->desc);
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Killing %s with kill()\n",
|
||||
window->desc);
|
||||
|
||||
if (kill (window->net_wm_pid, 9) < 0)
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Failed to signal %s: %s\n",
|
||||
window->desc, strerror (errno));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_warning (_("Failed to get hostname: %s\n"),
|
||||
strerror (errno));
|
||||
}
|
||||
if (kill (window->net_wm_pid, 9) < 0)
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Failed to signal %s: %s\n",
|
||||
window->desc, strerror (errno));
|
||||
}
|
||||
|
||||
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Disconnecting %s with XKillClient()\n",
|
||||
window->desc);
|
||||
|
@@ -83,10 +83,11 @@ struct _MetaDisplay
|
||||
|
||||
char *name;
|
||||
Display *xdisplay;
|
||||
char *hostname;
|
||||
|
||||
Window leader_window;
|
||||
Window timestamp_pinging_window;
|
||||
|
||||
|
||||
/* Pull in all the names of atoms as fields; we will intern them when the
|
||||
* class is constructed.
|
||||
*/
|
||||
@@ -303,22 +304,15 @@ struct _MetaDisplayClass
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
/* Xserver time can wraparound, thus comparing two timestamps needs to take
|
||||
* this into account. Here's a little macro to help out. If no wraparound
|
||||
* has occurred, this is equivalent to
|
||||
* time1 < time2
|
||||
* Of course, the rest of the ugliness of this macro comes from accounting
|
||||
* for the fact that wraparound can occur and the fact that a timestamp of
|
||||
* 0 must be special-cased since it means older than anything else.
|
||||
*
|
||||
* Note that this is NOT an equivalent for time1 <= time2; if that's what
|
||||
* you need then you'll need to swap the order of the arguments and negate
|
||||
* the result.
|
||||
*/
|
||||
#define XSERVER_TIME_IS_BEFORE_ASSUMING_REAL_TIMESTAMPS(time1, time2) \
|
||||
( (( (time1) < (time2) ) && ( (time2) - (time1) < ((guint32)-1)/2 )) || \
|
||||
(( (time1) > (time2) ) && ( (time1) - (time2) > ((guint32)-1)/2 )) \
|
||||
)
|
||||
/**
|
||||
* XSERVER_TIME_IS_BEFORE:
|
||||
*
|
||||
* See the docs for meta_display_xserver_time_is_before().
|
||||
*/
|
||||
#define XSERVER_TIME_IS_BEFORE(time1, time2) \
|
||||
( (time1) == 0 || \
|
||||
(XSERVER_TIME_IS_BEFORE_ASSUMING_REAL_TIMESTAMPS(time1, time2) && \
|
||||
|
@@ -30,6 +30,8 @@
|
||||
* The display is represented as a MetaDisplay struct.
|
||||
*/
|
||||
|
||||
#define _XOPEN_SOURCE 600 /* for gethostname() */
|
||||
|
||||
#include <config.h>
|
||||
#include "display-private.h"
|
||||
#include "util.h"
|
||||
@@ -72,6 +74,7 @@
|
||||
#include <X11/extensions/Xdamage.h>
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define GRAB_OP_IS_WINDOW_SWITCH(g) \
|
||||
(g == META_GRAB_OP_KEYBOARD_TABBING_NORMAL || \
|
||||
@@ -429,6 +432,7 @@ meta_display_open (void)
|
||||
GSList *tmp;
|
||||
int i;
|
||||
guint32 timestamp;
|
||||
char buf[257];
|
||||
|
||||
/* A list of all atom names, so that we can intern them in one go. */
|
||||
char *atom_names[] = {
|
||||
@@ -463,6 +467,11 @@ meta_display_open (void)
|
||||
*/
|
||||
the_display->name = g_strdup (XDisplayName (NULL));
|
||||
the_display->xdisplay = xdisplay;
|
||||
if (gethostname (buf, sizeof(buf)-1) == 0)
|
||||
{
|
||||
buf[sizeof(buf)-1] = '\0';
|
||||
the_display->hostname = g_strdup (buf);
|
||||
}
|
||||
the_display->error_trap_synced_at_last_pop = TRUE;
|
||||
the_display->error_traps = 0;
|
||||
the_display->error_trap_handler = NULL;
|
||||
@@ -1320,6 +1329,43 @@ meta_grab_op_is_moving (MetaGrabOp op)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_xserver_time_is_before:
|
||||
* @display: a #MetaDisplay
|
||||
* @time1: An event timestamp
|
||||
* @time2: An event timestamp
|
||||
*
|
||||
* Xserver time can wraparound, thus comparing two timestamps needs to take
|
||||
* this into account. If no wraparound has occurred, this is equivalent to
|
||||
* time1 < time2
|
||||
* Otherwise, we need to account for the fact that wraparound can occur
|
||||
* and the fact that a timestamp of 0 must be special-cased since it
|
||||
* means "older than anything else".
|
||||
*
|
||||
* Note that this is NOT an equivalent for time1 <= time2; if that's what
|
||||
* you need then you'll need to swap the order of the arguments and negate
|
||||
* the result.
|
||||
*/
|
||||
gboolean
|
||||
meta_display_xserver_time_is_before (MetaDisplay *display,
|
||||
guint32 time1,
|
||||
guint32 time2)
|
||||
{
|
||||
return XSERVER_TIME_IS_BEFORE(time1, time2);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_get_last_user_time:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Returns: Timestamp of the last user interaction event with a window
|
||||
*/
|
||||
guint32
|
||||
meta_display_get_last_user_time (MetaDisplay *display)
|
||||
{
|
||||
return display->last_user_time;
|
||||
}
|
||||
|
||||
/* Get time of current event, or CurrentTime if none. */
|
||||
guint32
|
||||
meta_display_get_current_time (MetaDisplay *display)
|
||||
@@ -4132,8 +4178,8 @@ meta_set_syncing (gboolean setting)
|
||||
if (setting != is_syncing)
|
||||
{
|
||||
is_syncing = setting;
|
||||
|
||||
XSynchronize (meta_get_display ()->xdisplay, is_syncing);
|
||||
if (meta_get_display ())
|
||||
XSynchronize (meta_get_display ()->xdisplay, is_syncing);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4974,6 +5020,34 @@ meta_display_stack_cmp (const void *a,
|
||||
return 0; /* not reached in theory, if windows on same display */
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_sort_windows_by_stacking:
|
||||
* @display: a #MetaDisplay
|
||||
* @windows: (element-type MetaWindow): Set of windows
|
||||
*
|
||||
* Sorts a set of windows according to their current stacking order. If windows
|
||||
* from multiple screens are present in the set of input windows, then all the
|
||||
* windows on screen 0 are sorted below all the windows on screen 1, and so forth.
|
||||
* Since the stacking order of override-redirect windows isn't controlled by
|
||||
* Metacity, if override-redirect windows are in the input, the result may not
|
||||
* correspond to the actual stacking order in the X server.
|
||||
*
|
||||
* An example of using this would be to sort the list of transient dialogs for a
|
||||
* window into their current stacking order.
|
||||
*
|
||||
* Returns: (transfer container): Input windows sorted by stacking order, from lowest to highest
|
||||
*/
|
||||
GSList *
|
||||
meta_display_sort_windows_by_stacking (MetaDisplay *display,
|
||||
GSList *windows)
|
||||
{
|
||||
GSList *copy = g_slist_copy (windows);
|
||||
|
||||
copy = g_slist_sort (copy, meta_display_stack_cmp);
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_devirtualize_modifiers (MetaDisplay *display,
|
||||
MetaVirtualModifier modifiers,
|
||||
@@ -5340,3 +5414,19 @@ Atom meta_display_get_atom (MetaDisplay *display, MetaAtom meta_atom)
|
||||
|
||||
return atoms[meta_atom - 1];
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_get_leader_window:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Returns the window manager's leader window (as defined by the
|
||||
* _NET_SUPPORTING_WM_CHECK mechanism of EWMH). For use by plugins that wish
|
||||
* to attach additional custom properties to this window.
|
||||
*
|
||||
* Return value: (transfer none): xid of the leader window.
|
||||
**/
|
||||
Window
|
||||
meta_display_get_leader_window (MetaDisplay *display)
|
||||
{
|
||||
return display->leader_window;
|
||||
}
|
||||
|
@@ -499,14 +499,25 @@ display_get_keybinding (MetaDisplay *display,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static MetaKeyBindingAction
|
||||
display_get_keybinding_action (MetaDisplay *display,
|
||||
unsigned int keysym,
|
||||
unsigned int keycode,
|
||||
unsigned long mask)
|
||||
/**
|
||||
* meta_display_get_keybinding_action:
|
||||
* @display: A #MetaDisplay
|
||||
* @keysym: Key symbol
|
||||
* @keycode: Raw keycode
|
||||
* @mask: Event mask
|
||||
*
|
||||
* Returns: The action that should be taken for the given key, or %META_KEYBINDING_ACTION_NONE.
|
||||
*
|
||||
*/
|
||||
MetaKeyBindingAction
|
||||
meta_display_get_keybinding_action (MetaDisplay *display,
|
||||
unsigned int keysym,
|
||||
unsigned int keycode,
|
||||
unsigned long mask)
|
||||
{
|
||||
MetaKeyBinding *binding;
|
||||
|
||||
mask = mask & 0xff & ~display->ignored_modifier_mask;
|
||||
binding = display_get_keybinding (display, keysym, keycode, mask);
|
||||
|
||||
if (binding)
|
||||
@@ -2756,10 +2767,10 @@ process_workspace_switch_grab (MetaDisplay *display,
|
||||
MetaWorkspace *target_workspace;
|
||||
MetaKeyBindingAction action;
|
||||
|
||||
action = display_get_keybinding_action (display,
|
||||
keysym,
|
||||
event->xkey.keycode,
|
||||
display->grab_mask);
|
||||
action = meta_display_get_keybinding_action (display,
|
||||
keysym,
|
||||
event->xkey.keycode,
|
||||
display->grab_mask);
|
||||
|
||||
switch (action)
|
||||
{
|
||||
|
@@ -586,7 +586,7 @@ main (int argc, char **argv)
|
||||
* is initialized at this point, and we don't plan to run any real
|
||||
* plugin code.
|
||||
*/
|
||||
MutterPluginManager *mgr = mutter_plugin_manager_new (NULL);
|
||||
MutterPluginManager *mgr = mutter_plugin_manager_get_default ();
|
||||
if (!mutter_plugin_manager_load (mgr))
|
||||
g_critical ("failed to load plugins");
|
||||
}
|
||||
|
254
src/core/prefs.c
254
src/core/prefs.c
@@ -27,6 +27,7 @@
|
||||
#include "prefs.h"
|
||||
#include "ui.h"
|
||||
#include "util.h"
|
||||
#include "compositor/mutter-plugin-manager.h"
|
||||
#ifdef HAVE_GCONF
|
||||
#include <gconf/gconf-client.h>
|
||||
#endif
|
||||
@@ -146,6 +147,8 @@ static gboolean update_command (const char *name,
|
||||
static gboolean update_workspace_name (const char *name,
|
||||
const char *value);
|
||||
|
||||
static void notify_new_value (const char *key,
|
||||
GConfValue *value);
|
||||
static void change_notify (GConfClient *client,
|
||||
guint cnxn_id,
|
||||
GConfEntry *entry,
|
||||
@@ -228,7 +231,12 @@ static GConfEnumStringPair symtab_titlebar_action[] =
|
||||
{ 0, NULL },
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Note that 'gchar *key' is the first element of all these structures;
|
||||
* we count on that below in key_is_used and do_override.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The details of one preference which is constrained to be
|
||||
* one of a small number of string values-- in other words,
|
||||
* an enumeration.
|
||||
@@ -241,21 +249,6 @@ static GConfEnumStringPair symtab_titlebar_action[] =
|
||||
* been outweighed by the bugs caused when the ordering of the enum
|
||||
* strings got out of sync with the actual enum statement. Also,
|
||||
* there is existing library code to use this kind of symbol tables.
|
||||
*
|
||||
* Other things we might consider doing to clean this up in the
|
||||
* future include:
|
||||
*
|
||||
* - most of the keys begin with the same prefix, and perhaps we
|
||||
* could assume it if they don't start with a slash
|
||||
*
|
||||
* - there are several cases where a single identifier could be used
|
||||
* to generate an entire entry, and perhaps this could be done
|
||||
* with a macro. (This would reduce clarity, however, and is
|
||||
* probably a bad thing.)
|
||||
*
|
||||
* - these types all begin with a gchar* (and contain a MetaPreference)
|
||||
* and we can factor out the repeated code in the handlers by taking
|
||||
* advantage of this using some kind of union arrangement.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
@@ -496,6 +489,20 @@ static MetaIntPreference preferences_int[] =
|
||||
{ NULL, 0, NULL, 0, 0, 0, },
|
||||
};
|
||||
|
||||
/*
|
||||
* This is used to keep track of preferences that have been
|
||||
* repointed to a different GConf key location; we modify the
|
||||
* preferences arrays directly, but we also need to remember
|
||||
* what we have done to handle subsequent overrides correctly.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
gchar *original_key;
|
||||
gchar *new_key;
|
||||
} MetaPrefsOverriddenKey;
|
||||
|
||||
static GSList *overridden_keys;
|
||||
|
||||
static void
|
||||
handle_preference_init_enum (void)
|
||||
{
|
||||
@@ -1031,6 +1038,7 @@ meta_prefs_init (void)
|
||||
#ifdef HAVE_GCONF
|
||||
GError *err = NULL;
|
||||
gchar **gconf_dir_cursor;
|
||||
MutterPluginManager *plugin_manager;
|
||||
|
||||
if (default_client != NULL)
|
||||
return;
|
||||
@@ -1049,12 +1057,7 @@ meta_prefs_init (void)
|
||||
cleanup_error (&err);
|
||||
}
|
||||
|
||||
/* Pick up initial values. */
|
||||
|
||||
handle_preference_init_enum ();
|
||||
handle_preference_init_bool ();
|
||||
handle_preference_init_string ();
|
||||
handle_preference_init_int ();
|
||||
/* The plugin list is special and needs to be handled first */
|
||||
|
||||
if (!clutter_plugins_overridden)
|
||||
clutter_plugins = gconf_client_get_list (default_client, KEY_CLUTTER_PLUGINS,
|
||||
@@ -1062,6 +1065,18 @@ meta_prefs_init (void)
|
||||
|
||||
cleanup_error (&err);
|
||||
|
||||
/* We now initialize plugins so that they can override any preference locations */
|
||||
|
||||
plugin_manager = mutter_plugin_manager_get_default ();
|
||||
mutter_plugin_manager_load (plugin_manager);
|
||||
|
||||
/* Pick up initial values. */
|
||||
|
||||
handle_preference_init_enum ();
|
||||
handle_preference_init_bool ();
|
||||
handle_preference_init_string ();
|
||||
handle_preference_init_int ();
|
||||
|
||||
/* @@@ Is there any reason we don't do the add_dir here? */
|
||||
for (gconf_dir_cursor=gconf_dirs_we_are_interested_in;
|
||||
*gconf_dir_cursor!=NULL;
|
||||
@@ -1094,6 +1109,160 @@ meta_prefs_init (void)
|
||||
init_workspace_names ();
|
||||
}
|
||||
|
||||
/* This count on the key being the first element of the
|
||||
* preference structure */
|
||||
static gboolean
|
||||
key_is_used (void *prefs,
|
||||
size_t pref_size,
|
||||
const char *new_key)
|
||||
{
|
||||
void *p = prefs;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
char **key = p;
|
||||
if (*key == NULL)
|
||||
break;
|
||||
|
||||
if (strcmp (*key, new_key) == 0)
|
||||
return TRUE;
|
||||
|
||||
p = (guchar *)p + pref_size;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
do_override (void *prefs,
|
||||
size_t pref_size,
|
||||
const char *search_key,
|
||||
char *new_key)
|
||||
{
|
||||
void *p = prefs;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
char **key = p;
|
||||
if (*key == NULL)
|
||||
break;
|
||||
|
||||
if (strcmp (*key, search_key) == 0)
|
||||
{
|
||||
*key = new_key;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
p = (guchar *)p + pref_size;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_prefs_override_preference_location
|
||||
* @original_key: the normal Metacity preference location
|
||||
* @new_key: the Metacity preference location to use instead.
|
||||
*
|
||||
* Substitute a different location to use instead of a standard Metacity
|
||||
* GConf key location. This might be used if a plugin expected a different
|
||||
* value for some preference than the Metacity default. While this function
|
||||
* can be called at any point, this function should generally be called
|
||||
* in a plugin's constructor, rather than in its start() method so the
|
||||
* preference isn't first loaded with one value then changed to another
|
||||
* value.
|
||||
*/
|
||||
void
|
||||
meta_prefs_override_preference_location (const char *original_key,
|
||||
const char *new_key)
|
||||
{
|
||||
const char *search_key;
|
||||
char *new_key_copy;
|
||||
gboolean found;
|
||||
MetaPrefsOverriddenKey *overridden;
|
||||
GSList *tmp;
|
||||
|
||||
/* Merge identical overrides, this isn't an error */
|
||||
for (tmp = overridden_keys; tmp; tmp = tmp->next)
|
||||
{
|
||||
MetaPrefsOverriddenKey *tmp_overridden = tmp->data;
|
||||
if (strcmp (tmp_overridden->original_key, original_key) == 0 &&
|
||||
strcmp (tmp_overridden->new_key, new_key) == 0)
|
||||
return;
|
||||
}
|
||||
|
||||
/* We depend on a unique mapping from GConf key to preference, so
|
||||
* enforce this */
|
||||
|
||||
if (key_is_used (preferences_enum, sizeof(MetaEnumPreference), new_key) ||
|
||||
key_is_used (preferences_bool, sizeof(MetaBoolPreference), new_key) ||
|
||||
key_is_used (preferences_string, sizeof(MetaStringPreference), new_key) ||
|
||||
key_is_used (preferences_int, sizeof(MetaIntPreference), new_key))
|
||||
{
|
||||
meta_warning (_("GConf key %s is already in use and can't be used to override %s\n"),
|
||||
new_key, original_key);
|
||||
|
||||
}
|
||||
|
||||
new_key_copy = g_strdup (new_key);
|
||||
|
||||
search_key = original_key;
|
||||
overridden = NULL;
|
||||
|
||||
for (tmp = overridden_keys; tmp; tmp = tmp->next)
|
||||
{
|
||||
MetaPrefsOverriddenKey *tmp_overridden = tmp->data;
|
||||
if (strcmp (overridden->original_key, original_key) == 0)
|
||||
{
|
||||
overridden = tmp_overridden;
|
||||
search_key = tmp_overridden->new_key;
|
||||
}
|
||||
}
|
||||
|
||||
found =
|
||||
do_override (preferences_enum, sizeof(MetaEnumPreference), search_key, new_key_copy) ||
|
||||
do_override (preferences_bool, sizeof(MetaBoolPreference), search_key, new_key_copy) ||
|
||||
do_override (preferences_string, sizeof(MetaStringPreference), search_key, new_key_copy) ||
|
||||
do_override (preferences_int, sizeof(MetaIntPreference), search_key, new_key_copy);
|
||||
if (found)
|
||||
{
|
||||
if (overridden)
|
||||
{
|
||||
g_free (overridden->new_key);
|
||||
overridden->new_key = new_key_copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
overridden = g_slice_new (MetaPrefsOverriddenKey);
|
||||
overridden->original_key = g_strdup (original_key);
|
||||
overridden->new_key = new_key_copy;
|
||||
}
|
||||
|
||||
#ifdef HAVE_GCONF
|
||||
if (default_client != NULL)
|
||||
{
|
||||
/* We're already initialized, so notify of a change */
|
||||
|
||||
GConfValue *value;
|
||||
GError *err = NULL;
|
||||
|
||||
value = gconf_client_get (default_client, new_key, &err);
|
||||
cleanup_error (&err);
|
||||
|
||||
notify_new_value (new_key, value);
|
||||
|
||||
if (value)
|
||||
gconf_value_free (value);
|
||||
}
|
||||
#endif /* HAVE_GCONF */
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_warning (_("Can't override GConf key, %s not found\n"), original_key);
|
||||
g_free (new_key_copy);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************/
|
||||
/* Updates. */
|
||||
@@ -1109,6 +1278,23 @@ gboolean (*preference_update_handler[]) (const gchar*, GConfValue*) = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static void
|
||||
notify_new_value (const char *key,
|
||||
GConfValue *value)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
/* FIXME: Use MetaGenericPreference and save a bit of code duplication */
|
||||
|
||||
while (preference_update_handler[i] != NULL)
|
||||
{
|
||||
if (preference_update_handler[i] (key, value))
|
||||
return;
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
change_notify (GConfClient *client,
|
||||
guint cnxn_id,
|
||||
@@ -1117,25 +1303,13 @@ change_notify (GConfClient *client,
|
||||
{
|
||||
const char *key;
|
||||
GConfValue *value;
|
||||
gint i=0;
|
||||
|
||||
key = gconf_entry_get_key (entry);
|
||||
value = gconf_entry_get_value (entry);
|
||||
|
||||
/* First, search for a handler that might know what to do. */
|
||||
|
||||
/* FIXME: When this is all working, since the first item in every
|
||||
* array is the gchar* of the key, there's no reason we can't
|
||||
* find the correct record for that key here and save code duplication.
|
||||
*/
|
||||
|
||||
while (preference_update_handler[i]!=NULL)
|
||||
{
|
||||
if (preference_update_handler[i] (key, value))
|
||||
goto out; /* Get rid of this eventually */
|
||||
|
||||
i++;
|
||||
}
|
||||
notify_new_value (key, value);
|
||||
|
||||
if (g_str_has_prefix (key, KEY_WINDOW_BINDINGS_PREFIX) ||
|
||||
g_str_has_prefix (key, KEY_SCREEN_BINDINGS_PREFIX))
|
||||
@@ -2004,6 +2178,8 @@ init_commands (void)
|
||||
static void
|
||||
init_workspace_names (void)
|
||||
{
|
||||
int i;
|
||||
|
||||
#ifdef HAVE_GCONF
|
||||
GSList *list, *l;
|
||||
const char *str_val;
|
||||
@@ -2022,14 +2198,14 @@ init_workspace_names (void)
|
||||
gconf_entry_free (entry);
|
||||
}
|
||||
g_slist_free (list);
|
||||
#else
|
||||
int i;
|
||||
#endif /* HAVE_GCONF */
|
||||
|
||||
for (i = 0; i < MAX_REASONABLE_WORKSPACES; i++)
|
||||
workspace_names[i] = g_strdup_printf (_("Workspace %d"), i + 1);
|
||||
if (workspace_names[i] == NULL)
|
||||
workspace_names[i] = g_strdup_printf (_("Workspace %d"), i + 1);
|
||||
|
||||
meta_topic (META_DEBUG_PREFS,
|
||||
"Initialized workspace names\n");
|
||||
#endif /* HAVE_GCONF */
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@@ -1266,7 +1266,8 @@ meta_screen_remove_workspace (MetaScreen *screen, MetaWorkspace *workspace,
|
||||
GList *l;
|
||||
MetaWorkspace *neighbour = NULL;
|
||||
GList *next = NULL;
|
||||
int index;
|
||||
int index;
|
||||
int new_num;
|
||||
|
||||
l = screen->workspaces;
|
||||
while (l)
|
||||
@@ -1308,7 +1309,10 @@ meta_screen_remove_workspace (MetaScreen *screen, MetaWorkspace *workspace,
|
||||
/* This also removes the workspace from the screens list */
|
||||
meta_workspace_remove (workspace);
|
||||
|
||||
set_number_of_spaces_hint (screen, g_list_length (screen->workspaces));
|
||||
new_num = g_list_length (screen->workspaces);
|
||||
|
||||
set_number_of_spaces_hint (screen, new_num);
|
||||
meta_prefs_set_num_workspaces (new_num);
|
||||
|
||||
l = next;
|
||||
while (l)
|
||||
@@ -1344,6 +1348,7 @@ meta_screen_append_new_workspace (MetaScreen *screen, gboolean activate,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWorkspace *w;
|
||||
int new_num;
|
||||
|
||||
/* This also adds the workspace to the screen list */
|
||||
w = meta_workspace_new (screen);
|
||||
@@ -1354,7 +1359,10 @@ meta_screen_append_new_workspace (MetaScreen *screen, gboolean activate,
|
||||
if (activate)
|
||||
meta_workspace_activate (w, timestamp);
|
||||
|
||||
set_number_of_spaces_hint (screen, g_list_length (screen->workspaces));
|
||||
new_num = g_list_length (screen->workspaces);
|
||||
|
||||
set_number_of_spaces_hint (screen, new_num);
|
||||
meta_prefs_set_num_workspaces (new_num);
|
||||
|
||||
meta_screen_queue_workarea_recalc (screen);
|
||||
|
||||
@@ -1381,6 +1389,9 @@ update_num_workspaces (MetaScreen *screen,
|
||||
|
||||
g_assert (new_num > 0);
|
||||
|
||||
if (g_list_length (screen->workspaces) == (guint) new_num)
|
||||
return;
|
||||
|
||||
last_remaining = NULL;
|
||||
extras = NULL;
|
||||
i = 0;
|
||||
|
104
src/core/util.c
104
src/core/util.c
@@ -40,6 +40,12 @@
|
||||
#include <X11/Xlib.h> /* must explicitly be included for Solaris; #326746 */
|
||||
#include <X11/Xutil.h> /* Just for the definition of the various gravities */
|
||||
|
||||
static void
|
||||
meta_topic_real_valist (MetaDebugTopic topic,
|
||||
const char *format,
|
||||
va_list args);
|
||||
|
||||
|
||||
#ifdef HAVE_BACKTRACE
|
||||
#include <execinfo.h>
|
||||
void
|
||||
@@ -71,7 +77,7 @@ meta_print_backtrace (void)
|
||||
}
|
||||
#endif
|
||||
|
||||
static gboolean is_verbose = FALSE;
|
||||
static gint verbose_topics = 0;
|
||||
static gboolean is_debugging = FALSE;
|
||||
static gboolean replace_current = FALSE;
|
||||
static int no_prefix = 0;
|
||||
@@ -128,7 +134,7 @@ ensure_logfile (void)
|
||||
gboolean
|
||||
meta_is_verbose (void)
|
||||
{
|
||||
return is_verbose;
|
||||
return verbose_topics != 0;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -141,8 +147,48 @@ meta_set_verbose (gboolean setting)
|
||||
if (setting)
|
||||
ensure_logfile ();
|
||||
#endif
|
||||
|
||||
is_verbose = setting;
|
||||
|
||||
if (setting)
|
||||
meta_add_verbose_topic (META_DEBUG_VERBOSE);
|
||||
else
|
||||
meta_remove_verbose_topic (META_DEBUG_VERBOSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_add_verbose_topic:
|
||||
* @topic: Topic for which logging will be started
|
||||
*
|
||||
* Ensure log messages for the given topic @topic
|
||||
* will be printed.
|
||||
*/
|
||||
void
|
||||
meta_add_verbose_topic (MetaDebugTopic topic)
|
||||
{
|
||||
if (verbose_topics == META_DEBUG_VERBOSE)
|
||||
return;
|
||||
if (topic == META_DEBUG_VERBOSE)
|
||||
verbose_topics = META_DEBUG_VERBOSE;
|
||||
else
|
||||
verbose_topics |= topic;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_remove_verbose_topic:
|
||||
* @topic: Topic for which logging will be stopped
|
||||
*
|
||||
* Stop printing log messages for the given topic @topic. Note
|
||||
* that this method does not stack with meta_add_verbose_topic();
|
||||
* i.e. if two calls to meta_add_verbose_topic() for the same
|
||||
* topic are made, one call to meta_remove_verbose_topic() will
|
||||
* remove it.
|
||||
*/
|
||||
void
|
||||
meta_remove_verbose_topic (MetaDebugTopic topic)
|
||||
{
|
||||
if (topic == META_DEBUG_VERBOSE)
|
||||
verbose_topics = 0;
|
||||
else
|
||||
verbose_topics &= ~topic;
|
||||
}
|
||||
|
||||
gboolean
|
||||
@@ -250,27 +296,10 @@ void
|
||||
meta_verbose_real (const char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
gchar *str;
|
||||
FILE *out;
|
||||
|
||||
g_return_if_fail (format != NULL);
|
||||
|
||||
if (!is_verbose)
|
||||
return;
|
||||
|
||||
va_start (args, format);
|
||||
str = g_strdup_vprintf (format, args);
|
||||
meta_topic_real_valist (META_DEBUG_VERBOSE, format, args);
|
||||
va_end (args);
|
||||
|
||||
out = logfile ? logfile : stderr;
|
||||
|
||||
if (no_prefix == 0)
|
||||
utf8_fputs ("Window manager: ", out);
|
||||
utf8_fputs (str, out);
|
||||
|
||||
fflush (out);
|
||||
|
||||
g_free (str);
|
||||
}
|
||||
#endif /* WITH_VERBOSE_MODE */
|
||||
|
||||
@@ -324,6 +353,8 @@ topic_name (MetaDebugTopic topic)
|
||||
return "COMPOSITOR";
|
||||
case META_DEBUG_EDGE_RESISTANCE:
|
||||
return "EDGE_RESISTANCE";
|
||||
case META_DEBUG_VERBOSE:
|
||||
return "VERBOSE";
|
||||
}
|
||||
|
||||
return "WM";
|
||||
@@ -331,23 +362,22 @@ topic_name (MetaDebugTopic topic)
|
||||
|
||||
static int sync_count = 0;
|
||||
|
||||
void
|
||||
meta_topic_real (MetaDebugTopic topic,
|
||||
const char *format,
|
||||
...)
|
||||
static void
|
||||
meta_topic_real_valist (MetaDebugTopic topic,
|
||||
const char *format,
|
||||
va_list args)
|
||||
{
|
||||
va_list args;
|
||||
gchar *str;
|
||||
FILE *out;
|
||||
|
||||
g_return_if_fail (format != NULL);
|
||||
|
||||
if (!is_verbose)
|
||||
if (verbose_topics == 0
|
||||
|| (topic == META_DEBUG_VERBOSE && verbose_topics != META_DEBUG_VERBOSE)
|
||||
|| (!(verbose_topics & topic)))
|
||||
return;
|
||||
|
||||
va_start (args, format);
|
||||
|
||||
str = g_strdup_vprintf (format, args);
|
||||
va_end (args);
|
||||
|
||||
out = logfile ? logfile : stderr;
|
||||
|
||||
@@ -366,6 +396,18 @@ meta_topic_real (MetaDebugTopic topic,
|
||||
|
||||
g_free (str);
|
||||
}
|
||||
|
||||
void
|
||||
meta_topic_real (MetaDebugTopic topic,
|
||||
const char *format,
|
||||
...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start (args, format);
|
||||
meta_topic_real_valist (topic, format, args);
|
||||
va_end (args);
|
||||
}
|
||||
#endif /* WITH_VERBOSE_MODE */
|
||||
|
||||
void
|
||||
|
@@ -46,9 +46,6 @@
|
||||
|
||||
typedef struct _MetaWindowQueue MetaWindowQueue;
|
||||
|
||||
typedef gboolean (*MetaWindowForeachFunc) (MetaWindow *window,
|
||||
void *data);
|
||||
|
||||
typedef enum {
|
||||
META_CLIENT_TYPE_UNKNOWN = 0,
|
||||
META_CLIENT_TYPE_APPLICATION = 1,
|
||||
@@ -99,6 +96,7 @@ struct _MetaWindow
|
||||
char *sm_client_id;
|
||||
char *wm_client_machine;
|
||||
char *startup_id;
|
||||
char *mutter_hints;
|
||||
|
||||
int net_wm_pid;
|
||||
|
||||
@@ -506,8 +504,6 @@ void meta_window_get_geometry (MetaWindow *window,
|
||||
void meta_window_kill (MetaWindow *window);
|
||||
void meta_window_focus (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
void meta_window_raise (MetaWindow *window);
|
||||
void meta_window_lower (MetaWindow *window);
|
||||
|
||||
void meta_window_update_unfocused_button_grabs (MetaWindow *window);
|
||||
|
||||
@@ -582,12 +578,6 @@ void meta_window_refresh_resize_popup (MetaWindow *window);
|
||||
|
||||
void meta_window_free_delete_dialog (MetaWindow *window);
|
||||
|
||||
void meta_window_foreach_transient (MetaWindow *window,
|
||||
MetaWindowForeachFunc func,
|
||||
void *data);
|
||||
void meta_window_foreach_ancestor (MetaWindow *window,
|
||||
MetaWindowForeachFunc func,
|
||||
void *data);
|
||||
|
||||
void meta_window_begin_grab_op (MetaWindow *window,
|
||||
MetaGrabOp op,
|
||||
@@ -610,10 +600,6 @@ void meta_window_stack_just_below (MetaWindow *window,
|
||||
void meta_window_set_user_time (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_window_set_demands_attention (MetaWindow *window);
|
||||
|
||||
void meta_window_unset_demands_attention (MetaWindow *window);
|
||||
|
||||
void meta_window_update_icon_now (MetaWindow *window);
|
||||
|
||||
void meta_window_update_role (MetaWindow *window);
|
||||
|
@@ -523,6 +523,49 @@ reload_wm_name (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reload_mutter_hints (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
char *new_hints = value->v.str;
|
||||
char *old_hints = window->mutter_hints;
|
||||
gboolean changed = FALSE;
|
||||
|
||||
if (new_hints)
|
||||
{
|
||||
if (!old_hints || strcmp (new_hints, old_hints))
|
||||
changed = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (old_hints)
|
||||
changed = TRUE;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
{
|
||||
g_free (old_hints);
|
||||
|
||||
if (new_hints)
|
||||
window->mutter_hints = g_strdup (new_hints);
|
||||
else
|
||||
window->mutter_hints = NULL;
|
||||
|
||||
g_object_notify (G_OBJECT (window), "mutter-hints");
|
||||
}
|
||||
}
|
||||
else if (window->mutter_hints)
|
||||
{
|
||||
g_free (window->mutter_hints);
|
||||
window->mutter_hints = NULL;
|
||||
|
||||
g_object_notify (G_OBJECT (window), "mutter-hints");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
set_icon_title (MetaWindow *window,
|
||||
const char *title)
|
||||
@@ -1506,6 +1549,7 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
|
||||
{ XA_WM_CLASS, META_PROP_VALUE_CLASS_HINT, reload_wm_class, TRUE, TRUE },
|
||||
{ display->atom__NET_WM_PID, META_PROP_VALUE_CARDINAL, reload_net_wm_pid, TRUE, TRUE },
|
||||
{ XA_WM_NAME, META_PROP_VALUE_TEXT_PROPERTY, reload_wm_name, TRUE, TRUE },
|
||||
{ display->atom__MUTTER_HINTS, META_PROP_VALUE_TEXT_PROPERTY, reload_mutter_hints, TRUE, TRUE },
|
||||
{ display->atom__NET_WM_ICON_NAME, META_PROP_VALUE_UTF8, reload_net_wm_icon_name, TRUE, FALSE },
|
||||
{ XA_WM_ICON_NAME, META_PROP_VALUE_TEXT_PROPERTY, reload_wm_icon_name, TRUE, FALSE },
|
||||
{ display->atom__NET_WM_DESKTOP, META_PROP_VALUE_CARDINAL, reload_net_wm_desktop, TRUE, FALSE },
|
||||
|
@@ -146,7 +146,8 @@ enum {
|
||||
PROP_WINDOW_TYPE,
|
||||
PROP_USER_TIME,
|
||||
PROP_DEMANDS_ATTENTION,
|
||||
PROP_URGENT
|
||||
PROP_URGENT,
|
||||
PROP_MUTTER_HINTS
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -228,6 +229,9 @@ meta_window_get_property(GObject *object,
|
||||
case PROP_URGENT:
|
||||
g_value_set_boolean (value, win->wm_hints_urgent);
|
||||
break;
|
||||
case PROP_MUTTER_HINTS:
|
||||
g_value_set_string (value, win->mutter_hints);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -348,6 +352,13 @@ meta_window_class_init (MetaWindowClass *klass)
|
||||
FALSE,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_MUTTER_HINTS,
|
||||
g_param_spec_string ("mutter-hints",
|
||||
"_MUTTER_HINTS",
|
||||
"Contents of the _MUTTER_HINTS property of this window",
|
||||
NULL,
|
||||
G_PARAM_READABLE));
|
||||
window_signals[WORKSPACE_CHANGED] =
|
||||
g_signal_new ("workspace-changed",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
@@ -3224,10 +3235,6 @@ meta_window_unmaximize (MetaWindow *window,
|
||||
window->display->grab_anchor_window_pos = target_rect;
|
||||
}
|
||||
|
||||
/* Make sure user_rect is current.
|
||||
*/
|
||||
force_save_user_window_placement (window);
|
||||
|
||||
if (window->display->compositor)
|
||||
{
|
||||
MetaRectangle old_rect, new_rect;
|
||||
@@ -3257,6 +3264,10 @@ meta_window_unmaximize (MetaWindow *window,
|
||||
target_rect.height);
|
||||
}
|
||||
|
||||
/* Make sure user_rect is current.
|
||||
*/
|
||||
force_save_user_window_placement (window);
|
||||
|
||||
recalc_window_features (window);
|
||||
set_net_wm_state (window);
|
||||
}
|
||||
@@ -7067,9 +7078,12 @@ menu_callback (MetaWindowMenu *menu,
|
||||
{
|
||||
meta_verbose ("Menu op %u on %s\n", op, window->desc);
|
||||
|
||||
/* op can be 0 for none */
|
||||
switch (op)
|
||||
{
|
||||
case META_MENU_OP_NONE:
|
||||
/* nothing */
|
||||
break;
|
||||
|
||||
case META_MENU_OP_DELETE:
|
||||
meta_window_delete (window, timestamp);
|
||||
break;
|
||||
@@ -7157,10 +7171,6 @@ menu_callback (MetaWindowMenu *menu,
|
||||
meta_window_shove_titlebar_onscreen (window);
|
||||
break;
|
||||
|
||||
case 0:
|
||||
/* nothing */
|
||||
break;
|
||||
|
||||
default:
|
||||
meta_warning (G_STRLOC": Unknown window op\n");
|
||||
break;
|
||||
@@ -7213,8 +7223,8 @@ meta_window_show_menu (MetaWindow *window,
|
||||
window->display->window_with_menu = NULL;
|
||||
}
|
||||
|
||||
ops = 0;
|
||||
insensitive = 0;
|
||||
ops = META_MENU_OP_NONE;
|
||||
insensitive = META_MENU_OP_NONE;
|
||||
|
||||
ops |= (META_MENU_OP_DELETE | META_MENU_OP_MINIMIZE | META_MENU_OP_MOVE | META_MENU_OP_RESIZE);
|
||||
|
||||
@@ -8248,10 +8258,22 @@ meta_window_refresh_resize_popup (MetaWindow *window)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_foreach_transient:
|
||||
* @window: a #MetaWindow
|
||||
* @func: (scope call): Called for each window which is a transient of @window (transitively)
|
||||
* @user_data: (closure): User data
|
||||
*
|
||||
* Call @func for every window which is either transient for @window, or is
|
||||
* a transient of a window which is in turn transient for @window.
|
||||
* The order of window enumeration is not defined.
|
||||
*
|
||||
* Iteration will stop if @func at any point returns %FALSE.
|
||||
*/
|
||||
void
|
||||
meta_window_foreach_transient (MetaWindow *window,
|
||||
MetaWindowForeachFunc func,
|
||||
void *data)
|
||||
void *user_data)
|
||||
{
|
||||
GSList *windows;
|
||||
GSList *tmp;
|
||||
@@ -8265,7 +8287,7 @@ meta_window_foreach_transient (MetaWindow *window,
|
||||
|
||||
if (meta_window_is_ancestor_of_transient (window, transient))
|
||||
{
|
||||
if (!(* func) (transient, data))
|
||||
if (!(* func) (transient, user_data))
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -8275,10 +8297,19 @@ meta_window_foreach_transient (MetaWindow *window,
|
||||
g_slist_free (windows);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_foreach_ancestor:
|
||||
* @window: a #MetaWindow
|
||||
* @func: (scope call): Called for each window which is a transient parent of @window
|
||||
* @user_data: (closure): User data
|
||||
*
|
||||
* If @window is transient, call @func with the window for which it's transient,
|
||||
* repeatedly until either we find a non-transient window, or @func returns %FALSE.
|
||||
*/
|
||||
void
|
||||
meta_window_foreach_ancestor (MetaWindow *window,
|
||||
MetaWindowForeachFunc func,
|
||||
void *data)
|
||||
void *user_data)
|
||||
{
|
||||
MetaWindow *w;
|
||||
MetaWindow *tortoise;
|
||||
@@ -8296,7 +8327,7 @@ meta_window_foreach_ancestor (MetaWindow *window,
|
||||
if (w == NULL || w == tortoise)
|
||||
break;
|
||||
|
||||
if (!(* func) (w, data))
|
||||
if (!(* func) (w, user_data))
|
||||
break;
|
||||
|
||||
if (w->xtransient_for == None ||
|
||||
@@ -8308,7 +8339,7 @@ meta_window_foreach_ancestor (MetaWindow *window,
|
||||
if (w == NULL || w == tortoise)
|
||||
break;
|
||||
|
||||
if (!(* func) (w, data))
|
||||
if (!(* func) (w, user_data))
|
||||
break;
|
||||
|
||||
tortoise = meta_display_lookup_x_window (tortoise->display,
|
||||
@@ -8923,8 +8954,8 @@ meta_window_get_description (MetaWindow *window)
|
||||
/**
|
||||
* meta_window_get_wm_class:
|
||||
* @window: a #MetaWindow
|
||||
*
|
||||
* Return the current value of the WM_CLASS X property.
|
||||
*
|
||||
* Return the current value of the name part of WM_CLASS X property.
|
||||
*/
|
||||
const char *
|
||||
meta_window_get_wm_class (MetaWindow *window)
|
||||
@@ -8935,6 +8966,21 @@ meta_window_get_wm_class (MetaWindow *window)
|
||||
return window->res_class;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_get_wm_class_instance:
|
||||
* @window: a #MetaWindow
|
||||
*
|
||||
* Return the current value of the instance part of WM_CLASS X property.
|
||||
*/
|
||||
const char *
|
||||
meta_window_get_wm_class_instance (MetaWindow *window)
|
||||
{
|
||||
if (!window)
|
||||
return NULL;
|
||||
|
||||
return window->res_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_get_compositor_private:
|
||||
* @window: a #MetaWindow
|
||||
@@ -9069,6 +9115,21 @@ meta_window_get_client_machine (MetaWindow *window)
|
||||
return window->wm_client_machine;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_is_remote:
|
||||
* @window: a #MetaWindow
|
||||
*
|
||||
* Returns: %TRUE if this window originates from a host
|
||||
* different from the one running mutter.
|
||||
*/
|
||||
gboolean
|
||||
meta_window_is_remote (MetaWindow *window)
|
||||
{
|
||||
g_return_val_if_fail (META_IS_WINDOW (window), FALSE);
|
||||
|
||||
return g_strcmp0 (window->wm_client_machine, window->display->hostname) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_is_modal:
|
||||
* @window: a #MetaWindow
|
||||
@@ -9085,3 +9146,29 @@ meta_window_is_modal (MetaWindow *window)
|
||||
|
||||
return window->wm_state_modal;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_get_mutter_hints:
|
||||
* @window: a #MetaWindow
|
||||
*
|
||||
* Gets the current value of the _MUTTER_HINTS property.
|
||||
*
|
||||
* The purpose of the hints is to allow fine-tuning of the Window Manager and
|
||||
* Compositor behaviour on per-window basis, and is intended primarily for
|
||||
* hints that are plugin-specific.
|
||||
*
|
||||
* The property is a list of colon-separated key=value pairs. The key names for
|
||||
* any plugin-specific hints must be suitably namespaced to allow for shared
|
||||
* use; 'mutter-' key prefix is reserved for internal use, and must not be used
|
||||
* by plugins.
|
||||
*
|
||||
* Return value: (transfer none): the _MUTTER_HINTS string, or %NULL if no hints
|
||||
* are set.
|
||||
*/
|
||||
const char *
|
||||
meta_window_get_mutter_hints (MetaWindow *window)
|
||||
{
|
||||
g_return_val_if_fail (META_IS_WINDOW (window), NULL);
|
||||
|
||||
return window->mutter_hints;
|
||||
}
|
||||
|
26
src/gtk-compat.h
Normal file
26
src/gtk-compat.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef __GTK_COMPAT_H__
|
||||
#define __GTK_COMPAT_H__
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
/* Provide a compatibility layer for accessor function introduces
|
||||
* in GTK+ 2.20 which we need to build with GSEAL_ENABLE.
|
||||
* That way it is still possible to build with GTK+ 2.18 when not
|
||||
* using GSEAL_ENABLE
|
||||
*/
|
||||
|
||||
#if !GTK_CHECK_VERSION (2, 20, 0)
|
||||
|
||||
#define gtk_widget_get_realized(w) GTK_WIDGET_REALIZED (w)
|
||||
#define gtk_widget_get_requisition(w,r) (*r = GTK_WIDGET (w)->requisition)
|
||||
#define gtk_widget_set_mapped(w,m) \
|
||||
G_STMT_START { \
|
||||
if (m) \
|
||||
GTK_WIDGET_SET_FLAGS (w, GTK_MAPPED); \
|
||||
else \
|
||||
GTK_WIDGET_UNSET_FLAGS (w, GTK_MAPPED); \
|
||||
} G_STMT_END
|
||||
|
||||
#endif /* GTK_CHECK_VERSION */
|
||||
|
||||
#endif /* __GTK_COMPAT_H__ */
|
@@ -58,6 +58,7 @@ item(_MUTTER_RESTART_MESSAGE)
|
||||
item(_MUTTER_RELOAD_THEME_MESSAGE)
|
||||
item(_MUTTER_SET_KEYBINDINGS_MESSAGE)
|
||||
item(_MUTTER_TOGGLE_VERBOSE)
|
||||
item(_MUTTER_HINTS)
|
||||
item(_GNOME_WM_KEYBINDINGS)
|
||||
item(_GNOME_PANEL_ACTION)
|
||||
item(_GNOME_PANEL_ACTION_MAIN_MENU)
|
||||
|
@@ -52,6 +52,7 @@ typedef enum
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_MENU_OP_NONE = 0,
|
||||
META_MENU_OP_DELETE = 1 << 0,
|
||||
META_MENU_OP_MINIMIZE = 1 << 1,
|
||||
META_MENU_OP_UNMAXIMIZE = 1 << 2,
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
#include "types.h"
|
||||
#include "prefs.h"
|
||||
#include "common.h"
|
||||
|
||||
typedef enum
|
||||
@@ -81,6 +82,12 @@ gboolean meta_display_xwindow_is_a_no_focus_window (MetaDisplay *display,
|
||||
int meta_display_get_damage_event_base (MetaDisplay *display);
|
||||
int meta_display_get_shape_event_base (MetaDisplay *display);
|
||||
Atom meta_display_get_atom (MetaDisplay *display, MetaAtom meta_atom);
|
||||
|
||||
gboolean meta_display_xserver_time_is_before (MetaDisplay *display,
|
||||
guint32 time1,
|
||||
guint32 time2);
|
||||
|
||||
guint32 meta_display_get_last_user_time (MetaDisplay *display);
|
||||
guint32 meta_display_get_current_time (MetaDisplay *display);
|
||||
guint32 meta_display_get_current_time_roundtrip (MetaDisplay *display);
|
||||
|
||||
@@ -117,6 +124,10 @@ void meta_display_end_grab_op (MetaDisplay *display,
|
||||
|
||||
MetaGrabOp meta_display_get_grab_op (MetaDisplay *display);
|
||||
|
||||
MetaKeyBindingAction meta_display_get_keybinding_action (MetaDisplay *display,
|
||||
unsigned int keysym,
|
||||
unsigned int keycode,
|
||||
unsigned long mask);
|
||||
|
||||
/* meta_display_set_input_focus_window is like XSetInputFocus, except
|
||||
* that (a) it can't detect timestamps later than the current time,
|
||||
@@ -140,4 +151,9 @@ void meta_display_focus_the_no_focus_window (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
guint32 timestamp);
|
||||
|
||||
GSList *meta_display_sort_windows_by_stacking (MetaDisplay *display,
|
||||
GSList *windows);
|
||||
|
||||
Window meta_display_get_leader_window (MetaDisplay *display);
|
||||
|
||||
#endif
|
||||
|
@@ -32,19 +32,6 @@
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
#include <gmodule.h>
|
||||
|
||||
/*
|
||||
* FIXME -- move these to a private include
|
||||
* Required by plugin manager.
|
||||
*/
|
||||
#define MUTTER_PLUGIN_MINIMIZE (1<<0)
|
||||
#define MUTTER_PLUGIN_MAXIMIZE (1<<1)
|
||||
#define MUTTER_PLUGIN_UNMAXIMIZE (1<<2)
|
||||
#define MUTTER_PLUGIN_MAP (1<<3)
|
||||
#define MUTTER_PLUGIN_DESTROY (1<<4)
|
||||
#define MUTTER_PLUGIN_SWITCH_WORKSPACE (1<<5)
|
||||
|
||||
#define MUTTER_PLUGIN_ALL_EFFECTS (~0)
|
||||
|
||||
#define MUTTER_TYPE_PLUGIN (mutter_plugin_get_type ())
|
||||
#define MUTTER_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MUTTER_TYPE_PLUGIN, MutterPlugin))
|
||||
#define MUTTER_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MUTTER_TYPE_PLUGIN, MutterPluginClass))
|
||||
@@ -69,6 +56,8 @@ struct _MutterPluginClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
void (*start) (MutterPlugin *plugin);
|
||||
|
||||
void (*minimize) (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
|
||||
@@ -93,20 +82,18 @@ struct _MutterPluginClass
|
||||
MutterWindow *actor);
|
||||
|
||||
void (*switch_workspace) (MutterPlugin *plugin,
|
||||
const GList **actors,
|
||||
gint from,
|
||||
gint to,
|
||||
MetaMotionDirection direction);
|
||||
|
||||
/*
|
||||
* Called if an effect should be killed prematurely; the plugin must
|
||||
* Called if an effects should be killed prematurely; the plugin must
|
||||
* call the completed() callback as if the effect terminated naturally.
|
||||
* The events parameter is a bitmask indicating which effects are to be
|
||||
* killed.
|
||||
*/
|
||||
void (*kill_effect) (MutterPlugin *plugin,
|
||||
MutterWindow *actor,
|
||||
gulong events);
|
||||
void (*kill_window_effects) (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
|
||||
void (*kill_switch_workspace) (MutterPlugin *plugin);
|
||||
|
||||
/* General XEvent filter. This is fired *before* mutter itself handles
|
||||
* an event. Return TRUE to block any further processing.
|
||||
@@ -225,9 +212,27 @@ struct _MutterPluginVersion
|
||||
} \
|
||||
|
||||
void
|
||||
mutter_plugin_effect_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor,
|
||||
unsigned long event);
|
||||
mutter_plugin_switch_workspace_completed (MutterPlugin *plugin);
|
||||
|
||||
void
|
||||
mutter_plugin_minimize_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
|
||||
void
|
||||
mutter_plugin_maximize_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
|
||||
void
|
||||
mutter_plugin_unmaximize_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
|
||||
void
|
||||
mutter_plugin_map_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
|
||||
void
|
||||
mutter_plugin_destroy_completed (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
|
||||
ClutterActor *
|
||||
mutter_plugin_get_overlay_group (MutterPlugin *plugin);
|
||||
|
@@ -74,6 +74,10 @@ void meta_prefs_remove_listener (MetaPrefsChangedFunc func,
|
||||
gpointer data);
|
||||
|
||||
void meta_prefs_init (void);
|
||||
|
||||
void meta_prefs_override_preference_location (const char *original_key,
|
||||
const char *new_key);
|
||||
|
||||
const char* meta_preference_to_string (MetaPreference pref);
|
||||
|
||||
MetaVirtualModifier meta_prefs_get_mouse_button_mods (void);
|
||||
|
@@ -51,6 +51,7 @@ void meta_fatal (const char *format,
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_DEBUG_VERBOSE = -1,
|
||||
META_DEBUG_FOCUS = 1 << 0,
|
||||
META_DEBUG_WORKAREA = 1 << 1,
|
||||
META_DEBUG_STACK = 1 << 2,
|
||||
@@ -78,6 +79,8 @@ typedef enum
|
||||
void meta_topic_real (MetaDebugTopic topic,
|
||||
const char *format,
|
||||
...) G_GNUC_PRINTF (2, 3);
|
||||
void meta_add_verbose_topic (MetaDebugTopic topic);
|
||||
void meta_remove_verbose_topic (MetaDebugTopic topic);
|
||||
|
||||
void meta_push_no_msg_prefix (void);
|
||||
void meta_pop_no_msg_prefix (void);
|
||||
|
@@ -88,9 +88,13 @@ void meta_window_activate_with_workspace (MetaWindow *window,
|
||||
MetaWorkspace *workspace);
|
||||
const char * meta_window_get_description (MetaWindow *window);
|
||||
const char * meta_window_get_wm_class (MetaWindow *window);
|
||||
const char * meta_window_get_wm_class_instance (MetaWindow *window);
|
||||
/* Return whether the window would be showing if we were on its workspace */
|
||||
gboolean meta_window_showing_on_its_workspace (MetaWindow *window);
|
||||
|
||||
void meta_window_set_demands_attention (MetaWindow *window);
|
||||
void meta_window_unset_demands_attention (MetaWindow *window);
|
||||
|
||||
const char* meta_window_get_startup_id (MetaWindow *window);
|
||||
void meta_window_change_workspace_by_index (MetaWindow *window,
|
||||
gint space_index,
|
||||
@@ -104,6 +108,17 @@ MetaStackLayer meta_window_get_layer (MetaWindow *window);
|
||||
MetaWindow* meta_window_find_root_ancestor (MetaWindow *window);
|
||||
gboolean meta_window_is_ancestor_of_transient (MetaWindow *window,
|
||||
MetaWindow *transient);
|
||||
|
||||
typedef gboolean (*MetaWindowForeachFunc) (MetaWindow *window,
|
||||
void *data);
|
||||
|
||||
void meta_window_foreach_transient (MetaWindow *window,
|
||||
MetaWindowForeachFunc func,
|
||||
void *user_data);
|
||||
void meta_window_foreach_ancestor (MetaWindow *window,
|
||||
MetaWindowForeachFunc func,
|
||||
void *user_data);
|
||||
|
||||
gboolean meta_window_is_mapped (MetaWindow *window);
|
||||
gboolean meta_window_toplevel_is_mapped (MetaWindow *window);
|
||||
gboolean meta_window_get_icon_geometry (MetaWindow *window,
|
||||
@@ -114,6 +129,8 @@ void meta_window_unmaximize (MetaWindow *window,
|
||||
MetaMaximizeFlags directions);
|
||||
void meta_window_minimize (MetaWindow *window);
|
||||
void meta_window_unminimize (MetaWindow *window);
|
||||
void meta_window_raise (MetaWindow *window);
|
||||
void meta_window_lower (MetaWindow *window);
|
||||
const char *meta_window_get_title (MetaWindow *window);
|
||||
MetaWindow *meta_window_get_transient_for (MetaWindow *window);
|
||||
Window meta_window_get_transient_for_as_xid (MetaWindow *window);
|
||||
@@ -123,5 +140,7 @@ guint meta_window_get_stable_sequence (MetaWindow *window);
|
||||
guint32 meta_window_get_user_time (MetaWindow *window);
|
||||
int meta_window_get_pid (MetaWindow *window);
|
||||
const char *meta_window_get_client_machine (MetaWindow *window);
|
||||
gboolean meta_window_is_remote (MetaWindow *window);
|
||||
gboolean meta_window_is_modal (MetaWindow *window);
|
||||
const char *meta_window_get_mutter_hints (MetaWindow *window);
|
||||
#endif
|
||||
|
@@ -4,6 +4,7 @@ icondir=$(pkgdatadir)/icons
|
||||
icon_DATA=mutter-window-demo.png
|
||||
|
||||
INCLUDES=@MUTTER_WINDOW_DEMO_CFLAGS@ @MUTTER_MESSAGE_CFLAGS@ \
|
||||
-I$(top_srcdir)/src \
|
||||
-DMUTTER_ICON_DIR=\"$(pkgdatadir)/icons\" \
|
||||
-DMUTTER_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\"
|
||||
|
||||
|
@@ -76,14 +76,17 @@ get_pixbuf (void)
|
||||
static gboolean
|
||||
regrab_idle (GtkWidget *image)
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
GdkPixbuf *magnified;
|
||||
|
||||
if (image->allocation.width != last_grab_allocation.width ||
|
||||
image->allocation.height != last_grab_allocation.height)
|
||||
|
||||
gtk_widget_get_allocation (image, &allocation);
|
||||
|
||||
if (allocation.width != last_grab_allocation.width ||
|
||||
allocation.height != last_grab_allocation.height)
|
||||
{
|
||||
last_grab_width = rint (image->allocation.width / width_factor);
|
||||
last_grab_height = rint (image->allocation.height / height_factor);
|
||||
last_grab_allocation = image->allocation;
|
||||
last_grab_width = rint (allocation.width / width_factor);
|
||||
last_grab_height = rint (allocation.height / height_factor);
|
||||
last_grab_allocation = allocation;
|
||||
|
||||
magnified = get_pixbuf ();
|
||||
|
||||
@@ -224,6 +227,8 @@ mouse_press (GtkWidget *invisible,
|
||||
static void
|
||||
begin_area_grab (void)
|
||||
{
|
||||
GdkWindow *window;
|
||||
|
||||
if (grab_widget == NULL)
|
||||
{
|
||||
grab_widget = gtk_invisible_new ();
|
||||
@@ -234,7 +239,9 @@ begin_area_grab (void)
|
||||
gtk_widget_show (grab_widget);
|
||||
}
|
||||
|
||||
if (gdk_keyboard_grab (grab_widget->window,
|
||||
window = gtk_widget_get_window (grab_widget);
|
||||
|
||||
if (gdk_keyboard_grab (window,
|
||||
FALSE,
|
||||
gtk_get_current_event_time ()) != GDK_GRAB_SUCCESS)
|
||||
{
|
||||
@@ -242,7 +249,7 @@ begin_area_grab (void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (gdk_pointer_grab (grab_widget->window,
|
||||
if (gdk_pointer_grab (window,
|
||||
FALSE,
|
||||
GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK,
|
||||
NULL,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
#include <X11/Xatom.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "gtk-compat.h"
|
||||
|
||||
static GtkWidget* do_appwindow (void);
|
||||
|
||||
static gboolean aspect_on;
|
||||
@@ -62,19 +64,22 @@ static void
|
||||
on_realize_set_struts (GtkWindow *window,
|
||||
gpointer data)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
int left;
|
||||
int right;
|
||||
int top;
|
||||
int bottom;
|
||||
|
||||
g_return_if_fail (GTK_WIDGET_REALIZED (window));
|
||||
widget = GTK_WIDGET (window);
|
||||
|
||||
g_return_if_fail (gtk_widget_get_realized (widget));
|
||||
|
||||
left = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "meta-strut-left"));
|
||||
right = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "meta-strut-right"));
|
||||
top = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "meta-strut-top"));
|
||||
bottom = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "meta-strut-bottom"));
|
||||
|
||||
set_gdk_window_struts (GTK_WIDGET (window)->window,
|
||||
set_gdk_window_struts (gtk_widget_get_window (widget),
|
||||
left, right, top, bottom);
|
||||
}
|
||||
|
||||
@@ -85,6 +90,10 @@ set_gtk_window_struts (GtkWidget *window,
|
||||
int top,
|
||||
int bottom)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = GTK_WIDGET (window);
|
||||
|
||||
g_object_set_data (G_OBJECT (window), "meta-strut-left",
|
||||
GINT_TO_POINTER (left));
|
||||
g_object_set_data (G_OBJECT (window), "meta-strut-right",
|
||||
@@ -93,18 +102,18 @@ set_gtk_window_struts (GtkWidget *window,
|
||||
GINT_TO_POINTER (top));
|
||||
g_object_set_data (G_OBJECT (window), "meta-strut-bottom",
|
||||
GINT_TO_POINTER (bottom));
|
||||
|
||||
|
||||
g_signal_handlers_disconnect_by_func (G_OBJECT (window),
|
||||
on_realize_set_struts,
|
||||
NULL);
|
||||
|
||||
|
||||
g_signal_connect_after (G_OBJECT (window),
|
||||
"realize",
|
||||
G_CALLBACK (on_realize_set_struts),
|
||||
NULL);
|
||||
|
||||
if (GTK_WIDGET_REALIZED (window))
|
||||
set_gdk_window_struts (GTK_WIDGET (window)->window,
|
||||
if (gtk_widget_get_realized (widget))
|
||||
set_gdk_window_struts (gtk_widget_get_window (widget),
|
||||
left, right, top, bottom);
|
||||
}
|
||||
|
||||
@@ -129,15 +138,18 @@ static void
|
||||
on_realize_set_type (GtkWindow *window,
|
||||
gpointer data)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
const char *type;
|
||||
|
||||
g_return_if_fail (GTK_WIDGET_REALIZED (window));
|
||||
widget = GTK_WIDGET (window);
|
||||
|
||||
g_return_if_fail (gtk_widget_get_realized (widget));
|
||||
|
||||
type = g_object_get_data (G_OBJECT (window), "meta-window-type");
|
||||
|
||||
g_return_if_fail (type != NULL);
|
||||
|
||||
set_gdk_window_type (GTK_WIDGET (window)->window,
|
||||
set_gdk_window_type (gtk_widget_get_window (widget),
|
||||
type);
|
||||
}
|
||||
|
||||
@@ -145,6 +157,10 @@ static void
|
||||
set_gtk_window_type (GtkWindow *window,
|
||||
const char *type)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = GTK_WIDGET (window);
|
||||
|
||||
g_object_set_data (G_OBJECT (window), "meta-window-type", (char*) type);
|
||||
|
||||
g_signal_handlers_disconnect_by_func (G_OBJECT (window),
|
||||
@@ -156,8 +172,8 @@ set_gtk_window_type (GtkWindow *window,
|
||||
G_CALLBACK (on_realize_set_type),
|
||||
NULL);
|
||||
|
||||
if (GTK_WIDGET_REALIZED (window))
|
||||
set_gdk_window_type (GTK_WIDGET (window)->window,
|
||||
if (gtk_widget_get_realized (widget))
|
||||
set_gdk_window_type (gtk_widget_get_window (widget),
|
||||
type);
|
||||
}
|
||||
|
||||
@@ -171,14 +187,22 @@ static void
|
||||
on_realize_set_border_only (GtkWindow *window,
|
||||
gpointer data)
|
||||
{
|
||||
g_return_if_fail (GTK_WIDGET_REALIZED (window));
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = GTK_WIDGET (window);
|
||||
|
||||
g_return_if_fail (gtk_widget_get_realized (widget));
|
||||
|
||||
set_gdk_window_border_only (GTK_WIDGET (window)->window);
|
||||
set_gdk_window_border_only (gtk_widget_get_window (widget));
|
||||
}
|
||||
|
||||
static void
|
||||
set_gtk_window_border_only (GtkWindow *window)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = GTK_WIDGET (window);
|
||||
|
||||
g_signal_handlers_disconnect_by_func (G_OBJECT (window),
|
||||
on_realize_set_border_only,
|
||||
NULL);
|
||||
@@ -188,8 +212,8 @@ set_gtk_window_border_only (GtkWindow *window)
|
||||
G_CALLBACK (on_realize_set_border_only),
|
||||
NULL);
|
||||
|
||||
if (GTK_WIDGET_REALIZED (window))
|
||||
set_gdk_window_border_only (GTK_WIDGET (window)->window);
|
||||
if (gtk_widget_get_realized (widget))
|
||||
set_gdk_window_border_only (gtk_widget_get_window (widget));
|
||||
}
|
||||
|
||||
int
|
||||
|
@@ -77,6 +77,7 @@ draw_window (GtkWidget *widget,
|
||||
int icon_x, icon_y, icon_w, icon_h;
|
||||
gboolean is_active;
|
||||
GdkColor *color;
|
||||
GtkStyle *style;
|
||||
|
||||
is_active = win->is_active;
|
||||
|
||||
@@ -84,10 +85,11 @@ draw_window (GtkWidget *widget,
|
||||
cairo_rectangle (cr, winrect->x, winrect->y, winrect->width, winrect->height);
|
||||
cairo_clip (cr);
|
||||
|
||||
style = gtk_widget_get_style (widget);
|
||||
if (is_active)
|
||||
color = &widget->style->light[state];
|
||||
color = &style->light[state];
|
||||
else
|
||||
color = &widget->style->bg[state];
|
||||
color = &style->bg[state];
|
||||
cairo_set_source_rgb (cr,
|
||||
color->red / 65535.,
|
||||
color->green / 65535.,
|
||||
@@ -141,11 +143,11 @@ draw_window (GtkWidget *widget,
|
||||
cairo_paint (cr);
|
||||
cairo_restore (cr);
|
||||
}
|
||||
|
||||
|
||||
if (is_active)
|
||||
color = &widget->style->fg[state];
|
||||
color = &style->fg[state];
|
||||
else
|
||||
color = &widget->style->fg[state];
|
||||
color = &style->fg[state];
|
||||
|
||||
cairo_set_source_rgb (cr,
|
||||
color->red / 65535.,
|
||||
@@ -177,6 +179,7 @@ wnck_draw_workspace (GtkWidget *widget,
|
||||
int i;
|
||||
GdkRectangle workspace_rect;
|
||||
GtkStateType state;
|
||||
GtkStyle *style;
|
||||
|
||||
workspace_rect.x = x;
|
||||
workspace_rect.y = y;
|
||||
@@ -189,11 +192,13 @@ wnck_draw_workspace (GtkWidget *widget,
|
||||
state = GTK_STATE_PRELIGHT;
|
||||
else
|
||||
state = GTK_STATE_NORMAL;
|
||||
|
||||
style = gtk_widget_get_style (widget);
|
||||
|
||||
if (workspace_background)
|
||||
{
|
||||
gdk_draw_pixbuf (drawable,
|
||||
GTK_WIDGET (widget)->style->dark_gc[state],
|
||||
style->dark_gc[state],
|
||||
workspace_background,
|
||||
0, 0,
|
||||
x, y,
|
||||
@@ -205,8 +210,8 @@ wnck_draw_workspace (GtkWidget *widget,
|
||||
{
|
||||
cairo_t *cr;
|
||||
|
||||
cr = gdk_cairo_create (widget->window);
|
||||
gdk_cairo_set_source_color (cr, &widget->style->dark[state]);
|
||||
cr = gdk_cairo_create (gtk_widget_get_window (widget));
|
||||
gdk_cairo_set_source_color (cr, &style->dark[state]);
|
||||
cairo_rectangle (cr, x, y, width, height);
|
||||
cairo_fill (cr);
|
||||
cairo_destroy (cr);
|
||||
|
@@ -53,7 +53,8 @@ static int screen_bottom_edge = 0;
|
||||
static gint
|
||||
expose_handler (GtkTooltips *tooltips)
|
||||
{
|
||||
gtk_paint_flat_box (tip->style, tip->window,
|
||||
gtk_paint_flat_box (gtk_widget_get_style (tip),
|
||||
gtk_widget_get_window (tip),
|
||||
GTK_STATE_NORMAL, GTK_SHADOW_OUT,
|
||||
NULL, tip, "tooltip",
|
||||
0, 0, -1, -1);
|
||||
|
@@ -35,6 +35,8 @@
|
||||
#include "prefs.h"
|
||||
#include "ui.h"
|
||||
|
||||
#include "gtk-compat.h"
|
||||
|
||||
#ifdef HAVE_SHAPE
|
||||
#include <X11/extensions/shape.h>
|
||||
#endif
|
||||
@@ -133,6 +135,24 @@ meta_frames_get_type (void)
|
||||
return frames_type;
|
||||
}
|
||||
|
||||
static GObject *
|
||||
meta_frames_constructor (GType gtype,
|
||||
guint n_properties,
|
||||
GObjectConstructParam *properties)
|
||||
{
|
||||
GObject *object;
|
||||
GObjectClass *gobject_class;
|
||||
|
||||
gobject_class = G_OBJECT_CLASS (parent_class);
|
||||
object = gobject_class->constructor (gtype, n_properties, properties);
|
||||
|
||||
g_object_set (object,
|
||||
"type", GTK_WINDOW_POPUP,
|
||||
NULL);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_frames_class_init (MetaFramesClass *class)
|
||||
{
|
||||
@@ -146,6 +166,7 @@ meta_frames_class_init (MetaFramesClass *class)
|
||||
|
||||
parent_class = g_type_class_peek_parent (class);
|
||||
|
||||
gobject_class->constructor = meta_frames_constructor;
|
||||
gobject_class->finalize = meta_frames_finalize;
|
||||
object_class->destroy = meta_frames_destroy;
|
||||
|
||||
@@ -203,8 +224,6 @@ prefs_changed_callback (MetaPreference pref,
|
||||
static void
|
||||
meta_frames_init (MetaFrames *frames)
|
||||
{
|
||||
GTK_WINDOW (frames)->type = GTK_WINDOW_POPUP;
|
||||
|
||||
frames->text_heights = g_hash_table_new (NULL, NULL);
|
||||
|
||||
frames->frames = g_hash_table_new (unsigned_long_hash, unsigned_long_equal);
|
||||
@@ -459,10 +478,10 @@ meta_frames_ensure_layout (MetaFrames *frames,
|
||||
MetaFrameFlags flags;
|
||||
MetaFrameType type;
|
||||
MetaFrameStyle *style;
|
||||
|
||||
g_return_if_fail (GTK_WIDGET_REALIZED (frames));
|
||||
|
||||
widget = GTK_WIDGET (frames);
|
||||
|
||||
g_return_if_fail (gtk_widget_get_realized (widget));
|
||||
|
||||
meta_core_get (gdk_display, frame->xwindow,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
@@ -501,6 +520,7 @@ meta_frames_ensure_layout (MetaFrames *frames,
|
||||
|
||||
frame->layout = gtk_widget_create_pango_layout (widget, frame->title);
|
||||
|
||||
pango_layout_set_ellipsize (frame->layout, PANGO_ELLIPSIZE_END);
|
||||
pango_layout_set_auto_dir (frame->layout, FALSE);
|
||||
|
||||
font_desc = meta_gtk_widget_get_font_desc (widget, scale,
|
||||
@@ -593,8 +613,9 @@ meta_frames_attach_style (MetaFrames *frames,
|
||||
gtk_style_detach (frame->style);
|
||||
|
||||
/* Weirdly, gtk_style_attach() steals a reference count from the style passed in */
|
||||
g_object_ref (GTK_WIDGET (frames)->style);
|
||||
frame->style = gtk_style_attach (GTK_WIDGET (frames)->style, frame->window);
|
||||
g_object_ref (gtk_widget_get_style (GTK_WIDGET (frames)));
|
||||
frame->style = gtk_style_attach (gtk_widget_get_style (GTK_WIDGET (frames)),
|
||||
frame->window);
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -386,6 +386,7 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
Display *display;
|
||||
Window xroot;
|
||||
GdkScreen *screen;
|
||||
GdkWindow *window;
|
||||
GtkWidget *submenu;
|
||||
int j;
|
||||
|
||||
@@ -398,9 +399,10 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
meta_verbose ("Creating %d-workspace menu current space %lu\n",
|
||||
n_workspaces, active_workspace);
|
||||
|
||||
display = gdk_x11_drawable_get_xdisplay (GTK_WIDGET (frames)->window);
|
||||
window = gtk_widget_get_window (GTK_WIDGET (frames));
|
||||
display = gdk_x11_drawable_get_xdisplay (window);
|
||||
|
||||
screen = gdk_drawable_get_screen (GTK_WIDGET (frames)->window);
|
||||
screen = gdk_drawable_get_screen (window);
|
||||
xroot = GDK_DRAWABLE_XID (gdk_screen_get_root_window (screen));
|
||||
|
||||
submenu = gtk_menu_new ();
|
||||
@@ -520,7 +522,7 @@ meta_window_menu_popup (MetaWindowMenu *menu,
|
||||
button,
|
||||
timestamp);
|
||||
|
||||
if (!GTK_MENU_SHELL (menu->menu)->have_xgrab)
|
||||
if (!gtk_widget_get_visible (menu->menu))
|
||||
meta_warning ("GtkMenu failed to grab the pointer\n");
|
||||
}
|
||||
|
||||
|
@@ -37,6 +37,8 @@
|
||||
#include <string.h>
|
||||
#include "util.h"
|
||||
|
||||
#include "gtk-compat.h"
|
||||
|
||||
static void meta_accel_label_class_init (MetaAccelLabelClass *klass);
|
||||
static void meta_accel_label_init (MetaAccelLabel *accel_label);
|
||||
static void meta_accel_label_destroy (GtkObject *object);
|
||||
@@ -262,52 +264,61 @@ meta_accel_label_expose_event (GtkWidget *widget,
|
||||
GtkMisc *misc = GTK_MISC (accel_label);
|
||||
PangoLayout *layout;
|
||||
|
||||
if (GTK_WIDGET_DRAWABLE (accel_label))
|
||||
if (gtk_widget_is_drawable (GTK_WIDGET (accel_label)))
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
GtkRequisition requisition;
|
||||
int ac_width;
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
gtk_widget_get_requisition (widget, &requisition);
|
||||
ac_width = meta_accel_label_get_accel_width (accel_label);
|
||||
|
||||
if (widget->allocation.width >= widget->requisition.width + ac_width)
|
||||
if (allocation.width >= requisition.width + ac_width)
|
||||
{
|
||||
GtkTextDirection direction = gtk_widget_get_direction (widget);
|
||||
gint x;
|
||||
gint y;
|
||||
gfloat xalign, yalign;
|
||||
gint x, y;
|
||||
gint xpad, ypad;
|
||||
|
||||
gtk_misc_get_padding (misc, &xpad, &ypad);
|
||||
gtk_misc_get_alignment (misc, &xalign, &yalign);
|
||||
|
||||
if (direction == GTK_TEXT_DIR_RTL)
|
||||
{
|
||||
widget->allocation.x += ac_width;
|
||||
allocation.x += ac_width;
|
||||
}
|
||||
widget->allocation.width -= ac_width;
|
||||
allocation.width -= ac_width;
|
||||
gtk_widget_set_allocation (widget, &allocation);
|
||||
|
||||
if (GTK_WIDGET_CLASS (parent_class)->expose_event)
|
||||
GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
|
||||
|
||||
if (direction == GTK_TEXT_DIR_RTL)
|
||||
{
|
||||
widget->allocation.x -= ac_width;
|
||||
allocation.x -= ac_width;
|
||||
}
|
||||
widget->allocation.width += ac_width;
|
||||
allocation.width += ac_width;
|
||||
gtk_widget_set_allocation (widget, &allocation);
|
||||
|
||||
if (direction == GTK_TEXT_DIR_RTL)
|
||||
{
|
||||
x = widget->allocation.x + misc->xpad;
|
||||
x = allocation.x + xpad;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = widget->allocation.x + widget->allocation.width - misc->xpad - ac_width;
|
||||
x = allocation.x + allocation.width - xpad - ac_width;
|
||||
}
|
||||
|
||||
y = (widget->allocation.y * (1.0 - misc->yalign) +
|
||||
(widget->allocation.y + widget->allocation.height -
|
||||
(widget->requisition.height - misc->ypad * 2)) *
|
||||
misc->yalign) + 1.5;
|
||||
y = (allocation.y * (1.0 - yalign) +
|
||||
(allocation.y + allocation.height -
|
||||
(requisition.height - ypad * 2)) * yalign) + 1.5;
|
||||
|
||||
layout = gtk_widget_create_pango_layout (widget, accel_label->accel_string);
|
||||
|
||||
gtk_paint_layout (widget->style,
|
||||
widget->window,
|
||||
GTK_WIDGET_STATE (widget),
|
||||
gtk_paint_layout (gtk_widget_get_style (widget),
|
||||
gtk_widget_get_window (widget),
|
||||
gtk_widget_get_state (widget),
|
||||
FALSE,
|
||||
&event->area,
|
||||
widget,
|
||||
|
@@ -85,8 +85,8 @@ static void
|
||||
meta_preview_init (MetaPreview *preview)
|
||||
{
|
||||
int i;
|
||||
|
||||
GTK_WIDGET_SET_FLAGS (preview, GTK_NO_WINDOW);
|
||||
|
||||
gtk_widget_set_has_window (GTK_WIDGET (preview), FALSE);
|
||||
|
||||
i = 0;
|
||||
while (i < MAX_BUTTONS_PER_CORNER)
|
||||
@@ -216,6 +216,7 @@ meta_preview_expose (GtkWidget *widget,
|
||||
GdkEventExpose *event)
|
||||
{
|
||||
MetaPreview *preview;
|
||||
GtkAllocation allocation;
|
||||
int border_width;
|
||||
int client_width;
|
||||
int client_height;
|
||||
@@ -234,10 +235,11 @@ meta_preview_expose (GtkWidget *widget,
|
||||
|
||||
ensure_info (preview);
|
||||
|
||||
border_width = GTK_CONTAINER (widget)->border_width;
|
||||
|
||||
client_width = widget->allocation.width - preview->left_width - preview->right_width - border_width * 2;
|
||||
client_height = widget->allocation.height - preview->top_height - preview->bottom_height - border_width * 2;
|
||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
client_width = allocation.width - preview->left_width - preview->right_width - border_width * 2;
|
||||
client_height = allocation.height - preview->top_height - preview->bottom_height - border_width * 2;
|
||||
|
||||
if (client_width < 0)
|
||||
client_width = 1;
|
||||
@@ -246,14 +248,12 @@ meta_preview_expose (GtkWidget *widget,
|
||||
|
||||
if (preview->theme)
|
||||
{
|
||||
border_width = GTK_CONTAINER (widget)->border_width;
|
||||
|
||||
meta_theme_draw_frame (preview->theme,
|
||||
widget,
|
||||
widget->window,
|
||||
gtk_widget_get_window (widget),
|
||||
&event->area,
|
||||
widget->allocation.x + border_width,
|
||||
widget->allocation.y + border_width,
|
||||
allocation.x + border_width,
|
||||
allocation.y + border_width,
|
||||
preview->type,
|
||||
preview->flags,
|
||||
client_width, client_height,
|
||||
@@ -274,6 +274,8 @@ meta_preview_size_request (GtkWidget *widget,
|
||||
GtkRequisition *req)
|
||||
{
|
||||
MetaPreview *preview;
|
||||
GtkWidget *child;
|
||||
guint border_width;
|
||||
|
||||
preview = META_PREVIEW (widget);
|
||||
|
||||
@@ -281,13 +283,13 @@ meta_preview_size_request (GtkWidget *widget,
|
||||
|
||||
req->width = preview->left_width + preview->right_width;
|
||||
req->height = preview->top_height + preview->bottom_height;
|
||||
|
||||
if (GTK_BIN (preview)->child &&
|
||||
GTK_WIDGET_VISIBLE (GTK_BIN (preview)->child))
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (preview));
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
{
|
||||
GtkRequisition child_requisition;
|
||||
|
||||
gtk_widget_size_request (GTK_BIN (preview)->child, &child_requisition);
|
||||
gtk_widget_size_request (child, &child_requisition);
|
||||
|
||||
req->width += child_requisition.width;
|
||||
req->height += child_requisition.height;
|
||||
@@ -300,8 +302,9 @@ meta_preview_size_request (GtkWidget *widget,
|
||||
req->height += NO_CHILD_HEIGHT;
|
||||
}
|
||||
|
||||
req->width += GTK_CONTAINER (widget)->border_width * 2;
|
||||
req->height += GTK_CONTAINER (widget)->border_width * 2;
|
||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
||||
req->width += border_width * 2;
|
||||
req->height += border_width * 2;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -309,27 +312,29 @@ meta_preview_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation)
|
||||
{
|
||||
MetaPreview *preview;
|
||||
int border_width;
|
||||
GtkAllocation child_allocation;
|
||||
|
||||
GtkAllocation widget_allocation, child_allocation;
|
||||
GtkWidget *child;
|
||||
guint border_width;
|
||||
|
||||
preview = META_PREVIEW (widget);
|
||||
|
||||
ensure_info (preview);
|
||||
|
||||
widget->allocation = *allocation;
|
||||
|
||||
border_width = GTK_CONTAINER (widget)->border_width;
|
||||
|
||||
if (GTK_BIN (widget)->child &&
|
||||
GTK_WIDGET_VISIBLE (GTK_BIN (widget)->child))
|
||||
gtk_widget_set_allocation (widget, allocation);
|
||||
|
||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (widget));
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
{
|
||||
child_allocation.x = widget->allocation.x + border_width + preview->left_width;
|
||||
child_allocation.y = widget->allocation.y + border_width + preview->top_height;
|
||||
gtk_widget_get_allocation (widget, &widget_allocation);
|
||||
child_allocation.x = widget_allocation.x + border_width + preview->left_width;
|
||||
child_allocation.y = widget_allocation.y + border_width + preview->top_height;
|
||||
|
||||
child_allocation.width = MAX (1, widget->allocation.width - border_width * 2 - preview->left_width - preview->right_width);
|
||||
child_allocation.height = MAX (1, widget->allocation.height - border_width * 2 - preview->top_height - preview->bottom_height);
|
||||
child_allocation.width = MAX (1, widget_allocation.width - border_width * 2 - preview->left_width - preview->right_width);
|
||||
child_allocation.height = MAX (1, widget_allocation.height - border_width * 2 - preview->top_height - preview->bottom_height);
|
||||
|
||||
gtk_widget_size_allocate (GTK_BIN (widget)->child, &child_allocation);
|
||||
gtk_widget_size_allocate (child, &child_allocation);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include "util.h"
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include "gtk-compat.h"
|
||||
|
||||
struct _MetaResizePopup
|
||||
{
|
||||
@@ -123,10 +124,10 @@ update_size_window (MetaResizePopup *popup)
|
||||
x = popup->rect.x + (popup->rect.width - width) / 2;
|
||||
y = popup->rect.y + (popup->rect.height - height) / 2;
|
||||
|
||||
if (GTK_WIDGET_REALIZED (popup->size_window))
|
||||
if (gtk_widget_get_realized (popup->size_window))
|
||||
{
|
||||
/* using move_resize to avoid jumpiness */
|
||||
gdk_window_move_resize (popup->size_window->window,
|
||||
gdk_window_move_resize (gtk_widget_get_window (popup->size_window),
|
||||
x, y,
|
||||
width, height);
|
||||
}
|
||||
@@ -145,8 +146,8 @@ sync_showing (MetaResizePopup *popup)
|
||||
if (popup->size_window)
|
||||
gtk_widget_show (popup->size_window);
|
||||
|
||||
if (popup->size_window && GTK_WIDGET_REALIZED (popup->size_window))
|
||||
gdk_window_raise (popup->size_window->window);
|
||||
if (popup->size_window && gtk_widget_get_realized (popup->size_window))
|
||||
gdk_window_raise (gtk_widget_get_window (popup->size_window));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -36,6 +36,8 @@
|
||||
#include <gtk/gtk.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "gtk-compat.h"
|
||||
|
||||
#define OUTSIDE_SELECT_RECT 2
|
||||
#define INSIDE_SELECT_RECT 2
|
||||
|
||||
@@ -77,7 +79,9 @@ outline_window_expose (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
MetaTabPopup *popup;
|
||||
TabEntry *te;
|
||||
TabEntry *te;
|
||||
GtkStyle *style;
|
||||
GdkWindow *window;
|
||||
|
||||
popup = data;
|
||||
|
||||
@@ -85,16 +89,18 @@ outline_window_expose (GtkWidget *widget,
|
||||
return FALSE;
|
||||
|
||||
te = popup->current_selected_entry;
|
||||
window = gtk_widget_get_window (widget);
|
||||
style = gtk_widget_get_style (widget);
|
||||
|
||||
gdk_draw_rectangle (widget->window,
|
||||
widget->style->white_gc,
|
||||
gdk_draw_rectangle (window,
|
||||
style->white_gc,
|
||||
FALSE,
|
||||
0, 0,
|
||||
te->rect.width - 1,
|
||||
te->rect.height - 1);
|
||||
|
||||
gdk_draw_rectangle (widget->window,
|
||||
widget->style->white_gc,
|
||||
gdk_draw_rectangle (window,
|
||||
style->white_gc,
|
||||
FALSE,
|
||||
te->inner_rect.x - 1, te->inner_rect.y - 1,
|
||||
te->inner_rect.width + 1,
|
||||
@@ -439,7 +445,7 @@ meta_ui_tab_popup_set_showing (MetaTabPopup *popup,
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GTK_WIDGET_VISIBLE (popup->window))
|
||||
if (gtk_widget_get_visible (popup->window))
|
||||
{
|
||||
meta_verbose ("Hiding tab popup window\n");
|
||||
gtk_widget_hide (popup->window);
|
||||
@@ -455,6 +461,7 @@ display_entry (MetaTabPopup *popup,
|
||||
GdkRectangle rect;
|
||||
GdkRegion *region;
|
||||
GdkRegion *inner_region;
|
||||
GdkWindow *window;
|
||||
|
||||
|
||||
if (popup->current_selected_entry)
|
||||
@@ -474,27 +481,29 @@ display_entry (MetaTabPopup *popup,
|
||||
|
||||
if (popup->outline)
|
||||
{
|
||||
window = gtk_widget_get_window (popup->outline_window);
|
||||
|
||||
/* Do stuff behind gtk's back */
|
||||
gdk_window_hide (popup->outline_window->window);
|
||||
gdk_window_hide (window);
|
||||
meta_core_increment_event_serial (gdk_display);
|
||||
|
||||
rect = te->rect;
|
||||
rect.x = 0;
|
||||
rect.y = 0;
|
||||
|
||||
gdk_window_move_resize (popup->outline_window->window,
|
||||
gdk_window_move_resize (window,
|
||||
te->rect.x, te->rect.y,
|
||||
te->rect.width, te->rect.height);
|
||||
|
||||
gdk_window_set_background (popup->outline_window->window,
|
||||
&popup->outline_window->style->black);
|
||||
gdk_window_set_background (window,
|
||||
>k_widget_get_style (popup->outline_window)->black);
|
||||
|
||||
region = gdk_region_rectangle (&rect);
|
||||
inner_region = gdk_region_rectangle (&te->inner_rect);
|
||||
gdk_region_subtract (region, inner_region);
|
||||
gdk_region_destroy (inner_region);
|
||||
|
||||
gdk_window_shape_combine_region (popup->outline_window->window,
|
||||
gdk_window_shape_combine_region (window,
|
||||
region,
|
||||
0, 0);
|
||||
|
||||
@@ -505,8 +514,8 @@ display_entry (MetaTabPopup *popup,
|
||||
* we manually set the window as mapped and then manually map it
|
||||
* with gdk functions.
|
||||
*/
|
||||
GTK_WIDGET_SET_FLAGS (popup->outline_window, GTK_MAPPED);
|
||||
gdk_window_show_unraised (popup->outline_window->window);
|
||||
gtk_widget_set_mapped (popup->outline_window, TRUE);
|
||||
gdk_window_show_unraised (window);
|
||||
}
|
||||
|
||||
/* Must be before we handle an expose for the outline window */
|
||||
@@ -691,32 +700,46 @@ meta_select_image_expose_event (GtkWidget *widget,
|
||||
{
|
||||
if (META_SELECT_IMAGE (widget)->selected)
|
||||
{
|
||||
int x, y, w, h;
|
||||
GtkAllocation allocation;
|
||||
GtkMisc *misc;
|
||||
GtkRequisition requisition;
|
||||
GtkStyle *style;
|
||||
GtkStateType state;
|
||||
GdkWindow *window;
|
||||
int x, y, w, h;
|
||||
gint xpad, ypad;
|
||||
gfloat xalign, yalign;
|
||||
|
||||
misc = GTK_MISC (widget);
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
gtk_widget_get_requisition (widget, &requisition);
|
||||
gtk_misc_get_alignment (misc, &xalign, &yalign);
|
||||
gtk_misc_get_padding (misc, &xpad, &ypad);
|
||||
|
||||
x = (widget->allocation.x * (1.0 - misc->xalign) +
|
||||
(widget->allocation.x + widget->allocation.width
|
||||
- (widget->requisition.width - misc->xpad * 2)) *
|
||||
misc->xalign) + 0.5;
|
||||
y = (widget->allocation.y * (1.0 - misc->yalign) +
|
||||
(widget->allocation.y + widget->allocation.height
|
||||
- (widget->requisition.height - misc->ypad * 2)) *
|
||||
misc->yalign) + 0.5;
|
||||
x = (allocation.x * (1.0 - xalign) +
|
||||
(allocation.x + allocation.width
|
||||
- (requisition.width - xpad * 2)) * xalign) + 0.5;
|
||||
y = (allocation.y * (1.0 - yalign) +
|
||||
(allocation.y + allocation.height
|
||||
- (requisition.height - ypad * 2)) * yalign) + 0.5;
|
||||
|
||||
x -= INSIDE_SELECT_RECT + 1;
|
||||
y -= INSIDE_SELECT_RECT + 1;
|
||||
|
||||
w = widget->requisition.width - OUTSIDE_SELECT_RECT * 2 - 1;
|
||||
h = widget->requisition.height - OUTSIDE_SELECT_RECT * 2 - 1;
|
||||
w = requisition.width - OUTSIDE_SELECT_RECT * 2 - 1;
|
||||
h = requisition.height - OUTSIDE_SELECT_RECT * 2 - 1;
|
||||
|
||||
gdk_draw_rectangle (widget->window,
|
||||
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
|
||||
window = gtk_widget_get_window (widget);
|
||||
style = gtk_widget_get_style (widget);
|
||||
state = gtk_widget_get_state (widget);
|
||||
|
||||
gdk_draw_rectangle (window,
|
||||
style->fg_gc[state],
|
||||
FALSE,
|
||||
x, y, w, h);
|
||||
gdk_draw_rectangle (widget->window,
|
||||
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
|
||||
gdk_draw_rectangle (window,
|
||||
style->fg_gc[state],
|
||||
FALSE,
|
||||
x - 1, y - 1, w + 2, h + 2);
|
||||
|
||||
@@ -879,6 +902,9 @@ meta_select_workspace_expose_event (GtkWidget *widget,
|
||||
{
|
||||
MetaWorkspace *workspace;
|
||||
WnckWindowDisplayInfo *windows;
|
||||
GtkAllocation allocation;
|
||||
GtkStyle *style;
|
||||
GdkWindow *window;
|
||||
int i, n_windows;
|
||||
GList *tmp, *list;
|
||||
|
||||
@@ -917,12 +943,15 @@ meta_select_workspace_expose_event (GtkWidget *widget,
|
||||
|
||||
g_list_free (list);
|
||||
|
||||
window = gtk_widget_get_window (widget);
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
wnck_draw_workspace (widget,
|
||||
widget->window,
|
||||
window,
|
||||
SELECT_OUTLINE_WIDTH,
|
||||
SELECT_OUTLINE_WIDTH,
|
||||
widget->allocation.width - SELECT_OUTLINE_WIDTH * 2,
|
||||
widget->allocation.height - SELECT_OUTLINE_WIDTH * 2,
|
||||
allocation.width - SELECT_OUTLINE_WIDTH * 2,
|
||||
allocation.height - SELECT_OUTLINE_WIDTH * 2,
|
||||
workspace->screen->rect.width,
|
||||
workspace->screen->rect.height,
|
||||
NULL,
|
||||
@@ -934,16 +963,18 @@ meta_select_workspace_expose_event (GtkWidget *widget,
|
||||
|
||||
if (META_SELECT_WORKSPACE (widget)->selected)
|
||||
{
|
||||
style = gtk_widget_get_style (widget);
|
||||
i = SELECT_OUTLINE_WIDTH - 1;
|
||||
|
||||
while (i >= 0)
|
||||
{
|
||||
gdk_draw_rectangle (widget->window,
|
||||
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
|
||||
gdk_draw_rectangle (window,
|
||||
style->fg_gc[gtk_widget_get_state (widget)],
|
||||
FALSE,
|
||||
i,
|
||||
i,
|
||||
widget->allocation.width - i * 2 - 1,
|
||||
widget->allocation.height - i * 2 - 1);
|
||||
allocation.width - i * 2 - 1,
|
||||
allocation.height - i * 2 - 1);
|
||||
|
||||
--i;
|
||||
}
|
||||
|
@@ -267,11 +267,16 @@ expose_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
RenderGradientFunc func = data;
|
||||
GtkAllocation allocation;
|
||||
GtkStyle *style;
|
||||
|
||||
(* func) (widget->window,
|
||||
widget->style->fg_gc[widget->state],
|
||||
widget->allocation.width,
|
||||
widget->allocation.height);
|
||||
style = gtk_widget_get_style (widget);
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
(* func) (gtk_widget_get_window (widget),
|
||||
style->fg_gc[gtk_widget_get_state (widget)],
|
||||
allocation.width,
|
||||
allocation.height);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@@ -27,6 +27,22 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/* We were intending to put the version number
|
||||
* in the subdirectory name, but we ended up
|
||||
* using the filename instead. The "-1" survives
|
||||
* as a fossil.
|
||||
*/
|
||||
#define THEME_SUBDIR "metacity-1"
|
||||
|
||||
/* Highest version of the theme format to
|
||||
* look out for.
|
||||
*/
|
||||
#define THEME_MAJOR_VERSION 3
|
||||
#define THEME_MINOR_VERSION 1
|
||||
#define THEME_VERSION (1000 * THEME_MAJOR_VERSION + THEME_MINOR_VERSION)
|
||||
|
||||
#define METACITY_THEME_FILENAME_FORMAT "metacity-theme-%d.xml"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
STATE_START,
|
||||
@@ -79,11 +95,15 @@ typedef enum
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* This two lists contain stacks of state and required version
|
||||
* (cast to pointers.) There is one list item for each currently
|
||||
* open element. */
|
||||
GSList *states;
|
||||
GSList *required_versions;
|
||||
|
||||
const char *theme_name; /* name of theme (directory it's in) */
|
||||
char *theme_file; /* theme filename */
|
||||
char *theme_dir; /* dir the theme is inside */
|
||||
const char *theme_file; /* theme filename */
|
||||
const char *theme_dir; /* dir the theme is inside */
|
||||
MetaTheme *theme; /* theme being parsed */
|
||||
guint format_version; /* version of format of theme file */
|
||||
char *name; /* name of named thing being parsed */
|
||||
@@ -95,8 +115,22 @@ typedef struct
|
||||
MetaFramePiece piece; /* position of piece being parsed */
|
||||
MetaButtonType button_type; /* type of button/menuitem being parsed */
|
||||
MetaButtonState button_state; /* state of button being parsed */
|
||||
int skip_level; /* depth of elements that we're ignoring */
|
||||
} ParseInfo;
|
||||
|
||||
typedef enum {
|
||||
THEME_PARSE_ERROR_TOO_OLD,
|
||||
THEME_PARSE_ERROR_TOO_FAILED
|
||||
} ThemeParseError;
|
||||
|
||||
static GQuark
|
||||
theme_parse_error_quark (void)
|
||||
{
|
||||
return g_quark_from_static_string ("theme-parse-error-quark");
|
||||
}
|
||||
|
||||
#define THEME_PARSE_ERROR (theme_parse_error_quark ())
|
||||
|
||||
static void set_error (GError **err,
|
||||
GMarkupParseContext *context,
|
||||
int error_domain,
|
||||
@@ -257,6 +291,7 @@ parse_info_init (ParseInfo *info)
|
||||
{
|
||||
info->theme_file = NULL;
|
||||
info->states = g_slist_prepend (NULL, GINT_TO_POINTER (STATE_START));
|
||||
info->required_versions = NULL;
|
||||
info->theme = NULL;
|
||||
info->name = NULL;
|
||||
info->layout = NULL;
|
||||
@@ -267,15 +302,14 @@ parse_info_init (ParseInfo *info)
|
||||
info->piece = META_FRAME_PIECE_LAST;
|
||||
info->button_type = META_BUTTON_TYPE_LAST;
|
||||
info->button_state = META_BUTTON_STATE_LAST;
|
||||
info->skip_level = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
parse_info_free (ParseInfo *info)
|
||||
{
|
||||
g_free (info->theme_file);
|
||||
g_free (info->theme_dir);
|
||||
|
||||
g_slist_free (info->states);
|
||||
g_slist_free (info->required_versions);
|
||||
|
||||
if (info->theme)
|
||||
meta_theme_free (info->theme);
|
||||
@@ -319,6 +353,31 @@ peek_state (ParseInfo *info)
|
||||
return GPOINTER_TO_INT (info->states->data);
|
||||
}
|
||||
|
||||
static void
|
||||
push_required_version (ParseInfo *info,
|
||||
int version)
|
||||
{
|
||||
info->required_versions = g_slist_prepend (info->required_versions,
|
||||
GINT_TO_POINTER (version));
|
||||
}
|
||||
|
||||
static void
|
||||
pop_required_version (ParseInfo *info)
|
||||
{
|
||||
g_return_if_fail (info->required_versions != NULL);
|
||||
|
||||
info->required_versions = g_slist_delete_link (info->required_versions, info->required_versions);
|
||||
}
|
||||
|
||||
static int
|
||||
peek_required_version (ParseInfo *info)
|
||||
{
|
||||
if (info->required_versions)
|
||||
return GPOINTER_TO_INT (info->required_versions->data);
|
||||
else
|
||||
return info->format_version;
|
||||
}
|
||||
|
||||
#define ELEMENT_IS(name) (strcmp (element_name, (name)) == 0)
|
||||
|
||||
typedef struct
|
||||
@@ -396,6 +455,13 @@ locate_attributes (GMarkupParseContext *context,
|
||||
int j;
|
||||
gboolean found;
|
||||
|
||||
/* Can be present anywhere */
|
||||
if (strcmp (attribute_names[i], "version") == 0)
|
||||
{
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
|
||||
found = FALSE;
|
||||
j = 0;
|
||||
while (j < n_attrs)
|
||||
@@ -472,7 +538,13 @@ check_no_attributes (GMarkupParseContext *context,
|
||||
const char **attribute_values,
|
||||
GError **error)
|
||||
{
|
||||
if (attribute_names[0] != NULL)
|
||||
int i = 0;
|
||||
|
||||
/* Can be present anywhere */
|
||||
if (attribute_names[0] && strcmp (attribute_names[i], "version") == 0)
|
||||
i++;
|
||||
|
||||
if (attribute_names[i] != NULL)
|
||||
{
|
||||
set_error (error, context,
|
||||
G_MARKUP_ERROR,
|
||||
@@ -2512,12 +2584,14 @@ parse_draw_op_element (GMarkupParseContext *context,
|
||||
const char *color;
|
||||
const char *x;
|
||||
const char *y;
|
||||
const char *ellipsize_width;
|
||||
MetaColorSpec *color_spec;
|
||||
|
||||
if (!locate_attributes (context, element_name, attribute_names, attribute_values,
|
||||
error,
|
||||
"!color", &color,
|
||||
"!x", &x, "!y", &y,
|
||||
"ellipsize_width", &ellipsize_width,
|
||||
NULL))
|
||||
return;
|
||||
|
||||
@@ -2527,8 +2601,18 @@ parse_draw_op_element (GMarkupParseContext *context,
|
||||
|
||||
if (!check_expression (y, FALSE, info->theme, context, error))
|
||||
return;
|
||||
|
||||
if (!check_expression (ellipsize_width, FALSE, info->theme, context, error))
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (ellipsize_width && peek_required_version (info) < 3001)
|
||||
{
|
||||
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||
ATTRIBUTE_NOT_FOUND, "ellipsize_width", element_name);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check last so we don't have to free it when other
|
||||
* stuff fails
|
||||
*/
|
||||
@@ -2545,6 +2629,8 @@ parse_draw_op_element (GMarkupParseContext *context,
|
||||
|
||||
op->data.title.x = meta_draw_spec_new (info->theme, x, NULL);
|
||||
op->data.title.y = meta_draw_spec_new (info->theme, y, NULL);
|
||||
if (ellipsize_width)
|
||||
op->data.title.ellipsize_width = meta_draw_spec_new (info->theme, ellipsize_width, NULL);
|
||||
|
||||
g_assert (info->op_list);
|
||||
|
||||
@@ -3242,6 +3328,91 @@ parse_menu_icon_element (GMarkupParseContext *context,
|
||||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
find_version (const char **attribute_names,
|
||||
const char **attribute_values)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; attribute_names[i]; i++)
|
||||
{
|
||||
if (strcmp (attribute_names[i], "version") == 0)
|
||||
return attribute_values[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Returns whether the version element was successfully parsed.
|
||||
* If successfully parsed, then two additional items are returned:
|
||||
*
|
||||
* satisfied: whether this version of Mutter meets the version check
|
||||
* minimum_required: minimum version of theme format required by version check
|
||||
*/
|
||||
static gboolean
|
||||
check_version (GMarkupParseContext *context,
|
||||
const char *version_str,
|
||||
gboolean *satisfied,
|
||||
guint *minimum_required,
|
||||
GError **error)
|
||||
{
|
||||
static GRegex *version_regex;
|
||||
GMatchInfo *info;
|
||||
char *comparison_str, *major_str, *minor_str;
|
||||
guint version;
|
||||
|
||||
*minimum_required = 0;
|
||||
|
||||
if (!version_regex)
|
||||
version_regex = g_regex_new ("^\\s*([<>]=?)\\s*(\\d+)(\\.\\d+)?\\s*$", 0, 0, NULL);
|
||||
|
||||
if (!g_regex_match (version_regex, version_str, 0, &info))
|
||||
{
|
||||
g_match_info_free (info);
|
||||
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||
_("Bad version specification '%s'"), version_str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
comparison_str = g_match_info_fetch (info, 1);
|
||||
major_str = g_match_info_fetch (info, 2);
|
||||
minor_str = g_match_info_fetch (info, 3);
|
||||
|
||||
version = 1000 * atoi (major_str);
|
||||
/* might get NULL, see: https://bugzilla.gnome.org/review?bug=588217 */
|
||||
if (minor_str && minor_str[0])
|
||||
version += atoi (minor_str + 1);
|
||||
|
||||
if (comparison_str[0] == '<')
|
||||
{
|
||||
if (comparison_str[1] == '=')
|
||||
*satisfied = THEME_VERSION <= version;
|
||||
else
|
||||
{
|
||||
*satisfied = THEME_VERSION < version;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (comparison_str[1] == '=')
|
||||
{
|
||||
*satisfied = THEME_VERSION >= version;
|
||||
*minimum_required = version;
|
||||
}
|
||||
else
|
||||
{
|
||||
*satisfied = THEME_VERSION > version;
|
||||
*minimum_required = version + 1;
|
||||
}
|
||||
}
|
||||
|
||||
g_free (comparison_str);
|
||||
g_free (major_str);
|
||||
g_free (minor_str);
|
||||
g_match_info_free (info);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
start_element_handler (GMarkupParseContext *context,
|
||||
@@ -3252,6 +3423,65 @@ start_element_handler (GMarkupParseContext *context,
|
||||
GError **error)
|
||||
{
|
||||
ParseInfo *info = user_data;
|
||||
const char *version;
|
||||
guint required_version = 0;
|
||||
|
||||
if (info->skip_level > 0)
|
||||
{
|
||||
info->skip_level++;
|
||||
return;
|
||||
}
|
||||
|
||||
required_version = peek_required_version (info);
|
||||
|
||||
version = find_version (attribute_names, attribute_values);
|
||||
if (version != NULL)
|
||||
{
|
||||
gboolean satisfied;
|
||||
guint element_required;
|
||||
|
||||
if (required_version < 3000)
|
||||
{
|
||||
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||
_("\"version\" attribute cannot be used in metacity-theme-1.xml or metacity-theme-2.xml"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!check_version (context, version, &satisfied, &element_required, error))
|
||||
return;
|
||||
|
||||
/* Two different ways of handling an unsatisfied version check:
|
||||
* for the toplevel element of a file, we throw an error back so
|
||||
* that the controlling code can go ahead and look for an
|
||||
* alternate metacity-theme-1.xml or metacity-theme-2.xml; for
|
||||
* other elements we just silently skip the element and children.
|
||||
*/
|
||||
if (peek_state (info) == STATE_START)
|
||||
{
|
||||
if (satisfied)
|
||||
{
|
||||
if (element_required > info->format_version)
|
||||
info->format_version = element_required;
|
||||
}
|
||||
else
|
||||
{
|
||||
set_error (error, context, THEME_PARSE_ERROR, THEME_PARSE_ERROR_TOO_OLD,
|
||||
_("Theme requires version %s but latest supported theme version is %d.%d"),
|
||||
version, THEME_VERSION, THEME_MINOR_VERSION);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (!satisfied)
|
||||
{
|
||||
info->skip_level = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (element_required > required_version)
|
||||
required_version = element_required;
|
||||
}
|
||||
|
||||
push_required_version (info, required_version);
|
||||
|
||||
switch (peek_state (info))
|
||||
{
|
||||
@@ -3391,6 +3621,12 @@ end_element_handler (GMarkupParseContext *context,
|
||||
{
|
||||
ParseInfo *info = user_data;
|
||||
|
||||
if (info->skip_level > 0)
|
||||
{
|
||||
info->skip_level--;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (peek_state (info))
|
||||
{
|
||||
case STATE_START:
|
||||
@@ -3664,6 +3900,8 @@ end_element_handler (GMarkupParseContext *context,
|
||||
g_assert (peek_state (info) == STATE_THEME);
|
||||
break;
|
||||
}
|
||||
|
||||
pop_required_version (info);
|
||||
}
|
||||
|
||||
#define NO_TEXT(element_name) set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE, _("No text is allowed inside element <%s>"), element_name)
|
||||
@@ -3698,6 +3936,9 @@ text_handler (GMarkupParseContext *context,
|
||||
{
|
||||
ParseInfo *info = user_data;
|
||||
|
||||
if (info->skip_level > 0)
|
||||
return;
|
||||
|
||||
if (all_whitespace (text, text_len))
|
||||
return;
|
||||
|
||||
@@ -3866,80 +4107,133 @@ text_handler (GMarkupParseContext *context,
|
||||
}
|
||||
}
|
||||
|
||||
/* We were intending to put the version number
|
||||
* in the subdirectory name, but we ended up
|
||||
* using the filename instead. The "-1" survives
|
||||
* as a fossil.
|
||||
/* If the theme is not-corrupt, keep looking for alternate versions
|
||||
* in other locations we might be compatible with
|
||||
*/
|
||||
#define THEME_SUBDIR "metacity-1"
|
||||
static gboolean
|
||||
theme_error_is_fatal (GError *error)
|
||||
{
|
||||
return !(error->domain == G_FILE_ERROR ||
|
||||
(error->domain == THEME_PARSE_ERROR &&
|
||||
error->code == THEME_PARSE_ERROR_TOO_OLD));
|
||||
}
|
||||
|
||||
/* Highest version of the theme format to
|
||||
* look out for.
|
||||
*/
|
||||
#define THEME_VERSION 2
|
||||
static MetaTheme *
|
||||
load_theme (const char *theme_dir,
|
||||
const char *theme_name,
|
||||
guint major_version,
|
||||
GError **error)
|
||||
{
|
||||
GMarkupParseContext *context;
|
||||
ParseInfo info;
|
||||
char *text;
|
||||
gsize length;
|
||||
char *theme_filename;
|
||||
char *theme_file;
|
||||
MetaTheme *retval;
|
||||
|
||||
#define METACITY_THEME_FILENAME_FORMAT "metacity-theme-%d.xml"
|
||||
g_return_val_if_fail (error && *error == NULL, NULL);
|
||||
|
||||
text = NULL;
|
||||
retval = NULL;
|
||||
context = NULL;
|
||||
|
||||
theme_filename = g_strdup_printf (METACITY_THEME_FILENAME_FORMAT, major_version);
|
||||
theme_file = g_build_filename (theme_dir, theme_filename, NULL);
|
||||
|
||||
if (!g_file_get_contents (theme_file,
|
||||
&text,
|
||||
&length,
|
||||
error))
|
||||
goto out;
|
||||
|
||||
meta_topic (META_DEBUG_THEMES, "Parsing theme file %s\n", theme_file);
|
||||
|
||||
parse_info_init (&info);
|
||||
|
||||
info.theme_name = theme_name;
|
||||
info.theme_file = theme_file;
|
||||
info.theme_dir = theme_dir;
|
||||
|
||||
info.format_version = 1000 * major_version;
|
||||
|
||||
context = g_markup_parse_context_new (&metacity_theme_parser,
|
||||
0, &info, NULL);
|
||||
|
||||
if (!g_markup_parse_context_parse (context,
|
||||
text,
|
||||
length,
|
||||
error))
|
||||
goto out;
|
||||
|
||||
if (!g_markup_parse_context_end_parse (context, error))
|
||||
goto out;
|
||||
|
||||
retval = info.theme;
|
||||
info.theme = NULL;
|
||||
|
||||
out:
|
||||
if (*error && !theme_error_is_fatal (*error))
|
||||
{
|
||||
meta_topic (META_DEBUG_THEMES, "Failed to read theme from file %s: %s\n",
|
||||
theme_file, (*error)->message);
|
||||
}
|
||||
|
||||
g_free (theme_filename);
|
||||
g_free (theme_file);
|
||||
g_free (text);
|
||||
|
||||
if (context)
|
||||
{
|
||||
g_markup_parse_context_free (context);
|
||||
parse_info_free (&info);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
keep_trying (GError **error)
|
||||
{
|
||||
if (*error && !theme_error_is_fatal (*error))
|
||||
{
|
||||
g_clear_error (error);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
MetaTheme*
|
||||
meta_theme_load (const char *theme_name,
|
||||
GError **err)
|
||||
{
|
||||
GMarkupParseContext *context;
|
||||
GError *error;
|
||||
ParseInfo info;
|
||||
char *text;
|
||||
gsize length;
|
||||
char *theme_file;
|
||||
GError *error = NULL;
|
||||
char *theme_dir;
|
||||
MetaTheme *retval;
|
||||
guint version;
|
||||
const gchar* const* xdg_data_dirs;
|
||||
int major_version;
|
||||
int i;
|
||||
|
||||
text = NULL;
|
||||
length = 0;
|
||||
retval = NULL;
|
||||
context = NULL;
|
||||
|
||||
theme_dir = NULL;
|
||||
theme_file = NULL;
|
||||
|
||||
|
||||
if (meta_is_debugging ())
|
||||
{
|
||||
gchar *theme_filename = g_strdup_printf (METACITY_THEME_FILENAME_FORMAT,
|
||||
THEME_VERSION);
|
||||
|
||||
/* Try in themes in our source tree */
|
||||
theme_dir = g_build_filename ("./themes", theme_name, NULL);
|
||||
|
||||
theme_file = g_build_filename (theme_dir,
|
||||
theme_filename,
|
||||
NULL);
|
||||
|
||||
error = NULL;
|
||||
if (!g_file_get_contents (theme_file,
|
||||
&text,
|
||||
&length,
|
||||
&error))
|
||||
/* We try all supported major versions from current to oldest */
|
||||
for (major_version = THEME_MAJOR_VERSION; (major_version > 0); major_version--)
|
||||
{
|
||||
meta_topic (META_DEBUG_THEMES, "Failed to read theme from file %s: %s\n",
|
||||
theme_file, error->message);
|
||||
g_error_free (error);
|
||||
theme_dir = g_build_filename ("./themes", theme_name, NULL);
|
||||
retval = load_theme (theme_dir, theme_name, major_version, &error);
|
||||
g_free (theme_dir);
|
||||
g_free (theme_file);
|
||||
theme_file = NULL;
|
||||
if (!keep_trying (&error))
|
||||
goto out;
|
||||
}
|
||||
version = THEME_VERSION;
|
||||
|
||||
g_free (theme_filename);
|
||||
}
|
||||
|
||||
/* We try all supported versions from current to oldest */
|
||||
for (version = THEME_VERSION; (version > 0) && (text == NULL); version--)
|
||||
/* We try all supported major versions from current to oldest */
|
||||
for (major_version = THEME_MAJOR_VERSION; (major_version > 0); major_version--)
|
||||
{
|
||||
gchar *theme_filename = g_strdup_printf (METACITY_THEME_FILENAME_FORMAT,
|
||||
version);
|
||||
|
||||
/* We try first in home dir, XDG_DATA_DIRS, then system dir for themes */
|
||||
|
||||
/* Try home dir for themes */
|
||||
@@ -3948,156 +4242,51 @@ meta_theme_load (const char *theme_name,
|
||||
theme_name,
|
||||
THEME_SUBDIR,
|
||||
NULL);
|
||||
|
||||
theme_file = g_build_filename (theme_dir,
|
||||
theme_filename,
|
||||
NULL);
|
||||
|
||||
error = NULL;
|
||||
if (!g_file_get_contents (theme_file,
|
||||
&text,
|
||||
&length,
|
||||
&error))
|
||||
{
|
||||
meta_topic (META_DEBUG_THEMES, "Failed to read theme from file %s: %s\n",
|
||||
theme_file, error->message);
|
||||
g_error_free (error);
|
||||
g_free (theme_dir);
|
||||
g_free (theme_file);
|
||||
theme_file = NULL;
|
||||
}
|
||||
retval = load_theme (theme_dir, theme_name, major_version, &error);
|
||||
g_free (theme_dir);
|
||||
if (!keep_trying (&error))
|
||||
goto out;
|
||||
|
||||
/* Try each XDG_DATA_DIRS for theme */
|
||||
xdg_data_dirs = g_get_system_data_dirs();
|
||||
for(i = 0; xdg_data_dirs[i] != NULL; i++)
|
||||
{
|
||||
if (text == NULL)
|
||||
{
|
||||
theme_dir = g_build_filename (xdg_data_dirs[i],
|
||||
"themes",
|
||||
theme_name,
|
||||
THEME_SUBDIR,
|
||||
NULL);
|
||||
|
||||
theme_file = g_build_filename (theme_dir,
|
||||
theme_filename,
|
||||
NULL);
|
||||
|
||||
error = NULL;
|
||||
if (!g_file_get_contents (theme_file,
|
||||
&text,
|
||||
&length,
|
||||
&error))
|
||||
{
|
||||
meta_topic (META_DEBUG_THEMES, "Failed to read theme from file %s: %s\n",
|
||||
theme_file, error->message);
|
||||
g_error_free (error);
|
||||
g_free (theme_dir);
|
||||
g_free (theme_file);
|
||||
theme_file = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Look for themes in MUTTER_DATADIR */
|
||||
if (text == NULL)
|
||||
{
|
||||
theme_dir = g_build_filename (MUTTER_DATADIR,
|
||||
theme_dir = g_build_filename (xdg_data_dirs[i],
|
||||
"themes",
|
||||
theme_name,
|
||||
THEME_SUBDIR,
|
||||
NULL);
|
||||
|
||||
theme_file = g_build_filename (theme_dir,
|
||||
theme_filename,
|
||||
NULL);
|
||||
|
||||
error = NULL;
|
||||
if (!g_file_get_contents (theme_file,
|
||||
&text,
|
||||
&length,
|
||||
&error))
|
||||
{
|
||||
meta_topic (META_DEBUG_THEMES, "Failed to read theme from file %s: %s\n",
|
||||
theme_file, error->message);
|
||||
g_error_free (error);
|
||||
g_free (theme_dir);
|
||||
g_free (theme_file);
|
||||
theme_file = NULL;
|
||||
}
|
||||
retval = load_theme (theme_dir, theme_name, major_version, &error);
|
||||
g_free (theme_dir);
|
||||
if (!keep_trying (&error))
|
||||
goto out;
|
||||
}
|
||||
|
||||
g_free (theme_filename);
|
||||
/* Look for themes in MUTTER_DATADIR */
|
||||
theme_dir = g_build_filename (MUTTER_DATADIR,
|
||||
"themes",
|
||||
theme_name,
|
||||
THEME_SUBDIR,
|
||||
NULL);
|
||||
|
||||
retval = load_theme (theme_dir, theme_name, major_version, &error);
|
||||
g_free (theme_dir);
|
||||
if (!keep_trying (&error))
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (text == NULL)
|
||||
{
|
||||
g_set_error (err, META_THEME_ERROR, META_THEME_ERROR_FAILED,
|
||||
_("Failed to find a valid file for theme %s\n"),
|
||||
theme_name);
|
||||
|
||||
return NULL; /* all fallbacks failed */
|
||||
}
|
||||
|
||||
meta_topic (META_DEBUG_THEMES, "Parsing theme file %s\n", theme_file);
|
||||
|
||||
|
||||
parse_info_init (&info);
|
||||
info.theme_name = theme_name;
|
||||
|
||||
/* pass ownership to info so we free it with the info */
|
||||
info.theme_file = theme_file;
|
||||
info.theme_dir = theme_dir;
|
||||
|
||||
info.format_version = version + 1;
|
||||
|
||||
context = g_markup_parse_context_new (&metacity_theme_parser,
|
||||
0, &info, NULL);
|
||||
|
||||
error = NULL;
|
||||
if (!g_markup_parse_context_parse (context,
|
||||
text,
|
||||
length,
|
||||
&error))
|
||||
goto out;
|
||||
|
||||
error = NULL;
|
||||
if (!g_markup_parse_context_end_parse (context, &error))
|
||||
goto out;
|
||||
|
||||
goto out;
|
||||
|
||||
out:
|
||||
|
||||
if (context)
|
||||
g_markup_parse_context_free (context);
|
||||
g_free (text);
|
||||
|
||||
if (info.theme)
|
||||
info.theme->format_version = info.format_version;
|
||||
if (!error && !retval)
|
||||
g_set_error (&error, META_THEME_ERROR, META_THEME_ERROR_FAILED,
|
||||
_("Failed to find a valid file for theme %s\n"),
|
||||
theme_name);
|
||||
|
||||
if (error)
|
||||
{
|
||||
g_propagate_error (err, error);
|
||||
}
|
||||
else if (info.theme)
|
||||
{
|
||||
/* Steal theme from info */
|
||||
retval = info.theme;
|
||||
info.theme = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_set_error (err, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||
_("Theme file %s did not contain a root <metacity_theme> element"),
|
||||
info.theme_file);
|
||||
}
|
||||
|
||||
parse_info_free (&info);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
@@ -766,6 +766,7 @@ benchmark_summary (void)
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
GtkStyle *style;
|
||||
GtkWidget *window;
|
||||
GtkWidget *collection;
|
||||
GError *err;
|
||||
@@ -842,26 +843,28 @@ main (int argc, char **argv)
|
||||
G_CALLBACK (gtk_main_quit), NULL);
|
||||
|
||||
gtk_widget_realize (window);
|
||||
g_assert (window->style);
|
||||
g_assert (window->style->font_desc);
|
||||
style = gtk_widget_get_style (window);
|
||||
|
||||
g_assert (style);
|
||||
g_assert (style->font_desc);
|
||||
|
||||
notebook = gtk_notebook_new ();
|
||||
gtk_container_add (GTK_CONTAINER (window), notebook);
|
||||
|
||||
collection = preview_collection (FONT_SIZE_NORMAL,
|
||||
window->style->font_desc);
|
||||
style->font_desc);
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
collection,
|
||||
gtk_label_new (_("Normal Title Font")));
|
||||
|
||||
collection = preview_collection (FONT_SIZE_SMALL,
|
||||
window->style->font_desc);
|
||||
style->font_desc);
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
collection,
|
||||
gtk_label_new (_("Small Title Font")));
|
||||
|
||||
collection = preview_collection (FONT_SIZE_LARGE,
|
||||
window->style->font_desc);
|
||||
style->font_desc);
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
collection,
|
||||
gtk_label_new (_("Large Title Font")));
|
||||
@@ -912,7 +915,7 @@ get_flags (GtkWidget *widget)
|
||||
static int
|
||||
get_text_height (GtkWidget *widget)
|
||||
{
|
||||
return meta_pango_font_desc_get_text_height (widget->style->font_desc,
|
||||
return meta_pango_font_desc_get_text_height (gtk_widget_get_style (widget)->font_desc,
|
||||
gtk_widget_get_pango_context (widget));
|
||||
}
|
||||
|
||||
@@ -993,7 +996,7 @@ run_theme_benchmark (void)
|
||||
/* Creating the pixmap in the loop is right, since
|
||||
* GDK does the same with its double buffering.
|
||||
*/
|
||||
pixmap = gdk_pixmap_new (widget->window,
|
||||
pixmap = gdk_pixmap_new (gtk_widget_get_window (widget),
|
||||
client_width + left_width + right_width,
|
||||
client_height + top_height + bottom_height,
|
||||
-1);
|
||||
|
104
src/ui/theme.c
104
src/ui/theme.c
@@ -62,6 +62,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "gtk-compat.h"
|
||||
|
||||
#define GDK_COLOR_RGBA(color) \
|
||||
((guint32) (0xff | \
|
||||
(((color).red / 256) << 24) | \
|
||||
@@ -1360,9 +1362,13 @@ meta_color_spec_render (MetaColorSpec *spec,
|
||||
GtkWidget *widget,
|
||||
GdkColor *color)
|
||||
{
|
||||
GtkStyle *style;
|
||||
|
||||
style = gtk_widget_get_style (widget);
|
||||
|
||||
g_return_if_fail (spec != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (widget->style != NULL);
|
||||
g_return_if_fail (style != NULL);
|
||||
|
||||
switch (spec->type)
|
||||
{
|
||||
@@ -1374,28 +1380,28 @@ meta_color_spec_render (MetaColorSpec *spec,
|
||||
switch (spec->data.gtk.component)
|
||||
{
|
||||
case META_GTK_COLOR_BG:
|
||||
*color = widget->style->bg[spec->data.gtk.state];
|
||||
*color = style->bg[spec->data.gtk.state];
|
||||
break;
|
||||
case META_GTK_COLOR_FG:
|
||||
*color = widget->style->fg[spec->data.gtk.state];
|
||||
*color = style->fg[spec->data.gtk.state];
|
||||
break;
|
||||
case META_GTK_COLOR_BASE:
|
||||
*color = widget->style->base[spec->data.gtk.state];
|
||||
*color = style->base[spec->data.gtk.state];
|
||||
break;
|
||||
case META_GTK_COLOR_TEXT:
|
||||
*color = widget->style->text[spec->data.gtk.state];
|
||||
*color = style->text[spec->data.gtk.state];
|
||||
break;
|
||||
case META_GTK_COLOR_LIGHT:
|
||||
*color = widget->style->light[spec->data.gtk.state];
|
||||
*color = style->light[spec->data.gtk.state];
|
||||
break;
|
||||
case META_GTK_COLOR_DARK:
|
||||
*color = widget->style->dark[spec->data.gtk.state];
|
||||
*color = style->dark[spec->data.gtk.state];
|
||||
break;
|
||||
case META_GTK_COLOR_MID:
|
||||
*color = widget->style->mid[spec->data.gtk.state];
|
||||
*color = style->mid[spec->data.gtk.state];
|
||||
break;
|
||||
case META_GTK_COLOR_TEXT_AA:
|
||||
*color = widget->style->text_aa[spec->data.gtk.state];
|
||||
*color = style->text_aa[spec->data.gtk.state];
|
||||
break;
|
||||
case META_GTK_COLOR_LAST:
|
||||
g_assert_not_reached ();
|
||||
@@ -2188,6 +2194,10 @@ pos_eval_get_variable (PosToken *t,
|
||||
*result = env->title_width;
|
||||
else if (t->d.v.name_quark == env->theme->quark_title_height)
|
||||
*result = env->title_height;
|
||||
else if (t->d.v.name_quark == env->theme->quark_frame_x_center)
|
||||
*result = env->frame_x_center;
|
||||
else if (t->d.v.name_quark == env->theme->quark_frame_y_center)
|
||||
*result = env->frame_y_center;
|
||||
else
|
||||
{
|
||||
g_set_error (err, META_THEME_ERROR,
|
||||
@@ -2229,6 +2239,10 @@ pos_eval_get_variable (PosToken *t,
|
||||
*result = env->title_width;
|
||||
else if (strcmp (t->d.v.name, "title_height") == 0)
|
||||
*result = env->title_height;
|
||||
else if (strcmp (t->d.v.name, "frame_x_center") == 0)
|
||||
*result = env->frame_x_center;
|
||||
else if (strcmp (t->d.v.name, "frame_y_center") == 0)
|
||||
*result = env->frame_y_center;
|
||||
else
|
||||
{
|
||||
g_set_error (err, META_THEME_ERROR,
|
||||
@@ -2876,6 +2890,8 @@ meta_draw_op_free (MetaDrawOp *op)
|
||||
|
||||
meta_draw_spec_free (op->data.title.x);
|
||||
meta_draw_spec_free (op->data.title.y);
|
||||
if (op->data.title.ellipsize_width)
|
||||
meta_draw_spec_free (op->data.title.ellipsize_width);
|
||||
break;
|
||||
|
||||
case META_DRAW_OP_LIST:
|
||||
@@ -3437,6 +3453,8 @@ fill_env (MetaPositionExprEnv *env,
|
||||
env->right_width = info->fgeom->right_width;
|
||||
env->top_height = info->fgeom->top_height;
|
||||
env->bottom_height = info->fgeom->bottom_height;
|
||||
env->frame_x_center = info->fgeom->width / 2 - logical_region.x;
|
||||
env->frame_y_center = info->fgeom->height / 2 - logical_region.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3444,6 +3462,8 @@ fill_env (MetaPositionExprEnv *env,
|
||||
env->right_width = 0;
|
||||
env->top_height = 0;
|
||||
env->bottom_height = 0;
|
||||
env->frame_x_center = 0;
|
||||
env->frame_y_center = 0;
|
||||
}
|
||||
|
||||
env->mini_icon_width = info->mini_icon ? gdk_pixbuf_get_width (info->mini_icon) : 0;
|
||||
@@ -3744,6 +3764,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
if (info->title_layout)
|
||||
{
|
||||
int rx, ry;
|
||||
PangoRectangle ink_rect, logical_rect;
|
||||
|
||||
gc = get_gc_for_primitive (widget, drawable,
|
||||
op->data.title.color_spec,
|
||||
@@ -3752,10 +3773,47 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
rx = parse_x_position_unchecked (op->data.title.x, env);
|
||||
ry = parse_y_position_unchecked (op->data.title.y, env);
|
||||
|
||||
if (op->data.title.ellipsize_width)
|
||||
{
|
||||
int ellipsize_width;
|
||||
int right_bearing;
|
||||
|
||||
ellipsize_width = parse_x_position_unchecked (op->data.title.ellipsize_width, env);
|
||||
/* HACK: parse_x_position_unchecked adds in env->rect.x, subtract out again */
|
||||
ellipsize_width -= env->rect.x;
|
||||
|
||||
pango_layout_set_width (info->title_layout, -1);
|
||||
pango_layout_get_pixel_extents (info->title_layout,
|
||||
&ink_rect, &logical_rect);
|
||||
|
||||
/* Pango's idea of ellipsization is with respect to the logical rect.
|
||||
* correct for this, by reducing the ellipsization width by the overflow
|
||||
* of the un-ellipsized text on the right... it's always the visual
|
||||
* right we want regardless of bidi, since since the X we pass in to
|
||||
* gdk_draw_layout() is always the left edge of the line.
|
||||
*/
|
||||
right_bearing = (ink_rect.x + ink_rect.width) - (logical_rect.x + logical_rect.width);
|
||||
right_bearing = MAX (right_bearing, 0);
|
||||
|
||||
ellipsize_width -= right_bearing;
|
||||
ellipsize_width = MAX (ellipsize_width, 0);
|
||||
|
||||
/* Only ellipsizing when necessary is a performance optimization -
|
||||
* pango_layout_set_width() will force a relayout if it isn't the
|
||||
* same as the current width of -1.
|
||||
*/
|
||||
if (ellipsize_width < logical_rect.width)
|
||||
pango_layout_set_width (info->title_layout, PANGO_SCALE * ellipsize_width);
|
||||
}
|
||||
|
||||
gdk_draw_layout (drawable, gc,
|
||||
rx, ry,
|
||||
info->title_layout);
|
||||
|
||||
/* Remove any ellipsization we might have set; will short-circuit
|
||||
* if the width is already -1 */
|
||||
pango_layout_set_width (info->title_layout, -1);
|
||||
|
||||
g_object_unref (G_OBJECT (gc));
|
||||
}
|
||||
break;
|
||||
@@ -3855,7 +3913,7 @@ meta_draw_op_draw (const MetaDrawOp *op,
|
||||
const MetaDrawInfo *info,
|
||||
MetaRectangle logical_region)
|
||||
{
|
||||
meta_draw_op_draw_with_style (op, widget->style, widget,
|
||||
meta_draw_op_draw_with_style (op, gtk_widget_get_style (widget), widget,
|
||||
drawable, clip, info, logical_region);
|
||||
}
|
||||
|
||||
@@ -3985,7 +4043,7 @@ meta_draw_op_list_draw (const MetaDrawOpList *op_list,
|
||||
MetaRectangle rect)
|
||||
|
||||
{
|
||||
meta_draw_op_list_draw_with_style (op_list, widget->style, widget,
|
||||
meta_draw_op_list_draw_with_style (op_list, gtk_widget_get_style (widget), widget,
|
||||
drawable, clip, info, rect);
|
||||
}
|
||||
|
||||
@@ -4314,7 +4372,7 @@ meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
GdkRectangle bottom_titlebar_edge;
|
||||
GdkRectangle top_titlebar_edge;
|
||||
GdkRectangle left_edge, right_edge, bottom_edge;
|
||||
PangoRectangle extents;
|
||||
PangoRectangle logical_rect;
|
||||
MetaDrawInfo draw_info;
|
||||
|
||||
g_return_if_fail (style_gtk->colormap == gdk_drawable_get_colormap (drawable));
|
||||
@@ -4361,13 +4419,13 @@ meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
|
||||
if (title_layout)
|
||||
pango_layout_get_pixel_extents (title_layout,
|
||||
NULL, &extents);
|
||||
NULL, &logical_rect);
|
||||
|
||||
draw_info.mini_icon = mini_icon;
|
||||
draw_info.icon = icon;
|
||||
draw_info.title_layout = title_layout;
|
||||
draw_info.title_layout_width = title_layout ? extents.width : 0;
|
||||
draw_info.title_layout_height = title_layout ? extents.height : 0;
|
||||
draw_info.title_layout_width = title_layout ? logical_rect.width : 0;
|
||||
draw_info.title_layout_height = title_layout ? logical_rect.height : 0;
|
||||
draw_info.fgeom = fgeom;
|
||||
|
||||
/* The enum is in the order the pieces should be rendered. */
|
||||
@@ -4557,7 +4615,7 @@ meta_frame_style_draw (MetaFrameStyle *style,
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon)
|
||||
{
|
||||
meta_frame_style_draw_with_style (style, widget->style, widget,
|
||||
meta_frame_style_draw_with_style (style, gtk_widget_get_style (widget), widget,
|
||||
drawable, x_offset, y_offset,
|
||||
clip, fgeom, client_width, client_height,
|
||||
title_layout, text_height,
|
||||
@@ -4845,6 +4903,8 @@ meta_theme_new (void)
|
||||
theme->quark_icon_height = g_quark_from_static_string ("icon_height");
|
||||
theme->quark_title_width = g_quark_from_static_string ("title_width");
|
||||
theme->quark_title_height = g_quark_from_static_string ("title_height");
|
||||
theme->quark_frame_x_center = g_quark_from_static_string ("frame_x_center");
|
||||
theme->quark_frame_y_center = g_quark_from_static_string ("frame_y_center");
|
||||
return theme;
|
||||
}
|
||||
|
||||
@@ -5180,7 +5240,7 @@ meta_theme_draw_frame (MetaTheme *theme,
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon)
|
||||
{
|
||||
meta_theme_draw_frame_with_style (theme, widget->style, widget,
|
||||
meta_theme_draw_frame_with_style (theme, gtk_widget_get_style (widget), widget,
|
||||
drawable, clip, x_offset, y_offset, type,flags,
|
||||
client_width, client_height,
|
||||
title_layout, text_height,
|
||||
@@ -5574,9 +5634,9 @@ meta_gtk_widget_get_font_desc (GtkWidget *widget,
|
||||
{
|
||||
PangoFontDescription *font_desc;
|
||||
|
||||
g_return_val_if_fail (GTK_WIDGET_REALIZED (widget), NULL);
|
||||
g_return_val_if_fail (gtk_widget_get_realized (widget), NULL);
|
||||
|
||||
font_desc = pango_font_description_copy (widget->style->font_desc);
|
||||
font_desc = pango_font_description_copy (gtk_widget_get_style (widget)->font_desc);
|
||||
|
||||
if (override)
|
||||
pango_font_description_merge (font_desc, override, TRUE);
|
||||
@@ -6617,7 +6677,7 @@ meta_theme_earliest_version_with_button (MetaButtonType type)
|
||||
case META_BUTTON_TYPE_RIGHT_LEFT_BACKGROUND:
|
||||
case META_BUTTON_TYPE_RIGHT_MIDDLE_BACKGROUND:
|
||||
case META_BUTTON_TYPE_RIGHT_RIGHT_BACKGROUND:
|
||||
return 1;
|
||||
return 1000;
|
||||
|
||||
case META_BUTTON_TYPE_SHADE:
|
||||
case META_BUTTON_TYPE_ABOVE:
|
||||
@@ -6625,10 +6685,10 @@ meta_theme_earliest_version_with_button (MetaButtonType type)
|
||||
case META_BUTTON_TYPE_UNSHADE:
|
||||
case META_BUTTON_TYPE_UNABOVE:
|
||||
case META_BUTTON_TYPE_UNSTICK:
|
||||
return 2;
|
||||
return 2000;
|
||||
|
||||
default:
|
||||
meta_warning("Unknown button %d\n", type);
|
||||
return 1;
|
||||
return 1000;
|
||||
}
|
||||
}
|
||||
|
@@ -534,6 +534,7 @@ struct _MetaDrawOp
|
||||
MetaColorSpec *color_spec;
|
||||
MetaDrawSpec *x;
|
||||
MetaDrawSpec *y;
|
||||
MetaDrawSpec *ellipsize_width;
|
||||
} title;
|
||||
|
||||
struct {
|
||||
@@ -819,6 +820,8 @@ struct _MetaTheme
|
||||
GQuark quark_icon_height;
|
||||
GQuark quark_title_width;
|
||||
GQuark quark_title_height;
|
||||
GQuark quark_frame_x_center;
|
||||
GQuark quark_frame_y_center;
|
||||
};
|
||||
|
||||
struct _MetaPositionExprEnv
|
||||
@@ -834,6 +837,8 @@ struct _MetaPositionExprEnv
|
||||
int bottom_height;
|
||||
int title_width;
|
||||
int title_height;
|
||||
int frame_x_center;
|
||||
int frame_y_center;
|
||||
int mini_icon_width;
|
||||
int mini_icon_height;
|
||||
int icon_width;
|
||||
|
@@ -24,6 +24,8 @@
|
||||
#include "themewidget.h"
|
||||
#include <math.h>
|
||||
|
||||
#include "gtk-compat.h"
|
||||
|
||||
static void meta_area_class_init (MetaAreaClass *klass);
|
||||
static void meta_area_init (MetaArea *area);
|
||||
static void meta_area_size_request (GtkWidget *widget,
|
||||
@@ -80,7 +82,7 @@ meta_area_class_init (MetaAreaClass *class)
|
||||
static void
|
||||
meta_area_init (MetaArea *area)
|
||||
{
|
||||
GTK_WIDGET_SET_FLAGS (area, GTK_NO_WINDOW);
|
||||
gtk_widget_set_has_window (GTK_WIDGET (area), FALSE);
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
@@ -111,28 +113,34 @@ meta_area_expose (GtkWidget *widget,
|
||||
GdkEventExpose *event)
|
||||
{
|
||||
MetaArea *area;
|
||||
GtkAllocation allocation;
|
||||
GtkMisc *misc;
|
||||
GtkRequisition requisition;
|
||||
gfloat xalign, yalign;
|
||||
gint x, y;
|
||||
gfloat xalign;
|
||||
gint xpad, ypad;
|
||||
|
||||
g_return_val_if_fail (META_IS_AREA (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
if (GTK_WIDGET_DRAWABLE (widget))
|
||||
if (gtk_widget_is_drawable (widget))
|
||||
{
|
||||
area = META_AREA (widget);
|
||||
misc = GTK_MISC (widget);
|
||||
|
||||
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
|
||||
xalign = misc->xalign;
|
||||
else
|
||||
xalign = 1.0 - misc->xalign;
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
gtk_widget_get_requisition (widget, &requisition);
|
||||
gtk_misc_get_alignment (misc, &xalign, &yalign);
|
||||
gtk_misc_get_padding (misc, &xpad, &ypad);
|
||||
|
||||
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
|
||||
xalign = 1.0 - xalign;
|
||||
|
||||
x = floor (widget->allocation.x + misc->xpad
|
||||
+ ((widget->allocation.width - widget->requisition.width) * xalign)
|
||||
x = floor (allocation.x + xpad
|
||||
+ ((allocation.width - requisition.width) * xalign)
|
||||
+ 0.5);
|
||||
y = floor (widget->allocation.y + misc->ypad
|
||||
+ ((widget->allocation.height - widget->requisition.height) * misc->yalign)
|
||||
y = floor (allocation.y + ypad
|
||||
+ ((allocation.height - requisition.height) * yalign)
|
||||
+ 0.5);
|
||||
|
||||
if (area->expose_func)
|
||||
|
14
src/ui/ui.c
14
src/ui/ui.c
@@ -379,7 +379,7 @@ meta_image_window_new (Display *xdisplay,
|
||||
gtk_window_set_screen (GTK_WINDOW (iw->window), gscreen);
|
||||
|
||||
gtk_widget_realize (iw->window);
|
||||
iw->pixmap = gdk_pixmap_new (iw->window->window,
|
||||
iw->pixmap = gdk_pixmap_new (gtk_widget_get_window (iw->window),
|
||||
max_width, max_height,
|
||||
-1);
|
||||
|
||||
@@ -417,13 +417,15 @@ meta_image_window_set (MetaImageWindow *iw,
|
||||
int x,
|
||||
int y)
|
||||
{
|
||||
GdkWindow *window;
|
||||
|
||||
/* We use a back pixmap to avoid having to handle exposes, because
|
||||
* it's really too slow for large clients being minimized, etc.
|
||||
* and this way flicker is genuinely zero.
|
||||
*/
|
||||
|
||||
gdk_draw_pixbuf (iw->pixmap,
|
||||
iw->window->style->black_gc,
|
||||
gtk_widget_get_style (iw->window)->black_gc,
|
||||
pixbuf,
|
||||
0, 0,
|
||||
0, 0,
|
||||
@@ -432,16 +434,18 @@ meta_image_window_set (MetaImageWindow *iw,
|
||||
GDK_RGB_DITHER_NORMAL,
|
||||
0, 0);
|
||||
|
||||
gdk_window_set_back_pixmap (iw->window->window,
|
||||
window = gtk_widget_get_window (iw->window);
|
||||
|
||||
gdk_window_set_back_pixmap (window,
|
||||
iw->pixmap,
|
||||
FALSE);
|
||||
|
||||
gdk_window_move_resize (iw->window->window,
|
||||
gdk_window_move_resize (window,
|
||||
x, y,
|
||||
gdk_pixbuf_get_width (pixbuf),
|
||||
gdk_pixbuf_get_height (pixbuf));
|
||||
|
||||
gdk_window_clear (iw->window->window);
|
||||
gdk_window_clear (window);
|
||||
}
|
||||
|
||||
static GdkColormap*
|
||||
|
@@ -120,11 +120,11 @@ evil_timeout (gpointer data)
|
||||
|
||||
w = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
gtk_widget_set_uposition (w,
|
||||
g_random_int_range (0,
|
||||
gdk_screen_width ()),
|
||||
g_random_int_range (0,
|
||||
gdk_screen_height ()));
|
||||
gtk_window_move (GTK_WINDOW (w),
|
||||
g_random_int_range (0,
|
||||
gdk_screen_width ()),
|
||||
g_random_int_range (0,
|
||||
gdk_screen_height ()));
|
||||
|
||||
parent = NULL;
|
||||
|
||||
|
Reference in New Issue
Block a user