Compare commits
60 Commits
3.1.90
...
wip/xinput
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eac32fb142 | ||
|
|
b93c72315d | ||
|
|
f84637d31e | ||
|
|
48a88a33ef | ||
|
|
8847281c31 | ||
|
|
d05297593f | ||
|
|
a285b8ae44 | ||
|
|
e6ba5ec298 | ||
|
|
f6d9b29ad0 | ||
|
|
e6f0af9abc | ||
|
|
d32c726967 | ||
|
|
2c873990d1 | ||
|
|
f15993f940 | ||
|
|
d482dbcd16 | ||
|
|
f5334dd6cf | ||
|
|
972a9d231f | ||
|
|
1dd50cf006 | ||
|
|
855095ad1a | ||
|
|
95b2e6fafc | ||
|
|
dfcd079ec2 | ||
|
|
e0966e7499 | ||
|
|
38df2715f2 | ||
|
|
5ecbb3ec3b | ||
|
|
656fa71649 | ||
|
|
bde0d28f1b | ||
|
|
4cb9a5e3bf | ||
|
|
90c25f0cfe | ||
|
|
2484e8cd64 | ||
|
|
61a7789c83 | ||
|
|
c352e1078e | ||
|
|
d664579115 | ||
|
|
49dfb40b82 | ||
|
|
e08c4756eb | ||
|
|
6378527458 | ||
|
|
f0705e142c | ||
|
|
3f7193e558 | ||
|
|
3af9de08ab | ||
|
|
111c23a6e0 | ||
|
|
db6ddc4a7f | ||
|
|
884e13474b | ||
|
|
722420df3a | ||
|
|
50cee11c53 | ||
|
|
a727114ac2 | ||
|
|
722d2d6472 | ||
|
|
7b9a26fbd8 | ||
|
|
5819e74c22 | ||
|
|
36e237cf1e | ||
|
|
3b0aa9f881 | ||
|
|
e6d09c9d0b | ||
|
|
e26bf9dcef | ||
|
|
748954a15e | ||
|
|
4c4f21c001 | ||
|
|
166559059a | ||
|
|
7566b4ea17 | ||
|
|
1b7a6ce912 | ||
|
|
dc4ecdd0d2 | ||
|
|
d381c0465b | ||
|
|
38a0aecf61 | ||
|
|
7573aae855 | ||
|
|
684d40d1a1 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -56,13 +56,10 @@ mutter-mag
|
||||
mutter-message
|
||||
mutter-window-demo
|
||||
focus-window
|
||||
test-attached
|
||||
test-gravity
|
||||
test-resizing
|
||||
test-size-hints
|
||||
# We can't say just "wm-tester" here or it will ignore the directory
|
||||
# rather than the binary
|
||||
src/wm-tester/wm-tester
|
||||
wm-tester
|
||||
INSTALL
|
||||
mkinstalldirs
|
||||
src/mutter-enum-types.[ch]
|
||||
|
||||
57
NEWS
57
NEWS
@@ -1,60 +1,3 @@
|
||||
3.1.90
|
||||
======
|
||||
* Extend the draggable portion of window borders outside the visible frame
|
||||
for easy resizing with thin borders. (New draggable_border_width GConf key
|
||||
controls the total width of visible and invisible borders.)
|
||||
[Jasper; #644930]
|
||||
* Draw rounded window corners with antialising [Jasper; #628195]
|
||||
* Unredirect override-redirect fullscreen windows, such as full-screen
|
||||
3D games to avoid any performance impact [Adel; #597014]
|
||||
* Add :resizable and :above properties to MetaWindow. [Tim; #653858]
|
||||
* Add MUTTER_DISABLE_FALLBACK_COLOR environment variable to allow visualizing
|
||||
places where a color is missing for gtk:custom() colors [Florian; #656112]
|
||||
* Don't attach modal dialogs to special windows like the desktop;
|
||||
add meta_window_is_attached_dialog() [Dan, #646761]
|
||||
* Make MetaBackgroundActor public, allow creating multiple instances
|
||||
(sharing a common texture), and add a :dim-factor property
|
||||
[Rui, Owen; #656433]
|
||||
* Fix attached dialogs to not be resizable from the top and to be
|
||||
position correctly [Jasper; #656619]
|
||||
* Misc bug fixes [Jasper, Rui; #656335, #657583]
|
||||
|
||||
Contributors:
|
||||
Tim Cuthbertson, Adel Gadllah, Rui Matos, Florian Müllner, Jasper St. Pierre,
|
||||
Owen Taylor, Dan Winship
|
||||
|
||||
Translations:
|
||||
Alexander Shopov [bg], Jorge González [es], Fran Dieguez [gl],
|
||||
Yaron Shahrabani [he], Takeshi Aihana [ja], Aurimas Černius [lt],
|
||||
Kjartan Maraas [nb], A S Alam [pa], Yuri Kozlov [ru], Daniel Nylander [se],
|
||||
Theppitak Karoonboonyanan [th], Abduxukur Abdurixit [ug], Aron Xu [zh_CN]
|
||||
|
||||
3.1.4
|
||||
=====
|
||||
* Use better, much more subtle shadow definitions [Jakub; #649374]
|
||||
* Add the ability to use named GTK+ colors in theme files as
|
||||
gtk:custom(name,fallback) [Florian; #648709]
|
||||
* Port from GdkColor to GdkRGBA and from GtkStyle to GtkStyleContext
|
||||
[Florian; #650586]
|
||||
* Try to fix window bindings using the Super key [Owen; #624869]
|
||||
* Update to using more modern Cogl and Clutter APIs
|
||||
[Adel, Emmanuele, Neil; #654551 #654729 #654730 #655064]
|
||||
* Fix for srcdir != builddir builds [Thierry; #624910]
|
||||
* Make handling of focus appearance for attached dialogs more robust
|
||||
[Dan; #647712]
|
||||
* Misc bug fixes
|
||||
[Dan, Florian, Jasper, Owen, Rui; #642957 #649374 #650661 #654489 #654539]
|
||||
|
||||
Contributors:
|
||||
Emmanuele Bassi, Adel Gadllah, Rui Matos, Florian Müllner, Neil Roberts,
|
||||
Jasper St. Pierre, Jakub Steiner, Owen Taylor
|
||||
|
||||
Translations:
|
||||
Ihar Hrachyshka [be], Jorge González, Daniel Mustieles [es],
|
||||
Fran Dieguez [gl], Yaron Shahrabani [he], Takeshi Aihana [ja],
|
||||
Kjartan Maraas [nb], Rudolfs Mazurs [lv], Matej Urbančič [sl],
|
||||
Abduxukur Abdurixit [ug], Nguyễn Thái Ngọc Duy [vi]
|
||||
|
||||
3.1.3.1
|
||||
=======
|
||||
* Back API version down to "3.0" - the change to Meta-3.1.gir
|
||||
|
||||
45
configure.in
45
configure.in
@@ -2,7 +2,7 @@ AC_PREREQ(2.50)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [1])
|
||||
m4_define([mutter_micro_version], [90])
|
||||
m4_define([mutter_micro_version], [3.1])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
@@ -185,13 +185,26 @@ else
|
||||
AC_MSG_ERROR([no. Mutter requires the Xcomposite extension to build.])
|
||||
fi
|
||||
|
||||
CLUTTER_VERSION=1.7.5
|
||||
CLUTTER_VERSION=1.2.0
|
||||
CLUTTER_PACKAGE=clutter-1.0
|
||||
AC_SUBST(CLUTTER_PACKAGE)
|
||||
if $PKG_CONFIG --atleast-version $CLUTTER_VERSION $CLUTTER_PACKAGE ; then
|
||||
MUTTER_PC_MODULES="$MUTTER_PC_MODULES $CLUTTER_PACKAGE "
|
||||
PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE)
|
||||
AC_DEFINE(WITH_CLUTTER, , [Building with Clutter compositor])
|
||||
|
||||
dnl Check for the clutter-glx-texture-pixmap header
|
||||
mutter_save_cppflags="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $CLUTTER_CFLAGS"
|
||||
AC_CHECK_HEADER([clutter/glx/clutter-glx-texture-pixmap.h],
|
||||
[have_glx_texture_pixmap=yes],
|
||||
[have_glx_texture_pixmap=no])
|
||||
CPPFLAGS="$mutter_save_cppflags"
|
||||
|
||||
if test x$have_glx_texture_pixmap = xyes; then
|
||||
AC_DEFINE(HAVE_GLX_TEXTURE_PIXMAP, ,
|
||||
[Is ClutterGLXTexturePixmap available?])
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR([no. Mutter requires Clutter version $CLUTTER_VERSION.])
|
||||
fi
|
||||
@@ -225,6 +238,33 @@ if test x$have_xcursor = xyes; then
|
||||
AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support])
|
||||
fi
|
||||
|
||||
XINPUT2_VERSION=1.4.0
|
||||
|
||||
AC_ARG_ENABLE(xinput2,
|
||||
AC_HELP_STRING([--disable-xinput2],
|
||||
[disable XInput2 usage]),,
|
||||
enable_xinput2=yes)
|
||||
|
||||
if test x$enable_xinput2 = xyes; then
|
||||
AC_MSG_CHECKING([XInput2])
|
||||
if $PKG_CONFIG --atleast-version $XINPUT2_VERSION xi; then
|
||||
have_xinput2=yes
|
||||
else
|
||||
have_xinput2=no
|
||||
fi
|
||||
AC_MSG_RESULT($have_xinput2)
|
||||
else
|
||||
have_xinput2=no
|
||||
fi
|
||||
|
||||
if test x$have_xinput2 = xyes; then
|
||||
echo "Building with XInput2"
|
||||
MUTTER_PC_MODULES="$MUTTER_PC_MODULES xi"
|
||||
AC_DEFINE(HAVE_XINPUT2, , [Building with XInput2 support])
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(HAVE_XINPUT2, test "$have_xinput2" = "yes")
|
||||
|
||||
PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES)
|
||||
|
||||
AC_PATH_XTRA
|
||||
@@ -544,6 +584,7 @@ mutter-$VERSION
|
||||
Shape extension: ${found_shape}
|
||||
Xsync: ${found_xsync}
|
||||
Xcursor: ${have_xcursor}
|
||||
XInput2: ${have_xinput2}
|
||||
"
|
||||
|
||||
|
||||
|
||||
235
po/be.po
235
po/be.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter.master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-07-14 00:21+0300\n"
|
||||
"PO-Revision-Date: 2011-07-14 00:23+0300\n"
|
||||
"POT-Creation-Date: 2011-06-25 21:46+0300\n"
|
||||
"PO-Revision-Date: 2011-04-24 13:07+0200\n"
|
||||
"Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n"
|
||||
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
||||
"Language: be\n"
|
||||
@@ -14,16 +14,6 @@ msgstr ""
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Pootle 2.1.6\n"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
msgstr ""
|
||||
"Іншы кампазітны кіраўнік вокнаў ужо абслугоўвае экран %i дысплея \"%s\"."
|
||||
|
||||
#: ../src/core/all-keybindings.h:88
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Перайсці ў прастору працы 1"
|
||||
@@ -393,7 +383,7 @@ msgstr ""
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -404,12 +394,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "Загад %d не быў вызначаны.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "Загад на запуск тэрмінала не быў вызначаны.\n"
|
||||
@@ -520,8 +510,8 @@ msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
msgstr ""
|
||||
"Асаблівыя паводзіны для некаторых хібных праграм выключаныя. Некаторыя "
|
||||
"праграмы могуць перастаць працаваць, як мае быць.\n"
|
||||
"Асаблівыя паводзіны для некаторых хібных праграм выключаныя. Некаторыя праграмы "
|
||||
"могуць перастаць працаваць, як мае быць.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
@@ -703,7 +693,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6903
|
||||
#: ../src/core/window.c:6886
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -719,7 +709,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7566
|
||||
#: ../src/core/window.c:7549
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@@ -739,16 +729,11 @@ msgstr "Праграма прызначыла памылковае значэн
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (на %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1484
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Для %2$s вызначана хібнае акно WM_TRANSIENT_FOR 0x%1$lx.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR акно 0x%lx для %s стварыла б цыкл.\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -767,14 +752,14 @@ msgstr ""
|
||||
#: ../src/core/xprops.c:411
|
||||
#, c-format
|
||||
msgid "Property %s on window 0x%lx contained invalid UTF-8\n"
|
||||
msgstr "Уласцівасць %s акна 0x%lx змяшчала хібныя для UTF-8 знакі\n"
|
||||
msgstr "Уласцівасць %s акна 0x%lx утрымлівала хібныя для UTF-8 знакі\n"
|
||||
|
||||
#: ../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 ""
|
||||
"Уласцівасць %s акна 0x%lx змяшчала хібныя для UTF-8 знакі ў складніку %d "
|
||||
"Уласцівасць %s акна 0x%lx утрымлівала хібныя для UTF-8 знакі ў складніку %d "
|
||||
"спіса\n"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:1
|
||||
@@ -830,47 +815,47 @@ msgstr "Працоўныя прасторы толькі на галоўным
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Правілы выкарыстання: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1289
|
||||
#: ../src/ui/frames.c:1280
|
||||
msgid "Close Window"
|
||||
msgstr "Зачыніць акно"
|
||||
|
||||
#: ../src/ui/frames.c:1292
|
||||
#: ../src/ui/frames.c:1283
|
||||
msgid "Window Menu"
|
||||
msgstr "Меню акна"
|
||||
|
||||
#: ../src/ui/frames.c:1295
|
||||
#: ../src/ui/frames.c:1286
|
||||
msgid "Minimize Window"
|
||||
msgstr "Прыхаваць акно"
|
||||
|
||||
#: ../src/ui/frames.c:1298
|
||||
#: ../src/ui/frames.c:1289
|
||||
msgid "Maximize Window"
|
||||
msgstr "Разгарнуць акно"
|
||||
|
||||
#: ../src/ui/frames.c:1301
|
||||
#: ../src/ui/frames.c:1292
|
||||
msgid "Restore Window"
|
||||
msgstr "Аднавіць былы памер акна"
|
||||
|
||||
#: ../src/ui/frames.c:1304
|
||||
#: ../src/ui/frames.c:1295
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Скруціць акно ў загаловак"
|
||||
|
||||
#: ../src/ui/frames.c:1307
|
||||
#: ../src/ui/frames.c:1298
|
||||
msgid "Unroll Window"
|
||||
msgstr "Раскруціць акно з загалоўка"
|
||||
|
||||
#: ../src/ui/frames.c:1310
|
||||
#: ../src/ui/frames.c:1301
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Трымаць акно над астатнімі"
|
||||
|
||||
#: ../src/ui/frames.c:1313
|
||||
#: ../src/ui/frames.c:1304
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Прыбраць акно з верху"
|
||||
|
||||
#: ../src/ui/frames.c:1316
|
||||
#: ../src/ui/frames.c:1307
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Заўсёды на бачнай прасторы працы"
|
||||
|
||||
#: ../src/ui/frames.c:1319
|
||||
#: ../src/ui/frames.c:1310
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Змясціць акно на адзінай прасторы працы"
|
||||
|
||||
@@ -1073,262 +1058,246 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:252
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "верхнюю"
|
||||
|
||||
#: ../src/ui/theme.c:254
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "ніжнюю"
|
||||
|
||||
#: ../src/ui/theme.c:256
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "левую"
|
||||
|
||||
#: ../src/ui/theme.c:258
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "правую"
|
||||
|
||||
#: ../src/ui/theme.c:285
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "апісанне геаметрыі рамкі акна не вызначае %s граніцу"
|
||||
|
||||
#: ../src/ui/theme.c:304
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr ""
|
||||
"апісанне геаметрыі рамкі акна не вызначае %s граніцу для аблямоўкі \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:341
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Прапорцыі кнопкі %g не маюць сэнсу"
|
||||
|
||||
#: ../src/ui/theme.c:353
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Апісанне геаметрыі рамкі акна не вызначае памер кнопак"
|
||||
|
||||
#: ../src/ui/theme.c:1061
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Градыент мусіць мець прынамсі два колеры"
|
||||
|
||||
#: ../src/ui/theme.c:1206
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1222
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1272
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
"where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1286
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
"fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1297
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1310
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1340
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
"format"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1351
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1361
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1408
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1419
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1429
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1458
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1769
|
||||
#: ../src/ui/theme.c:1481
|
||||
#, c-format
|
||||
msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1713
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1796
|
||||
#: ../src/ui/theme.c:1740
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1810
|
||||
#: ../src/ui/theme.c:1754
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1932
|
||||
#: ../src/ui/theme.c:1876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:1989
|
||||
#: ../src/ui/theme.c:1933
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2100 ../src/ui/theme.c:2110 ../src/ui/theme.c:2144
|
||||
#: ../src/ui/theme.c:2044 ../src/ui/theme.c:2054 ../src/ui/theme.c:2088
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2152
|
||||
#: ../src/ui/theme.c:2096
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2208
|
||||
#: ../src/ui/theme.c:2152
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2217
|
||||
#: ../src/ui/theme.c:2161
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2225
|
||||
#: ../src/ui/theme.c:2169
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2179
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
"operand in between"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2386 ../src/ui/theme.c:2431
|
||||
#: ../src/ui/theme.c:2330 ../src/ui/theme.c:2375
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2485
|
||||
#: ../src/ui/theme.c:2429
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2514
|
||||
#: ../src/ui/theme.c:2458
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2578
|
||||
#: ../src/ui/theme.c:2522
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2589
|
||||
#: ../src/ui/theme.c:2533
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:2801 ../src/ui/theme.c:2821 ../src/ui/theme.c:2841
|
||||
#: ../src/ui/theme.c:2745 ../src/ui/theme.c:2765 ../src/ui/theme.c:2785
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:4512
|
||||
#: ../src/ui/theme.c:4482
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
"specified for this frame style"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:5042 ../src/ui/theme.c:5067
|
||||
#: ../src/ui/theme.c:5012 ../src/ui/theme.c:5037
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:5115
|
||||
#: ../src/ui/theme.c:5085
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Не ўдалося загрузіць матыў аздаблення \"%s\": %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5251 ../src/ui/theme.c:5258 ../src/ui/theme.c:5265
|
||||
#: ../src/ui/theme.c:5272 ../src/ui/theme.c:5279
|
||||
#: ../src/ui/theme.c:5221 ../src/ui/theme.c:5228 ../src/ui/theme.c:5235
|
||||
#: ../src/ui/theme.c:5242 ../src/ui/theme.c:5249
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Для матыва аздаблення \"%2$s\" не прызначана <%1$s>"
|
||||
|
||||
#: ../src/ui/theme.c:5287
|
||||
#: ../src/ui/theme.c:5257
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
"type=\"%s\" style_set=\"whatever\"/> element"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:5737 ../src/ui/theme.c:5799 ../src/ui/theme.c:5862
|
||||
#: ../src/ui/theme.c:5707 ../src/ui/theme.c:5769 ../src/ui/theme.c:5832
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme.c:5745 ../src/ui/theme.c:5807 ../src/ui/theme.c:5870
|
||||
#: ../src/ui/theme.c:5715 ../src/ui/theme.c:5777 ../src/ui/theme.c:5840
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Канстанта \"%s\" ужо азначана"
|
||||
@@ -1760,92 +1729,92 @@ msgstr ""
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1058
|
||||
#: ../src/ui/theme-viewer.c:1055
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@@ -1853,39 +1822,39 @@ msgid ""
|
||||
"frame)\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
#: ../src/ui/theme-viewer.c:1274
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
#: ../src/ui/theme-viewer.c:1276
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1283
|
||||
#: ../src/ui/theme-viewer.c:1280
|
||||
msgid "Error was expected but none given"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1285
|
||||
#: ../src/ui/theme-viewer.c:1282
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1291
|
||||
#: ../src/ui/theme-viewer.c:1288
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1295
|
||||
#: ../src/ui/theme-viewer.c:1292
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1298
|
||||
#: ../src/ui/theme-viewer.c:1295
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1363
|
||||
#: ../src/ui/theme-viewer.c:1360
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr ""
|
||||
|
||||
314
po/bg.po
314
po/bg.po
@@ -11,8 +11,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-12 06:43+0300\n"
|
||||
"PO-Revision-Date: 2011-08-12 06:43+0300\n"
|
||||
"POT-Creation-Date: 2011-03-23 21:38+0200\n"
|
||||
"PO-Revision-Date: 2011-03-23 21:38+0200\n"
|
||||
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
|
||||
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
|
||||
"Language: bg\n"
|
||||
@@ -21,15 +21,6 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:487
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
msgstr "На екран %i от дисплея „%s“ вече има мениджър за наслагване."
|
||||
|
||||
#: ../src/core/all-keybindings.h:88
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Превключване към работен плот 1"
|
||||
@@ -362,16 +353,13 @@ msgstr "Събитие за звънец"
|
||||
msgid "Unknown window information request: %d"
|
||||
msgstr "Неизвестна заявка за информация за прозорец: %d"
|
||||
|
||||
#: ../src/core/delete.c:111
|
||||
#. Translators: %s is a window title
|
||||
#: ../src/core/delete.c:94
|
||||
#, c-format
|
||||
msgid "<tt>%s</tt> is not responding."
|
||||
msgstr "<tt>%s</tt> не отговаря на съобщенията."
|
||||
|
||||
#: ../src/core/delete.c:114
|
||||
msgid "Application is not responding."
|
||||
msgstr "Програмата не отговаря на съобщенията."
|
||||
|
||||
#: ../src/core/delete.c:119
|
||||
#: ../src/core/delete.c:99
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@@ -379,11 +367,11 @@ msgstr ""
|
||||
"Можете да изчакате малко преди изрично да накарате приложението да спре "
|
||||
"работата си."
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Wait"
|
||||
msgstr "Из_чакване"
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Принудително спиране"
|
||||
|
||||
@@ -407,7 +395,7 @@ msgstr "Някоя друга програма използва бързия к
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -418,12 +406,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "Не е дефинирана команда %d.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "Не е дефинирана команда за терминал.\n"
|
||||
@@ -454,12 +442,12 @@ msgstr "Инициализиране на сесия от файл със зап
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Извикванията на X да са синхронни"
|
||||
|
||||
#: ../src/core/main.c:504
|
||||
#: ../src/core/main.c:506
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Неуспех при сканирането на папката с темите: %s\n"
|
||||
|
||||
#: ../src/core/main.c:520
|
||||
#: ../src/core/main.c:522
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -502,37 +490,37 @@ msgstr "Списък с приставки за мениджъра за насл
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:550 ../src/core/prefs.c:711
|
||||
#: ../src/core/prefs.c:543 ../src/core/prefs.c:704
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "Ключът на GConf — „%s“ е с невалидна стойност\n"
|
||||
|
||||
#: ../src/core/prefs.c:637 ../src/core/prefs.c:880
|
||||
#: ../src/core/prefs.c:630 ../src/core/prefs.c:873
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr ""
|
||||
"Стойността %d записана в ключа на GConf — „%s“ е извън обхвата от %d÷%d\n"
|
||||
|
||||
#: ../src/core/prefs.c:681 ../src/core/prefs.c:758 ../src/core/prefs.c:806
|
||||
#: ../src/core/prefs.c:870 ../src/core/prefs.c:1331 ../src/core/prefs.c:1347
|
||||
#: ../src/core/prefs.c:1364 ../src/core/prefs.c:1380
|
||||
#: ../src/core/prefs.c:674 ../src/core/prefs.c:751 ../src/core/prefs.c:799
|
||||
#: ../src/core/prefs.c:863 ../src/core/prefs.c:1324 ../src/core/prefs.c:1340
|
||||
#: ../src/core/prefs.c:1357 ../src/core/prefs.c:1373
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "Ключът на GConf — „%s“ е от невалиден вид\n"
|
||||
|
||||
#: ../src/core/prefs.c:1210
|
||||
#: ../src/core/prefs.c:1203
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr ""
|
||||
"Ключът на GConf — „%s“ вече се използва и чрез него не могат да се заменят "
|
||||
"настройките зададени в „%s“\n"
|
||||
|
||||
#: ../src/core/prefs.c:1269
|
||||
#: ../src/core/prefs.c:1262
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "Не може да се замени стойността на ключа на GConf, „%s“ липсва\n"
|
||||
|
||||
#: ../src/core/prefs.c:1454
|
||||
#: ../src/core/prefs.c:1447
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -540,14 +528,14 @@ msgstr ""
|
||||
"Триковете за развалените програми са изключени. Някои програми могат да са с "
|
||||
"неправилно поведение.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1531
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr ""
|
||||
"Описанието на шрифт „%s“ от ключа на GConf — %s, не може да бъде "
|
||||
"анализирано\n"
|
||||
|
||||
#: ../src/core/prefs.c:1593
|
||||
#: ../src/core/prefs.c:1586
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -556,17 +544,17 @@ msgstr ""
|
||||
"„%s“, който е открит в базата от данни с настройките, не е валиден "
|
||||
"модификатор на бутон на мишката\n"
|
||||
|
||||
#: ../src/core/prefs.c:2028
|
||||
#: ../src/core/prefs.c:2016
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "Грешка при задаване на броя на работни плотове да е %d: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2212 ../src/core/prefs.c:2714
|
||||
#: ../src/core/prefs.c:2200 ../src/core/prefs.c:2702
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Работен плот %d"
|
||||
|
||||
#: ../src/core/prefs.c:2244 ../src/core/prefs.c:2422
|
||||
#: ../src/core/prefs.c:2232 ../src/core/prefs.c:2410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -575,30 +563,30 @@ msgstr ""
|
||||
"Низът „%s“ открит в базата от данни с настройки е невалиден за стойност на "
|
||||
"клавишната комбинация „%s“\n"
|
||||
|
||||
#: ../src/core/prefs.c:2795
|
||||
#: ../src/core/prefs.c:2783
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "Грешка при задаване на името на работния плот %d да е „%s“: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3009
|
||||
#: ../src/core/prefs.c:2997
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr ""
|
||||
"Грешка при задаване на състоянието обновяването на скритите прозорци: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3044
|
||||
#: ../src/core/prefs.c:3032
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr ""
|
||||
"Грешка при задаване на показването на изскачащите прозорци при обхождане: "
|
||||
"%s\n"
|
||||
|
||||
#: ../src/core/screen.c:663
|
||||
#: ../src/core/screen.c:623
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Екранът %d на дисплей „%s“ е невалиден\n"
|
||||
|
||||
#: ../src/core/screen.c:679
|
||||
#: ../src/core/screen.c:639
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -607,7 +595,7 @@ msgstr ""
|
||||
"Екранът %d на дисплей „%s“ вече има мениджър на прозорци; пробвайте да го "
|
||||
"замените с опцията --replace.\n"
|
||||
|
||||
#: ../src/core/screen.c:706
|
||||
#: ../src/core/screen.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
@@ -615,65 +603,65 @@ msgstr ""
|
||||
"Неуспех при получаването на избрания мениджър за прозорци на екран %d, "
|
||||
"дисплей „%s“\n"
|
||||
|
||||
#: ../src/core/screen.c:761
|
||||
#: ../src/core/screen.c:721
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "Екран %d на дисплей „%s“ вече има мениджър за прозорци\n"
|
||||
|
||||
#: ../src/core/screen.c:946
|
||||
#: ../src/core/screen.c:906
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Неуспех при отстъпването на екран %d на дисплей „%s“\n"
|
||||
|
||||
#: ../src/core/session.c:843 ../src/core/session.c:850
|
||||
#: ../src/core/session.c:837 ../src/core/session.c:844
|
||||
#, c-format
|
||||
msgid "Could not create directory '%s': %s\n"
|
||||
msgstr "Неуспех при създаването на папката „%s“: %s\n"
|
||||
|
||||
#: ../src/core/session.c:860
|
||||
#: ../src/core/session.c:854
|
||||
#, c-format
|
||||
msgid "Could not open session file '%s' for writing: %s\n"
|
||||
msgstr "Неуспех при отварянето на сесийния файл „%s“ за запис: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1001
|
||||
#: ../src/core/session.c:995
|
||||
#, c-format
|
||||
msgid "Error writing session file '%s': %s\n"
|
||||
msgstr "Грешка при записване на сесийния файл „%s“: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1006
|
||||
#: ../src/core/session.c:1000
|
||||
#, c-format
|
||||
msgid "Error closing session file '%s': %s\n"
|
||||
msgstr "Грешка при затваряне на сесийния файл „%s“: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1136
|
||||
#: ../src/core/session.c:1130
|
||||
#, c-format
|
||||
msgid "Failed to parse saved session file: %s\n"
|
||||
msgstr "Неуспех при анализирането на записания сесиен файл: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1185
|
||||
#: ../src/core/session.c:1179
|
||||
#, c-format
|
||||
msgid "<mutter_session> attribute seen but we already have the session ID"
|
||||
msgstr ""
|
||||
"Атрибутът <mutter_session> е видян, но вече имаме сесийния идентификатор"
|
||||
|
||||
#: ../src/core/session.c:1198 ../src/core/session.c:1273
|
||||
#: ../src/core/session.c:1305 ../src/core/session.c:1377
|
||||
#: ../src/core/session.c:1437
|
||||
#: ../src/core/session.c:1192 ../src/core/session.c:1267
|
||||
#: ../src/core/session.c:1299 ../src/core/session.c:1371
|
||||
#: ../src/core/session.c:1431
|
||||
#, c-format
|
||||
msgid "Unknown attribute %s on <%s> element"
|
||||
msgstr "Непознат атрибут %s на елемента <%s>"
|
||||
|
||||
#: ../src/core/session.c:1215
|
||||
#: ../src/core/session.c:1209
|
||||
#, c-format
|
||||
msgid "nested <window> tag"
|
||||
msgstr "вложен етикет <window>"
|
||||
|
||||
#: ../src/core/session.c:1457
|
||||
#: ../src/core/session.c:1451
|
||||
#, c-format
|
||||
msgid "Unknown element %s"
|
||||
msgstr "Непознат елемент %s"
|
||||
|
||||
#: ../src/core/session.c:1809
|
||||
#: ../src/core/session.c:1803
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
@@ -718,13 +706,13 @@ msgid "Window manager error: "
|
||||
msgstr "Грешка от мениджъра на прозорци: "
|
||||
|
||||
#. Translators: This is the title used on dialog boxes
|
||||
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/mutter-wm.desktop.in.h:1
|
||||
msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6959
|
||||
#: ../src/core/window.c:6795
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -740,7 +728,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7622
|
||||
#: ../src/core/window.c:7458
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@@ -760,16 +748,11 @@ msgstr "Приложението зададе неверен _NET_WM_PID %lu\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (от %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1479
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "За %2$s е указан неправилен WM_TRANSIENT_FOR, прозорец 0x%1$lx.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR за прозорец 0x%lx за %s ще зацикли.\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -819,27 +802,15 @@ msgstr ""
|
||||
"на основния."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:4
|
||||
msgid "Draggable border width"
|
||||
msgstr "Широчина на границата за влачене"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "Обновяване на скритите прозорци"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr ""
|
||||
"Модификатор, който да се ползва за допълнителните действия по прозорците"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
"Общ размер на границите за влачене. Ако видимите граници на темата са по-"
|
||||
"малки, се добавят невидими граници, за да се достигне тази величина."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
@@ -850,7 +821,7 @@ msgstr ""
|
||||
"за стартиране на програми. Стандартно клавишът е „Windows“ при системите "
|
||||
"съвместими с PC. Очаква се да е или стандартната стойност или празен низ."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:9
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@@ -860,7 +831,7 @@ msgstr ""
|
||||
"заглавната лента на родителския си прозорец и се местят с него, вместо да са "
|
||||
"отделни и да имат собствена заглавна лента."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:10
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Работни плотове само на основния монитор"
|
||||
|
||||
@@ -869,47 +840,47 @@ msgstr "Работни плотове само на основния монит
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Употреба: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1123
|
||||
#: ../src/ui/frames.c:1099
|
||||
msgid "Close Window"
|
||||
msgstr "Затваряне на прозореца"
|
||||
|
||||
#: ../src/ui/frames.c:1126
|
||||
#: ../src/ui/frames.c:1102
|
||||
msgid "Window Menu"
|
||||
msgstr "Меню за прозорците"
|
||||
|
||||
#: ../src/ui/frames.c:1129
|
||||
#: ../src/ui/frames.c:1105
|
||||
msgid "Minimize Window"
|
||||
msgstr "Минимизиране на прозореца"
|
||||
|
||||
#: ../src/ui/frames.c:1132
|
||||
#: ../src/ui/frames.c:1108
|
||||
msgid "Maximize Window"
|
||||
msgstr "Максимизиране на прозореца"
|
||||
|
||||
#: ../src/ui/frames.c:1135
|
||||
#: ../src/ui/frames.c:1111
|
||||
msgid "Restore Window"
|
||||
msgstr "Възстановяване на прозорец"
|
||||
|
||||
#: ../src/ui/frames.c:1138
|
||||
#: ../src/ui/frames.c:1114
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Навиване на прозореца"
|
||||
|
||||
#: ../src/ui/frames.c:1141
|
||||
#: ../src/ui/frames.c:1117
|
||||
msgid "Unroll Window"
|
||||
msgstr "Развиване на прозореца"
|
||||
|
||||
#: ../src/ui/frames.c:1144
|
||||
#: ../src/ui/frames.c:1120
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Прозорецът да е отгоре"
|
||||
|
||||
#: ../src/ui/frames.c:1147
|
||||
#: ../src/ui/frames.c:1123
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Прозорецът да не е само отгоре"
|
||||
|
||||
#: ../src/ui/frames.c:1150
|
||||
#: ../src/ui/frames.c:1126
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Винаги на видимия работен плот"
|
||||
|
||||
#: ../src/ui/frames.c:1153
|
||||
#: ../src/ui/frames.c:1129
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Прозорецът да се появява само на едно работен плот"
|
||||
|
||||
@@ -1112,75 +1083,48 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d×%d"
|
||||
|
||||
#: ../src/ui/theme.c:253
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "горния"
|
||||
|
||||
#: ../src/ui/theme.c:255
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "долния"
|
||||
|
||||
#: ../src/ui/theme.c:257
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "левия"
|
||||
|
||||
#: ../src/ui/theme.c:259
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "десния"
|
||||
|
||||
#: ../src/ui/theme.c:286
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "геометрията на рамката не указва „%s“ размер"
|
||||
|
||||
#: ../src/ui/theme.c:305
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "геометрията на рамката не указва „%s“ размер на „%s“ ръб"
|
||||
|
||||
#: ../src/ui/theme.c:342
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Отношението на размерите на бутона %g е неподходящо"
|
||||
|
||||
#: ../src/ui/theme.c:354
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Геометрията на рамката не указва размера на бутоните"
|
||||
|
||||
#: ../src/ui/theme.c:1060
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Преливките трябва да имат поне два цвята"
|
||||
|
||||
#: ../src/ui/theme.c:1212
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
"Цветовата спецификация на GTK трябва да съдържа в скоби име на основен и "
|
||||
"резервен цвят: напр. gtk:custom(foo,bar). Неуспех при анализа на „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
"Неправилен знак „%c“ в параметъра за име на цвят (color_name) на gtk:custom. "
|
||||
"Позволени са само A-Za-z0-9-_."
|
||||
|
||||
#: ../src/ui/theme.c:1242
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr ""
|
||||
"Форматът на Gtk:custom е „gtk:custom(основен_цвят,резервен_цвят)“, „%s“ не "
|
||||
"съответства на формата"
|
||||
|
||||
#: ../src/ui/theme.c:1287
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -1190,7 +1134,7 @@ msgstr ""
|
||||
"скоби, напр. gtk:fg[NORMAL], където NORMAL е състоянието. Неуспех при "
|
||||
"анализира „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -1200,17 +1144,17 @@ msgstr ""
|
||||
"състоянието, напр. gtk:fg[NORMAL], където NORMAL е състоянието. Неуспех при "
|
||||
"анализа на „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1312
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Неуспех при анализа на състоянието „%s“ в цветовата спецификация"
|
||||
|
||||
#: ../src/ui/theme.c:1325
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Неуспех при анализа на цветови компонент „%s“ в цветовата спецификация"
|
||||
|
||||
#: ../src/ui/theme.c:1355
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -1219,17 +1163,17 @@ msgstr ""
|
||||
"Форматът на смесването е „blend/bg_color/fg_color/alpha“, „%s“ не се "
|
||||
"подчинява на формата"
|
||||
|
||||
#: ../src/ui/theme.c:1366
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Неуспех при анализира на алфа стойността „%s“ в смесения цвят"
|
||||
|
||||
#: ../src/ui/theme.c:1376
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "Алфа стойността „%s“ в смесения цвят не е между 0.0 и 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1423
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
@@ -1237,27 +1181,27 @@ msgstr ""
|
||||
"Форматът на навиването е „shade/base_color/factor“, „%s“ не съответства на "
|
||||
"формата"
|
||||
|
||||
#: ../src/ui/theme.c:1434
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Неуспех при анализа на фактора на навиването „%s“ в цвета за навиване"
|
||||
|
||||
#: ../src/ui/theme.c:1444
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Факторът на навиване „%s“ в цвета за сянката е отрицателен"
|
||||
|
||||
#: ../src/ui/theme.c:1473
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Неуспех при анализа на цвета „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1784
|
||||
#: ../src/ui/theme.c:1646
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Изразът за координати съдържа символа „%s“, който не е позволен"
|
||||
|
||||
#: ../src/ui/theme.c:1811
|
||||
#: ../src/ui/theme.c:1673
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@@ -1266,14 +1210,14 @@ msgstr ""
|
||||
"Изразът за координати съдържа числото с плаваща запетая „%s“, което не може "
|
||||
"да бъде анализирано"
|
||||
|
||||
#: ../src/ui/theme.c:1825
|
||||
#: ../src/ui/theme.c:1687
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
"Изразът за координати съдържа цялото число „%s“, което не може да бъде "
|
||||
"анализирано"
|
||||
|
||||
#: ../src/ui/theme.c:1947
|
||||
#: ../src/ui/theme.c:1809
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@@ -1282,24 +1226,24 @@ msgstr ""
|
||||
"Изразът за координати съдържа непознат оператор в началото на този текст: "
|
||||
"„%s“"
|
||||
|
||||
#: ../src/ui/theme.c:2004
|
||||
#: ../src/ui/theme.c:1866
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Изразът за координати бе празен или не бе разбран"
|
||||
|
||||
#: ../src/ui/theme.c:2115 ../src/ui/theme.c:2125 ../src/ui/theme.c:2159
|
||||
#: ../src/ui/theme.c:1977 ../src/ui/theme.c:1987 ../src/ui/theme.c:2021
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Изразът за координати дава деление на нула"
|
||||
|
||||
#: ../src/ui/theme.c:2167
|
||||
#: ../src/ui/theme.c:2029
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr ""
|
||||
"Изразът за координати използва оператора mod върху число с плаваща запетая"
|
||||
|
||||
#: ../src/ui/theme.c:2223
|
||||
#: ../src/ui/theme.c:2085
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
@@ -1307,18 +1251,18 @@ msgstr ""
|
||||
"Изразът за координати използва оператора „%s“ на място, където се очаква "
|
||||
"операнд"
|
||||
|
||||
#: ../src/ui/theme.c:2232
|
||||
#: ../src/ui/theme.c:2094
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr ""
|
||||
"Изразът за координати използва оператор на място, където се очаква операнд"
|
||||
|
||||
#: ../src/ui/theme.c:2240
|
||||
#: ../src/ui/theme.c:2102
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Изразът за координати завършва с оператор вместо с операнд"
|
||||
|
||||
#: ../src/ui/theme.c:2250
|
||||
#: ../src/ui/theme.c:2112
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -1327,38 +1271,38 @@ msgstr ""
|
||||
"Изразът за координати използва оператора „%c“ след „%c“ без да има операнд "
|
||||
"между тях"
|
||||
|
||||
#: ../src/ui/theme.c:2401 ../src/ui/theme.c:2446
|
||||
#: ../src/ui/theme.c:2263 ../src/ui/theme.c:2308
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr ""
|
||||
"Изразът за координати използва непознатата променлива или константа „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:2500
|
||||
#: ../src/ui/theme.c:2362
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Анализаторът на изрази за координати препълни буфера си."
|
||||
|
||||
#: ../src/ui/theme.c:2529
|
||||
#: ../src/ui/theme.c:2391
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "В израза за координати има затваряща скоба без съответна отваряща"
|
||||
|
||||
#: ../src/ui/theme.c:2593
|
||||
#: ../src/ui/theme.c:2455
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "В изразът за координати има отваряща скоба без съответна затваряща"
|
||||
|
||||
#: ../src/ui/theme.c:2604
|
||||
#: ../src/ui/theme.c:2466
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "Изразът за координати не съдържа нито оператори, нито операнди"
|
||||
|
||||
#: ../src/ui/theme.c:2816 ../src/ui/theme.c:2836 ../src/ui/theme.c:2856
|
||||
#: ../src/ui/theme.c:2676 ../src/ui/theme.c:2696 ../src/ui/theme.c:2716
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Темата съдържа израз, който даде грешка: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4527
|
||||
#: ../src/ui/theme.c:4410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1367,25 +1311,25 @@ msgstr ""
|
||||
"За този стил на рамката трябва да се укаже <button function=\"%s\" state=\"%s"
|
||||
"\" draw_ops=\"нещо си\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5060 ../src/ui/theme.c:5085
|
||||
#: ../src/ui/theme.c:4940 ../src/ui/theme.c:4965
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"Липсва <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"нещо си\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5133
|
||||
#: ../src/ui/theme.c:5013
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Неуспех при зареждането на темата „%s“: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5269 ../src/ui/theme.c:5276 ../src/ui/theme.c:5283
|
||||
#: ../src/ui/theme.c:5290 ../src/ui/theme.c:5297
|
||||
#: ../src/ui/theme.c:5149 ../src/ui/theme.c:5156 ../src/ui/theme.c:5163
|
||||
#: ../src/ui/theme.c:5170 ../src/ui/theme.c:5177
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Не е даден елементът <%s> за темата „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:5305
|
||||
#: ../src/ui/theme.c:5185
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1394,7 +1338,7 @@ msgstr ""
|
||||
"Няма указан стил на рамката за „%s“ прозорците в тема „%s“. Добавете елемент "
|
||||
"<window type=\"%s\" style_set=\"нещо си\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5744 ../src/ui/theme.c:5806 ../src/ui/theme.c:5869
|
||||
#: ../src/ui/theme.c:5635 ../src/ui/theme.c:5697 ../src/ui/theme.c:5760
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@@ -1402,7 +1346,7 @@ msgstr ""
|
||||
"Константите определени от потребителя трябва да започват с главна буква, а "
|
||||
"„%s“ не започва така"
|
||||
|
||||
#: ../src/ui/theme.c:5752 ../src/ui/theme.c:5814 ../src/ui/theme.c:5877
|
||||
#: ../src/ui/theme.c:5643 ../src/ui/theme.c:5705 ../src/ui/theme.c:5768
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Константата „%s“ вече е дефинирана"
|
||||
@@ -1851,88 +1795,88 @@ msgstr "Това е примерно съобщение в примерен ди
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "Фалшив обект на менюто %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "Прозорец само с граници"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "Лента"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "Нормален прозорец на програма"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "Диалогов прозорец"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "Модален диалогов прозорец"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "Палитра на инструментите"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "Откъсване на менюто"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "Граница"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Прилепени модални диалогови прозорци"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Тест за подредбата на бутоните %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g милисекунди за да изрисува една прозоречна рамка"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Употреба: metacity-theme-viewer [ИМЕНАТЕМАТА]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Грешка при зареждането на темата: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Темата „%s“ е заредена за %g секунди\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Нормален шрифт на заглавието"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "Малък шрифт на заглавието"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "Голям шрифт на заглавието"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "Изглед на бутоните"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "Статистика"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Тук се поставя заглавието на прозорците"
|
||||
|
||||
|
||||
263
po/gl.po
263
po/gl.po
@@ -14,8 +14,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gl\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-16 19:26+0200\n"
|
||||
"PO-Revision-Date: 2011-08-16 19:26+0200\n"
|
||||
"POT-Creation-Date: 2011-07-04 22:23+0200\n"
|
||||
"PO-Revision-Date: 2011-07-04 22:23+0200\n"
|
||||
"Last-Translator: Fran Diéguez <frandieguez@gnome.org>\n"
|
||||
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
|
||||
"Language: gl\n"
|
||||
@@ -27,7 +27,7 @@ msgstr ""
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:487
|
||||
#: ../src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@@ -407,7 +407,7 @@ msgstr ""
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -418,12 +418,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "Non se definiu ningunha orde %d.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "Non se definiu ningunha orde de terminal.\n"
|
||||
@@ -499,36 +499,36 @@ msgstr "Lista de separadas por comas dos complementos do compositor"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:550 ../src/core/prefs.c:711
|
||||
#: ../src/core/prefs.c:543 ../src/core/prefs.c:704
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "A chave GConf «%s» está configurada cun valor non válido\n"
|
||||
|
||||
#: ../src/core/prefs.c:637 ../src/core/prefs.c:880
|
||||
#: ../src/core/prefs.c:630 ../src/core/prefs.c:873
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "%d almacenado na chave GConf %s está fóra do intervalo %d a %d\n"
|
||||
|
||||
#: ../src/core/prefs.c:681 ../src/core/prefs.c:758 ../src/core/prefs.c:806
|
||||
#: ../src/core/prefs.c:870 ../src/core/prefs.c:1331 ../src/core/prefs.c:1347
|
||||
#: ../src/core/prefs.c:1364 ../src/core/prefs.c:1380
|
||||
#: ../src/core/prefs.c:674 ../src/core/prefs.c:751 ../src/core/prefs.c:799
|
||||
#: ../src/core/prefs.c:863 ../src/core/prefs.c:1324 ../src/core/prefs.c:1340
|
||||
#: ../src/core/prefs.c:1357 ../src/core/prefs.c:1373
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "A chave GConf «%s» está configurada cun tipo non válido\n"
|
||||
|
||||
#: ../src/core/prefs.c:1210
|
||||
#: ../src/core/prefs.c:1203
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr ""
|
||||
"A chave de GConf %s xa está en uso e non é posíbel usala para sobrescribir "
|
||||
"%s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1269
|
||||
#: ../src/core/prefs.c:1262
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "Non é posíbel sobrescribir a chave de GConf, non se atopou %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1454
|
||||
#: ../src/core/prefs.c:1447
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -536,14 +536,14 @@ msgstr ""
|
||||
"Desactiváronse os arranxos para aplicativos danados. Pode que algúns "
|
||||
"aplicativos non se comporten correctamente.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1531
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr ""
|
||||
"Non foi posíbel analizar a descrición do tipo de letra «%s» da chave GConf "
|
||||
"%s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1593
|
||||
#: ../src/core/prefs.c:1586
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -552,17 +552,17 @@ msgstr ""
|
||||
"«%s» atopados na base de datos de configuración non é un valor válido para o "
|
||||
"modificador do botón do rato\n"
|
||||
|
||||
#: ../src/core/prefs.c:2028
|
||||
#: ../src/core/prefs.c:2016
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "Erro ao definir o número de espazos de traballo en %d: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2212 ../src/core/prefs.c:2714
|
||||
#: ../src/core/prefs.c:2200 ../src/core/prefs.c:2702
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Espazo de traballo %d"
|
||||
|
||||
#: ../src/core/prefs.c:2244 ../src/core/prefs.c:2422
|
||||
#: ../src/core/prefs.c:2232 ../src/core/prefs.c:2410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -571,18 +571,18 @@ msgstr ""
|
||||
"«%s» atopados na base de datos de configuración non é un valor válido para a "
|
||||
"combinación de teclas «%s»\n"
|
||||
|
||||
#: ../src/core/prefs.c:2795
|
||||
#: ../src/core/prefs.c:2783
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "Erro ao definir o nome do espazo de traballo %d como «%s»: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3009
|
||||
#: ../src/core/prefs.c:2997
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr ""
|
||||
"Produciuse un erro ao estabelecer o estado da vida das xanelas ocultas %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3044
|
||||
#: ../src/core/prefs.c:3032
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr ""
|
||||
@@ -719,7 +719,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6959
|
||||
#: ../src/core/window.c:6886
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -735,7 +735,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7622
|
||||
#: ../src/core/window.c:7549
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@@ -755,17 +755,12 @@ msgstr "O aplicativo configurou un _NET_WM_PID %lu falso\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (en %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1484
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr ""
|
||||
"WM_TRANSIENT_FOR non válido para a xanela 0x%lx especificada para %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR xanela 0x%lx para %s crearía un bucle.\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -815,27 +810,15 @@ msgstr ""
|
||||
"todos os monitores ou só para o monitor principal."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:4
|
||||
msgid "Draggable border width"
|
||||
msgstr "Anchura arrastrábel do bordo"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "Xanelas agochadas en vivo"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr ""
|
||||
"Modificador que se vai usar para as accións modificadas de xestión de xanela"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
"A cantidade total de bordo arrastrábel. Se os bordos visíbeis do tema non "
|
||||
"son suficientes, engadiranse bordos invisíbeis para satisfacer este valor."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
@@ -847,7 +830,7 @@ msgstr ""
|
||||
"nun PC é a «Tecla Windows». Espérase que este enlace sexa configurado ao "
|
||||
"valor predeterminado ou á cadena baleira."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:9
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@@ -857,7 +840,7 @@ msgstr ""
|
||||
"diálogos modais aparecerán anexados á barra de título da xanela pai e "
|
||||
"moveranse de forma conxunta á xanela pai."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:10
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Espazos de traballo só no principal"
|
||||
|
||||
@@ -866,47 +849,47 @@ msgstr "Espazos de traballo só no principal"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Uso: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1123
|
||||
#: ../src/ui/frames.c:1280
|
||||
msgid "Close Window"
|
||||
msgstr "Pechar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1126
|
||||
#: ../src/ui/frames.c:1283
|
||||
msgid "Window Menu"
|
||||
msgstr "Menú da xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1129
|
||||
#: ../src/ui/frames.c:1286
|
||||
msgid "Minimize Window"
|
||||
msgstr "Minimizar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1132
|
||||
#: ../src/ui/frames.c:1289
|
||||
msgid "Maximize Window"
|
||||
msgstr "Maximizar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1135
|
||||
#: ../src/ui/frames.c:1292
|
||||
msgid "Restore Window"
|
||||
msgstr "Restaurar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1138
|
||||
#: ../src/ui/frames.c:1295
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Pregar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1141
|
||||
#: ../src/ui/frames.c:1298
|
||||
msgid "Unroll Window"
|
||||
msgstr "Despregar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1144
|
||||
#: ../src/ui/frames.c:1301
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Manter a xanela na parte superior"
|
||||
|
||||
#: ../src/ui/frames.c:1147
|
||||
#: ../src/ui/frames.c:1304
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Quitar a xanela da parte superior"
|
||||
|
||||
#: ../src/ui/frames.c:1150
|
||||
#: ../src/ui/frames.c:1307
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Sempre no espazo de traballo visíbel"
|
||||
|
||||
#: ../src/ui/frames.c:1153
|
||||
#: ../src/ui/frames.c:1310
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Pór a xanela nun só espazo de traballo"
|
||||
|
||||
@@ -1109,76 +1092,48 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:253
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "superior"
|
||||
|
||||
#: ../src/ui/theme.c:255
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "inferior"
|
||||
|
||||
#: ../src/ui/theme.c:257
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "esquerda"
|
||||
|
||||
#: ../src/ui/theme.c:259
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "dereita"
|
||||
|
||||
#: ../src/ui/theme.c:286
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "a xeometría do marco non especifica a dimensión «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:305
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "a xeometría do marco non especifica a dimensión «%s» para o bordo «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:342
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "A proporción de aspecto do botón %g non é razoábel"
|
||||
|
||||
#: ../src/ui/theme.c:354
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "A xeometría do marco non especifica o tamaño dos botóns"
|
||||
|
||||
#: ../src/ui/theme.c:1060
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Os degradados deben ter polo menos dúas cores"
|
||||
|
||||
#: ../src/ui/theme.c:1212
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
"A especificación de cor do GTK debe ter un nome de cor e nome alternativo "
|
||||
"entre parénteses, por exemplo: gtk:custom(foo,bar); non foi posíbel analizar "
|
||||
"«%s»."
|
||||
|
||||
#: ../src/ui/theme.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
"O carácter «%c» non é válido no parámetro «color_name» de «gtk:custom», só "
|
||||
"«A-Za-z0-9» son válidos"
|
||||
|
||||
#: ../src/ui/theme.c:1242
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr ""
|
||||
"O formato de «gtk:custom» é «gtk:custom(nome_de_cor,nome_alternativo», «%s» "
|
||||
"non respecta o formato"
|
||||
|
||||
#: ../src/ui/theme.c:1287
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -1187,7 +1142,7 @@ msgstr ""
|
||||
"A especificación de cor do GTK debe ter o estado entre parénteses, exemplo. "
|
||||
"gtk:fg[NORMAL] onde NORMAL é o estado; non foi posíbel analizar «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -1197,17 +1152,17 @@ msgstr ""
|
||||
"estado, exemplo. gtk:fg[NORMAL] onde NORMAL é o estado; non foi posíbel "
|
||||
"analizar «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1312
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Non se entende o estado «%s» na especificación da cor"
|
||||
|
||||
#: ../src/ui/theme.c:1325
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Non se entende o compoñente de cor «%s» na especificación da cor"
|
||||
|
||||
#: ../src/ui/theme.c:1355
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -1216,17 +1171,17 @@ msgstr ""
|
||||
"O formato de blend é «blend/bg_color/fg_color/alpha», «%s»non coincide co "
|
||||
"formato"
|
||||
|
||||
#: ../src/ui/theme.c:1366
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Non foi posíbel analizar o valor alfa «%s» na cor mesturada"
|
||||
|
||||
#: ../src/ui/theme.c:1376
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "O valor alfa «%s» na cor mesturada non está entre 0.0 e 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1423
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
@@ -1234,28 +1189,33 @@ msgstr ""
|
||||
"O formato de sombreado é \"shade/base_color/factor\", «%s» non coincide co "
|
||||
"formato"
|
||||
|
||||
#: ../src/ui/theme.c:1434
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Non foi posíbel o factor de sombreado «%s» na cor sombreada"
|
||||
|
||||
#: ../src/ui/theme.c:1444
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "O factor de sombreado «%s» na cor sombreada é negativo"
|
||||
|
||||
#: ../src/ui/theme.c:1473
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Non foi posíbel analizar a cor «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1784
|
||||
#: ../src/ui/theme.c:1481
|
||||
#, c-format
|
||||
msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
msgstr "Produciuse un fallo ao obter a cor %s[%s] desde o tema de GTK+.\n"
|
||||
|
||||
#: ../src/ui/theme.c:1713
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas contén un carácter «%s» que non está permitido"
|
||||
|
||||
#: ../src/ui/theme.c:1811
|
||||
#: ../src/ui/theme.c:1740
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@@ -1264,14 +1224,14 @@ msgstr ""
|
||||
"A expresión de coordenadas contén un número de coma flotante «%s» que non "
|
||||
"foi posíbel analizar"
|
||||
|
||||
#: ../src/ui/theme.c:1825
|
||||
#: ../src/ui/theme.c:1754
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas contén un enteiro «%s» que non foi posíbel "
|
||||
"analizar"
|
||||
|
||||
#: ../src/ui/theme.c:1947
|
||||
#: ../src/ui/theme.c:1876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@@ -1280,17 +1240,17 @@ msgstr ""
|
||||
"A expresión de coordenadas contén un operador non válido ao inicio do seu "
|
||||
"texto: «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:2004
|
||||
#: ../src/ui/theme.c:1933
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "A expresión de coordenadas está baleira ou non se entendeu"
|
||||
|
||||
#: ../src/ui/theme.c:2115 ../src/ui/theme.c:2125 ../src/ui/theme.c:2159
|
||||
#: ../src/ui/theme.c:2044 ../src/ui/theme.c:2054 ../src/ui/theme.c:2088
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "A expresión de coordenadas resultou nun erro de división por cero"
|
||||
|
||||
#: ../src/ui/theme.c:2167
|
||||
#: ../src/ui/theme.c:2096
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
@@ -1298,25 +1258,25 @@ msgstr ""
|
||||
"A expresión de coordenadas tentou usar un operador mod cun número de coma "
|
||||
"flotante"
|
||||
|
||||
#: ../src/ui/theme.c:2223
|
||||
#: ../src/ui/theme.c:2152
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten un operador «%s» onde se esperaba un operando"
|
||||
|
||||
#: ../src/ui/theme.c:2232
|
||||
#: ../src/ui/theme.c:2161
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten un operando onde se esperaba un operador"
|
||||
|
||||
#: ../src/ui/theme.c:2240
|
||||
#: ../src/ui/theme.c:2169
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "A expresión de coordenadas remata cun operador en vez dun operando"
|
||||
|
||||
#: ../src/ui/theme.c:2250
|
||||
#: ../src/ui/theme.c:2179
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -1325,42 +1285,42 @@ msgstr ""
|
||||
"A expresión de coordenadas ten un operador \"%c\" seguido do operador \"%c\" "
|
||||
"sen un operando entre eles"
|
||||
|
||||
#: ../src/ui/theme.c:2401 ../src/ui/theme.c:2446
|
||||
#: ../src/ui/theme.c:2330 ../src/ui/theme.c:2375
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten unha variábel ou constante descoñecida «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:2500
|
||||
#: ../src/ui/theme.c:2429
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "O analizador da expresión de coordenadas desbordou o seu búfer."
|
||||
|
||||
#: ../src/ui/theme.c:2529
|
||||
#: ../src/ui/theme.c:2458
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten unha paréntese pechada sen unha paréntese "
|
||||
"aberta"
|
||||
|
||||
#: ../src/ui/theme.c:2593
|
||||
#: ../src/ui/theme.c:2522
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten unha paréntese aberta sen unha paréntese "
|
||||
"pechada"
|
||||
|
||||
#: ../src/ui/theme.c:2604
|
||||
#: ../src/ui/theme.c:2533
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "A expresión de coordenadas non parece ter nin operadores nin operandos"
|
||||
|
||||
#: ../src/ui/theme.c:2816 ../src/ui/theme.c:2836 ../src/ui/theme.c:2856
|
||||
#: ../src/ui/theme.c:2745 ../src/ui/theme.c:2765 ../src/ui/theme.c:2785
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "O tema contiña unha expresión que resultou ser un erro: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4527
|
||||
#: ../src/ui/theme.c:4482
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1369,24 +1329,24 @@ msgstr ""
|
||||
"<button function=«%s» state=«%s» draw_ops=\"whatever\"/> débese especificar "
|
||||
"para este estilo de marco"
|
||||
|
||||
#: ../src/ui/theme.c:5060 ../src/ui/theme.c:5085
|
||||
#: ../src/ui/theme.c:5012 ../src/ui/theme.c:5037
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "Falta <frame state=«%s» resize=«%s» focus=«%s» style=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5133
|
||||
#: ../src/ui/theme.c:5085
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Produciuse un fallo ao cargar o tema «%s»: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5269 ../src/ui/theme.c:5276 ../src/ui/theme.c:5283
|
||||
#: ../src/ui/theme.c:5290 ../src/ui/theme.c:5297
|
||||
#: ../src/ui/theme.c:5221 ../src/ui/theme.c:5228 ../src/ui/theme.c:5235
|
||||
#: ../src/ui/theme.c:5242 ../src/ui/theme.c:5249
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Non se configurou <%s> para o tema «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:5305
|
||||
#: ../src/ui/theme.c:5257
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1395,7 +1355,7 @@ msgstr ""
|
||||
"Non hai un estilo de marco para o tipo de xanela «%s» no tema «%s», engada "
|
||||
"un elemento <window type=«%s» style_set=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5744 ../src/ui/theme.c:5806 ../src/ui/theme.c:5869
|
||||
#: ../src/ui/theme.c:5707 ../src/ui/theme.c:5769 ../src/ui/theme.c:5832
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@@ -1403,7 +1363,7 @@ msgstr ""
|
||||
"As constantes definidas polo usuario deben comezar cunha letra maiúscula; "
|
||||
"«%s» non o fai"
|
||||
|
||||
#: ../src/ui/theme.c:5752 ../src/ui/theme.c:5814 ../src/ui/theme.c:5877
|
||||
#: ../src/ui/theme.c:5715 ../src/ui/theme.c:5777 ../src/ui/theme.c:5840
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "A constante «%s» xa foi definida"
|
||||
@@ -1860,88 +1820,88 @@ msgstr "Esta é unha mensaxe de mostra no diálogo de mostra"
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "Elemento de menú falso %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "Xanela só con bordo"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "Barra"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "Xanela de aplicativo normal"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "Caixa de diálogo"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "Caixa de diálogo modal"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "Paleta de utilidades"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "Menú desprazado"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "Bordo"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Diálogo modal adxunto"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Proba de disposición de botóns %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g milisegundos para debuxar un marco de xanela"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Uso: metacity-theme-viewer [NOMETEMA]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Erro ao cargar o tema: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Cargouse o tema «%s» en %g segundos\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Tipo de letra de título normal"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "Tipo de letra de título pequena"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "Tipo de letra de título grande"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "Disposición dos botóns"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "Banco de probas"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "O título da xanela vai aquí"
|
||||
|
||||
@@ -1997,9 +1957,6 @@ msgstr ""
|
||||
"%d expresións de coordenadas interpretadas en %g segundos (%g segundos de "
|
||||
"media)\n"
|
||||
|
||||
#~ msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
#~ msgstr "Produciuse un fallo ao obter a cor %s[%s] desde o tema de GTK+.\n"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Don't make fullscreen windows that are maximized and have no decorations"
|
||||
#~ msgstr ""
|
||||
|
||||
292
po/he.po
292
po/he.po
@@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD.he\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-18 23:35+0300\n"
|
||||
"PO-Revision-Date: 2011-08-18 23:35+0200\n"
|
||||
"POT-Creation-Date: 2011-07-01 19:31+0300\n"
|
||||
"PO-Revision-Date: 2011-07-01 19:33+0200\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <he@li.org>\n"
|
||||
"Language: he\n"
|
||||
@@ -21,7 +21,7 @@ msgstr ""
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:487
|
||||
#: ../src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@@ -389,7 +389,7 @@ msgstr "תוכנית אחרת כבר משתמשת במקש %s עם המקש %x
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -400,12 +400,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "אף פקודה %d לא הוגדרה.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "אף פקודת מסוף לא הוגדרה.\n"
|
||||
@@ -479,34 +479,34 @@ msgstr "Comma-separated list of compositor plugins"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:550 ../src/core/prefs.c:711
|
||||
#: ../src/core/prefs.c:543 ../src/core/prefs.c:704
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "GConf key '%s' is set to an invalid value\n"
|
||||
|
||||
#: ../src/core/prefs.c:637 ../src/core/prefs.c:880
|
||||
#: ../src/core/prefs.c:630 ../src/core/prefs.c:873
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
|
||||
#: ../src/core/prefs.c:681 ../src/core/prefs.c:758 ../src/core/prefs.c:806
|
||||
#: ../src/core/prefs.c:870 ../src/core/prefs.c:1331 ../src/core/prefs.c:1347
|
||||
#: ../src/core/prefs.c:1364 ../src/core/prefs.c:1380
|
||||
#: ../src/core/prefs.c:674 ../src/core/prefs.c:751 ../src/core/prefs.c:799
|
||||
#: ../src/core/prefs.c:863 ../src/core/prefs.c:1324 ../src/core/prefs.c:1340
|
||||
#: ../src/core/prefs.c:1357 ../src/core/prefs.c:1373
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "GConf key \"%s\" is set to an invalid type\n"
|
||||
|
||||
#: ../src/core/prefs.c:1210
|
||||
#: ../src/core/prefs.c:1203
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr "מפתח ה־GConf %s כבר נמצא בשימוש ולא ניתן להשתמש בו לדריסת %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1269
|
||||
#: ../src/core/prefs.c:1262
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "לא ניתן לדרוס את מפתח ה־ GConf, %s לא נמצא\n"
|
||||
|
||||
#: ../src/core/prefs.c:1454
|
||||
#: ../src/core/prefs.c:1447
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -514,12 +514,12 @@ msgstr ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1531
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1593
|
||||
#: ../src/core/prefs.c:1586
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -528,17 +528,17 @@ msgstr ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
"modifier\n"
|
||||
|
||||
#: ../src/core/prefs.c:2028
|
||||
#: ../src/core/prefs.c:2016
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "Error setting number of workspaces to %d: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2212 ../src/core/prefs.c:2714
|
||||
#: ../src/core/prefs.c:2200 ../src/core/prefs.c:2702
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "סביבת עבודה %d"
|
||||
|
||||
#: ../src/core/prefs.c:2244 ../src/core/prefs.c:2422
|
||||
#: ../src/core/prefs.c:2232 ../src/core/prefs.c:2410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -547,17 +547,17 @@ msgstr ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
"\"%s\"\n"
|
||||
|
||||
#: ../src/core/prefs.c:2795
|
||||
#: ../src/core/prefs.c:2783
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3009
|
||||
#: ../src/core/prefs.c:2997
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr "שגיאה בהגדרת מצב מצב החלונות החיים המוסתרים: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3044
|
||||
#: ../src/core/prefs.c:3032
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "שגיאה בהגדרת מצב ללא לשוניות מוקפצות: %s\n"
|
||||
@@ -691,7 +691,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6959
|
||||
#: ../src/core/window.c:6886
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -707,7 +707,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7622
|
||||
#: ../src/core/window.c:7549
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@@ -726,16 +726,11 @@ msgstr "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (מעל %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1484
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -784,48 +779,36 @@ msgstr ""
|
||||
"monitors or only for windows on the primary monitor."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:4
|
||||
msgid "Draggable border width"
|
||||
msgstr "Draggable border width"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "Live Hidden Windows"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr "Modifier to use for extended window management operations"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
|
||||
"default or set to the empty string."
|
||||
msgstr ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
|
||||
"default or set to the empty string."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
"the parent window."
|
||||
msgstr ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
"the parent window."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
|
||||
"default or set to the empty string."
|
||||
msgstr ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
|
||||
"default or set to the empty string."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:9
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
"the parent window."
|
||||
msgstr ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
"the parent window."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:10
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Workspaces only on primary"
|
||||
|
||||
@@ -834,47 +817,47 @@ msgstr "Workspaces only on primary"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "שימוש: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1123
|
||||
#: ../src/ui/frames.c:1280
|
||||
msgid "Close Window"
|
||||
msgstr "סגור חלון"
|
||||
|
||||
#: ../src/ui/frames.c:1126
|
||||
#: ../src/ui/frames.c:1283
|
||||
msgid "Window Menu"
|
||||
msgstr "תפריט חלון"
|
||||
|
||||
#: ../src/ui/frames.c:1129
|
||||
#: ../src/ui/frames.c:1286
|
||||
msgid "Minimize Window"
|
||||
msgstr "מזער חלון"
|
||||
|
||||
#: ../src/ui/frames.c:1132
|
||||
#: ../src/ui/frames.c:1289
|
||||
msgid "Maximize Window"
|
||||
msgstr "הגדל חלון"
|
||||
|
||||
#: ../src/ui/frames.c:1135
|
||||
#: ../src/ui/frames.c:1292
|
||||
msgid "Restore Window"
|
||||
msgstr "שחזר חלון"
|
||||
|
||||
#: ../src/ui/frames.c:1138
|
||||
#: ../src/ui/frames.c:1295
|
||||
msgid "Roll Up Window"
|
||||
msgstr "גלול חלון מעלה"
|
||||
|
||||
#: ../src/ui/frames.c:1141
|
||||
#: ../src/ui/frames.c:1298
|
||||
msgid "Unroll Window"
|
||||
msgstr "בטל גלילה"
|
||||
|
||||
#: ../src/ui/frames.c:1144
|
||||
#: ../src/ui/frames.c:1301
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "שמור על החלון גלוי"
|
||||
|
||||
#: ../src/ui/frames.c:1147
|
||||
#: ../src/ui/frames.c:1304
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "בטל שמירת החלון גלוי"
|
||||
|
||||
#: ../src/ui/frames.c:1150
|
||||
#: ../src/ui/frames.c:1307
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "הראה בכל סביבות העבודה"
|
||||
|
||||
#: ../src/ui/frames.c:1153
|
||||
#: ../src/ui/frames.c:1310
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "הראה את החלון על סביבת עבודה אחת בלבד"
|
||||
|
||||
@@ -1077,75 +1060,48 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:253
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "top"
|
||||
|
||||
#: ../src/ui/theme.c:255
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "bottom"
|
||||
|
||||
#: ../src/ui/theme.c:257
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "left"
|
||||
|
||||
#: ../src/ui/theme.c:259
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "right"
|
||||
|
||||
#: ../src/ui/theme.c:286
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "frame geometry does not specify \"%s\" dimension"
|
||||
|
||||
#: ../src/ui/theme.c:305
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:342
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Button aspect ratio %g is not reasonable"
|
||||
|
||||
#: ../src/ui/theme.c:354
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Frame geometry does not specify size of buttons"
|
||||
|
||||
#: ../src/ui/theme.c:1060
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Gradients should have at least two colors"
|
||||
|
||||
#: ../src/ui/theme.c:1212
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
|
||||
#: ../src/ui/theme.c:1242
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
|
||||
#: ../src/ui/theme.c:1287
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -1154,7 +1110,7 @@ msgstr ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
"where NORMAL is the state; could not parse \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -1163,17 +1119,17 @@ msgstr ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
"fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1312
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Did not understand state \"%s\" in color specification"
|
||||
|
||||
#: ../src/ui/theme.c:1325
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Did not understand color component \"%s\" in color specification"
|
||||
|
||||
#: ../src/ui/theme.c:1355
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -1182,44 +1138,49 @@ msgstr ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
"format"
|
||||
|
||||
#: ../src/ui/theme.c:1366
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Could not parse alpha value \"%s\" in blended color"
|
||||
|
||||
#: ../src/ui/theme.c:1376
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1423
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
|
||||
#: ../src/ui/theme.c:1434
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Could not parse shade factor \"%s\" in shaded color"
|
||||
|
||||
#: ../src/ui/theme.c:1444
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Shade factor \"%s\" in shaded color is negative"
|
||||
|
||||
#: ../src/ui/theme.c:1473
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Could not parse color \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1784
|
||||
#: ../src/ui/theme.c:1481
|
||||
#, c-format
|
||||
msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
msgstr "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
|
||||
#: ../src/ui/theme.c:1713
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Coordinate expression contains character '%s' which is not allowed"
|
||||
|
||||
#: ../src/ui/theme.c:1811
|
||||
#: ../src/ui/theme.c:1740
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@@ -1228,12 +1189,12 @@ msgstr ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
|
||||
#: ../src/ui/theme.c:1825
|
||||
#: ../src/ui/theme.c:1754
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
|
||||
#: ../src/ui/theme.c:1947
|
||||
#: ../src/ui/theme.c:1876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@@ -1242,41 +1203,41 @@ msgstr ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2004
|
||||
#: ../src/ui/theme.c:1933
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Coordinate expression was empty or not understood"
|
||||
|
||||
#: ../src/ui/theme.c:2115 ../src/ui/theme.c:2125 ../src/ui/theme.c:2159
|
||||
#: ../src/ui/theme.c:2044 ../src/ui/theme.c:2054 ../src/ui/theme.c:2088
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Coordinate expression results in division by zero"
|
||||
|
||||
#: ../src/ui/theme.c:2167
|
||||
#: ../src/ui/theme.c:2096
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
|
||||
#: ../src/ui/theme.c:2223
|
||||
#: ../src/ui/theme.c:2152
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
|
||||
#: ../src/ui/theme.c:2232
|
||||
#: ../src/ui/theme.c:2161
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Coordinate expression had an operand where an operator was expected"
|
||||
|
||||
#: ../src/ui/theme.c:2240
|
||||
#: ../src/ui/theme.c:2169
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Coordinate expression ended with an operator instead of an operand"
|
||||
|
||||
#: ../src/ui/theme.c:2250
|
||||
#: ../src/ui/theme.c:2179
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -1285,38 +1246,38 @@ msgstr ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
"operand in between"
|
||||
|
||||
#: ../src/ui/theme.c:2401 ../src/ui/theme.c:2446
|
||||
#: ../src/ui/theme.c:2330 ../src/ui/theme.c:2375
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Coordinate expression had unknown variable or constant \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2500
|
||||
#: ../src/ui/theme.c:2429
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Coordinate expression parser overflowed its buffer."
|
||||
|
||||
#: ../src/ui/theme.c:2529
|
||||
#: ../src/ui/theme.c:2458
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
|
||||
#: ../src/ui/theme.c:2593
|
||||
#: ../src/ui/theme.c:2522
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
"Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
|
||||
#: ../src/ui/theme.c:2604
|
||||
#: ../src/ui/theme.c:2533
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "Coordinate expression doesn't seem to have any operators or operands"
|
||||
|
||||
#: ../src/ui/theme.c:2816 ../src/ui/theme.c:2836 ../src/ui/theme.c:2856
|
||||
#: ../src/ui/theme.c:2745 ../src/ui/theme.c:2765 ../src/ui/theme.c:2785
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Theme contained an expression that resulted in an error: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4527
|
||||
#: ../src/ui/theme.c:4482
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1325,25 +1286,25 @@ msgstr ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
"specified for this frame style"
|
||||
|
||||
#: ../src/ui/theme.c:5060 ../src/ui/theme.c:5085
|
||||
#: ../src/ui/theme.c:5012 ../src/ui/theme.c:5037
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5133
|
||||
#: ../src/ui/theme.c:5085
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Failed to load theme \"%s\": %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5269 ../src/ui/theme.c:5276 ../src/ui/theme.c:5283
|
||||
#: ../src/ui/theme.c:5290 ../src/ui/theme.c:5297
|
||||
#: ../src/ui/theme.c:5221 ../src/ui/theme.c:5228 ../src/ui/theme.c:5235
|
||||
#: ../src/ui/theme.c:5242 ../src/ui/theme.c:5249
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "No <%s> set for theme \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:5305
|
||||
#: ../src/ui/theme.c:5257
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1352,14 +1313,14 @@ msgstr ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
"type=\"%s\" style_set=\"whatever\"/> element"
|
||||
|
||||
#: ../src/ui/theme.c:5744 ../src/ui/theme.c:5806 ../src/ui/theme.c:5869
|
||||
#: ../src/ui/theme.c:5707 ../src/ui/theme.c:5769 ../src/ui/theme.c:5832
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
|
||||
#: ../src/ui/theme.c:5752 ../src/ui/theme.c:5814 ../src/ui/theme.c:5877
|
||||
#: ../src/ui/theme.c:5715 ../src/ui/theme.c:5777 ../src/ui/theme.c:5840
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Constant \"%s\" has already been defined"
|
||||
@@ -1807,88 +1768,88 @@ msgstr "This is a sample message in a sample dialog"
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "Fake menu item %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "Border-only window"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "Bar"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "Normal Application Window"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "Dialog Box"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "Modal Dialog Box"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "Utility Palette"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "Torn-off Menu"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "Border"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Attached Modal Dialog"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Button layout test %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g milliseconds to draw one window frame"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Error loading theme: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Loaded theme \"%s\" in %g seconds\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Normal Title Font"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "Small Title Font"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "Large Title Font"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "Button Layouts"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "Benchmark"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Window Title Goes Here"
|
||||
|
||||
@@ -1940,9 +1901,6 @@ msgstr "y value was %d, %d was expected"
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
|
||||
#~ msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
#~ msgstr "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
|
||||
#~ msgid "Turn compositing on"
|
||||
#~ msgstr "Turn compositing on"
|
||||
|
||||
|
||||
264
po/ja.po
264
po/ja.po
@@ -10,8 +10,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-14 21:24+0900\n"
|
||||
"PO-Revision-Date: 2011-08-14 21:23+0900\n"
|
||||
"POT-Creation-Date: 2011-07-02 09:59+0900\n"
|
||||
"PO-Revision-Date: 2011-07-01 07:18+0900\n"
|
||||
"Last-Translator: Takeshi AIHANA <takeshi.aihana@gmail.com>\n"
|
||||
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
|
||||
"Language: ja\n"
|
||||
@@ -21,7 +21,7 @@ msgstr ""
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:487
|
||||
#: ../src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@@ -400,7 +400,7 @@ msgstr ""
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -411,12 +411,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "コマンド %d は定義されていません。\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "端末を起動するコマンドが定義されていません。\n"
|
||||
@@ -494,34 +494,34 @@ msgstr "画像の合成プラグインを指定する (複数ある時はカン
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:550 ../src/core/prefs.c:711
|
||||
#: ../src/core/prefs.c:543 ../src/core/prefs.c:704
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "GConf の '%s' キーには無効な値が格納されています\n"
|
||||
|
||||
#: ../src/core/prefs.c:637 ../src/core/prefs.c:880
|
||||
#: ../src/core/prefs.c:630 ../src/core/prefs.c:873
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "GConf の %2$s キーの値 %1$d は %3$d〜%4$d の範囲内にありません\n"
|
||||
|
||||
#: ../src/core/prefs.c:681 ../src/core/prefs.c:758 ../src/core/prefs.c:806
|
||||
#: ../src/core/prefs.c:870 ../src/core/prefs.c:1331 ../src/core/prefs.c:1347
|
||||
#: ../src/core/prefs.c:1364 ../src/core/prefs.c:1380
|
||||
#: ../src/core/prefs.c:674 ../src/core/prefs.c:751 ../src/core/prefs.c:799
|
||||
#: ../src/core/prefs.c:863 ../src/core/prefs.c:1324 ../src/core/prefs.c:1340
|
||||
#: ../src/core/prefs.c:1357 ../src/core/prefs.c:1373
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "GConf の \"%s\" キーには無効な型が格納されています\n"
|
||||
|
||||
#: ../src/core/prefs.c:1210
|
||||
#: ../src/core/prefs.c:1203
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr "GConf キーの %s は既に使用中なので %s をオーバーライドできません\n"
|
||||
|
||||
#: ../src/core/prefs.c:1269
|
||||
#: ../src/core/prefs.c:1262
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "GConf キーをオーバーライドできません (%s が見つかりませんでした)\n"
|
||||
|
||||
#: ../src/core/prefs.c:1454
|
||||
#: ../src/core/prefs.c:1447
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -529,12 +529,12 @@ msgstr ""
|
||||
"仕様に準拠していないアプリケーションに対する次善策は無効になっています.一部"
|
||||
"のアプリケーションは正常に動作しない可能性があります\n"
|
||||
|
||||
#: ../src/core/prefs.c:1531
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "GConf の %2$s キーからフォント名 \"%1$s\" を解析できませんでした\n"
|
||||
|
||||
#: ../src/core/prefs.c:1593
|
||||
#: ../src/core/prefs.c:1586
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -542,17 +542,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"GConf の \"%s\" はマウス・ボタンの修飾キーとして妥当な値ではありません\n"
|
||||
|
||||
#: ../src/core/prefs.c:2028
|
||||
#: ../src/core/prefs.c:2016
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "ワークスペース数を %d に設定中にエラーが発生しました: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2212 ../src/core/prefs.c:2714
|
||||
#: ../src/core/prefs.c:2200 ../src/core/prefs.c:2702
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "ワークスペース %d"
|
||||
|
||||
#: ../src/core/prefs.c:2244 ../src/core/prefs.c:2422
|
||||
#: ../src/core/prefs.c:2232 ../src/core/prefs.c:2410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -561,19 +561,19 @@ msgstr ""
|
||||
"設定データベースで発見した \"%s\" はキーバインド \"%s\" に有効な値ではありま"
|
||||
"せん\n"
|
||||
|
||||
#: ../src/core/prefs.c:2795
|
||||
#: ../src/core/prefs.c:2783
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr ""
|
||||
"ワークスペース %d の名前を \"%s\" に設定するときにエラーが発生しました: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3009
|
||||
#: ../src/core/prefs.c:2997
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr ""
|
||||
"表示されていないが動作中のウィンドウに対するステータスの設定エラー: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3044
|
||||
#: ../src/core/prefs.c:3032
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "タブなしのポップアップ・ステータスの設定エラー: %s\n"
|
||||
@@ -712,7 +712,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6959
|
||||
#: ../src/core/window.c:6886
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -728,7 +728,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7622
|
||||
#: ../src/core/window.c:7549
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@@ -748,19 +748,12 @@ msgstr "アプリケーションが間違った _NET_WM_PID %lu を設定しま
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1484
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr ""
|
||||
"%2$s で指定したウィンドウ 0x%1$lx の WM_TRANSIENT_FOR が間違っています\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr ""
|
||||
"%2$s で指定したウィンドウ 0x%1$lx の WM_TRANSIENT_FOR は無限ループになりま"
|
||||
"す\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -812,26 +805,14 @@ msgstr ""
|
||||
"を提供するかどうかです。"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:4
|
||||
msgid "Draggable border width"
|
||||
msgstr "ドラッグが可能になる境界線の幅"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "表示されていないウィンドウをそのままにしておくかどうか"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr "ウィンドウの拡張管理の操作で使用する修飾キー"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
"ドラッグができるようになる境界線の幅です。テーマで表示している境界線がこの値"
|
||||
"よりも小さい場合は、表示できない境界線がこの値になるように追加されます。"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
@@ -843,7 +824,7 @@ msgstr ""
|
||||
"デフォルトのキーは PC のキーボードにある [Windows キー] です。指定可能な値: "
|
||||
"デフォルトのキー、または空の文字列"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:9
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@@ -853,7 +834,7 @@ msgstr ""
|
||||
"に、親ウィンドウのタイトルバーに統合したダイアログを表示します (親ウィンドウ"
|
||||
"を移動すると一緒にモーダルなダイアログも移動します)。"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:10
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "プライマリ・モニタのみワークスペースを切り替えるかどうか"
|
||||
|
||||
@@ -862,47 +843,47 @@ msgstr "プライマリ・モニタのみワークスペースを切り替える
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "用法: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1123
|
||||
#: ../src/ui/frames.c:1280
|
||||
msgid "Close Window"
|
||||
msgstr "ウィンドウを閉じます"
|
||||
|
||||
#: ../src/ui/frames.c:1126
|
||||
#: ../src/ui/frames.c:1283
|
||||
msgid "Window Menu"
|
||||
msgstr "ウィンドウ・メニューを表示します"
|
||||
|
||||
#: ../src/ui/frames.c:1129
|
||||
#: ../src/ui/frames.c:1286
|
||||
msgid "Minimize Window"
|
||||
msgstr "ウィンドウを最小化します"
|
||||
|
||||
#: ../src/ui/frames.c:1132
|
||||
#: ../src/ui/frames.c:1289
|
||||
msgid "Maximize Window"
|
||||
msgstr "ウィンドウを最大化します"
|
||||
|
||||
#: ../src/ui/frames.c:1135
|
||||
#: ../src/ui/frames.c:1292
|
||||
msgid "Restore Window"
|
||||
msgstr "ウィンドウの状態を元に戻します"
|
||||
|
||||
#: ../src/ui/frames.c:1138
|
||||
#: ../src/ui/frames.c:1295
|
||||
msgid "Roll Up Window"
|
||||
msgstr "ウィンドウを巻き上げます"
|
||||
|
||||
#: ../src/ui/frames.c:1141
|
||||
#: ../src/ui/frames.c:1298
|
||||
msgid "Unroll Window"
|
||||
msgstr "ウィンドウの巻き上げを解除します"
|
||||
|
||||
#: ../src/ui/frames.c:1144
|
||||
#: ../src/ui/frames.c:1301
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "ウィンドウを最前面に維持します"
|
||||
|
||||
#: ../src/ui/frames.c:1147
|
||||
#: ../src/ui/frames.c:1304
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "ウィンドウを最前面の維持から解除します"
|
||||
|
||||
#: ../src/ui/frames.c:1150
|
||||
#: ../src/ui/frames.c:1307
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "全てのワークスペースに配置します"
|
||||
|
||||
#: ../src/ui/frames.c:1153
|
||||
#: ../src/ui/frames.c:1310
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "現在のワークスペースにのみ配置します"
|
||||
|
||||
@@ -1105,75 +1086,48 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:253
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "上"
|
||||
|
||||
#: ../src/ui/theme.c:255
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "下"
|
||||
|
||||
#: ../src/ui/theme.c:257
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "左"
|
||||
|
||||
#: ../src/ui/theme.c:259
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "右"
|
||||
|
||||
#: ../src/ui/theme.c:286
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "フレームジオメトリは \"%s\" のサイズを指定しません"
|
||||
|
||||
#: ../src/ui/theme.c:305
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "境界 \"%2$s\" 用のフレームジオメトリは大きさ \"%1$s\" を指定しません"
|
||||
|
||||
#: ../src/ui/theme.c:342
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "ボタンのアスペクト比 %g は妥当ではありません"
|
||||
|
||||
#: ../src/ui/theme.c:354
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "フレームジオメトリはボタンのサイズを指定しません"
|
||||
|
||||
#: ../src/ui/theme.c:1060
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "階調度は少なくとも2つの色をもつべきです"
|
||||
|
||||
#: ../src/ui/theme.c:1212
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
"\"%s\" を解析できませんでした; GTK の色指定では gtk:custom(foo,bar); のように"
|
||||
"括弧の中に色の名前とそれと代替えになる色の名前を指定して下さい"
|
||||
|
||||
#: ../src/ui/theme.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
"gtk:custom の color_name で指定した文字が間違っています (使用できる文字は A-"
|
||||
"Za-z0-9-_): '%c'"
|
||||
|
||||
#: ../src/ui/theme.c:1242
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr ""
|
||||
"Gtk:custom の書式は \"gtk:custom(color_name,fallback) です (\"%s\" はこの書式"
|
||||
"に合っていません)"
|
||||
|
||||
#: ../src/ui/theme.c:1287
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -1182,7 +1136,7 @@ msgstr ""
|
||||
"\"%s\" を解析できませんでした; GTK の色指定では gtk:fg[NORMAL] のように状態を"
|
||||
"大括弧で囲み指定する必要があります (NORMAL は状態を示す)"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -1191,17 +1145,17 @@ msgstr ""
|
||||
"\"%s\" を解析できませんでした; GTK の色指定では gtk:fg[NORMAL] のように状態の"
|
||||
"後に右大括弧をつける必要があります (NORMAL は状態を示す)"
|
||||
|
||||
#: ../src/ui/theme.c:1312
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "色指定で状態 \"%s\" は理解しませんでした"
|
||||
|
||||
#: ../src/ui/theme.c:1325
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "色指定でカラーコンポーネント \"%s\" は理解しませんでした"
|
||||
|
||||
#: ../src/ui/theme.c:1355
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -1210,17 +1164,17 @@ msgstr ""
|
||||
"混合色のフォーマットは \"blend/bg_color/fg_color/alpha\" で,\"%s\" はこの"
|
||||
"フォーマットに適合していません"
|
||||
|
||||
#: ../src/ui/theme.c:1366
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "混合色のアルファ値 \"%s\" を解析できませんでした"
|
||||
|
||||
#: ../src/ui/theme.c:1376
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "混合色のアルファ値 \"%s\" は 0.0 から 1.0 の間ではありません"
|
||||
|
||||
#: ../src/ui/theme.c:1423
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
@@ -1228,78 +1182,83 @@ msgstr ""
|
||||
"シェードのフォーマットは \"shade/base_color/factor\" で,\"%s\" はこのフォー"
|
||||
"マットに適合していません"
|
||||
|
||||
#: ../src/ui/theme.c:1434
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "シェードカラーのシェード係数 \"%s\" をパスできませんでした"
|
||||
|
||||
#: ../src/ui/theme.c:1444
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "シェードカラーのシェード係数 \"%s\" が負の値です"
|
||||
|
||||
#: ../src/ui/theme.c:1473
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "次の色を解析できませんでした: \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1784
|
||||
#: ../src/ui/theme.c:1481
|
||||
#, c-format
|
||||
msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
msgstr "GTK+ のテーマから色を取得できませんでした: %s[%s]\n"
|
||||
|
||||
#: ../src/ui/theme.c:1713
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "許可されていない文字が座標式に含まれています: '%s'"
|
||||
|
||||
#: ../src/ui/theme.c:1811
|
||||
#: ../src/ui/theme.c:1740
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "解析できない浮動小数点数が座標式に含まれています: '%s'"
|
||||
|
||||
#: ../src/ui/theme.c:1825
|
||||
#: ../src/ui/theme.c:1754
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "解析できない整数が座標式に含まれています: '%s'"
|
||||
|
||||
#: ../src/ui/theme.c:1947
|
||||
#: ../src/ui/theme.c:1876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr "次のテキストの先頭に無効な演算子が座標式の中に含まれていました: \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2004
|
||||
#: ../src/ui/theme.c:1933
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "座標式が空か解析不能です"
|
||||
|
||||
#: ../src/ui/theme.c:2115 ../src/ui/theme.c:2125 ../src/ui/theme.c:2159
|
||||
#: ../src/ui/theme.c:2044 ../src/ui/theme.c:2054 ../src/ui/theme.c:2088
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "座標式はゼロで除算しました"
|
||||
|
||||
#: ../src/ui/theme.c:2167
|
||||
#: ../src/ui/theme.c:2096
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "座標式は浮動小数点で mod 演算子を使用しようとしています"
|
||||
|
||||
#: ../src/ui/theme.c:2223
|
||||
#: ../src/ui/theme.c:2152
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "座標式はオペランドが必要な場所に演算子 \"%s\" を使用しています"
|
||||
|
||||
#: ../src/ui/theme.c:2232
|
||||
#: ../src/ui/theme.c:2161
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "座標式は演算子が必要な場所でオペランドを使用しています"
|
||||
|
||||
#: ../src/ui/theme.c:2240
|
||||
#: ../src/ui/theme.c:2169
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "座標式はオペランドの代わりに演算子で終わっています"
|
||||
|
||||
#: ../src/ui/theme.c:2250
|
||||
#: ../src/ui/theme.c:2179
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -1308,37 +1267,37 @@ msgstr ""
|
||||
"座標式は演算子 \"%2$c\" の後に演算子 \"%1$c\" が続いており,これらの間にオペ"
|
||||
"ランドがありません"
|
||||
|
||||
#: ../src/ui/theme.c:2401 ../src/ui/theme.c:2446
|
||||
#: ../src/ui/theme.c:2330 ../src/ui/theme.c:2375
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "座標式は無効な値または定数 \"%s\" が使用されていました"
|
||||
|
||||
#: ../src/ui/theme.c:2500
|
||||
#: ../src/ui/theme.c:2429
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "座標式を解析する際にオーバーフローが発生しました"
|
||||
|
||||
#: ../src/ui/theme.c:2529
|
||||
#: ../src/ui/theme.c:2458
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "座標式は左括弧がなしに右括弧が指定されています"
|
||||
|
||||
#: ../src/ui/theme.c:2593
|
||||
#: ../src/ui/theme.c:2522
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "座標式は左括弧が指定されていますが,右括弧がありません"
|
||||
|
||||
#: ../src/ui/theme.c:2604
|
||||
#: ../src/ui/theme.c:2533
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "座標式は演算子もオペランドも使用していないようです"
|
||||
|
||||
#: ../src/ui/theme.c:2816 ../src/ui/theme.c:2836 ../src/ui/theme.c:2856
|
||||
#: ../src/ui/theme.c:2745 ../src/ui/theme.c:2765 ../src/ui/theme.c:2785
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "テーマにエラーを引き起こす式が含まれていました: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4527
|
||||
#: ../src/ui/theme.c:4482
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1347,7 +1306,7 @@ msgstr ""
|
||||
"このフレームスタイルは <button function=\"%s\" state=\"%s\" draw_ops="
|
||||
"\"whatever\"/> を指定する必要があります"
|
||||
|
||||
#: ../src/ui/theme.c:5060 ../src/ui/theme.c:5085
|
||||
#: ../src/ui/theme.c:5012 ../src/ui/theme.c:5037
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
@@ -1355,18 +1314,18 @@ msgstr ""
|
||||
"<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>がありませ"
|
||||
"ん"
|
||||
|
||||
#: ../src/ui/theme.c:5133
|
||||
#: ../src/ui/theme.c:5085
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "テーマ \"%s\" の読み込みに失敗しました: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5269 ../src/ui/theme.c:5276 ../src/ui/theme.c:5283
|
||||
#: ../src/ui/theme.c:5290 ../src/ui/theme.c:5297
|
||||
#: ../src/ui/theme.c:5221 ../src/ui/theme.c:5228 ../src/ui/theme.c:5235
|
||||
#: ../src/ui/theme.c:5242 ../src/ui/theme.c:5249
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "テーマ \"%1$s\" の <%2$s> が設定されていません"
|
||||
|
||||
#: ../src/ui/theme.c:5305
|
||||
#: ../src/ui/theme.c:5257
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1376,13 +1335,13 @@ msgstr ""
|
||||
"ません.<window type=\"%3$s\" style_set=\"whatever\"/> エレメントを追加してく"
|
||||
"ださい"
|
||||
|
||||
#: ../src/ui/theme.c:5744 ../src/ui/theme.c:5806 ../src/ui/theme.c:5869
|
||||
#: ../src/ui/theme.c:5707 ../src/ui/theme.c:5769 ../src/ui/theme.c:5832
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "ユーザ定義の定数は大文字で始まらなければなりません; \"%s\" は違います"
|
||||
|
||||
#: ../src/ui/theme.c:5752 ../src/ui/theme.c:5814 ../src/ui/theme.c:5877
|
||||
#: ../src/ui/theme.c:5715 ../src/ui/theme.c:5777 ../src/ui/theme.c:5840
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "定数 \"%s\" は既に定義されています"
|
||||
@@ -1845,88 +1804,88 @@ msgstr "これはサンプル・ダイアログの中に表示したサンプル
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "メニュー・アイテムの例%d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "境界線だけのウィンドウ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "バー"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "通常のアプリケーション・ウィンドウ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "ダイアログ・ボックス"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "モーダルなダイアログ・ボックス"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "ユーティリティ・パレット"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "取り外したメニュー"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "境界線"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "埋め込んだモーダルなダイアログ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "ボタンの配置テスト %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "1個のウィンドウ・フレームの描画時間: %gミリ秒"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "用法: metacity-theme-viewer [テーマ名]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "テーマのロードでエラーが発生しました: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "\"%s\" というテーマを%g秒で読み込みました\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "標準的なフォントのタイトル"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "小さなフォントのタイトル"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "大きなフォントのタイトル"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "ボタンの配置"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "ベンチマーク"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "ここにウィンドウのタイトルが表示されます"
|
||||
|
||||
@@ -1976,6 +1935,3 @@ msgstr "yの値は %d でした (期待値: %d)"
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "%d個の座標式を %g秒 (平均 %g秒) で解析しました\n"
|
||||
|
||||
#~ msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
#~ msgstr "GTK+ のテーマから色を取得できませんでした: %s[%s]\n"
|
||||
|
||||
293
po/lv.po
293
po/lv.po
@@ -5,15 +5,14 @@
|
||||
# Peteris Krisjanis <pecisk@inbox.lv>, 2002.
|
||||
# Raivis Dejus <orvils@gmail.com>, 2006, 2007, 2009.
|
||||
# Rudolfs <rudolfs.mazurs@gmail.com>, 2011.
|
||||
# Rūdofls Mazurs <rudolfs.mazurs@gmail.com>, 2011.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: lv\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
|
||||
"cgi?product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-07-08 20:41+0000\n"
|
||||
"PO-Revision-Date: 2011-07-09 22:03+0300\n"
|
||||
"Last-Translator: Rūdofls Mazurs <rudolfs.mazurs@gmail.com>\n"
|
||||
"POT-Creation-Date: 2011-03-21 19:31+0000\n"
|
||||
"PO-Revision-Date: 2011-03-26 13:54+0200\n"
|
||||
"Last-Translator: Rudolfs <rudolfs.mazurs@gmail.com>\n"
|
||||
"Language-Team: Latvian <locale@laka.lv>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -22,18 +21,6 @@ msgstr ""
|
||||
"2);\n"
|
||||
"X-Generator: Lokalize 1.1\n"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
msgstr ""
|
||||
"Cits kompozīcijas pārvaldnieks jau darbojas ekrānā %d displejā \"%s\"."
|
||||
|
||||
#: ../src/core/all-keybindings.h:88
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Pārslēgties uz 1. darbvietu"
|
||||
@@ -352,17 +339,13 @@ msgstr "Zvana notikums"
|
||||
msgid "Unknown window information request: %d"
|
||||
msgstr "Nezināms logu informācijas pieprasījums: %d"
|
||||
|
||||
#: ../src/core/delete.c:111
|
||||
#. Translators: %s is a window title
|
||||
#: ../src/core/delete.c:94
|
||||
#, c-format
|
||||
msgid "<tt>%s</tt> is not responding."
|
||||
msgstr "<tt>%s</tt> nereaģē."
|
||||
|
||||
#: ../src/core/delete.c:114
|
||||
#| msgid "<tt>%s</tt> is not responding."
|
||||
msgid "Application is not responding."
|
||||
msgstr "Lietotne nereaģē."
|
||||
|
||||
#: ../src/core/delete.c:119
|
||||
#: ../src/core/delete.c:99
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@@ -370,11 +353,11 @@ msgstr ""
|
||||
"Jūs varat uzgaidīt neilgu brīdi, līdz tā atgūstas, vai arī aizvērt to "
|
||||
"piespiedu kārtā."
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Wait"
|
||||
msgstr "_Gaidīt"
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Force Quit"
|
||||
msgstr "Aizvērt _piespiedu kārtā"
|
||||
|
||||
@@ -444,12 +427,12 @@ msgstr "Inicializēt sesiju no saglabātā faila"
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Padarīt X izsaukumus sinhronus"
|
||||
|
||||
#: ../src/core/main.c:504
|
||||
#: ../src/core/main.c:506
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Neizdevās noskanēt tēmu direktoriju: %s\n"
|
||||
|
||||
#: ../src/core/main.c:520
|
||||
#: ../src/core/main.c:522
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -576,12 +559,12 @@ msgstr "Kļūda, iestatot dzīvo slēptā loga statusu: %s\n"
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "Kļūda, iestatot bez ciļņu uzvednes statusu: %s\n"
|
||||
|
||||
#: ../src/core/screen.c:663
|
||||
#: ../src/core/screen.c:623
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Ekrāna %d displejs \"%s\" ir nederīgs\n"
|
||||
|
||||
#: ../src/core/screen.c:679
|
||||
#: ../src/core/screen.c:639
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -590,70 +573,70 @@ msgstr ""
|
||||
"Ekrāna %d displejam \"%s\" jau ir logu pārvaldnieks; mēģiniet lietot --"
|
||||
"replace iespēju, lai aizvietotu pašreizējo logu pārvaldnieku.\n"
|
||||
|
||||
#: ../src/core/screen.c:706
|
||||
#: ../src/core/screen.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "Neizdevās iegūt logu pārvaldnieka izvēli ekrāna %d displejā \"%s\"\n"
|
||||
|
||||
#: ../src/core/screen.c:761
|
||||
#: ../src/core/screen.c:721
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "Ekrāna %d displejam \"%s\" jau ir logu pārvaldnieks\n"
|
||||
|
||||
#: ../src/core/screen.c:946
|
||||
#: ../src/core/screen.c:906
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Neizdevās atlaist ekrānu %d uz displeja \"%s\"\n"
|
||||
|
||||
#: ../src/core/session.c:843 ../src/core/session.c:850
|
||||
#: ../src/core/session.c:837 ../src/core/session.c:844
|
||||
#, c-format
|
||||
msgid "Could not create directory '%s': %s\n"
|
||||
msgstr "Neizdevās izveidot mapi '%s': %s\n"
|
||||
|
||||
#: ../src/core/session.c:860
|
||||
#: ../src/core/session.c:854
|
||||
#, c-format
|
||||
msgid "Could not open session file '%s' for writing: %s\n"
|
||||
msgstr "Neizdevās atvērt sesijas failu '%s' rakstīšanai: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1001
|
||||
#: ../src/core/session.c:995
|
||||
#, c-format
|
||||
msgid "Error writing session file '%s': %s\n"
|
||||
msgstr "Kļūda, ierakstot sesijas failu '%s': %s\n"
|
||||
|
||||
#: ../src/core/session.c:1006
|
||||
#: ../src/core/session.c:1000
|
||||
#, c-format
|
||||
msgid "Error closing session file '%s': %s\n"
|
||||
msgstr "Kļūda, aizverot sesijas failu '%s': %s\n"
|
||||
|
||||
#: ../src/core/session.c:1136
|
||||
#: ../src/core/session.c:1130
|
||||
#, c-format
|
||||
msgid "Failed to parse saved session file: %s\n"
|
||||
msgstr "Kļūda, parsējot saglabāto sesijas failu: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1185
|
||||
#: ../src/core/session.c:1179
|
||||
#, c-format
|
||||
msgid "<mutter_session> attribute seen but we already have the session ID"
|
||||
msgstr "<mutter_session> atribūts pamanits, bet mums jau ir sesijas ID"
|
||||
|
||||
#: ../src/core/session.c:1198 ../src/core/session.c:1273
|
||||
#: ../src/core/session.c:1305 ../src/core/session.c:1377
|
||||
#: ../src/core/session.c:1437
|
||||
#: ../src/core/session.c:1192 ../src/core/session.c:1267
|
||||
#: ../src/core/session.c:1299 ../src/core/session.c:1371
|
||||
#: ../src/core/session.c:1431
|
||||
#, c-format
|
||||
msgid "Unknown attribute %s on <%s> element"
|
||||
msgstr "Nezināms atribūts %s <%s> elementam"
|
||||
|
||||
#: ../src/core/session.c:1215
|
||||
#: ../src/core/session.c:1209
|
||||
#, c-format
|
||||
msgid "nested <window> tag"
|
||||
msgstr "ligzdota <window> birka"
|
||||
|
||||
#: ../src/core/session.c:1457
|
||||
#: ../src/core/session.c:1451
|
||||
#, c-format
|
||||
msgid "Unknown element %s"
|
||||
msgstr "Nezināms elements %s"
|
||||
|
||||
#: ../src/core/session.c:1809
|
||||
#: ../src/core/session.c:1803
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
@@ -698,13 +681,13 @@ msgid "Window manager error: "
|
||||
msgstr "Logu pārvaldnieka kļūda: "
|
||||
|
||||
#. Translators: This is the title used on dialog boxes
|
||||
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/mutter-wm.desktop.in.h:1
|
||||
msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6903
|
||||
#: ../src/core/window.c:6752
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -720,7 +703,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7566
|
||||
#: ../src/core/window.c:7415
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -739,17 +722,11 @@ msgstr "Lietotne iestatīja neīstu _NET_WM_PID %lu\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (uz %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1479
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Nederīgs WM_TRANSIENT_FOR logs 0x%lx norādīts %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
#| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR logs 0x%lx priekš %s veidotu cilpu.\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -790,6 +767,9 @@ msgstr ""
|
||||
"atrodas citās darbvietās) uzturēt pie dzīvības."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:3
|
||||
#| msgid ""
|
||||
#| "Determines whether workspace switching should happen for windows on all "
|
||||
#| "monitors or only the primary window."
|
||||
msgid ""
|
||||
"Determines whether workspace switching should happen for windows on all "
|
||||
"monitors or only for windows on the primary monitor."
|
||||
@@ -836,47 +816,47 @@ msgstr "Darbvietas tikai uz galvenā"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Lietojums: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1280
|
||||
#: ../src/ui/frames.c:1099
|
||||
msgid "Close Window"
|
||||
msgstr "Aizvērt logu"
|
||||
|
||||
#: ../src/ui/frames.c:1283
|
||||
#: ../src/ui/frames.c:1102
|
||||
msgid "Window Menu"
|
||||
msgstr "Loga izvēlne"
|
||||
|
||||
#: ../src/ui/frames.c:1286
|
||||
#: ../src/ui/frames.c:1105
|
||||
msgid "Minimize Window"
|
||||
msgstr "Minimizēt logu"
|
||||
|
||||
#: ../src/ui/frames.c:1289
|
||||
#: ../src/ui/frames.c:1108
|
||||
msgid "Maximize Window"
|
||||
msgstr "Maksimizēt logu"
|
||||
|
||||
#: ../src/ui/frames.c:1292
|
||||
#: ../src/ui/frames.c:1111
|
||||
msgid "Restore Window"
|
||||
msgstr "Atjaunot logu"
|
||||
|
||||
#: ../src/ui/frames.c:1295
|
||||
#: ../src/ui/frames.c:1114
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Uzrullēt logu"
|
||||
|
||||
#: ../src/ui/frames.c:1298
|
||||
#: ../src/ui/frames.c:1117
|
||||
msgid "Unroll Window"
|
||||
msgstr "Norullēt logu"
|
||||
|
||||
#: ../src/ui/frames.c:1301
|
||||
#: ../src/ui/frames.c:1120
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Turēt logu virspusē"
|
||||
|
||||
#: ../src/ui/frames.c:1304
|
||||
#: ../src/ui/frames.c:1123
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Aizvākt logu no virspuses"
|
||||
|
||||
#: ../src/ui/frames.c:1307
|
||||
#: ../src/ui/frames.c:1126
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Vienmēr redzamajā darbvietā"
|
||||
|
||||
#: ../src/ui/frames.c:1310
|
||||
#: ../src/ui/frames.c:1129
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Turēt logu tikai vienā darbvietā"
|
||||
|
||||
@@ -1079,83 +1059,48 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:252
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "augša"
|
||||
|
||||
#: ../src/ui/theme.c:254
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "apakša"
|
||||
|
||||
#: ../src/ui/theme.c:256
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "pa kreisi"
|
||||
|
||||
#: ../src/ui/theme.c:258
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "pa labi"
|
||||
|
||||
#: ../src/ui/theme.c:285
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "rāmja ģeometrija nenosaka \"%s\" dimensiju"
|
||||
|
||||
#: ../src/ui/theme.c:304
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "rāmja ģeometrija nenosaka dimensiju \"%s\" robežai \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:341
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Pogas samērs %g nav saprātīgs"
|
||||
|
||||
#: ../src/ui/theme.c:353
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Rāmja ģeometrija nenosaka pogu izmēru"
|
||||
|
||||
#: ../src/ui/theme.c:1061
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Krāsu pārejās ir jābūt vismaz divām krāsām"
|
||||
|
||||
#: ../src/ui/theme.c:1206
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "GTK color specification must have a close bracket after the state, e.g. "
|
||||
#| "gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
"GTK pielāgotajā krāsu specifikācijā ir jābūt krāsas nosaukumam un atkāpšanās "
|
||||
"ceļam iekavās, piem., gtk:custom(foo,bar); neizdevās parsēt \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1222
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
"Nederīga rakstzīme '%c' iekš color_name parameter no gtk:custom, tikai "
|
||||
"A-Za-z0-9-"
|
||||
"_ ir derīgas"
|
||||
|
||||
#: ../src/ui/theme.c:1236
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the "
|
||||
#| "format"
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr ""
|
||||
"Gtk:custom formāts ir \"gtk:custom(color_name,fallback)\", \"%s\" "
|
||||
"neiekļaujas "
|
||||
"formātā"
|
||||
|
||||
#: ../src/ui/theme.c:1272
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -1164,7 +1109,7 @@ msgstr ""
|
||||
"GTK krāsas specifikācijā ir jābūt stāvoklim iekavās, piem., gtk:fg[NORMAL], "
|
||||
"kur NORMAL ir stāvoklis; neizdevās parsēt \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1286
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -1173,17 +1118,17 @@ msgstr ""
|
||||
"GTK krāsas specifikācijā ir jābūt kvadrātiekavām pēc stāvokļa, piem., gtk:fg"
|
||||
"[NORMAL], kur NORMAL ir stāvoklis; neizdevās parsēt \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1297
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Nesaprotams stāvoklis \"%s\" krāsas specifikācijā"
|
||||
|
||||
#: ../src/ui/theme.c:1310
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Nesaprotams krāsas komponents \"%s\" krāsas specifikācijā"
|
||||
|
||||
#: ../src/ui/theme.c:1340
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -1192,96 +1137,96 @@ msgstr ""
|
||||
"Saplūšanas formāts ir \"blend/bg_color/fg_color/alpha\", \"%s\" neatbilst "
|
||||
"formātam"
|
||||
|
||||
#: ../src/ui/theme.c:1351
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Neizdevās parsēt alfa vērtību \"%s\" sapludinātajā krāsā"
|
||||
|
||||
#: ../src/ui/theme.c:1361
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "Alfa vērtība \"%s\" sapludinātajā krāsā nav starp 0.0 un 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1408
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr ""
|
||||
"Ēnošanas formāts ir \"shade/base_color/factor\", \"%s\" neatbilst formātam"
|
||||
|
||||
#: ../src/ui/theme.c:1419
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Neizdevās parsēt ēnas faktoru \"%s\" ēnotajā krāsā"
|
||||
|
||||
#: ../src/ui/theme.c:1429
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Ēnošanas faktors \"%s\" ēnotajā krāsā ir negatīvs"
|
||||
|
||||
#: ../src/ui/theme.c:1458
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Neizdevās parsēt krāsu \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1769
|
||||
#: ../src/ui/theme.c:1646
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Koordinātu izteiksme satur rakstzīmi '%s', kas nav atļauta"
|
||||
|
||||
#: ../src/ui/theme.c:1796
|
||||
#: ../src/ui/theme.c:1673
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "Koordinātu izteiksme satur neparsējamu peldošā punkta skaitli '%s'"
|
||||
|
||||
#: ../src/ui/theme.c:1810
|
||||
#: ../src/ui/theme.c:1687
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Koordinātu izteiksme satur neparsējamu veselu skaitli '%s'"
|
||||
|
||||
#: ../src/ui/theme.c:1932
|
||||
#: ../src/ui/theme.c:1809
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr "Koordinātu izteiksme satur nezināmu operatoru šī teksta sākumā: \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1989
|
||||
#: ../src/ui/theme.c:1866
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Koordinātu izteiksme bija tukša vai nesaprasta"
|
||||
|
||||
#: ../src/ui/theme.c:2100 ../src/ui/theme.c:2110 ../src/ui/theme.c:2144
|
||||
#: ../src/ui/theme.c:1977 ../src/ui/theme.c:1987 ../src/ui/theme.c:2021
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Koordinātu izteiksme noved pie dalīšanas ar nulli"
|
||||
|
||||
#: ../src/ui/theme.c:2152
|
||||
#: ../src/ui/theme.c:2029
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr ""
|
||||
"Koordinātu izteiksme mēģina lietot mod operatoru uz peldošā punkta skaitļa"
|
||||
|
||||
#: ../src/ui/theme.c:2208
|
||||
#: ../src/ui/theme.c:2085
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "Koordinātu izteiksmei ir operators \"%s\", kur tika gaidīts operands"
|
||||
|
||||
#: ../src/ui/theme.c:2217
|
||||
#: ../src/ui/theme.c:2094
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Koordinātu izteiksmei bija operands, kur tika gaidīts operators"
|
||||
|
||||
#: ../src/ui/theme.c:2225
|
||||
#: ../src/ui/theme.c:2102
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Koordinātu izteiksme beidzās ar operatoru, nevis ar operandu"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2112
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -1290,39 +1235,39 @@ msgstr ""
|
||||
"Koordinātu izteiksmē ir operatoram \"%c\" sekojošais operators \"%c\" bez "
|
||||
"operanda to starpā"
|
||||
|
||||
#: ../src/ui/theme.c:2386 ../src/ui/theme.c:2431
|
||||
#: ../src/ui/theme.c:2263 ../src/ui/theme.c:2308
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Koordinātu izteiksmē bija nezināms mainīgais vai konstante \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2485
|
||||
#: ../src/ui/theme.c:2362
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Koordinātu izteiksme pārpildīja parsera buferi."
|
||||
|
||||
#: ../src/ui/theme.c:2514
|
||||
#: ../src/ui/theme.c:2391
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
"Koordinātu izteiksmei bija aizvērtās iekavas bez nevienas atvērtās iekavas"
|
||||
|
||||
#: ../src/ui/theme.c:2578
|
||||
#: ../src/ui/theme.c:2455
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
"Koordinātu izteiksmei bija atvērtās iekavas bez nevienas aizvērtās iekavas"
|
||||
|
||||
#: ../src/ui/theme.c:2589
|
||||
#: ../src/ui/theme.c:2466
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "Šķiet, ka koordinātu izteiksmē nav ne operatoru, ne operandu"
|
||||
|
||||
#: ../src/ui/theme.c:2801 ../src/ui/theme.c:2821 ../src/ui/theme.c:2841
|
||||
#: ../src/ui/theme.c:2676 ../src/ui/theme.c:2696 ../src/ui/theme.c:2716
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Tēma saturēja izteiksmi, kas noveda pie kļūdas: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4512
|
||||
#: ../src/ui/theme.c:4410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1331,25 +1276,25 @@ msgstr ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"jebkas\"/> jābūt noteiktam "
|
||||
"šajā rāmja stilā"
|
||||
|
||||
#: ../src/ui/theme.c:5042 ../src/ui/theme.c:5067
|
||||
#: ../src/ui/theme.c:4940 ../src/ui/theme.c:4965
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"Iztrūkst <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"jebkas\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5115
|
||||
#: ../src/ui/theme.c:5013
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Neizdevās ielādēt tēmu \"%s\": %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5251 ../src/ui/theme.c:5258 ../src/ui/theme.c:5265
|
||||
#: ../src/ui/theme.c:5272 ../src/ui/theme.c:5279
|
||||
#: ../src/ui/theme.c:5149 ../src/ui/theme.c:5156 ../src/ui/theme.c:5163
|
||||
#: ../src/ui/theme.c:5170 ../src/ui/theme.c:5177
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Nav iestatīts <%s> tēmai \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:5287
|
||||
#: ../src/ui/theme.c:5185
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1358,14 +1303,14 @@ msgstr ""
|
||||
"Nav rāmja stila kopas loga tipam \"%s\" tēmā \"%s\"; pievienojiet <window "
|
||||
"type=\"%s\" style_set=\"jebkas\"/> elementu"
|
||||
|
||||
#: ../src/ui/theme.c:5737 ../src/ui/theme.c:5799 ../src/ui/theme.c:5862
|
||||
#: ../src/ui/theme.c:5635 ../src/ui/theme.c:5697 ../src/ui/theme.c:5760
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"Lietotāja definētajām konstantēm jāsākas ar lielo burtu; \"%s\" nesākas"
|
||||
|
||||
#: ../src/ui/theme.c:5745 ../src/ui/theme.c:5807 ../src/ui/theme.c:5870
|
||||
#: ../src/ui/theme.c:5643 ../src/ui/theme.c:5705 ../src/ui/theme.c:5768
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Konstante \"%s\" jau tikusi definēta"
|
||||
@@ -1813,92 +1758,92 @@ msgstr "Šis ir paraugpaziņojums parauga dialogā"
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "Neīsts izvēlnes elements %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "Logs tikai ar apmali"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "Josla"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "Normāls lietotnes logs"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "Dialoglodziņš"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "Modālais dialoglodziņš"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "Utilītpalete"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "Atrauta izvēlne"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "Apmale"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Piesaistītais modālais dialogs"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Pogu izkārtojuma tests %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g milisekundes, lai uzzīmētu loga rāmi"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Pielietojums: metacity-theme-viewer [TĒMASNOSAUKUMS]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Kļūda, ielādējot tēmu: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Tēma \"%s\" ielādēta \"%g\"sekundēs\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Normāls virsraksta fonts"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "Mazs virsraksta fonts"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "Liels virsraksta fonts"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "Pogu izkārtojumi"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "Etalonuzdevums"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Šeit paredzēts loga virsraksts"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1058
|
||||
#: ../src/ui/theme-viewer.c:1055
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@@ -1909,39 +1854,39 @@ msgstr ""
|
||||
"g sekundēs pēc ierastā laika, ieskaitot X servera resursus (%g milisekundes "
|
||||
"uz kadru)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
#: ../src/ui/theme-viewer.c:1274
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "pozīcijas izteiksmes tests atgrieza TRUE, bet ziņoja par kļūdu"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
#: ../src/ui/theme-viewer.c:1276
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr "pozīcijas izteiksmes tests atgrieza FALSE, bet nenorādīja kļūdu"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1283
|
||||
#: ../src/ui/theme-viewer.c:1280
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "Tika gaidīta kļūda, taču tā netika dota"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1285
|
||||
#: ../src/ui/theme-viewer.c:1282
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "Tika gaidīta kļūda %d, bet saņemta kļūda %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1291
|
||||
#: ../src/ui/theme-viewer.c:1288
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "Kļūda netika gaidīta, taču tika saņemta: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1295
|
||||
#: ../src/ui/theme-viewer.c:1292
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "x vērtība bija %d, tika gaidīta %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1298
|
||||
#: ../src/ui/theme-viewer.c:1295
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "y vērtība bija %d, tika gaidīta %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1363
|
||||
#: ../src/ui/theme-viewer.c:1360
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "%d koordinātas izteiksme noparsēta %g sekundēs (vidēji %g sekundēs)\n"
|
||||
|
||||
259
po/nb.po
259
po/nb.po
@@ -4,10 +4,10 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter 3.1.x\n"
|
||||
"Project-Id-Version: mutter 2.91.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-10 15:24+0200\n"
|
||||
"PO-Revision-Date: 2011-08-10 15:25+0200\n"
|
||||
"POT-Creation-Date: 2011-07-02 00:15+0200\n"
|
||||
"PO-Revision-Date: 2011-07-02 00:16+0200\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
|
||||
"Language: \n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:487
|
||||
#: ../src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@@ -388,7 +388,7 @@ msgstr ""
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -399,12 +399,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "Ingen kommando %d er definert\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "Ingen terminalkommando er definert\n"
|
||||
@@ -479,35 +479,35 @@ msgstr "Kommaseparert liste av tillegg for compositor"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:550 ../src/core/prefs.c:711
|
||||
#: ../src/core/prefs.c:543 ../src/core/prefs.c:704
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "GConf-nøkkel «%s» er satt til en ugyldig verdi\n"
|
||||
|
||||
#: ../src/core/prefs.c:637 ../src/core/prefs.c:880
|
||||
#: ../src/core/prefs.c:630 ../src/core/prefs.c:873
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "%d lagret i GConf-nøkkel %s er utenfor område %d til %d\n"
|
||||
|
||||
#: ../src/core/prefs.c:681 ../src/core/prefs.c:758 ../src/core/prefs.c:806
|
||||
#: ../src/core/prefs.c:870 ../src/core/prefs.c:1331 ../src/core/prefs.c:1347
|
||||
#: ../src/core/prefs.c:1364 ../src/core/prefs.c:1380
|
||||
#: ../src/core/prefs.c:674 ../src/core/prefs.c:751 ../src/core/prefs.c:799
|
||||
#: ../src/core/prefs.c:863 ../src/core/prefs.c:1324 ../src/core/prefs.c:1340
|
||||
#: ../src/core/prefs.c:1357 ../src/core/prefs.c:1373
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "GConf-nøkkel «%s» er satt til en ugyldig type\n"
|
||||
|
||||
#: ../src/core/prefs.c:1210
|
||||
#: ../src/core/prefs.c:1203
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr ""
|
||||
"GConf-nøkkel %s er allerede i bruk og kan ikke brukes til å overstyre %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1269
|
||||
#: ../src/core/prefs.c:1262
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "Kan ikke overstyre GConf-nøkkel. %s ble ikke funnet\n"
|
||||
|
||||
#: ../src/core/prefs.c:1454
|
||||
#: ../src/core/prefs.c:1447
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -515,12 +515,12 @@ msgstr ""
|
||||
"Funksjonalitet for å gå rundt ødelagte programmer er deaktivert. Noen "
|
||||
"programmer vil kanskje ikke oppføre seg korrekt.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1531
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "Kunne ikke tolke skriftbeskrivelsen «%s» fra GConf-nøkkel %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1593
|
||||
#: ../src/core/prefs.c:1586
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -529,17 +529,17 @@ msgstr ""
|
||||
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for endring av "
|
||||
"musknapp\n"
|
||||
|
||||
#: ../src/core/prefs.c:2028
|
||||
#: ../src/core/prefs.c:2016
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "Feil under spesifisering av antall arbeidsområder til %d: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2212 ../src/core/prefs.c:2714
|
||||
#: ../src/core/prefs.c:2200 ../src/core/prefs.c:2702
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Arbeidsområde %d"
|
||||
|
||||
#: ../src/core/prefs.c:2244 ../src/core/prefs.c:2422
|
||||
#: ../src/core/prefs.c:2232 ../src/core/prefs.c:2410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -548,18 +548,18 @@ msgstr ""
|
||||
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for "
|
||||
"tastaturbinding «%s»\n"
|
||||
|
||||
#: ../src/core/prefs.c:2795
|
||||
#: ../src/core/prefs.c:2783
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "Feil under setting av navn på arbeidsområde %d til «%s»: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3009
|
||||
#: ../src/core/prefs.c:2997
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr ""
|
||||
"Feil under setting av status for status for levende skjulte vinduer: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3044
|
||||
#: ../src/core/prefs.c:3032
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "Feil under setting av status for popup uten faner: %s\n"
|
||||
@@ -693,7 +693,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6959
|
||||
#: ../src/core/window.c:6886
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -709,7 +709,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7622
|
||||
#: ../src/core/window.c:7549
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@@ -729,16 +729,11 @@ msgstr "Programmet satte en feil _NET_WM_PID %lu\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (på %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1484
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Ugyldig WM_TRANSIENT_FOR vindu 0x%lx oppgitt for %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR vindu 0x%lx for %s ville skapt en løkke.\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -788,24 +783,14 @@ msgstr ""
|
||||
"skjermer eller kun på primær skjerm."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:4
|
||||
msgid "Draggable border width"
|
||||
msgstr "Bredde på drakant"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "Levende skjulte vinduer"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr "Endringstast som skal brukes for utvidede vindushåndteringsoperasjoner"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr "Total mengde med drakant. Hvis temas synlige kanter ikke er nok vil usynlige kanter legges til for å imøtekomme denne verdien."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
@@ -817,7 +802,7 @@ msgstr ""
|
||||
"tasten» på PC-maskinvare. Det forventes at denne bindingen er satt til "
|
||||
"forvalg eller en tom streng."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:9
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@@ -827,7 +812,7 @@ msgstr ""
|
||||
"tittellinjen på opphavsvinduet og flyttes sammen med dette i stedet for å ha "
|
||||
"individuelle tittellinjer."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:10
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Arbeidsområder kun på primær skjerm"
|
||||
|
||||
@@ -836,47 +821,47 @@ msgstr "Arbeidsområder kun på primær skjerm"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr " Bruk: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1123
|
||||
#: ../src/ui/frames.c:1280
|
||||
msgid "Close Window"
|
||||
msgstr "Lukk vindu"
|
||||
|
||||
#: ../src/ui/frames.c:1126
|
||||
#: ../src/ui/frames.c:1283
|
||||
msgid "Window Menu"
|
||||
msgstr "Vindumeny"
|
||||
|
||||
#: ../src/ui/frames.c:1129
|
||||
#: ../src/ui/frames.c:1286
|
||||
msgid "Minimize Window"
|
||||
msgstr "Minimer vindu"
|
||||
|
||||
#: ../src/ui/frames.c:1132
|
||||
#: ../src/ui/frames.c:1289
|
||||
msgid "Maximize Window"
|
||||
msgstr "Maksimer vindu"
|
||||
|
||||
#: ../src/ui/frames.c:1135
|
||||
#: ../src/ui/frames.c:1292
|
||||
msgid "Restore Window"
|
||||
msgstr "Gjenopprett vindu"
|
||||
|
||||
#: ../src/ui/frames.c:1138
|
||||
#: ../src/ui/frames.c:1295
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Rull opp vindu"
|
||||
|
||||
#: ../src/ui/frames.c:1141
|
||||
#: ../src/ui/frames.c:1298
|
||||
msgid "Unroll Window"
|
||||
msgstr "Rull ned vindu"
|
||||
|
||||
#: ../src/ui/frames.c:1144
|
||||
#: ../src/ui/frames.c:1301
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Plasser vindu i forgrunnen"
|
||||
|
||||
#: ../src/ui/frames.c:1147
|
||||
#: ../src/ui/frames.c:1304
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Fjern vindu fra forgrunnen"
|
||||
|
||||
#: ../src/ui/frames.c:1150
|
||||
#: ../src/ui/frames.c:1307
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Alltid på synlig arbeidsområde"
|
||||
|
||||
#: ../src/ui/frames.c:1153
|
||||
#: ../src/ui/frames.c:1310
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Plasser vindu kun på ett arbeidsområde"
|
||||
|
||||
@@ -1079,75 +1064,48 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:253
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "topp"
|
||||
|
||||
#: ../src/ui/theme.c:255
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "bunn"
|
||||
|
||||
#: ../src/ui/theme.c:257
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "venstre"
|
||||
|
||||
#: ../src/ui/theme.c:259
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "høyre"
|
||||
|
||||
#: ../src/ui/theme.c:286
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "rammegeometrien spesifiserer ikke «%s»-dimensjon"
|
||||
|
||||
#: ../src/ui/theme.c:305
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "rammegeometri spesifiserer ikke dimensjon «%s» for kant «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:342
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Aspektrate %g for knapp er ikke fornuftig"
|
||||
|
||||
#: ../src/ui/theme.c:354
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Rammegeometrien spesifiserer ikke størrelse på knapper"
|
||||
|
||||
#: ../src/ui/theme.c:1060
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Gradienter må ha minst to farger"
|
||||
|
||||
#: ../src/ui/theme.c:1205
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
"Egendefinert GTK-fargespesifikasjon må ha fargenavn og reserve i parantes, f."
|
||||
"eks gtk:custom(foo,bar); kunne ikke lese «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1221
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
"Ugyldig tegn «%c» i parameter color_name for gtk:custom, kun A-Za-z0-9-_ er "
|
||||
"gyldig"
|
||||
|
||||
#: ../src/ui/theme.c:1235
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr ""
|
||||
"Gtk:custom-format er «gtk:custom(color_name,fallback)», «%s» passer ikke i "
|
||||
"formatet"
|
||||
|
||||
#: ../src/ui/theme.c:1271
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -1156,7 +1114,7 @@ msgstr ""
|
||||
"GTK-fargespesifikasjon må ha tilstand i klammer, f.eks. gtk:fg[NORMAL], hvor "
|
||||
"NORMAL er tilstanden; kunne ikke lese «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1285
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -1165,17 +1123,17 @@ msgstr ""
|
||||
"GTK-fargespesifikasjon må ha en avsluttende klamme etter tilstanden, f.eks. "
|
||||
"gtk:fg[NORMAL], hvor NORMAL er tilstanden; kunne ikke lese «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1296
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Forsto ikke tilstand «%s» i fargespesifikasjonen"
|
||||
|
||||
#: ../src/ui/theme.c:1309
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Forsto ikke fargekomponent «%s» i fargespesifikasjonen"
|
||||
|
||||
#: ../src/ui/theme.c:1339
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -1184,56 +1142,61 @@ msgstr ""
|
||||
"Blandingsformat er «blend/bg_color/fg_color/alpha», «%s» passer ikke i "
|
||||
"formatet"
|
||||
|
||||
#: ../src/ui/theme.c:1350
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Kunne ikke lese alpha-verdi «%s» i blandet farge"
|
||||
|
||||
#: ../src/ui/theme.c:1360
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "Alpha-verdi «%s» i blandet farge er ikke mellom 0.0 og 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1407
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr ""
|
||||
"Skyggeformatet er «shade/base_color/factor», «%s» passer ikke i formatet"
|
||||
|
||||
#: ../src/ui/theme.c:1418
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Kunne ikke lese skyggefaktor «%s» i skyggelagt farge"
|
||||
|
||||
#: ../src/ui/theme.c:1428
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Skyggefaktor «%s» i skyggelagt farge er negativ"
|
||||
|
||||
#: ../src/ui/theme.c:1457
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Kunne ikke lese farge «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1768
|
||||
#: ../src/ui/theme.c:1481
|
||||
#, c-format
|
||||
msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
msgstr "Klarte ikke å hente farge %s[%s] fra GTK+-tema.\n"
|
||||
|
||||
#: ../src/ui/theme.c:1713
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Koordinatuttrykk inneholder tegn «%s» som ikke er tillatt"
|
||||
|
||||
#: ../src/ui/theme.c:1795
|
||||
#: ../src/ui/theme.c:1740
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "Koordinatuttrykk inneholder flyttall «%s» som ikke kunne tolkes"
|
||||
|
||||
#: ../src/ui/theme.c:1809
|
||||
#: ../src/ui/theme.c:1754
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Koordinatuttrykk inneholder heltall «%s» som ikke kunne tolkes"
|
||||
|
||||
#: ../src/ui/theme.c:1931
|
||||
#: ../src/ui/theme.c:1876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@@ -1242,39 +1205,39 @@ msgstr ""
|
||||
"Koordinatuttrykket inneholdt en ukjent operator ved begynnelsen av denne "
|
||||
"teksten: «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1988
|
||||
#: ../src/ui/theme.c:1933
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Koordinatuttrykket var tomt eller ble ikke forstått"
|
||||
|
||||
#: ../src/ui/theme.c:2099 ../src/ui/theme.c:2109 ../src/ui/theme.c:2143
|
||||
#: ../src/ui/theme.c:2044 ../src/ui/theme.c:2054 ../src/ui/theme.c:2088
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Koordinatuttrykket resulterer i divisjon med null"
|
||||
|
||||
#: ../src/ui/theme.c:2151
|
||||
#: ../src/ui/theme.c:2096
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "Koordinatuttrykket prøver å bruke mod-operator på et flyttall"
|
||||
|
||||
#: ../src/ui/theme.c:2207
|
||||
#: ../src/ui/theme.c:2152
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "Koordinatuttrykket har en operator «%s» hvor en operand var ventet"
|
||||
|
||||
#: ../src/ui/theme.c:2216
|
||||
#: ../src/ui/theme.c:2161
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Koordinatuttrykket hadde en operand hvor en operator var ventet"
|
||||
|
||||
#: ../src/ui/theme.c:2224
|
||||
#: ../src/ui/theme.c:2169
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Koordinatuttrykket sluttet med en operator i stedet for en operand"
|
||||
|
||||
#: ../src/ui/theme.c:2234
|
||||
#: ../src/ui/theme.c:2179
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -1283,38 +1246,38 @@ msgstr ""
|
||||
"Koordinatuttrykket har en operator «%c» etter en operator «%c» og ingen "
|
||||
"operand mellom dem."
|
||||
|
||||
#: ../src/ui/theme.c:2385 ../src/ui/theme.c:2430
|
||||
#: ../src/ui/theme.c:2330 ../src/ui/theme.c:2375
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Koordinatuttrykket haddeen ukjent variabel eller konstant «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:2484
|
||||
#: ../src/ui/theme.c:2429
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Tolkeren for koordinatuttrykk oversteg buffergrensen."
|
||||
|
||||
#: ../src/ui/theme.c:2513
|
||||
#: ../src/ui/theme.c:2458
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Koordinatuttrykket hadde en parantes slutt uten parantes start"
|
||||
|
||||
#: ../src/ui/theme.c:2577
|
||||
#: ../src/ui/theme.c:2522
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "Koordinatuttrykket hadde en åpen parantes uten en avsluttende parantes"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2533
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr ""
|
||||
"Koordinatuttrykket ser ikke ut til å ha noen operatorer eller operander"
|
||||
|
||||
#: ../src/ui/theme.c:2800 ../src/ui/theme.c:2820 ../src/ui/theme.c:2840
|
||||
#: ../src/ui/theme.c:2745 ../src/ui/theme.c:2765 ../src/ui/theme.c:2785
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Tema inneholdt et uttrykk som resulterte i en feil: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4511
|
||||
#: ../src/ui/theme.c:4482
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1323,25 +1286,25 @@ msgstr ""
|
||||
"<button function=«%s» state=«%s» draw_ops=«ett-eller-annet»/> må "
|
||||
"spesifiseres for denne rammestilen"
|
||||
|
||||
#: ../src/ui/theme.c:5044 ../src/ui/theme.c:5069
|
||||
#: ../src/ui/theme.c:5012 ../src/ui/theme.c:5037
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>"
|
||||
|
||||
#: ../src/ui/theme.c:5117
|
||||
#: ../src/ui/theme.c:5085
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Klarte ikke å laste tema «%s»: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5253 ../src/ui/theme.c:5260 ../src/ui/theme.c:5267
|
||||
#: ../src/ui/theme.c:5274 ../src/ui/theme.c:5281
|
||||
#: ../src/ui/theme.c:5221 ../src/ui/theme.c:5228 ../src/ui/theme.c:5235
|
||||
#: ../src/ui/theme.c:5242 ../src/ui/theme.c:5249
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "<%s> er ikke satt for tema «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:5289
|
||||
#: ../src/ui/theme.c:5257
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1350,14 +1313,14 @@ msgstr ""
|
||||
"Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window "
|
||||
"type=«%s» style_set=«ett-eller-annet»/>-element"
|
||||
|
||||
#: ../src/ui/theme.c:5728 ../src/ui/theme.c:5790 ../src/ui/theme.c:5853
|
||||
#: ../src/ui/theme.c:5707 ../src/ui/theme.c:5769 ../src/ui/theme.c:5832
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"Brukerdefinerte konstanter må begynne med stor bokstav; «%s» gjør ikke det"
|
||||
|
||||
#: ../src/ui/theme.c:5736 ../src/ui/theme.c:5798 ../src/ui/theme.c:5861
|
||||
#: ../src/ui/theme.c:5715 ../src/ui/theme.c:5777 ../src/ui/theme.c:5840
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Konstant «%s» er allerede definert"
|
||||
@@ -1808,88 +1771,88 @@ msgstr "Dette er en eksempelbeskjed i en eksempeldialog"
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "Falsk menyoppføring %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "Vindu uten innhold"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "Linje"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "Normalt programvindu"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "Dialogboks"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "Modal dialogboks"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "Verktøypalett"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "Avrevet meny"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "Kant"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Festet modal dialog"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Test av knappeplassering %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g millisekunder for å tegne en vindusramme"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Bruk: metacity-theme-viewer [TEMANAVN]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Feil under lasting av tema: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Lastet tema «%s» på %g sekunder\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Normal tittelskrift"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "Liten tittelskrift"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "Stor tittelskrift"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "Knappeplasseringer"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "Ytelsestest"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Vindutittel skal her"
|
||||
|
||||
|
||||
333
po/pa.po
333
po/pa.po
@@ -14,10 +14,10 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.gnome-2-26\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-08-10 12:42+0000\n"
|
||||
"PO-Revision-Date: 2011-08-21 09:26+0530\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
|
||||
"cgi?product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-21 19:31+0000\n"
|
||||
"PO-Revision-Date: 2011-03-26 23:49+0530\n"
|
||||
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
|
||||
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -28,19 +28,6 @@ msgstr ""
|
||||
"\n"
|
||||
"Language: pa\n"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:487
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
msgstr ""
|
||||
"ਇੱਕ ਹੋਰ ਕੰਪੋਜ਼ਟਿੰਗ ਮੈਨੇਜਰ %i ਸਕਰੀਨ ਉੱਤੇ ਡਿਸਪਲੇਅ \"%s\" ਉੱਤੇ ਪਹਿਲਾਂ ਹੀ ਚੱਲ "
|
||||
"ਰਿਹਾ ਹੈ।"
|
||||
|
||||
#: ../src/core/all-keybindings.h:88
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "ਵਰਕਸਪੇਸ ੧ ਵਿੱਚ ਜਾਓ"
|
||||
@@ -358,17 +345,13 @@ msgstr "ਘੰਟੀ ਈਵੈਂਟ"
|
||||
msgid "Unknown window information request: %d"
|
||||
msgstr "ਅਣਜਾਣ ਵਿੰਡੋ ਜਾਣਕਾਰੀ ਮੰਗ: %d"
|
||||
|
||||
#: ../src/core/delete.c:111
|
||||
#. Translators: %s is a window title
|
||||
#: ../src/core/delete.c:94
|
||||
#, c-format
|
||||
msgid "<tt>%s</tt> is not responding."
|
||||
msgstr "<tt>%s</tt> ਜਵਾਬ ਨਹੀ ਦਿੰਦਾ।"
|
||||
|
||||
#: ../src/core/delete.c:114
|
||||
#| msgid "<tt>%s</tt> is not responding."
|
||||
msgid "Application is not responding."
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੀ ਹੈ।"
|
||||
|
||||
#: ../src/core/delete.c:119
|
||||
#: ../src/core/delete.c:99
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@@ -376,11 +359,11 @@ msgstr ""
|
||||
"ਤੁਸੀਂ ਇਸ ਲਈ ਕੁਝ ਸਮੇਂ ਵਾਸਤੇ ਉਡੀਕ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਕਾਰਜ ਨੂੰ ਧੱਕੇ ਨਾਲ ਬੰਦ ਕਰ ਸਕਦੇ "
|
||||
"ਹੋ।"
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Wait"
|
||||
msgstr "ਉਡੀਕੋ(_W)"
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Force Quit"
|
||||
msgstr "ਧੱਕੇ ਨਾਲ ਬੰਦ(_F)"
|
||||
|
||||
@@ -405,7 +388,7 @@ msgstr ""
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -416,12 +399,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "ਕੋਈ ਕਮਾਂਡ %d ਪਰਭਾਸ਼ਿਤ ਨਹੀ ਕੀਤੀ।\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "ਕੋਈ ਟਰਮੀਨਲ ਕਮਾਂਡ ਪ੍ਰਭਾਸ਼ਿਤ ਨਹੀ ਕੀਤੀ।\n"
|
||||
@@ -431,6 +414,7 @@ msgid "Disable connection to session manager"
|
||||
msgstr "ਸ਼ੈਸ਼ਨ ਮੈਨੇਜਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਅਯੋਗ"
|
||||
|
||||
#: ../src/core/main.c:212
|
||||
#| msgid "Replace the running window manager with Mutter"
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "ਚੱਲ ਰਹੇ ਵਿੰਡੋ ਮੈਨੇਜਰ ਨੂੰ ਬਦਲੋ"
|
||||
|
||||
@@ -450,12 +434,12 @@ msgstr "ਸੰਭਾਲੀ ਫਾਇਲ ਤੋਂ ਸ਼ੈਸ਼ਨ ਸ਼ੁ
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "X ਕਾਲ ਸੈਕਰੋਨਸ ਬਣਾਓ"
|
||||
|
||||
#: ../src/core/main.c:504
|
||||
#: ../src/core/main.c:506
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "ਥੀਮ ਡਾਇਰੈਕਟਰੀ ਦੀ ਜਾਂਚ ਅਸਫਲ: %s\n"
|
||||
|
||||
#: ../src/core/main.c:520
|
||||
#: ../src/core/main.c:522
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -495,36 +479,36 @@ msgstr "ਕਾਮਿਆਂ ਨਾਲ ਵੱਖ ਕੀਤੀ ਕੰਪੋਜ਼
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:550 ../src/core/prefs.c:711
|
||||
#: ../src/core/prefs.c:543 ../src/core/prefs.c:704
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "ਜੀ-ਕਾਨਫ ਸਵਿੱਚ \"%s\" ਨੂੰ ਇੱਕ ਅਯੋਗ ਕੀਮਤ ਦਿੱਤੀ ਗਈ ਹੈ\n"
|
||||
|
||||
#: ../src/core/prefs.c:637 ../src/core/prefs.c:880
|
||||
#: ../src/core/prefs.c:630 ../src/core/prefs.c:873
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "ਜੀ-ਕਾਨਫ ਸੰਭਾਲੀ %d ਸਵਿੱਚ %s ਵਿੱਚ ਰੇਜ਼ %d ਤੋਂ %d ਬਾਹਰ ਹੈ\n"
|
||||
|
||||
#: ../src/core/prefs.c:681 ../src/core/prefs.c:758 ../src/core/prefs.c:806
|
||||
#: ../src/core/prefs.c:870 ../src/core/prefs.c:1331 ../src/core/prefs.c:1347
|
||||
#: ../src/core/prefs.c:1364 ../src/core/prefs.c:1380
|
||||
#: ../src/core/prefs.c:674 ../src/core/prefs.c:751 ../src/core/prefs.c:799
|
||||
#: ../src/core/prefs.c:863 ../src/core/prefs.c:1324 ../src/core/prefs.c:1340
|
||||
#: ../src/core/prefs.c:1357 ../src/core/prefs.c:1373
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "ਜੀ-ਕਾਨਫ ਸਵਿੱਚ \"%s\" ਨੂੰ ਇੱਕ ਅਯੋਗ ਕਿਸਮ ਦਿੱਤੀ ਗਈ ਹੈ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1210
|
||||
#: ../src/core/prefs.c:1203
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr ""
|
||||
"GConf ਕੁੰਜੀ %s ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ਅਧੀਨ ਹੈ, ਤੇ %s ਅਣਡਿੱਠਾ ਕਰਨ ਲਈ ਨਹੀਂ ਵਰਤੀ ਜਾ "
|
||||
"ਸਕਦੀ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1269
|
||||
#: ../src/core/prefs.c:1262
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "GConf ਕੁੰਜੀ ਅਣਡਿੱਠੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ, %s ਨਹੀਂ ਲੱਭੀ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1454
|
||||
#: ../src/core/prefs.c:1447
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -532,12 +516,12 @@ msgstr ""
|
||||
"ਖਰਾਬ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਜੁਗਾੜ ਬੰਦ ਕੀਤਾ ਹੈ। ਕੁਝ ਐਪਲੀਕੇਸ਼ਨ ਚੰਗੀ ਤਰਾਂ ਕੰਮ ਨਹੀਂ ਕਰ ਸਕਦੇ "
|
||||
"ਹਨ।\n"
|
||||
|
||||
#: ../src/core/prefs.c:1531
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "ਜੀ-ਕਾਨਫ ਸਵਿੱਚ \"%s\" ਤੋਂ ਅੱਖਰ ਵੇਰਵਾ \"%s\" ਨੂੰ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1593
|
||||
#: ../src/core/prefs.c:1586
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -545,17 +529,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"ਸੰਰਚਨਾ ਡਾਟਾਬੇਸ ਵਿੱਚ ਲੱਭੀ ਹੋਈ \"%s\" ਮਾਊਸ ਬਟਨ ਸੋਧਕ ਲਈ ਯੋਗ ਕੀਮਤ ਨਹੀਂ ਹੈ\n"
|
||||
|
||||
#: ../src/core/prefs.c:2028
|
||||
#: ../src/core/prefs.c:2016
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "ਵਰਕਸਪੇਸਾਂ ਦੀ ਗਿਣਤੀ %d ਸੈੱਟ ਕਰਨ ਨਾਲ ਗਲਤੀ: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2212 ../src/core/prefs.c:2714
|
||||
#: ../src/core/prefs.c:2200 ../src/core/prefs.c:2702
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "ਵਰਕਸਪੇਸ %d"
|
||||
|
||||
#: ../src/core/prefs.c:2244 ../src/core/prefs.c:2422
|
||||
#: ../src/core/prefs.c:2232 ../src/core/prefs.c:2410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -564,27 +548,27 @@ msgstr ""
|
||||
"ਸੰਰਚਨਾ ਡਾਟਾਬੇਸ ਵਿੱਚ ਲੱਭੀ ਹੋਈ \"%s\" ਸਵਿੱਚ-ਬਾਈਡਿੰਗ \"%s\" ਲਈ ਯੋਗ ਕੀਮਤ ਨਹੀਂ "
|
||||
"ਹੈ\n"
|
||||
|
||||
#: ../src/core/prefs.c:2795
|
||||
#: ../src/core/prefs.c:2783
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "ਵਰਕਸਪੇਸ %d ਦਾ ਨਾਂ \"%s\" ਸੈੱਟ ਕਰਨ ਵਿੱਚ ਗਲਤੀ:%s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3009
|
||||
#: ../src/core/prefs.c:2997
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr "ਲਾਈਵ ਲੁਕਵੀਂ ਵਿੰਡੋ ਹਾਲਤ ਸੈੱਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3044
|
||||
#: ../src/core/prefs.c:3032
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "ਕੋਈ ਟੈਬ ਪੋਪਅੱਪ ਨਹੀਂ ਹਾਲਤ ਸੈਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s\n"
|
||||
|
||||
#: ../src/core/screen.c:663
|
||||
#: ../src/core/screen.c:623
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "ਸਕਰੀਨ %d ਲਈ ਡਿਸਪਲੇਅ '%s' ਅਯੋਗ ਹੈ\n"
|
||||
|
||||
#: ../src/core/screen.c:679
|
||||
#: ../src/core/screen.c:639
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -594,71 +578,71 @@ msgstr ""
|
||||
"--replace "
|
||||
"ਮੌਜੂਦਾ ਵਿੰਡੋ ਮੈਨੇਜਰ ਵਰਤੋਂ।\n"
|
||||
|
||||
#: ../src/core/screen.c:706
|
||||
#: ../src/core/screen.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr ""
|
||||
"%d ਸਕਰੀਨ ਉੱਤੇ ਡਿਸਪਲੇਅ \"%s\" ਉੱਤੇ ਵਿੰਡੋ ਮੈਨੇਜਰ ਚੋਣ ਉਪਲੱਬਧ ਨਹੀਂ ਹੋ ਸਕੀ\n"
|
||||
|
||||
#: ../src/core/screen.c:761
|
||||
#: ../src/core/screen.c:721
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "ਸਕਰੀਨ %d ਉੱਤੇ ਡਿਸਪਲੇਅ \"%s\" ਉੱਤੇ ਕੋਲ ਪਹਿਲਾਂ ਹੀ ਵਿੰਡੋ ਮੈਨੇਜਰ ਹੈ\n"
|
||||
|
||||
#: ../src/core/screen.c:946
|
||||
#: ../src/core/screen.c:906
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "ਸਕਰੀਨ %d ਉੱਤੇ ਡਿਸਪਲੇਅ \"%s\" ਰੀਲਿਜ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ\n"
|
||||
|
||||
#: ../src/core/session.c:843 ../src/core/session.c:850
|
||||
#: ../src/core/session.c:837 ../src/core/session.c:844
|
||||
#, c-format
|
||||
msgid "Could not create directory '%s': %s\n"
|
||||
msgstr "'%s' ਡਾਇਰੈਕਟਰੀ ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕੀ:%s\n"
|
||||
|
||||
#: ../src/core/session.c:860
|
||||
#: ../src/core/session.c:854
|
||||
#, c-format
|
||||
msgid "Could not open session file '%s' for writing: %s\n"
|
||||
msgstr "ਲਿਖਣ ਲਈ ਸ਼ੈਸ਼ਨ ਫਾਇਲ '%s' ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1001
|
||||
#: ../src/core/session.c:995
|
||||
#, c-format
|
||||
msgid "Error writing session file '%s': %s\n"
|
||||
msgstr "ਸ਼ੈਸ਼ਨ ਫਾਇਲ '%s' ਲਿਖਣ ਦੀ ਗਲਤੀ:%s\n"
|
||||
|
||||
#: ../src/core/session.c:1006
|
||||
#: ../src/core/session.c:1000
|
||||
#, c-format
|
||||
msgid "Error closing session file '%s': %s\n"
|
||||
msgstr "ਸ਼ੈਸ਼ਨ ਫਾਇਲ '%s' ਖੋਲ੍ਹਣ ਦੀ ਗਲਤੀ: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1136
|
||||
#: ../src/core/session.c:1130
|
||||
#, c-format
|
||||
msgid "Failed to parse saved session file: %s\n"
|
||||
msgstr "ਸੰਭਾਲੀ ਸ਼ੈਸ਼ਨ ਫਾਇਲ ਨੂੰ ਪਾਰਸ ਕਰਨ ਲਈ ਅਸਫਲ: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1185
|
||||
#: ../src/core/session.c:1179
|
||||
#, c-format
|
||||
msgid "<mutter_session> attribute seen but we already have the session ID"
|
||||
msgstr "<mutter_session> ਗੁਣ ਦਿਖਿਆ, ਪਰ ਸਾਡੇ ਕੋਲ ਸ਼ੈਸ਼ਨ ID ਪਹਿਲਾਂ ਹੀ ਹੈ"
|
||||
|
||||
#: ../src/core/session.c:1198 ../src/core/session.c:1273
|
||||
#: ../src/core/session.c:1305 ../src/core/session.c:1377
|
||||
#: ../src/core/session.c:1437
|
||||
#: ../src/core/session.c:1192 ../src/core/session.c:1267
|
||||
#: ../src/core/session.c:1299 ../src/core/session.c:1371
|
||||
#: ../src/core/session.c:1431
|
||||
#, c-format
|
||||
msgid "Unknown attribute %s on <%s> element"
|
||||
msgstr "<%2$s> ਐਲੀਮੈਂਟ ਉੱਤੇ ਅਣਜਾਣ %1$s ਗੁਣ"
|
||||
|
||||
#: ../src/core/session.c:1215
|
||||
#: ../src/core/session.c:1209
|
||||
#, c-format
|
||||
msgid "nested <window> tag"
|
||||
msgstr "ਨੈਸਟਡ <window> ਟੈਗ"
|
||||
|
||||
#: ../src/core/session.c:1457
|
||||
#: ../src/core/session.c:1451
|
||||
#, c-format
|
||||
msgid "Unknown element %s"
|
||||
msgstr "ਅਣਜਾਣ ਐਲੀਮੈਂਟ %s"
|
||||
|
||||
#: ../src/core/session.c:1809
|
||||
#: ../src/core/session.c:1803
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
@@ -704,13 +688,13 @@ msgid "Window manager error: "
|
||||
msgstr "ਵਿੰਡੋ ਮੈਨੇਜਰ ਗਲਤੀ: "
|
||||
|
||||
#. Translators: This is the title used on dialog boxes
|
||||
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/mutter-wm.desktop.in.h:1
|
||||
msgid "Mutter"
|
||||
msgstr "ਮੱਟਰ"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6959
|
||||
#: ../src/core/window.c:6752
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -726,7 +710,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7622
|
||||
#: ../src/core/window.c:7415
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -746,17 +730,11 @@ msgstr "ਐਪਲੀਕੇਸ਼ਨ ਨੇ ਇੱਕ ਫਰਜ਼ੀ _NET_WM_PID
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s ਉੱਤੇ)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1479
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "ਗਲਤ WM_TRANSIENT_FOR ਵਿੰਡੋ 0x%lx %s ਲਈ ਦਿੱਤਾ ਗਿਆ ਹੈ।\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
#| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR ਵਿੰਡੋ 0x%lx %s ਲੂਪ ਬਣਾਏਗਾ।\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -806,27 +784,14 @@ msgstr ""
|
||||
"ਵਿੰਡੋ ਲਈ ਹੀ "
|
||||
|
||||
#: ../src/mutter.schemas.in.h:4
|
||||
msgid "Draggable border width"
|
||||
msgstr "ਡਰੈਗ ਹੋਣ ਯੋਗ ਬਾਰਡਰ ਚੌੜਾਈ"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "ਲੁਕਵੀਆਂ ਵਿੰਡੋਜ਼ ਲਾਈਵ"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr "ਵਾਧੂ ਵਿੰਡੋ ਪਰਬੰਧ ਓਪਰੇਸ਼ਨਾਂ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਮੋਡੀਫਾਇਰ"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
"ਕੁੱਲ ਡਰੈਗ ਹੋਣ ਯੋਗ ਬਾਰਡਰ ਦੀ ਮਾਤਰਾ। ਜੇ ਥੀਮ ਦੇ ਦਿੱਖ ਬਾਰਡਰ ਲੋੜ ਮੁਤਾਬਕ ਨਾ ਹੋਣ ਤਾਂ "
|
||||
"ਅਦਿੱਖ "
|
||||
"ਬਾਰਡਰ ਨੂੰ ਇਹ ਮੁੱਲ ਦੇ ਬਰਾਬਰ ਕਰਨ ਲਈ ਵਧਾਇਆ ਜਾਵੇਗਾ।"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
@@ -839,7 +804,7 @@ msgstr ""
|
||||
"ਜਾਂਦੀ ਹੈ ਕਿ "
|
||||
"ਜਾਂ ਤਾਂ ਡਿਫਾਲਟ ਬਾਈਡਿੰਗ ਰੱਖੀ ਜਾਵੇ ਜਾਂ ਖਾਲੀ ਲਾਈਨ ਵਰਤੀ ਜਾਵੇ।"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:9
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@@ -849,7 +814,7 @@ msgstr ""
|
||||
"ਟਾਈਟਲ ਬਾਰ ਨਾਲ "
|
||||
"ਜੁੜਿਆ ਉਭਰੇਗਾ ਤੇ ਮੁੱਢਲੀ ਵਿੰਡੋ ਨਾਲ ਹੀ ਹਿੱਲੇਗਾ।"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:10
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "ਵਰਕਸਪੇਸ ਕੇਵਲ ਪ੍ਰਾਇਮਰੀ ਉੱਤੇ ਹੀ"
|
||||
|
||||
@@ -858,47 +823,47 @@ msgstr "ਵਰਕਸਪੇਸ ਕੇਵਲ ਪ੍ਰਾਇਮਰੀ ਉੱਤੇ
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "ਵਰਤੋਂ: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1123
|
||||
#: ../src/ui/frames.c:1099
|
||||
msgid "Close Window"
|
||||
msgstr "ਵਿੰਡੋ ਬੰਦ ਕਰੋ"
|
||||
|
||||
#: ../src/ui/frames.c:1126
|
||||
#: ../src/ui/frames.c:1102
|
||||
msgid "Window Menu"
|
||||
msgstr "ਵਿੰਡੋ ਮੇਨੂ"
|
||||
|
||||
#: ../src/ui/frames.c:1129
|
||||
#: ../src/ui/frames.c:1105
|
||||
msgid "Minimize Window"
|
||||
msgstr "ਵਿੰਡੋ ਘੱਟੋ-ਘੱਟ"
|
||||
|
||||
#: ../src/ui/frames.c:1132
|
||||
#: ../src/ui/frames.c:1108
|
||||
msgid "Maximize Window"
|
||||
msgstr "ਵਿੰਡੋ ਵੱਧੋ-ਵੱਧ"
|
||||
|
||||
#: ../src/ui/frames.c:1135
|
||||
#: ../src/ui/frames.c:1111
|
||||
msgid "Restore Window"
|
||||
msgstr "ਵਿੰਡੋ ਮੁੜ-ਸਟੋਰ"
|
||||
|
||||
#: ../src/ui/frames.c:1138
|
||||
#: ../src/ui/frames.c:1114
|
||||
msgid "Roll Up Window"
|
||||
msgstr "ਵਿੰਡੋ ਸਮੇਟੋ"
|
||||
|
||||
#: ../src/ui/frames.c:1141
|
||||
#: ../src/ui/frames.c:1117
|
||||
msgid "Unroll Window"
|
||||
msgstr "ਵਿੰਡੋ ਫੈਲਾਓ"
|
||||
|
||||
#: ../src/ui/frames.c:1144
|
||||
#: ../src/ui/frames.c:1120
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "ਵਿੰਡੋ ਉੱਤੇ ਰੱਖੋ"
|
||||
|
||||
#: ../src/ui/frames.c:1147
|
||||
#: ../src/ui/frames.c:1123
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "ਵਿੰਡੋ ਉੱਤੇ ਤੋਂ ਹਟਾਓ"
|
||||
|
||||
#: ../src/ui/frames.c:1150
|
||||
#: ../src/ui/frames.c:1126
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "ਹਮੇਸ਼ਾ ਉਪਲੱਬਧ ਵਰਕਸਪੇਸ 'ਚ"
|
||||
|
||||
#: ../src/ui/frames.c:1153
|
||||
#: ../src/ui/frames.c:1129
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "ਵਿੰਡੋ ਨੂੰ ਸਿਰਫ਼ ਇੱਕ ਵਰਕਸਪੇਸ ਉੱਤੇ ਰੱਖੋ"
|
||||
|
||||
@@ -1101,82 +1066,48 @@ msgstr "ਮਾਡ੫"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:253
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "ਉੱਤੇ"
|
||||
|
||||
#: ../src/ui/theme.c:255
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "ਹੇਠਾਂ"
|
||||
|
||||
#: ../src/ui/theme.c:257
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "ਖੱਬਾ"
|
||||
|
||||
#: ../src/ui/theme.c:259
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "ਸੱਜਾ"
|
||||
|
||||
#: ../src/ui/theme.c:286
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "ਫਰੇਮ ਜੁਮੈਟਰੀ \"%s\" ਮਾਪ ਨਹੀਂ ਦਰਸਾਉਦੀ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:305
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "ਫਰੇਮ ਜੁਮੈਟਰੀ \"%2$s\" ਹਾਸ਼ੀਏ ਲਈ \"%1$s\" ਮਾਪ ਨਹੀਂ ਦਰਸਾਉਦੀ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:342
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "ਤਲ ਆਕਾਰ ਅਨੁਪਾਤ %g ਢੁੱਕਵਾਂ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:354
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "ਫਰੇਮ ਜੁਮੈਟਰੀ ਬਟਨਾਂ ਦਾ ਆਕਾਰ ਨਹੀਂ ਦਰਸਾਉਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1060
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "ਢਾਲਵੇ ਲਈ ਘੱਟ ਤੋਂ ਘੱਟ ਦੋ ਰੰਗ ਚਾਹੀਦੇ ਹਨ"
|
||||
|
||||
#: ../src/ui/theme.c:1205
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "GTK color specification must have a close bracket after the state, e.g. "
|
||||
#| "gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
"ਹਾਲਤ ਤੋਂ ਬਾਅਦ GTK ਰੰਗ ਹਦਾਇਤ ਬਰੈਕਟਾਂ ਵਿੱਚ ਬੰਦ ਕਰਨੀ ਜ਼ਰੂਰੀ ਹੈ, ਉਦਾਹਰਨ ਵਜੋਂ "
|
||||
"gtk:custom "
|
||||
"(foo,bar); \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1221
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
"gtk:custom ਦੇ color_name ਪੈਰਾਮੀਟਰ ਵਿੱਚ ਗਲਤ ਅੱਖਰ '%c' ਹੈ, ਕੇਵਲ A-Za-z0-9-"
|
||||
"_ ਸ਼ਾਮਲ ਹੋ ਸਕਦੇ ਹਨ"
|
||||
|
||||
#: ../src/ui/theme.c:1235
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the "
|
||||
#| "format"
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr ""
|
||||
"Gtk:custom ਫਾਰਮੈਟ \"gtk:custom(color_name,fallback)\" ਹੈ, \"%s\" ਫਾਰਮੈਟ ਵਿੱਚ "
|
||||
"ਫਿੱਟ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:1271
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -1186,7 +1117,7 @@ msgstr ""
|
||||
"ਜਿੱਥੇ ਸਾਧਾਰਨ "
|
||||
"ਇੱਕ ਹਾਲਤ ਹੈ; \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1285
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -1196,60 +1127,60 @@ msgstr ""
|
||||
"gtk:fg[ਸਾਧਾਰਨ] "
|
||||
"ਜਿੱਥੇ ਸਾਧਾਰਨ ਇੱਕ ਹਾਲਤ ਹੈ; \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1296
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "ਰੰਗ ਹਦਾਇਤ ਵਿੱਚ \"%s\" ਹਾਲਤ ਨੂੰ ਨਹੀਂ ਸਮਝਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1309
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "ਰੰਗ ਹਦਾਇਤ ਵਿੱਚ ਰੰਗ ਸੰਖੇਪ \"%s\" ਨੂੰ ਨਹੀਂ ਸਮਝਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1339
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
"format"
|
||||
msgstr "ਧੁੰਦਲੀ ਬਣਤਰ \"ਧੁੰਦਲੀ/bg_ਰੰਗ/ਐਲਫਾ, \"%s\" ਬਣਤਰ ਵਿੱਚ ਠੀਕ ਨਹੀਂ ਆਂਉਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1350
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "ਧੁੰਦਲੇ ਰੰਗ ਵਿੱਚ ਐਲਫਾ ਕੀਮਤ \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1360
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "ਧੁੰਦਲੇ ਰੰਗ ਵਿੱਚ ਐਲਫਾ ਕੀਮਤ \"%s\" 0.0 ਅਤੇ 1.0 ਵਿਚਕਾਰ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:1407
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "ਰੰਗਤ ਬਣਤਰ \"ਰੰਗਤ/ਆਧਾਰ_ਰੰਗ/ਫੈਕਟਰ\" ਹੈ, \"%s\" ਬਣਤਰ ਵਿੱਚ ਠੀਕ ਨਹੀਂ ਆਉਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1418
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "ਛਾਇਆ ਰੰਗ ਵਿੱਚ ਰੰਗਤ ਫੈਕਟਰ \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1428
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "ਛਾਇਆ ਰੰਗ ਵਿੱਚ ਰੰਗਤ ਫੈਕਟਰ \"%s\" ਨਾਂਹਵਾਚਕ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:1457
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "\"%s\" ਰੰਗ ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1768
|
||||
#: ../src/ui/theme.c:1646
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਅੱਖਰ '%s' ਸ਼ਾਮਿਲ ਹੈ ਜਿਸ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ"
|
||||
|
||||
#: ../src/ui/theme.c:1795
|
||||
#: ../src/ui/theme.c:1673
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@@ -1258,13 +1189,13 @@ msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਦਸ਼ਮਲਵ ਅੰਕ '%s' ਸ਼ਾਮਿਲ ਹੈ ਜਿਸ ਦੀ ਪਾਰਸ ਨਹੀਂ ਕੀਤੀ ਜਾ "
|
||||
"ਸਕਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1809
|
||||
#: ../src/ui/theme.c:1687
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਪੂਰਨ ਅੰਕ '%s' ਸ਼ਾਮਿਲ ਹੈ ਜਿਸ ਦੀ ਪਾਰਸ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1931
|
||||
#: ../src/ui/theme.c:1809
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@@ -1272,42 +1203,42 @@ msgid ""
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਇਸ ਪਾਠ \"%s\" ਦੇ ਸ਼ੁਰੂ ਵਿੱਚ ਅਣਪਛਾਤਾ ਆਪ੍ਰੇਟਰ ਸ਼ਾਮਿਲ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:1988
|
||||
#: ../src/ui/theme.c:1866
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਖਾਲੀ ਸੀ ਜਾਂ ਸਮਝਿਆ ਨਹੀਂ"
|
||||
|
||||
#: ../src/ui/theme.c:2099 ../src/ui/theme.c:2109 ../src/ui/theme.c:2143
|
||||
#: ../src/ui/theme.c:1977 ../src/ui/theme.c:1987 ../src/ui/theme.c:2021
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਜੀਰੋ ਨਾਲ ਭਾਗ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:2151
|
||||
#: ../src/ui/theme.c:2029
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਦਸ਼ਮਲਵ ਅੰਕ ਉੱਤੇ ਮਾਡ (mod) ਆਪ੍ਰੇਟਰ ਵਰਤਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:2207
|
||||
#: ../src/ui/theme.c:2085
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਆਪ੍ਰੇਟਰ \"%s\" ਹੈ ਜਿੱਥੇ ਪ੍ਰਭਾਵੀ ਅੰਕ ਦੀ ਉਮੀਦ ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2216
|
||||
#: ../src/ui/theme.c:2094
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਪ੍ਰਭਾਵੀ ਅੰਕ ਸੀ ਜਿੱਥੇ ਆਪ੍ਰੇਟਰ ਦੀ ਉਮੀਦ ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2224
|
||||
#: ../src/ui/theme.c:2102
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਦੀ ਸਮਾਪਤੀ ਆਪ੍ਰੇਟਰ ਨਾਲ ਹੁੰਦੀ ਹੈ ਨਾ ਕਿ ਪ੍ਰਭਾਵੀ ਅੰਕ ਨਾਲ"
|
||||
|
||||
#: ../src/ui/theme.c:2234
|
||||
#: ../src/ui/theme.c:2112
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -1317,39 +1248,39 @@ msgstr ""
|
||||
"ਬਾਅਦ ਆਪ੍ਰੇਟਰ \"%c"
|
||||
"\" ਹੈ "
|
||||
|
||||
#: ../src/ui/theme.c:2385 ../src/ui/theme.c:2430
|
||||
#: ../src/ui/theme.c:2263 ../src/ui/theme.c:2308
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਅਣਪਛਾਤਾ ਅਸਥਿਰ ਜਾਂ ਸਥਿਰ \"%s\" ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2484
|
||||
#: ../src/ui/theme.c:2362
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਪਾਰਸਰ ਦਾ ਬਫ਼ਰ ਓਵਰਫਲੋ ਹੋ ਗਿਆ ਹੈ।"
|
||||
|
||||
#: ../src/ui/theme.c:2513
|
||||
#: ../src/ui/theme.c:2391
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਕੋਈ ਖੁੱਲੀ ਬਰੈਕਟ ਨਾ ਹੋਣ ਕਰਕੇ ਬੰਦ ਬਰੈਕਟ(parenthesis) "
|
||||
"ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2577
|
||||
#: ../src/ui/theme.c:2455
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਕੋਈ ਬੰਦ ਬਰੈਕਟ ਨਾ ਹੋਣ ਕਰਕੇ ਖੁੱਲੀ ਬਰੈਕਟ ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2466
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਕੋਈ ਵੀ ਆਪ੍ਰੇਟਰ ਜਾਂ ਪ੍ਰਭਾਵੀ ਅੰਕ ਨਹੀਂ ਦਿਸਦਾ"
|
||||
|
||||
#: ../src/ui/theme.c:2800 ../src/ui/theme.c:2820 ../src/ui/theme.c:2840
|
||||
#: ../src/ui/theme.c:2676 ../src/ui/theme.c:2696 ../src/ui/theme.c:2716
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "ਥੀਮ ਵਿੱਚ ਸਮੀਕਰਨ ਹੈ, ਜਿਸ ਦਾ ਨਤੀਜਾ ਹੈ ਗਲਤੀ: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4511
|
||||
#: ../src/ui/theme.c:4410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1359,25 +1290,25 @@ msgstr ""
|
||||
"ਦੇਣਾ "
|
||||
"ਲਾਜ਼ਮੀ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:5044 ../src/ui/theme.c:5069
|
||||
#: ../src/ui/theme.c:4940 ../src/ui/theme.c:4965
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> ਗੁੰਮ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:5117
|
||||
#: ../src/ui/theme.c:5013
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "ਥੀਮ \"%s\" ਲੋਡ ਕਰਨ ਲਈ ਅਸਫਲ: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5253 ../src/ui/theme.c:5260 ../src/ui/theme.c:5267
|
||||
#: ../src/ui/theme.c:5274 ../src/ui/theme.c:5281
|
||||
#: ../src/ui/theme.c:5149 ../src/ui/theme.c:5156 ../src/ui/theme.c:5163
|
||||
#: ../src/ui/theme.c:5170 ../src/ui/theme.c:5177
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "ਥੀਮ \"%2$s\" ਲਈ <%1$s> ਨਹੀਂ ਸੈੱਟ ਕੀਤਾ"
|
||||
|
||||
#: ../src/ui/theme.c:5289
|
||||
#: ../src/ui/theme.c:5185
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1387,13 +1318,13 @@ msgstr ""
|
||||
"window type="
|
||||
"\"%s\" style_set=\"whatever\"/> ਐਲੀਮੈਂਟ ਸ਼ਾਮਿਲ ਕਰੋ"
|
||||
|
||||
#: ../src/ui/theme.c:5728 ../src/ui/theme.c:5790 ../src/ui/theme.c:5853
|
||||
#: ../src/ui/theme.c:5635 ../src/ui/theme.c:5697 ../src/ui/theme.c:5760
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "ਯੂਜ਼ਰ ਰਾਹੀਂ ਪਰਭਾਸ਼ਿਤ ਸਥਿਰ ਵੱਡੇ ਅੱਖਰ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ; \"%s\" ਨਹੀਂ ਹੁੰਦੇ"
|
||||
|
||||
#: ../src/ui/theme.c:5736 ../src/ui/theme.c:5798 ../src/ui/theme.c:5861
|
||||
#: ../src/ui/theme.c:5643 ../src/ui/theme.c:5705 ../src/ui/theme.c:5768
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "ਸਥਿਰ \"%s\" ਪਹਿਲਾਂ ਹੀ ਪਰਭਾਸ਼ਿਤ ਕੀਤਾ ਹੈ"
|
||||
@@ -1843,88 +1774,88 @@ msgstr "ਇਹ ਸੈਂਪਲ ਡਾਈਲਾਗ ਵਿੱਚ ਸੈਂਪਲ
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "ਨਕਲੀ ਮੇਨੂ ਆਈਟਮ %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "ਕੇਵਲ ਬਾਰਡਰ ਵਿੰਡੋ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "ਬਾਰ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "ਸਾਧਾਰਨ ਐਪਲੀਕੇਸ਼ਨ ਵਿੰਡੋ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "ਡਾਈਲਾਗ ਡੱਬਾ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "ਮਾਡਲ ਡਾਈਲਾਗ ਡੱਬਾ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "ਸਹੂਲਤ ਪਲੇਅਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "ਮੇਨੂ ਵੱਖ ਕਰੋ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "ਬਾਰਡਰ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "ਮਾਡਲ ਡਾਈਲਾਗ ਅਟੈਚ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "ਬਟਨ ਲੇਆਉਟ ਟੈਸਟ %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "ਇੱਕ ਵਿੰਡੋ ਫਰੇਮ ਉਲੀਕਣ ਲਈ %g ਮਿਲੀ ਸਕਿੰਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "ਵਰਤੋਂ: metacity-theme-viewer [THEMENAME]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "ਥੀਮ ਲੋਡ ਕਰਨ ਵਿੱਚ ਗਲਤੀ: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "ਥੀਮ \"%s\" ਨੂੰ ਲੋਡ ਕਰਨ ਵਿੱਚ ਲੱਗਾ ਸਮਾਂ %g ਸਕਿੰਟਾਂ ਵਿੱਚ \n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "ਸਾਧਾਰਨ ਟਾਇਟਲ ਫੋਂਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "ਛੋਟੇ ਟਾਇਟਲ ਫੋਂਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "ਵੱਡੇ ਟਾਇਟਲ ਫੋਂਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "ਬਟਨ ਲੇਆਉਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "ਬੈਂਚਮਾਰਕ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "ਵਿੰਡੋ ਟਾਇਟਲ ਇੱਥੇ ਹੋਵੇਗਾ"
|
||||
|
||||
|
||||
242
po/sl.po
242
po/sl.po
@@ -10,14 +10,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-07-13 21:26+0000\n"
|
||||
"PO-Revision-Date: 2011-07-14 08:09+0100\n"
|
||||
"POT-Creation-Date: 2011-07-02 06:54+0000\n"
|
||||
"PO-Revision-Date: 2011-07-02 20:25+0100\n"
|
||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: \n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
|
||||
"X-Poedit-Language: Slovenian\n"
|
||||
"X-Poedit-Country: SLOVENIA\n"
|
||||
@@ -392,7 +392,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:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -403,12 +403,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "Ukaz %d ni bil naveden.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "Ni navedenih ukazov terminala.\n"
|
||||
@@ -688,7 +688,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6903
|
||||
#: ../src/core/window.c:6886
|
||||
#, 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"
|
||||
@@ -700,7 +700,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:7566
|
||||
#: ../src/core/window.c:7549
|
||||
#, 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"
|
||||
@@ -715,16 +715,11 @@ msgstr "Program je nastavil pokvarjen _NET_WM_PID %lu\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1484
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Neveljaven WM_TRANSIENT_FOR za okno 0x%lx naveden za %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "Predmet WM_TRANSIENT_FOR okna 0x%lx za %s lahko ustvari zanko.\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -787,51 +782,51 @@ msgstr "Delovne površine le na prvem zaslonu"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Uporaba: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1289
|
||||
#: ../src/ui/frames.c:1280
|
||||
msgid "Close Window"
|
||||
msgstr "Zapri okno"
|
||||
|
||||
# G:1 K:1 O:0
|
||||
#: ../src/ui/frames.c:1292
|
||||
#: ../src/ui/frames.c:1283
|
||||
msgid "Window Menu"
|
||||
msgstr "Meni okna"
|
||||
|
||||
# G:0 K:1 O:0
|
||||
#: ../src/ui/frames.c:1295
|
||||
#: ../src/ui/frames.c:1286
|
||||
msgid "Minimize Window"
|
||||
msgstr "Skrči okno"
|
||||
|
||||
#: ../src/ui/frames.c:1298
|
||||
#: ../src/ui/frames.c:1289
|
||||
msgid "Maximize Window"
|
||||
msgstr "Razpni okno"
|
||||
|
||||
#: ../src/ui/frames.c:1301
|
||||
#: ../src/ui/frames.c:1292
|
||||
msgid "Restore Window"
|
||||
msgstr "Obnovi okno"
|
||||
|
||||
# G:2 K:0 O:0
|
||||
#: ../src/ui/frames.c:1304
|
||||
#: ../src/ui/frames.c:1295
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Zavij okno"
|
||||
|
||||
#: ../src/ui/frames.c:1307
|
||||
#: ../src/ui/frames.c:1298
|
||||
msgid "Unroll Window"
|
||||
msgstr "Odvij okno"
|
||||
|
||||
#: ../src/ui/frames.c:1310
|
||||
#: ../src/ui/frames.c:1301
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Ohrani okno na vrhu"
|
||||
|
||||
#: ../src/ui/frames.c:1313
|
||||
#: ../src/ui/frames.c:1304
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Odstrani okno z vrha"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/ui/frames.c:1316
|
||||
#: ../src/ui/frames.c:1307
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Vedno na vidni delovni površini"
|
||||
|
||||
#: ../src/ui/frames.c:1319
|
||||
#: ../src/ui/frames.c:1310
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Postavi okno na samo eno delovno površino"
|
||||
|
||||
@@ -1053,251 +1048,241 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:252
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "zgoraj"
|
||||
|
||||
# G:12 K:5 O:0
|
||||
#: ../src/ui/theme.c:254
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "spodaj"
|
||||
|
||||
# G:10 K:4 O:0
|
||||
#: ../src/ui/theme.c:256
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "levo"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/ui/theme.c:258
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "desno"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/ui/theme.c:285
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "geometrija okvirja ne navaja dimenzije \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:304
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "geometrija okvirja ne navaja dimenzije \"%s\" za rob \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:341
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Vrednost razmerja gumba %g ni smiselna"
|
||||
|
||||
#: ../src/ui/theme.c:353
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Geometrija okvirja ne navaja velikosti gumbov"
|
||||
|
||||
#: ../src/ui/theme.c:1061
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Prelivi bi morali imeti vsaj dve barvi"
|
||||
|
||||
#: ../src/ui/theme.c:1206
|
||||
#, c-format
|
||||
msgid "GTK custom color specification must have color name and fallback in parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr "Navedba barve GTK mora biti opredeljena z imenom barve in v navednicah povrnjeno barvo , npr. gtk:izbirno(ime_barve,povrnjena_barva); ni mogoče razčleniti \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1222
|
||||
#, c-format
|
||||
msgid "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid"
|
||||
msgstr "Neveljaven znak '%c' v imenu barve gtk:izbirno; dovoljeni znaki so le A-Za-z0-9-_."
|
||||
|
||||
#: ../src/ui/theme.c:1236
|
||||
#, c-format
|
||||
msgid "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format"
|
||||
msgstr "Gtk:zapis po meri \"gtk:izbirno(ime_barve,povrnjena_barva)\", \"%s\" ne ustreza pravilni obliki."
|
||||
|
||||
#: ../src/ui/theme.c:1272
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr "Navedba barve GTK mora vsebovati stanje v oglatih oklepajih, npr. gtk:fg[NORMAL], kjer je NORMAL stanje; ni mogoče razčleniti \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1286
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr "Navedbi barve GTK manjka oglati zaklepaj za stanjem, npr. gtk:fg[NORMAL], kjer je NORMAL stanje; ni mogoče razčleniti \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1297
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Ni mogoče razumeti stanja \"%s\" v navedbi barve "
|
||||
|
||||
#: ../src/ui/theme.c:1310
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Ni mogoče razumeti barvne komponente \"%s\" v navedbi barve"
|
||||
|
||||
#: ../src/ui/theme.c:1340
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format"
|
||||
msgstr "Oblika zapisa preliva je \"blend/bg_color/fg_color/alpha\", \"%s\" ne ustreza pravilni obliki"
|
||||
|
||||
#: ../src/ui/theme.c:1351
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "V prelivni barvi ni mogoče razčleniti vrednosti alfa \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1361
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "V prelivni barvi alfa vrednost \"%s\" ni med 0.0 in 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1408
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "Oblika zapisa barve senčenja je \"shade/base_color/factor\", \"%s\" ne ustreza pravilni obliki."
|
||||
|
||||
#: ../src/ui/theme.c:1419
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Ni mogoče razčleniti vrednosti senčenja \"%s\" v senčeni barvi"
|
||||
|
||||
#: ../src/ui/theme.c:1429
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "V senčeni barvi je vrednost senčenja \"%s\" negativna"
|
||||
|
||||
#: ../src/ui/theme.c:1458
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Ni mogoče razčleniti barve \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1769
|
||||
#: ../src/ui/theme.c:1481
|
||||
#, c-format
|
||||
msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
msgstr "Pridobivanje barve %s[%s] iz teme GTK+ je spodletelo.\n"
|
||||
|
||||
#: ../src/ui/theme.c:1713
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Izraz koordinat vsebuje znak '%s', ki pa ni dovoljen"
|
||||
|
||||
#: ../src/ui/theme.c:1796
|
||||
#: ../src/ui/theme.c:1740
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains floating point number '%s' which could not be parsed"
|
||||
msgstr "Izraz koordinat vsebuje številko s plavajočo vejico '%s', ki je ni mogoče razčleniti"
|
||||
|
||||
#: ../src/ui/theme.c:1810
|
||||
#: ../src/ui/theme.c:1754
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Izraz koordinat vsebuje celo število '%s', ki ga ni mogoče razčleniti"
|
||||
|
||||
#: ../src/ui/theme.c:1932
|
||||
#: ../src/ui/theme.c:1876
|
||||
#, c-format
|
||||
msgid "Coordinate expression contained unknown operator at the start of this text: \"%s\""
|
||||
msgstr "Izraz koordinat vsebuje neznan operator na začetku besedila: \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1989
|
||||
#: ../src/ui/theme.c:1933
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Izraz koordinat je prazen ali pa ni v razumljivem zapisu"
|
||||
|
||||
#: ../src/ui/theme.c:2100
|
||||
#: ../src/ui/theme.c:2110
|
||||
#: ../src/ui/theme.c:2144
|
||||
#: ../src/ui/theme.c:2044
|
||||
#: ../src/ui/theme.c:2054
|
||||
#: ../src/ui/theme.c:2088
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Izraz koordinat povzroči deljenje z vrednostjo nič"
|
||||
|
||||
#: ../src/ui/theme.c:2152
|
||||
#: ../src/ui/theme.c:2096
|
||||
#, c-format
|
||||
msgid "Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "Izraz koordinat poskuša uporabiti operator mod ali številko s plavajočo vejico"
|
||||
|
||||
#: ../src/ui/theme.c:2208
|
||||
#: ../src/ui/theme.c:2152
|
||||
#, c-format
|
||||
msgid "Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "Izraz koordinat vsebuje operator \"%s\", kjer je pričakovan operand"
|
||||
|
||||
#: ../src/ui/theme.c:2217
|
||||
#: ../src/ui/theme.c:2161
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Izraz koordinat vsebuje operand kjer je pričakovan operator"
|
||||
|
||||
#: ../src/ui/theme.c:2225
|
||||
#: ../src/ui/theme.c:2169
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Izraz koordinat se konča z operatorjem namesto z operandom"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2179
|
||||
#, c-format
|
||||
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:2386
|
||||
#: ../src/ui/theme.c:2431
|
||||
#: ../src/ui/theme.c:2330
|
||||
#: ../src/ui/theme.c:2375
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Izraz koordinat vsebuje neznano spremenljivko ali konstanto \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2485
|
||||
#: ../src/ui/theme.c:2429
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Razčlenjevalnik izrazov koordinat je preplavil medpomnilnik."
|
||||
|
||||
#: ../src/ui/theme.c:2514
|
||||
#: ../src/ui/theme.c:2458
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Izraz koordinat vsebuje zaklepaj, ne pa tudi uklepaja"
|
||||
|
||||
#: ../src/ui/theme.c:2578
|
||||
#: ../src/ui/theme.c:2522
|
||||
#, 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:2589
|
||||
#: ../src/ui/theme.c:2533
|
||||
#, 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:2801
|
||||
#: ../src/ui/theme.c:2821
|
||||
#: ../src/ui/theme.c:2841
|
||||
#: ../src/ui/theme.c:2745
|
||||
#: ../src/ui/theme.c:2765
|
||||
#: ../src/ui/theme.c:2785
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Tema vsebuje izraz, ki povzroča napako: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4512
|
||||
#: ../src/ui/theme.c:4482
|
||||
#, 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:5042
|
||||
#: ../src/ui/theme.c:5067
|
||||
#: ../src/ui/theme.c:5012
|
||||
#: ../src/ui/theme.c:5037
|
||||
#, 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:5115
|
||||
#: ../src/ui/theme.c:5085
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Napaka med nalaganjem teme \"%s\": %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5251
|
||||
#: ../src/ui/theme.c:5258
|
||||
#: ../src/ui/theme.c:5265
|
||||
#: ../src/ui/theme.c:5272
|
||||
#: ../src/ui/theme.c:5279
|
||||
#: ../src/ui/theme.c:5221
|
||||
#: ../src/ui/theme.c:5228
|
||||
#: ../src/ui/theme.c:5235
|
||||
#: ../src/ui/theme.c:5242
|
||||
#: ../src/ui/theme.c:5249
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Ni nastavljena vrednost <%s> za temo \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:5287
|
||||
#: ../src/ui/theme.c:5257
|
||||
#, c-format
|
||||
msgid "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"
|
||||
msgstr "Ni določenega sloga okvirja okna vrste \"%s\" v temi \"%s\". Dodajte predmet <window type=\"%s\" style_set=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5737
|
||||
#: ../src/ui/theme.c:5799
|
||||
#: ../src/ui/theme.c:5862
|
||||
#: ../src/ui/theme.c:5707
|
||||
#: ../src/ui/theme.c:5769
|
||||
#: ../src/ui/theme.c:5832
|
||||
#, 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; vrednost \"%s\" se ne"
|
||||
|
||||
#: ../src/ui/theme.c:5745
|
||||
#: ../src/ui/theme.c:5807
|
||||
#: ../src/ui/theme.c:5870
|
||||
#: ../src/ui/theme.c:5715
|
||||
#: ../src/ui/theme.c:5777
|
||||
#: ../src/ui/theme.c:5840
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Konstanta \"%s\" je že določena"
|
||||
@@ -1739,136 +1724,133 @@ msgstr "To je preizkusno sporočilo v pogovornem oknu"
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "Lažni predmet menija %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "Okno samo z okvirjem"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "Vrstica"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "Običajno okno programa"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "Pogovorno okno"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "Modalno pogovorno okno"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "Paleta pripomočkov"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "Odtrgan meni"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "Okvir"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Pripeto modalno okno"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Preizkus razporeditve gumbov %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g milisekund za risanje ene sličice okna"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Uporaba: metacity-theme-viewer [IMETEME]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Napaka med nalaganjem teme: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Tema \"%s\" naložena v %g sekundah\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Običajna pisava naziva"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "Majhna pisava naziva"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "Velika pisava naziva"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "Razpored gumbov"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "Meritev"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Tukaj je izpisan naziv okna"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1058
|
||||
#: ../src/ui/theme-viewer.c:1055
|
||||
#, c-format
|
||||
msgid "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g seconds wall clock time including X server resources (%g milliseconds per frame)\n"
|
||||
msgstr "Izrisanih %d sličic v %g sekundah odjemalca (%g milisekund na sličico) in %g sekund v času stenske ure, upoštevajoč sredstva strežnika X (%g milisekund na sličico)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
#: ../src/ui/theme-viewer.c:1274
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "preizkus izjave položaja je vrnil logični PRAV, vendar je določil tudi napako"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
#: ../src/ui/theme-viewer.c:1276
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr "preizkus izjave položaja je vrnil logični NAPAK in ni določil napake"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1283
|
||||
#: ../src/ui/theme-viewer.c:1280
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "Pričakovana je napaka, vendar ni odziva"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1285
|
||||
#: ../src/ui/theme-viewer.c:1282
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "Pričakovana je napaka %d, vrnjena pa je bila %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1291
|
||||
#: ../src/ui/theme-viewer.c:1288
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "Napaka ni pričakovana, vendar je vrnjen odziv: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1295
|
||||
#: ../src/ui/theme-viewer.c:1292
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "vrednost x je %d, pričakovana pa je %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1298
|
||||
#: ../src/ui/theme-viewer.c:1295
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "vrednost y je %d, pričakovana pa je %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1363
|
||||
#: ../src/ui/theme-viewer.c:1360
|
||||
#, 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 "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
#~ msgstr "Pridobivanje barve %s[%s] iz teme GTK+ je spodletelo.\n"
|
||||
|
||||
#~ msgid "Turn compositing on"
|
||||
#~ msgstr "Vključi skladanje"
|
||||
|
||||
|
||||
346
po/sv.po
346
po/sv.po
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-08-24 09:15+0200\n"
|
||||
"PO-Revision-Date: 2011-08-24 09:17+0100\n"
|
||||
"POT-Creation-Date: 2011-03-24 16:07+0100\n"
|
||||
"PO-Revision-Date: 2011-03-24 16:14+0100\n"
|
||||
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
|
||||
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
|
||||
"Language: sv\n"
|
||||
@@ -16,13 +16,6 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:487
|
||||
#, c-format
|
||||
msgid "Another compositing manager is already running on screen %i on display \"%s\"."
|
||||
msgstr "En annan compositing-hanterare körs redan på skärm %i på display \"%s\"."
|
||||
|
||||
#: ../src/core/all-keybindings.h:88
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Växla till arbetsyta 1"
|
||||
@@ -340,24 +333,21 @@ msgstr "Ljudsignalhändelse"
|
||||
msgid "Unknown window information request: %d"
|
||||
msgstr "Okänd fråga efter fönsterinformation: %d"
|
||||
|
||||
#: ../src/core/delete.c:111
|
||||
#. Translators: %s is a window title
|
||||
#: ../src/core/delete.c:94
|
||||
#, c-format
|
||||
msgid "<tt>%s</tt> is not responding."
|
||||
msgstr "<tt>%s</tt> svarar inte."
|
||||
|
||||
#: ../src/core/delete.c:114
|
||||
msgid "Application is not responding."
|
||||
msgstr "Programmet svarar inte."
|
||||
|
||||
#: ../src/core/delete.c:119
|
||||
#: ../src/core/delete.c:99
|
||||
msgid "You may choose to wait a short while for it to continue or force the application to quit entirely."
|
||||
msgstr "Du kan välja att vänta en kort stund på det för att fortsätta eller tvinga programmet att helt avslutas."
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Wait"
|
||||
msgstr "_Vänta"
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Tvinga avslut"
|
||||
|
||||
@@ -379,7 +369,7 @@ msgstr "Ett annat program använder redan tangenten %s med modifierarna %x som e
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -390,12 +380,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "Inget kommando %d har definierats.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "Inget terminalkommando har definierats.\n"
|
||||
@@ -424,12 +414,12 @@ msgstr "Initiera session från sparandefil"
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Gör X-anrop synkrona"
|
||||
|
||||
#: ../src/core/main.c:504
|
||||
#: ../src/core/main.c:506
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Misslyckades med att genomsöka temakatalogen: %s\n"
|
||||
|
||||
#: ../src/core/main.c:520
|
||||
#: ../src/core/main.c:522
|
||||
#, c-format
|
||||
msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
msgstr "Kunde inte hitta ett tema! Försäkra dig om att %s finns och innehåller vanliga teman.\n"
|
||||
@@ -466,164 +456,164 @@ msgstr "Kommaseparerad lista över compositor-instick"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:550
|
||||
#: ../src/core/prefs.c:711
|
||||
#: ../src/core/prefs.c:543
|
||||
#: ../src/core/prefs.c:704
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "GConf-nyckeln \"%s\" är satt till ett ogiltigt värde\n"
|
||||
|
||||
#: ../src/core/prefs.c:637
|
||||
#: ../src/core/prefs.c:880
|
||||
#: ../src/core/prefs.c:630
|
||||
#: ../src/core/prefs.c:873
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "%d lagrad i GConf-nyckeln %s är inte i intervallet %d till %d\n"
|
||||
|
||||
# SUN CHANGED MESSAGE
|
||||
#: ../src/core/prefs.c:681
|
||||
#: ../src/core/prefs.c:758
|
||||
#: ../src/core/prefs.c:806
|
||||
#: ../src/core/prefs.c:870
|
||||
#: ../src/core/prefs.c:1331
|
||||
#: ../src/core/prefs.c:1347
|
||||
#: ../src/core/prefs.c:1364
|
||||
#: ../src/core/prefs.c:1380
|
||||
#: ../src/core/prefs.c:674
|
||||
#: ../src/core/prefs.c:751
|
||||
#: ../src/core/prefs.c:799
|
||||
#: ../src/core/prefs.c:863
|
||||
#: ../src/core/prefs.c:1324
|
||||
#: ../src/core/prefs.c:1340
|
||||
#: ../src/core/prefs.c:1357
|
||||
#: ../src/core/prefs.c:1373
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "GConf-nyckeln \"%s\" är satt till en ogiltig typ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1210
|
||||
#: ../src/core/prefs.c:1203
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr "GConf-nyckeln %s används redan och kan inte användas för att åsidosätta %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1269
|
||||
#: ../src/core/prefs.c:1262
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "Kan inte åsidosätta GConf-nyckeln, %s hittades inte\n"
|
||||
|
||||
#: ../src/core/prefs.c:1454
|
||||
#: ../src/core/prefs.c:1447
|
||||
msgid "Workarounds for broken applications disabled. Some applications may not behave properly.\n"
|
||||
msgstr "Fixar för trasiga program är inaktiverade. En del program fungerar kanske inte korrekt.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1531
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "Kunde inte tolka typsnittsbeskrivningen \"%s\" från GConf-nyckeln %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1593
|
||||
#: ../src/core/prefs.c:1586
|
||||
#, c-format
|
||||
msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
|
||||
msgstr "\"%s\" som hittades i konfigurationsdatabasen är inte ett giltigt värde för musknappsmodifierare\n"
|
||||
|
||||
#: ../src/core/prefs.c:2028
|
||||
#: ../src/core/prefs.c:2016
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "Fel vid inställning av antalet arbetsytor till %d: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2212
|
||||
#: ../src/core/prefs.c:2714
|
||||
#: ../src/core/prefs.c:2200
|
||||
#: ../src/core/prefs.c:2702
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Arbetsyta %d"
|
||||
|
||||
#: ../src/core/prefs.c:2244
|
||||
#: ../src/core/prefs.c:2422
|
||||
#: ../src/core/prefs.c:2232
|
||||
#: ../src/core/prefs.c:2410
|
||||
#, c-format
|
||||
msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
|
||||
msgstr "\"%s\" som hittades i konfigurationsdatabasen är inte ett giltigt värde för tangentbindningen \"%s\"\n"
|
||||
|
||||
#: ../src/core/prefs.c:2795
|
||||
#: ../src/core/prefs.c:2783
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "Fel vid inställning av namnet på arbetsyta %d till \"%s\": %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3009
|
||||
#: ../src/core/prefs.c:2997
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr "Fel vid inställning av status för levande, dolda fönster: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3044
|
||||
#: ../src/core/prefs.c:3032
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "Fel vid inställning av status för ingen flik-popup: %s\n"
|
||||
|
||||
#: ../src/core/screen.c:663
|
||||
#: ../src/core/screen.c:624
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Skärm %d på display \"%s\" är ogiltig\n"
|
||||
|
||||
#: ../src/core/screen.c:679
|
||||
#: ../src/core/screen.c:640
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager; try using the --replace option to replace the current window manager.\n"
|
||||
msgstr "Skärm %d på display \"%s\" har redan en fönsterhanterare; försök med flaggan --replace för att ersätta den aktuella fönsterhanteraren.\n"
|
||||
|
||||
#: ../src/core/screen.c:706
|
||||
#: ../src/core/screen.c:667
|
||||
#, c-format
|
||||
msgid "Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "Kunde inte få tag i fönsterhanterarval på skärm %d display \"%s\"\n"
|
||||
|
||||
#: ../src/core/screen.c:761
|
||||
#: ../src/core/screen.c:722
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "Skärm %d på display \"%s\" har redan en fönsterhanterare\n"
|
||||
|
||||
#: ../src/core/screen.c:946
|
||||
#: ../src/core/screen.c:907
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Kunde inte släppa skärm %d på display \"%s\"\n"
|
||||
|
||||
#: ../src/core/session.c:843
|
||||
#: ../src/core/session.c:850
|
||||
#: ../src/core/session.c:837
|
||||
#: ../src/core/session.c:844
|
||||
#, c-format
|
||||
msgid "Could not create directory '%s': %s\n"
|
||||
msgstr "Kunde inte skapa katalogen \"%s\": %s\n"
|
||||
|
||||
#: ../src/core/session.c:860
|
||||
#: ../src/core/session.c:854
|
||||
#, c-format
|
||||
msgid "Could not open session file '%s' for writing: %s\n"
|
||||
msgstr "Kunde inte öppna sessionsfilen \"%s\" för skrivning: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1001
|
||||
#: ../src/core/session.c:995
|
||||
#, c-format
|
||||
msgid "Error writing session file '%s': %s\n"
|
||||
msgstr "Fel vid skrivning av sessionsfilen \"%s\": %s\n"
|
||||
|
||||
#: ../src/core/session.c:1006
|
||||
#: ../src/core/session.c:1000
|
||||
#, c-format
|
||||
msgid "Error closing session file '%s': %s\n"
|
||||
msgstr "Fel vid stängning av sessionsfilen \"%s\": %s\n"
|
||||
|
||||
#: ../src/core/session.c:1136
|
||||
#: ../src/core/session.c:1130
|
||||
#, c-format
|
||||
msgid "Failed to parse saved session file: %s\n"
|
||||
msgstr "Misslyckades med att tolka sparad sessionsfil: %s\n"
|
||||
|
||||
#: ../src/core/session.c:1185
|
||||
#: ../src/core/session.c:1179
|
||||
#, c-format
|
||||
msgid "<mutter_session> attribute seen but we already have the session ID"
|
||||
msgstr "<mutter_session>-attribut hittat men vi har redan sessions-ID"
|
||||
|
||||
# SUN CHANGED MESSAGE
|
||||
#: ../src/core/session.c:1198
|
||||
#: ../src/core/session.c:1273
|
||||
#: ../src/core/session.c:1305
|
||||
#: ../src/core/session.c:1377
|
||||
#: ../src/core/session.c:1437
|
||||
#: ../src/core/session.c:1192
|
||||
#: ../src/core/session.c:1267
|
||||
#: ../src/core/session.c:1299
|
||||
#: ../src/core/session.c:1371
|
||||
#: ../src/core/session.c:1431
|
||||
#, c-format
|
||||
msgid "Unknown attribute %s on <%s> element"
|
||||
msgstr "Okänt attribut %s i <%s>-element"
|
||||
|
||||
#: ../src/core/session.c:1215
|
||||
#: ../src/core/session.c:1209
|
||||
#, c-format
|
||||
msgid "nested <window> tag"
|
||||
msgstr "nästlad <window>-tagg"
|
||||
|
||||
#: ../src/core/session.c:1457
|
||||
#: ../src/core/session.c:1451
|
||||
#, c-format
|
||||
msgid "Unknown element %s"
|
||||
msgstr "Okänt element %s"
|
||||
|
||||
#: ../src/core/session.c:1809
|
||||
#: ../src/core/session.c:1803
|
||||
msgid "These windows do not support "save current setup" and will have to be restarted manually next time you log in."
|
||||
msgstr "Dessa fönster saknar stöd för "spara nuvarande inställningar" och kommer att behöva startas om manuellt nästa gång du loggar in."
|
||||
|
||||
@@ -665,14 +655,14 @@ msgid "Window manager error: "
|
||||
msgstr "Fönsterhanterarfel: "
|
||||
|
||||
#. Translators: This is the title used on dialog boxes
|
||||
#: ../src/core/util.c:632
|
||||
#: ../src/core/util.c:615
|
||||
#: ../src/mutter.desktop.in.h:1
|
||||
#: ../src/mutter-wm.desktop.in.h:1
|
||||
msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6959
|
||||
#: ../src/core/window.c:6795
|
||||
#, 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 "Fönstret %s ställer in SM_CLIENT_ID på sig själv, istället för på WM_CLIENT_LEADER-fönstret som är angivet i ICCCM.\n"
|
||||
@@ -684,7 +674,7 @@ msgstr "Fönstret %s ställer in SM_CLIENT_ID på sig själv, istället för på
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7622
|
||||
#: ../src/core/window.c:7458
|
||||
#, 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 "Fönstret %s ställer in ett MWM-tips som anger att det inte går att ändra storlek på, men ställer in minsta storleken %d × %d och största storleken %d × %d; detta verkar inte vettigt.\n"
|
||||
@@ -699,16 +689,11 @@ msgstr "Programmet ställde in ett felaktigt _NET_WM_PID %lu\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (på %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1479
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Ogiltigt WM_TRANSIENT_FOR-fönster 0x%lx angivet för %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR-fönstret 0x%lx för %s skulle skapa en loop.\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -747,30 +732,22 @@ msgid "Determines whether workspace switching should happen for windows on all m
|
||||
msgstr "Bestämmer huruvida arbetsyteväxling ska hända för alla fönster på alla skärmar eller endast för fönster på den primära skärmen."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:4
|
||||
msgid "Draggable border width"
|
||||
msgstr "Dragbar rambredd"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "Levande, dolda fönster"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr "Modifierare att använda för utökade fönsterhanteringsåtgärder"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid "The amount of total draggable borders. If the theme's visible borders are not enough, invisible borders will be added to meet this value."
|
||||
msgstr "Mängd av totalt dragbara ramar. Om temats synliga ramar inte är tillräckliga kommer osynliga ramar att läggas till för att möta detta värde."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid "This key will initiate the \"overlay\", which is a combination window overview and application launching system. The default is intended to be the \"Windows key\" on PC hardware. It's expected that this binding either the default or set to the empty string."
|
||||
msgstr "Denna nyckel kommer att initiera \"overlay\", som är en kombinerad fönsteröversikt och programstartare. Standard är tänkt att vara \"Windows-tangenten\" på PC-maskinvara. Det är förväntat att denna bindning antingen är standard eller inställd till en tom sträng."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:9
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid "When true, instead of having independent titlebars, modal dialogs appear attached to the titlebar of the parent window and are moved together with the parent window."
|
||||
msgstr "När true kommer, istället för oberoende titellistor, modala dialogfönster att visas anslutna till titellisten i föräldrafönstret och flyttas tillsammans med föräldrafönstret."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:10
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Arbetsytor endast på primär"
|
||||
|
||||
@@ -779,47 +756,47 @@ msgstr "Arbetsytor endast på primär"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Användning: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1123
|
||||
#: ../src/ui/frames.c:1099
|
||||
msgid "Close Window"
|
||||
msgstr "Stäng fönster"
|
||||
|
||||
#: ../src/ui/frames.c:1126
|
||||
#: ../src/ui/frames.c:1102
|
||||
msgid "Window Menu"
|
||||
msgstr "Fönstermeny"
|
||||
|
||||
#: ../src/ui/frames.c:1129
|
||||
#: ../src/ui/frames.c:1105
|
||||
msgid "Minimize Window"
|
||||
msgstr "Minimera fönster"
|
||||
|
||||
#: ../src/ui/frames.c:1132
|
||||
#: ../src/ui/frames.c:1108
|
||||
msgid "Maximize Window"
|
||||
msgstr "Maximera fönster"
|
||||
|
||||
#: ../src/ui/frames.c:1135
|
||||
#: ../src/ui/frames.c:1111
|
||||
msgid "Restore Window"
|
||||
msgstr "Återställ fönster"
|
||||
|
||||
#: ../src/ui/frames.c:1138
|
||||
#: ../src/ui/frames.c:1114
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Rulla upp fönstret"
|
||||
|
||||
#: ../src/ui/frames.c:1141
|
||||
#: ../src/ui/frames.c:1117
|
||||
msgid "Unroll Window"
|
||||
msgstr "Rulla tillbaka fönstret"
|
||||
|
||||
#: ../src/ui/frames.c:1144
|
||||
#: ../src/ui/frames.c:1120
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Behåll fönstret överst"
|
||||
|
||||
#: ../src/ui/frames.c:1147
|
||||
#: ../src/ui/frames.c:1123
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Ta bort överliggande fönster"
|
||||
|
||||
#: ../src/ui/frames.c:1150
|
||||
#: ../src/ui/frames.c:1126
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Alltid på synlig arbetsyta"
|
||||
|
||||
#: ../src/ui/frames.c:1153
|
||||
#: ../src/ui/frames.c:1129
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Placera fönstret på endast en arbetsyta"
|
||||
|
||||
@@ -1023,247 +1000,232 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d × %d"
|
||||
|
||||
#: ../src/ui/theme.c:253
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "överkant"
|
||||
|
||||
#: ../src/ui/theme.c:255
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "nederkant"
|
||||
|
||||
#: ../src/ui/theme.c:257
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "vänster"
|
||||
|
||||
#: ../src/ui/theme.c:259
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "höger"
|
||||
|
||||
#: ../src/ui/theme.c:286
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "ramgeometrin anger inte \"%s\"-dimension"
|
||||
|
||||
#: ../src/ui/theme.c:305
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "ramgeometrin anger inte dimensionen \"%s\" för ramen \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:342
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Knappförhållandet %g är inte rimligt"
|
||||
|
||||
#: ../src/ui/theme.c:354
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "ramgeometrin anger inte storlek på knappar"
|
||||
|
||||
#: ../src/ui/theme.c:1060
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Toningarna bör ha minst två färger"
|
||||
|
||||
#: ../src/ui/theme.c:1212
|
||||
#, c-format
|
||||
msgid "GTK custom color specification must have color name and fallback in parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr "Anpassad GTK-färgspecifikationen måste ha färgnamn och fallback inom paranteser, t.ex. gtk:custom(foo,bar); kunde inte tolka \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1228
|
||||
#, c-format
|
||||
msgid "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid"
|
||||
msgstr "Ogiltigt tecken \"%c\" i parametern color_name för gtk:custom, endast A-Za-z0-9-_ är giltiga"
|
||||
|
||||
#: ../src/ui/theme.c:1242
|
||||
#, c-format
|
||||
msgid "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format"
|
||||
msgstr "Gtk:custom format är \"gtk:custom(color_name,fallback)\", \"%s\" passar inte formatet"
|
||||
|
||||
#: ../src/ui/theme.c:1287
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr "GTK-färgspecifikationen måste ha tillståndet inom klamrar, t.ex. gtk:fg[NORMAL], där NORMAL är tillståndet; kunde inte tolka \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr "GTK-färgspecifikationen måste ha en stängningsklammer efter tillståndet, t.ex. gtk:fg[NORMAL], där NORMAL är tillståndet; kunde inte tolka \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1312
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Förstod inte tillståndet \"%s\" i färgspecifikation"
|
||||
|
||||
#: ../src/ui/theme.c:1325
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Förstod inte färgkomponenten \"%s\" i färgspecifikation"
|
||||
|
||||
#: ../src/ui/theme.c:1355
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format"
|
||||
msgstr "Blandningsformatet är \"blend/bg_color/fg_color/alpha\", \"%s\" passar inte med formatet"
|
||||
|
||||
#: ../src/ui/theme.c:1366
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Kunde inte tolka alfavärdet \"%s\" i blandad färg"
|
||||
|
||||
#: ../src/ui/theme.c:1376
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "Alfavärdet \"%s\" i blandad färg är inte mellan 0,0 och 1,0"
|
||||
|
||||
#: ../src/ui/theme.c:1423
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "Skuggformatet är \"shade/base_color/factor\", \"%s\" passar inte med formatet"
|
||||
|
||||
#: ../src/ui/theme.c:1434
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Kunde inte tolka skuggfaktorn \"%s\" i skuggad färg"
|
||||
|
||||
#: ../src/ui/theme.c:1444
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Skuggfaktorn \"%s\" i skuggad färg är negativ"
|
||||
|
||||
#: ../src/ui/theme.c:1473
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Kunde inte tolka färgen \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1784
|
||||
#: ../src/ui/theme.c:1646
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Koordinatuttrycket innehåller tecknet \"%s\" vilket inte är tillåtet"
|
||||
|
||||
#: ../src/ui/theme.c:1811
|
||||
#: ../src/ui/theme.c:1673
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains floating point number '%s' which could not be parsed"
|
||||
msgstr "Koordinatuttrycket innehåller flyttalet \"%s\" som inte kunde tolkas"
|
||||
|
||||
#: ../src/ui/theme.c:1825
|
||||
#: ../src/ui/theme.c:1687
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Koordinatuttrycket innehåller heltalet \"%s\" som inte kunde tolkas"
|
||||
|
||||
#: ../src/ui/theme.c:1947
|
||||
#: ../src/ui/theme.c:1809
|
||||
#, c-format
|
||||
msgid "Coordinate expression contained unknown operator at the start of this text: \"%s\""
|
||||
msgstr "Koordinatuttrycket hade en okänd operand vid början av denna text: \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2004
|
||||
#: ../src/ui/theme.c:1866
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Koordinatuttrycket var tomt eller förstods inte"
|
||||
|
||||
#: ../src/ui/theme.c:2115
|
||||
#: ../src/ui/theme.c:2125
|
||||
#: ../src/ui/theme.c:2159
|
||||
#: ../src/ui/theme.c:1977
|
||||
#: ../src/ui/theme.c:1987
|
||||
#: ../src/ui/theme.c:2021
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Koordinatuttrycket resulterar i division med noll"
|
||||
|
||||
#: ../src/ui/theme.c:2167
|
||||
#: ../src/ui/theme.c:2029
|
||||
#, c-format
|
||||
msgid "Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "Koordinatuttrycket försöker använda mod-operator på ett flyttal"
|
||||
|
||||
#: ../src/ui/theme.c:2223
|
||||
#: ../src/ui/theme.c:2085
|
||||
#, c-format
|
||||
msgid "Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "Koordinatuttrycket har en operator \"%s\" där en operand förväntades"
|
||||
|
||||
#: ../src/ui/theme.c:2232
|
||||
#: ../src/ui/theme.c:2094
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Koordinatuttrycket hade en operand där en operator förväntades"
|
||||
|
||||
#: ../src/ui/theme.c:2240
|
||||
#: ../src/ui/theme.c:2102
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Koordinatuttrycket slutade med en operator istället för en operand"
|
||||
|
||||
#: ../src/ui/theme.c:2250
|
||||
#: ../src/ui/theme.c:2112
|
||||
#, c-format
|
||||
msgid "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between"
|
||||
msgstr "Koordinatuttrycket har en operator \"%c\" som följer på operatorn \"%c\" utan någon operand imellan"
|
||||
|
||||
#: ../src/ui/theme.c:2401
|
||||
#: ../src/ui/theme.c:2446
|
||||
#: ../src/ui/theme.c:2263
|
||||
#: ../src/ui/theme.c:2308
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Koordinatuttrycket hade en okänd variabel eller konstant \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2500
|
||||
#: ../src/ui/theme.c:2362
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Koordinatuttryckstolkaren överflödade sin buffert."
|
||||
|
||||
#: ../src/ui/theme.c:2529
|
||||
#: ../src/ui/theme.c:2391
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Koordinatuttrycket hade en stängningsparentes utan någon öppningsparentes"
|
||||
|
||||
#: ../src/ui/theme.c:2593
|
||||
#: ../src/ui/theme.c:2455
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "Koordinatuttrycket hade en öppningsparentes utan någon stängningsparentes"
|
||||
|
||||
#: ../src/ui/theme.c:2604
|
||||
#: ../src/ui/theme.c:2466
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "Koordinatuttrycket verkar inte ha några operatorer eller operander"
|
||||
|
||||
#: ../src/ui/theme.c:2816
|
||||
#: ../src/ui/theme.c:2836
|
||||
#: ../src/ui/theme.c:2856
|
||||
#: ../src/ui/theme.c:2676
|
||||
#: ../src/ui/theme.c:2696
|
||||
#: ../src/ui/theme.c:2716
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Temat innehöll ett uttryck som resulterade i ett fel: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4527
|
||||
#: ../src/ui/theme.c:4410
|
||||
#, c-format
|
||||
msgid "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style"
|
||||
msgstr "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> måste anges för denna ramtyp"
|
||||
|
||||
#: ../src/ui/theme.c:5060
|
||||
#: ../src/ui/theme.c:5085
|
||||
#: ../src/ui/theme.c:4940
|
||||
#: ../src/ui/theme.c:4965
|
||||
#, c-format
|
||||
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> saknas"
|
||||
|
||||
#: ../src/ui/theme.c:5133
|
||||
#: ../src/ui/theme.c:5013
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Misslyckades med att läsa in temat \"%s\": %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5269
|
||||
#: ../src/ui/theme.c:5276
|
||||
#: ../src/ui/theme.c:5283
|
||||
#: ../src/ui/theme.c:5290
|
||||
#: ../src/ui/theme.c:5297
|
||||
#: ../src/ui/theme.c:5149
|
||||
#: ../src/ui/theme.c:5156
|
||||
#: ../src/ui/theme.c:5163
|
||||
#: ../src/ui/theme.c:5170
|
||||
#: ../src/ui/theme.c:5177
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Inget <%s> angivet för temat \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:5305
|
||||
#: ../src/ui/theme.c:5185
|
||||
#, c-format
|
||||
msgid "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"
|
||||
msgstr "Ingen ramstil angiven för fönstertypen \"%s\" i temat \"%s\", lägg till ett <window type=\"%s\" style_set=\"whatever\"/>-element"
|
||||
|
||||
#: ../src/ui/theme.c:5744
|
||||
#: ../src/ui/theme.c:5806
|
||||
#: ../src/ui/theme.c:5869
|
||||
#: ../src/ui/theme.c:5635
|
||||
#: ../src/ui/theme.c:5697
|
||||
#: ../src/ui/theme.c:5760
|
||||
#, c-format
|
||||
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "Användardefinierade konstanter måste börja med en stor bokstav; \"%s\" gör det inte"
|
||||
|
||||
#: ../src/ui/theme.c:5752
|
||||
#: ../src/ui/theme.c:5814
|
||||
#: ../src/ui/theme.c:5877
|
||||
#: ../src/ui/theme.c:5643
|
||||
#: ../src/ui/theme.c:5705
|
||||
#: ../src/ui/theme.c:5768
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Konstanten \"%s\" har redan definierats"
|
||||
@@ -1714,88 +1676,88 @@ msgstr "Detta är ett exempelmeddelande i en exempelkatalog"
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "Falskt menyobjekt %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "Fönster med endast ram"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "Rad"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "Normalt programfönster"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "Dialogruta"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "Modalt dialogfönster"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "Verktygspalett"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "Avtagen meny"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "Ram"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Bifogat modalt dialogfönster"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Test %d av knapplayout"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g millisekunder för att rita en fönsterram"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Användning: metacity-theme-viewer [TEMANAMN]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Fel vid inläsning av tema: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Läste in temat \"%s\" på %g sekunder\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Normalt titeltypsnitt"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "Litet titeltypsnitt"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "Stort titeltypsnitt"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "Knapplayouter"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "Prestandatest"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Fönstertitel hamnar här"
|
||||
|
||||
|
||||
269
po/ug.po
269
po/ug.po
@@ -10,8 +10,8 @@ msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-08-27 17:13+0000\n"
|
||||
"PO-Revision-Date: 2011-08-08 16:52+0600\n"
|
||||
"POT-Creation-Date: 2011-06-30 21:06+0000\n"
|
||||
"PO-Revision-Date: 2011-06-27 11:17+0600\n"
|
||||
"Last-Translator: Sahran <sahran.ug@gmail.com>\n"
|
||||
"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -20,13 +20,16 @@ msgstr ""
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:487
|
||||
#, c-format
|
||||
#: ../src/compositor/compositor.c:509
|
||||
#, fuzzy, c-format
|
||||
#| msgid ""
|
||||
#| "Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
msgstr ""
|
||||
"كۆرسەتكۈچ \"%2$s\" نىڭدىكى ئېكران %1$d دا بۆلەك باشقۇرغۇچ ئىجرا قىلىنىۋاتىدۇ."
|
||||
"كۆرسەتكۈچ \"%2$s\" نىڭدىكى ئېكران %1$d دا كۆزنەك باشقۇرغۇنىڭ تاللانمىسىنى "
|
||||
"ئالغىلى بولمىدى\n"
|
||||
|
||||
#: ../src/core/all-keybindings.h:88
|
||||
msgid "Switch to workspace 1"
|
||||
@@ -398,7 +401,7 @@ msgstr ""
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -409,12 +412,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "بۇيرۇق %d بېكىتىلمىگەن.\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "تېرمىنال بۇيرۇققا ئېنىقلىما بېرىلمىگەن .\n"
|
||||
@@ -489,41 +492,41 @@ msgstr "پەش بىلەن ئايرىلغان تىزىم ۋە بىرىكمە رە
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:550 ../src/core/prefs.c:711
|
||||
#: ../src/core/prefs.c:543 ../src/core/prefs.c:704
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr ""
|
||||
"GConf نىڭ ئاچقۇچ سۆزى“%s” ئۈنۈمسىز \n"
|
||||
" قىلىپ تەڭشەلگەن\n"
|
||||
|
||||
#: ../src/core/prefs.c:637 ../src/core/prefs.c:880
|
||||
#: ../src/core/prefs.c:630 ../src/core/prefs.c:873
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr ""
|
||||
"GConf نىڭ %2$s ئاچقۇچىنىڭ قىممىتى %1$d نىڭ دائىرىسى %3$d〜%4$d نىڭ ئىچىدە "
|
||||
"ئەمەس\n"
|
||||
|
||||
#: ../src/core/prefs.c:681 ../src/core/prefs.c:758 ../src/core/prefs.c:806
|
||||
#: ../src/core/prefs.c:870 ../src/core/prefs.c:1331 ../src/core/prefs.c:1347
|
||||
#: ../src/core/prefs.c:1364 ../src/core/prefs.c:1380
|
||||
#: ../src/core/prefs.c:674 ../src/core/prefs.c:751 ../src/core/prefs.c:799
|
||||
#: ../src/core/prefs.c:863 ../src/core/prefs.c:1324 ../src/core/prefs.c:1340
|
||||
#: ../src/core/prefs.c:1357 ../src/core/prefs.c:1373
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr ""
|
||||
"GConf نىڭ ئاچقۇچلۇق سۆزى “%s” ئۈنۈمسىز تىپتىكى \n"
|
||||
" قىلىپ تەڭشەلگەن\n"
|
||||
|
||||
#: ../src/core/prefs.c:1210
|
||||
#: ../src/core/prefs.c:1203
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr ""
|
||||
"GConf ئاچقۇچى %s ئىشلىتىلىۋاتىدۇ، شۇڭا %s نى قاپلاشقا ئىشلەتكىلى بولمايدۇ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1269
|
||||
#: ../src/core/prefs.c:1262
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "GConf ئاچقۇچىنى قاپلىغىلى بولمىدى، %s تېپىلمىدى\n"
|
||||
|
||||
#: ../src/core/prefs.c:1454
|
||||
#: ../src/core/prefs.c:1447
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -531,14 +534,14 @@ msgstr ""
|
||||
"بۇزۇلغان پروگراممىلارنى تۈزىتىش-ياخشىلاش قوزغىتىلمىغان. بەزى پروگراممىلار "
|
||||
"نورمال ئىشلىمەسلىكى مۇمكىن.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1531
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr ""
|
||||
"خەت نۇسخىسىنىڭ چۈشەندۈرۈلۈشىنى ئانالىز قىلغىلى بولمىدى “%s” ( GConf دىكى "
|
||||
"ئاچقۇچلۇق سۆز %s )\n"
|
||||
|
||||
#: ../src/core/prefs.c:1593
|
||||
#: ../src/core/prefs.c:1586
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -548,17 +551,17 @@ msgstr ""
|
||||
"ئۈنۈملۈك قىممەت \n"
|
||||
" ئەمەس\n"
|
||||
|
||||
#: ../src/core/prefs.c:2028
|
||||
#: ../src/core/prefs.c:2016
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "خىزمەت رايونى سانىنى %d قىلىپ تەڭشەشتە كۆرۈلگەن خاتالىق :%s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2212 ../src/core/prefs.c:2714
|
||||
#: ../src/core/prefs.c:2200 ../src/core/prefs.c:2702
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "خىزمەت بوشلۇقى %d"
|
||||
|
||||
#: ../src/core/prefs.c:2244 ../src/core/prefs.c:2422
|
||||
#: ../src/core/prefs.c:2232 ../src/core/prefs.c:2410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -567,18 +570,18 @@ msgstr ""
|
||||
"سەپلىمە ساندانىدىن تېپىلغان \"%s\"، \"%s\" كۇنۇپكا باغلانمىسىنىڭ ئىناۋەتلىك "
|
||||
"قىممىتى ئەمەس\n"
|
||||
|
||||
#: ../src/core/prefs.c:2795
|
||||
#: ../src/core/prefs.c:2783
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "خىزمەت مۇھىتى %d غا \"%s\" دەپ ئائىت قويۇشتا خاتالىق كۆرۈلدى: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3009
|
||||
#: ../src/core/prefs.c:2997
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr ""
|
||||
"شۇئان يوشۇرۇنىدىغان كۆزنەك ھالىتىنى تەڭشەۋاتقاندا خاتالىق كۆرۈلدى: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3044
|
||||
#: ../src/core/prefs.c:3032
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "بەتكۈچ يوق قاڭقىش ھالىتىنى تەڭشەۋەتقاندا خاتالىق كۆرۈلدى: %s\n"
|
||||
@@ -718,7 +721,7 @@ msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7019
|
||||
#: ../src/core/window.c:6886
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -734,7 +737,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7682
|
||||
#: ../src/core/window.c:7549
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -756,17 +759,12 @@ msgstr ""
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (ھەققىدە %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1481
|
||||
#: ../src/core/window-props.c:1484
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr ""
|
||||
"%2$s گە بەلگىلەنگەن ئۈنۈمسىز WM_TRANSIENT_FOR كۆزنەك 0x%1$lx بولىدۇ.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1492
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "%2$s نىڭ WM_TRANSIENT_FOR كۆزنەك0x%1$lx دەۋرىيلىك قۇرۇشى مۇمكىن.\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -817,24 +815,14 @@ msgstr ""
|
||||
"ئېكرانغىلا قارىتىلغانلىقىنى جەزملەيدۇ."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:4
|
||||
msgid "Draggable border width"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "شۇئان يوشۇرۇنىدىغان كۆزنەكلەر"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr "كېڭەيتىلگەن كۆزنەك باشقۇرۇش مەشغۇلاتىغا ئىشلىتىلىدىغان ئۆزگەرتىش"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
@@ -846,7 +834,7 @@ msgstr ""
|
||||
"ئەھۋالدا يەككە كومپيۇتېردىكى \"Windows key\" كۇنۇپكىسىنى ئىشلىتىشنى تەلەپ "
|
||||
"قىلىدۇ. بەلكىم كۆڭۈلدىكى ياكى بوش تىزىقنى ئىشلىتىدۇ."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:9
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@@ -855,7 +843,7 @@ msgstr ""
|
||||
"true بولغاندا مودېل سۆزلەشكۈ ئاتا كۆزنەكنىڭ ماۋزۇ بالداققا يېپىشىپ كۆرۈنىدۇ "
|
||||
"ھەمدە ئاتا كۆزنەككە ئەگىشىپ يۆتكىلىدۇ، ئايرىم ماۋزۇ بالدىقى بولمايدۇ."
|
||||
|
||||
#: ../src/mutter.schemas.in.h:10
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "ئاساسىي كۆزەتكۈچتىكى خىزمەت رايونىغىلا"
|
||||
|
||||
@@ -864,47 +852,47 @@ msgstr "ئاساسىي كۆزەتكۈچتىكى خىزمەت رايونىغىل
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "ئىشلىتىش ئۇسۇلى:%s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1157
|
||||
#: ../src/ui/frames.c:1280
|
||||
msgid "Close Window"
|
||||
msgstr "كۆزنەك ياپ"
|
||||
|
||||
#: ../src/ui/frames.c:1160
|
||||
#: ../src/ui/frames.c:1283
|
||||
msgid "Window Menu"
|
||||
msgstr "كۆزنەك تىزىملىكى"
|
||||
|
||||
#: ../src/ui/frames.c:1163
|
||||
#: ../src/ui/frames.c:1286
|
||||
msgid "Minimize Window"
|
||||
msgstr "كۆزنەكنى كىچىكلەت"
|
||||
|
||||
#: ../src/ui/frames.c:1166
|
||||
#: ../src/ui/frames.c:1289
|
||||
msgid "Maximize Window"
|
||||
msgstr "كۆزنەكنى چوڭايت"
|
||||
|
||||
#: ../src/ui/frames.c:1169
|
||||
#: ../src/ui/frames.c:1292
|
||||
msgid "Restore Window"
|
||||
msgstr "كۆزنەكنى ئەسلىگە كەلتۈر"
|
||||
|
||||
#: ../src/ui/frames.c:1172
|
||||
#: ../src/ui/frames.c:1295
|
||||
msgid "Roll Up Window"
|
||||
msgstr "كۆزنەكنى تۈر"
|
||||
|
||||
#: ../src/ui/frames.c:1175
|
||||
#: ../src/ui/frames.c:1298
|
||||
msgid "Unroll Window"
|
||||
msgstr "كۆزنەكنى تۈرمە"
|
||||
|
||||
#: ../src/ui/frames.c:1178
|
||||
#: ../src/ui/frames.c:1301
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "كۆزنەكنى چوققىلاشنى ساقلا"
|
||||
|
||||
#: ../src/ui/frames.c:1181
|
||||
#: ../src/ui/frames.c:1304
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "كۆزنەكنى چوققىلاشنى بىكار قىلىش"
|
||||
|
||||
#: ../src/ui/frames.c:1184
|
||||
#: ../src/ui/frames.c:1307
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "خىزمەت رايونىدا ئىزچىل كۆرۈنسۇن"
|
||||
|
||||
#: ../src/ui/frames.c:1187
|
||||
#: ../src/ui/frames.c:1310
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "بىر خىزمەت رايونىغا ئورۇنلاشتۇرۇش"
|
||||
|
||||
@@ -1016,7 +1004,7 @@ msgstr "باشقا خىزمەت بوشلۇقىغا يۆتكە(_W)"
|
||||
#.
|
||||
#: ../src/ui/metaaccellabel.c:77
|
||||
msgid "Shift"
|
||||
msgstr "Shift"
|
||||
msgstr "Shift كۇنۇپكىسى"
|
||||
|
||||
#. This is the text that should appear next to menu accelerators
|
||||
#. * that use the control key. If the text on this key isn't typically
|
||||
@@ -1107,77 +1095,50 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:253
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "چوققا"
|
||||
|
||||
#: ../src/ui/theme.c:255
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "ئاستى"
|
||||
|
||||
#: ../src/ui/theme.c:257
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "سول"
|
||||
|
||||
#: ../src/ui/theme.c:259
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "ئوڭ"
|
||||
|
||||
#: ../src/ui/theme.c:286
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "كاندۇك گىيومېتىرىك جايلاشتۇرۇش \"%s\" نىڭ چوڭلۇقىنى بەلگىلىمىگەن"
|
||||
|
||||
#: ../src/ui/theme.c:305
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr ""
|
||||
"كاندۇك گىيومېتىرىك جايلاشتۇرۇش \"%s\" نىڭ چوڭلۇقىنى بەلگىلىمىگەن(\"%s\" "
|
||||
"گىرۋىكىگە بەلگىلەنگەن)"
|
||||
|
||||
#: ../src/ui/theme.c:342
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "كۇنۇپكا ئۇزۇنلۇق كەڭلىك نىسبىتى %g غا ماس كەلمەيدۇ"
|
||||
|
||||
#: ../src/ui/theme.c:354
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "كاندۇك گىيومېتىرىك جايلاشتۇرۇشتا تۈگمە چوڭلۇقى بەلگىلەنمىگەن"
|
||||
|
||||
#: ../src/ui/theme.c:1060
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "تەدرىجىي ئۆزگىرىشتە ئاز دېگەندە ئىككى خىل رەڭ بولۇش كېرەك"
|
||||
|
||||
#: ../src/ui/theme.c:1212
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
"GTK رەڭ ئۆلچىمىدە ھالەتتىن كېيىن چوقۇم رەڭ ئاتى ۋە زاپاس بولۇشى لازىم، "
|
||||
"مەسىلەن، gtk:custom(foo,bar) ھالەت؛ \"%s\" نى تەھلىل قىلالمايدۇ"
|
||||
|
||||
#: ../src/ui/theme.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
"gtk:custom نىڭ color_name پارامېتىرىدىكى ئىناۋەتسىز ھەرپ '%c'، پەقەت A-Za-z0-"
|
||||
"9-_ نىلا ئىشلەتكىلى بولىدۇ"
|
||||
|
||||
#: ../src/ui/theme.c:1242
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr ""
|
||||
"Gtk:custom نىڭ پىچىمى \"gtk:custom(color_name,fallback)\" بولۇپ، \"%s\" "
|
||||
"پىچىمغا توغرا كەلمەيدۇ"
|
||||
|
||||
#: ../src/ui/theme.c:1287
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -1186,7 +1147,7 @@ msgstr ""
|
||||
"GTK رەڭ ئۆلچىمىدە ھالەت چوقۇم ئوتتۇرا تىرناققا ئېلىنىشى لازىم، مەسىلەن، gtk:"
|
||||
"fg[NORMAL] بۇنىڭدىكى NORMAL ھالەت؛ \"%s\" نى تەھلىل قىلالمايدۇ"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -1195,17 +1156,17 @@ msgstr ""
|
||||
"GTK رەڭ ئۆلچىمىدە ھالەتتىن كېيىن چوقۇم ئوتتۇرا تىرناق يېپىلىشى لازىم، "
|
||||
"مەسىلەن، gtk:fg[NORMAL] بۇنىڭدىكى NORMAL ھالەت؛ \"%s\" نى تەھلىل قىلالمايدۇ"
|
||||
|
||||
#: ../src/ui/theme.c:1312
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "رەڭ بەلگىلىمىسىدىكى «%s» ھالەتنى چۈشەنگىلى بولمىدى"
|
||||
|
||||
#: ../src/ui/theme.c:1325
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "رەڭ بەلگىلىمىسىدىكى «%s» رەڭ بۆلىكىنى چۈشەنگىلى بولمىدى"
|
||||
|
||||
#: ../src/ui/theme.c:1355
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -1214,44 +1175,49 @@ msgstr ""
|
||||
"بىرىكمە رەڭنىڭ فورماتى \"blend/bg_color/fg_color/alpha\"، \"%s\" بۇ "
|
||||
"فورماتقا ماس كەلمىدى"
|
||||
|
||||
#: ../src/ui/theme.c:1366
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "بىرىكمە رەڭدىكى ئالفا قىممىتى \"%s\" نى تەھلىل قىلغىلى بولمىدى"
|
||||
|
||||
#: ../src/ui/theme.c:1376
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr ""
|
||||
"بىرىكمە رەڭنىڭ ئالفا قىممىتى \"%s\" نىڭ دائىرىسى 0.0 ~1.0 ئىچىدە ئەمەس"
|
||||
|
||||
#: ../src/ui/theme.c:1423
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "سايە پىچىمى \"shade/base_color/factor\"، \"%s\" پىچىمغا توغرا كەلمەيدۇ"
|
||||
|
||||
#: ../src/ui/theme.c:1434
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "سايە رەڭگىدىكى سايە فاكتور «%s»نى تەھلىل قىلغىلى بولمىدى"
|
||||
|
||||
#: ../src/ui/theme.c:1444
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "سايە رەڭگىدىكى سايە فاكتور “%s” مەنپىي سان"
|
||||
|
||||
#: ../src/ui/theme.c:1473
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "رەڭنى تەھلىل قىلغىلى بولمىدى“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1784
|
||||
#: ../src/ui/theme.c:1481
|
||||
#, c-format
|
||||
msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
msgstr "GTK+ ئۆرنەكتىن رەڭ %s[%s] نى ئىزدىيەلمىدى\n"
|
||||
|
||||
#: ../src/ui/theme.c:1713
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە رۇخسەت قىلىنمىغان تېكىست '%s' بار"
|
||||
|
||||
#: ../src/ui/theme.c:1811
|
||||
#: ../src/ui/theme.c:1740
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@@ -1260,54 +1226,54 @@ msgstr ""
|
||||
"كوئوردېنات ئىپادىسىنىڭ تەركىبىدە تەھلىل قىلغىلى بولمايدىغان كەسىر سان '%s' "
|
||||
"بار"
|
||||
|
||||
#: ../src/ui/theme.c:1825
|
||||
#: ../src/ui/theme.c:1754
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
"كوئوردېنات ئىپادىسىنىڭ تەركىبىدە تەھلىل قىلغىلى بولمايدىغان پۈتۈن سان '%s' "
|
||||
"بار"
|
||||
|
||||
#: ../src/ui/theme.c:1947
|
||||
#: ../src/ui/theme.c:1876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr "كوئوردېنات ئىپادىسىنىڭ بېشىدا نامەلۇم ئەمەل بار: «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:2004
|
||||
#: ../src/ui/theme.c:1933
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "كوئوردېناتنىڭ ئىپادىلەش شەكلى قۇرۇق ياكى چۈشىنىكسىز"
|
||||
|
||||
#: ../src/ui/theme.c:2115 ../src/ui/theme.c:2125 ../src/ui/theme.c:2159
|
||||
#: ../src/ui/theme.c:2044 ../src/ui/theme.c:2054 ../src/ui/theme.c:2088
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "كوئوردېناتنىڭ ئىپادىلەش شەكلى 0 نى بۆلگۈچ قىلغان"
|
||||
|
||||
#: ../src/ui/theme.c:2167
|
||||
#: ../src/ui/theme.c:2096
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "كوئوردېنات ئىپادىسى كەسىر سانغا mod ئەمىلىنى ئىشلەتمەكچى"
|
||||
|
||||
#: ../src/ui/theme.c:2223
|
||||
#: ../src/ui/theme.c:2152
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr ""
|
||||
"كوئوردېنات ئىپادىسىنىڭ تەركىبىدە سان كېلىدىغان يەردە ئەمەل \"%s\" بار ئىكەن"
|
||||
|
||||
#: ../src/ui/theme.c:2232
|
||||
#: ../src/ui/theme.c:2161
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل كېلىدىغان يەردە سان بار ئىكەن"
|
||||
|
||||
#: ../src/ui/theme.c:2240
|
||||
#: ../src/ui/theme.c:2169
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "كوئوردېنات ئىپادىسى سان بىلەن ئاياغلاشماي ئەمەل بىلەن ئاياغلاشقان"
|
||||
|
||||
#: ../src/ui/theme.c:2250
|
||||
#: ../src/ui/theme.c:2179
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -1316,43 +1282,43 @@ msgstr ""
|
||||
"كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل \"%2$c\" نىڭ ئارقىسىدىن ئەمەل \"%1$c"
|
||||
"\" كېلىپتۇ، ئارىلىقتا سان يوق ئىكەن"
|
||||
|
||||
#: ../src/ui/theme.c:2401 ../src/ui/theme.c:2446
|
||||
#: ../src/ui/theme.c:2330 ../src/ui/theme.c:2375
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr ""
|
||||
"كوئوردېنات ئىپادىسىنىڭ تەركىبىدە نامەلۇم ئۆزگەرگۈچى ياكى تۇراقلىق سان \"%s\" "
|
||||
"بار ئىكەن"
|
||||
|
||||
#: ../src/ui/theme.c:2500
|
||||
#: ../src/ui/theme.c:2429
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "كوئوردېنات ئىپادىسىنى تەھلىل قىلىۋاتقاندا يىغلەك تېشىپ كەتتى."
|
||||
|
||||
#: ../src/ui/theme.c:2529
|
||||
#: ../src/ui/theme.c:2458
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
"كوئوردېنات ئىپادىسىنىڭ تەركىبىدىكى يېپىلغان تىرناققا ماس كېلىدىغان ئېچىلغان "
|
||||
"تىرناق يوق"
|
||||
|
||||
#: ../src/ui/theme.c:2593
|
||||
#: ../src/ui/theme.c:2522
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
"كوئوردېنات ئىپادىسىنىڭ تەركىبىدىكى ئېچىلغان تىرناققا ماس كېلىدىغان يېپىلغان "
|
||||
"تىرناق يوق"
|
||||
|
||||
#: ../src/ui/theme.c:2604
|
||||
#: ../src/ui/theme.c:2533
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل(قوشۇش، ئېلىش...) ياكى سان يوق"
|
||||
|
||||
#: ../src/ui/theme.c:2816 ../src/ui/theme.c:2836 ../src/ui/theme.c:2856
|
||||
#: ../src/ui/theme.c:2745 ../src/ui/theme.c:2765 ../src/ui/theme.c:2785
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "تېما تەركىبىدە خاتالىق چىقىرىدىغان ئىپادە بار: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4527
|
||||
#: ../src/ui/theme.c:4482
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1361,25 +1327,25 @@ msgstr ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/>بۇ كۆزنەكنىڭ "
|
||||
"ئۇسلۇبى ئۈچۈن بەلگىلىنىشى زۆرۈر"
|
||||
|
||||
#: ../src/ui/theme.c:5060 ../src/ui/theme.c:5085
|
||||
#: ../src/ui/theme.c:5012 ../src/ui/theme.c:5037
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> يوق"
|
||||
|
||||
#: ../src/ui/theme.c:5133
|
||||
#: ../src/ui/theme.c:5085
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "تېما “%s” نى كىرگۈزگىلى بولمىدى:%s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5269 ../src/ui/theme.c:5276 ../src/ui/theme.c:5283
|
||||
#: ../src/ui/theme.c:5290 ../src/ui/theme.c:5297
|
||||
#: ../src/ui/theme.c:5221 ../src/ui/theme.c:5228 ../src/ui/theme.c:5235
|
||||
#: ../src/ui/theme.c:5242 ../src/ui/theme.c:5249
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "ئۇسلۇب \"%1$s\" نىڭ <%2$s> ئى بەلگىلەنمىگەن"
|
||||
|
||||
#: ../src/ui/theme.c:5305
|
||||
#: ../src/ui/theme.c:5257
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1388,7 +1354,7 @@ msgstr ""
|
||||
"كۆزنەك تىپى \"%s\" (\"%s\" تېمىدا)غا كاندۇك كۆزنەك تەڭشەلمىگەن، بىر <window "
|
||||
"type=\"%s\" style_set=\"whatever\"/> ئېلېمېنتى قوشۇڭ"
|
||||
|
||||
#: ../src/ui/theme.c:5744 ../src/ui/theme.c:5806 ../src/ui/theme.c:5869
|
||||
#: ../src/ui/theme.c:5707 ../src/ui/theme.c:5769 ../src/ui/theme.c:5832
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@@ -1396,7 +1362,7 @@ msgstr ""
|
||||
"ئىشلەتكۈچى بەلگىلىگەن تۇراقلىق مىقدار چوقۇم چوڭ ھەرپ بىلەن باشلانسۇن؛ «%s» "
|
||||
"بولمايدۇ"
|
||||
|
||||
#: ../src/ui/theme.c:5752 ../src/ui/theme.c:5814 ../src/ui/theme.c:5877
|
||||
#: ../src/ui/theme.c:5715 ../src/ui/theme.c:5777 ../src/ui/theme.c:5840
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "تۇراقلىق سان “%s” غا ئېنىقلىما بېرىلگەن"
|
||||
@@ -1855,88 +1821,88 @@ msgstr "بۇ ئۈلگە سۆزلەشكۈسىدىكى مىسال ئۇچۇرى"
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "مەۋھۇم تىزىملىك تۈرى %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "گىرۋەكلىك كۆزنەك"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "تۈۋرۈكسىمان دىئاگرامما"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "ئادەتتىكى پروگرامما كۆزنىكى"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "سۆزلەشكۈ كۆزنەكچىسى"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "ھالەت سۆزلەشكۈ رامكىسى"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "قورال كۇنۇپكىسى"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "بۆلىۋالغان تىزىملىك"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "گىرۋەك"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "قوشۇلغان Modal سۆزلەشكۈ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "كۇنۇپكا ئورۇنلاشتۇرۇلۇشىنى سىناش %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g مىللىسېكۇنت(بىر كۆزنەك كاندۇكىنى سىزىشقا كەتكەن ۋاقىت)"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "ئىشلىتىش ئۇسۇلى: metacity-theme-viewer [ئۇسلۇب ئاتى]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "تېما قاچىلاشتا خاتالىق كۆرۈلدى:%s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "\"%s\" دېگەن ئۇسلۇبنى %g سېكۇنتتا ئوقۇدى\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "ئادەتتىكى ماۋزۇ خەت نۇسخىسى"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "تارماق ماۋزۇ خەت نۇسخىسى"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "ماۋزۇ خەت نۇسخىسى"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "كۇنۇپكا ئورۇنلاشتۇرۇلۇشى"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "ئاساسىي ئۆلچەم"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "بۇ يەردە كۆزنەك ماۋزۇسى كۆرسىتىلىدۇ"
|
||||
|
||||
@@ -1989,9 +1955,6 @@ msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr ""
|
||||
"%d كوئوردېنات ئىپادىسى %g سېكۇنتتا تەھلىل قىلىندى(%g ئوتتۇرىچە سېكۇنت)\n"
|
||||
|
||||
#~ msgid "Failed to retrieve color %s[%s] from GTK+ theme.\n"
|
||||
#~ msgstr "GTK+ ئۆرنەكتىن رەڭ %s[%s] نى ئىزدىيەلمىدى\n"
|
||||
|
||||
#~ msgid "Turn compositing on"
|
||||
#~ msgstr "ئارىلاشتۇرۇشنى ئىچىش"
|
||||
|
||||
|
||||
310
po/zh_CN.po
310
po/zh_CN.po
@@ -16,8 +16,8 @@ msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-08-10 12:42+0000\n"
|
||||
"PO-Revision-Date: 2011-08-21 15:16+0000\n"
|
||||
"POT-Creation-Date: 2011-03-23 20:40+0000\n"
|
||||
"PO-Revision-Date: 2011-03-24 17:18+0000\n"
|
||||
"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
|
||||
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -25,15 +25,6 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:487
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
msgstr "DISPLAY %2$s 的屏幕 %1$i 上已有另外一个混成窗口管理器正在运行。"
|
||||
|
||||
#: ../src/core/all-keybindings.h:88
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "切换到工作区 1"
|
||||
@@ -351,26 +342,23 @@ msgstr "响铃事件"
|
||||
msgid "Unknown window information request: %d"
|
||||
msgstr "未知的窗口信息请求:%d"
|
||||
|
||||
#: ../src/core/delete.c:111
|
||||
#. Translators: %s is a window title
|
||||
#: ../src/core/delete.c:94
|
||||
#, c-format
|
||||
msgid "<tt>%s</tt> is not responding."
|
||||
msgstr "<tt>%s</tt> 未响应。"
|
||||
|
||||
#: ../src/core/delete.c:114
|
||||
msgid "Application is not responding."
|
||||
msgstr "应用程序未响应。"
|
||||
|
||||
#: ../src/core/delete.c:119
|
||||
#: ../src/core/delete.c:99
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr "您可以选择稍等一会儿,或者强制退出该应用程序。"
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Wait"
|
||||
msgstr "等待(_W)"
|
||||
|
||||
#: ../src/core/delete.c:126
|
||||
#: ../src/core/delete.c:108
|
||||
msgid "_Force Quit"
|
||||
msgstr "强制退出(_F)"
|
||||
|
||||
@@ -394,7 +382,7 @@ msgstr "某个其它程序已经将按键 %s 和修饰键 %x 配合使用作为
|
||||
#. Displayed when a keybinding which is
|
||||
#. * supposed to launch a program fails.
|
||||
#.
|
||||
#: ../src/core/keybindings.c:2523
|
||||
#: ../src/core/keybindings.c:2468
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running <tt>%s</tt>:\n"
|
||||
@@ -405,12 +393,12 @@ msgstr ""
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#: ../src/core/keybindings.c:2613
|
||||
#: ../src/core/keybindings.c:2558
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "命令 %d 尚未定义。\n"
|
||||
|
||||
#: ../src/core/keybindings.c:3625
|
||||
#: ../src/core/keybindings.c:3570
|
||||
#, c-format
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "终端命令尚未定义。\n"
|
||||
@@ -439,12 +427,12 @@ msgstr "从保存文件中初始化会话"
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "使 X 调用同步"
|
||||
|
||||
#: ../src/core/main.c:504
|
||||
#: ../src/core/main.c:506
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "扫描主题目录失败:%s\n"
|
||||
|
||||
#: ../src/core/main.c:520
|
||||
#: ../src/core/main.c:522
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -483,89 +471,89 @@ msgstr "逗号分开 列表和混合渲染器插件"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:550 ../src/core/prefs.c:711
|
||||
#: ../src/core/prefs.c:543 ../src/core/prefs.c:704
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "GConf 关键字“%s”被设置为无效值\n"
|
||||
|
||||
#: ../src/core/prefs.c:637 ../src/core/prefs.c:880
|
||||
#: ../src/core/prefs.c:630 ../src/core/prefs.c:873
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr "存储在 GConf 关键字 %2$s 中的值 %1$d 超出了 %3$d 到 %4$d 的范围\n"
|
||||
|
||||
#: ../src/core/prefs.c:681 ../src/core/prefs.c:758 ../src/core/prefs.c:806
|
||||
#: ../src/core/prefs.c:870 ../src/core/prefs.c:1331 ../src/core/prefs.c:1347
|
||||
#: ../src/core/prefs.c:1364 ../src/core/prefs.c:1380
|
||||
#: ../src/core/prefs.c:674 ../src/core/prefs.c:751 ../src/core/prefs.c:799
|
||||
#: ../src/core/prefs.c:863 ../src/core/prefs.c:1324 ../src/core/prefs.c:1340
|
||||
#: ../src/core/prefs.c:1357 ../src/core/prefs.c:1373
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "GConf 关键字“%s”被设置为无效的类型\n"
|
||||
|
||||
#: ../src/core/prefs.c:1210
|
||||
#: ../src/core/prefs.c:1203
|
||||
#, c-format
|
||||
msgid "GConf key %s is already in use and can't be used to override %s\n"
|
||||
msgstr "GConf 键 %s 已经使用,不能用于替代 %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1269
|
||||
#: ../src/core/prefs.c:1262
|
||||
#, c-format
|
||||
msgid "Can't override GConf key, %s not found\n"
|
||||
msgstr "无法替代 GConf 键,未找到 %s \n"
|
||||
|
||||
#: ../src/core/prefs.c:1454
|
||||
#: ../src/core/prefs.c:1447
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
msgstr "有缺陷的应用程序的工作区已禁用。某些应用程序可能无法正常运行。\n"
|
||||
|
||||
#: ../src/core/prefs.c:1531
|
||||
#: ../src/core/prefs.c:1524
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "无法解析字体说明“%s”(来自 GConf 关键字 %s)\n"
|
||||
|
||||
#: ../src/core/prefs.c:1593
|
||||
#: ../src/core/prefs.c:1586
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
"modifier\n"
|
||||
msgstr "在配置数据库中找到的“%s”不是鼠标按钮修饰键的有效值\n"
|
||||
|
||||
#: ../src/core/prefs.c:2028
|
||||
#: ../src/core/prefs.c:2016
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "将工作区数量设置为 %d 时出错:%s\n"
|
||||
|
||||
#: ../src/core/prefs.c:2212 ../src/core/prefs.c:2714
|
||||
#: ../src/core/prefs.c:2200 ../src/core/prefs.c:2702
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "工作区 %d"
|
||||
|
||||
#: ../src/core/prefs.c:2244 ../src/core/prefs.c:2422
|
||||
#: ../src/core/prefs.c:2232 ../src/core/prefs.c:2410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
"\"%s\"\n"
|
||||
msgstr "在配置数据库中找到的“%s”不是按键组合“%s”的有效值\n"
|
||||
|
||||
#: ../src/core/prefs.c:2795
|
||||
#: ../src/core/prefs.c:2783
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "将工作区 %d 的名称设置为“%s”时出错:%s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3009
|
||||
#: ../src/core/prefs.c:2997
|
||||
#, c-format
|
||||
msgid "Error setting live hidden windows status status: %s\n"
|
||||
msgstr "设置实时隐藏窗口状态时出错:%s\n"
|
||||
|
||||
#: ../src/core/prefs.c:3044
|
||||
#: ../src/core/prefs.c:3032
|
||||
#, c-format
|
||||
msgid "Error setting no tab popup status: %s\n"
|
||||
msgstr "设置无标签页弹出状态时出错:%s\n"
|
||||
|
||||
#: ../src/core/screen.c:663
|
||||
#: ../src/core/screen.c:624
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "显示“%2$s”上的屏幕 %1$d 无效\n"
|
||||
|
||||
#: ../src/core/screen.c:679
|
||||
#: ../src/core/screen.c:640
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -574,70 +562,70 @@ msgstr ""
|
||||
"显示“%2$s”上的屏幕 %1$d 已经有一个窗口管理器;请尝试使用 --replace 选项替换当"
|
||||
"前的窗口管理器。\n"
|
||||
|
||||
#: ../src/core/screen.c:706
|
||||
#: ../src/core/screen.c:667
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "无法获得显示“%2$s”上的屏幕 %1$d 的窗口管理器选定项\n"
|
||||
|
||||
#: ../src/core/screen.c:761
|
||||
#: ../src/core/screen.c:722
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "在显示“%2$s”上的 %1$d 屏幕已经有一个窗口管理器\n"
|
||||
|
||||
#: ../src/core/screen.c:946
|
||||
#: ../src/core/screen.c:907
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "无法释放显示“%2$s”上的屏幕 %1$d\n"
|
||||
|
||||
#: ../src/core/session.c:843 ../src/core/session.c:850
|
||||
#: ../src/core/session.c:837 ../src/core/session.c:844
|
||||
#, c-format
|
||||
msgid "Could not create directory '%s': %s\n"
|
||||
msgstr "无法创建目录“%s”:%s\n"
|
||||
|
||||
#: ../src/core/session.c:860
|
||||
#: ../src/core/session.c:854
|
||||
#, c-format
|
||||
msgid "Could not open session file '%s' for writing: %s\n"
|
||||
msgstr "无法打开会话文件“%s”进行写入:%s\n"
|
||||
|
||||
#: ../src/core/session.c:1001
|
||||
#: ../src/core/session.c:995
|
||||
#, c-format
|
||||
msgid "Error writing session file '%s': %s\n"
|
||||
msgstr "写入会话文件“%s”时出错:%s\n"
|
||||
|
||||
#: ../src/core/session.c:1006
|
||||
#: ../src/core/session.c:1000
|
||||
#, c-format
|
||||
msgid "Error closing session file '%s': %s\n"
|
||||
msgstr "关闭会话文件“%s”时出错:%s\n"
|
||||
|
||||
#: ../src/core/session.c:1136
|
||||
#: ../src/core/session.c:1130
|
||||
#, c-format
|
||||
msgid "Failed to parse saved session file: %s\n"
|
||||
msgstr "无法解析保存的会话文件:%s\n"
|
||||
|
||||
#: ../src/core/session.c:1185
|
||||
#: ../src/core/session.c:1179
|
||||
#, c-format
|
||||
msgid "<mutter_session> attribute seen but we already have the session ID"
|
||||
msgstr "<mutter_session> 属性已看到,但我们已经拥有该会话 ID"
|
||||
|
||||
#: ../src/core/session.c:1198 ../src/core/session.c:1273
|
||||
#: ../src/core/session.c:1305 ../src/core/session.c:1377
|
||||
#: ../src/core/session.c:1437
|
||||
#: ../src/core/session.c:1192 ../src/core/session.c:1267
|
||||
#: ../src/core/session.c:1299 ../src/core/session.c:1371
|
||||
#: ../src/core/session.c:1431
|
||||
#, c-format
|
||||
msgid "Unknown attribute %s on <%s> element"
|
||||
msgstr "<%2$s> 元素上未知的属性 %1$s"
|
||||
|
||||
#: ../src/core/session.c:1215
|
||||
#: ../src/core/session.c:1209
|
||||
#, c-format
|
||||
msgid "nested <window> tag"
|
||||
msgstr "嵌套 <window> 标记"
|
||||
|
||||
#: ../src/core/session.c:1457
|
||||
#: ../src/core/session.c:1451
|
||||
#, c-format
|
||||
msgid "Unknown element %s"
|
||||
msgstr "未知的元素 %s"
|
||||
|
||||
#: ../src/core/session.c:1809
|
||||
#: ../src/core/session.c:1803
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
@@ -682,13 +670,13 @@ msgid "Window manager error: "
|
||||
msgstr "窗口管理器错误:"
|
||||
|
||||
#. Translators: This is the title used on dialog boxes
|
||||
#: ../src/core/util.c:632 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/core/util.c:615 ../src/mutter.desktop.in.h:1
|
||||
#: ../src/mutter-wm.desktop.in.h:1
|
||||
msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:6959
|
||||
#: ../src/core/window.c:6795
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -704,7 +692,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7622
|
||||
#: ../src/core/window.c:7458
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -723,16 +711,11 @@ msgstr "应用程序设置一个假的 _NET_WM_PID %lu\n"
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (于 %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1488
|
||||
#: ../src/core/window-props.c:1479
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "为 %2$s 指定了无效的 WM_TRANSIENT_FOR 窗口 0x%1$lx。\n"
|
||||
|
||||
#: ../src/core/window-props.c:1500
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "为 %2$s 指定的 WM_TRANSIENT_FOR 窗口 0x%1$lx 将导致循环。\n"
|
||||
|
||||
#: ../src/core/xprops.c:155
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -777,25 +760,14 @@ msgid ""
|
||||
msgstr "决定工作区切换对所有显示器上的窗口还是只对主显示器上的有效。"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:4
|
||||
msgid "Draggable border width"
|
||||
msgstr "可拖拽的边界宽度"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "实时隐藏窗口"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
#: ../src/mutter.schemas.in.h:5
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr "用于修改窗口点击动作的修饰键 met"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
"可拖拽的边界总数。如果主题的可见边界不足,将添加不可见的边界来满足此值。"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
#: ../src/mutter.schemas.in.h:6
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
@@ -805,7 +777,7 @@ msgstr ""
|
||||
"这个键指出的“覆盖”是一种混合窗口概述和应用程序运行的系统。默认要求使用 "
|
||||
"“Super 键”。可能使用默认或者空白。"
|
||||
|
||||
#: ../src/mutter.schemas.in.h:9
|
||||
#: ../src/mutter.schemas.in.h:7
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@@ -815,7 +787,7 @@ msgstr ""
|
||||
"单独的标题栏。"
|
||||
|
||||
# 或者 只在主显示器上显示工作区
|
||||
#: ../src/mutter.schemas.in.h:10
|
||||
#: ../src/mutter.schemas.in.h:8
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "只对主显示器上的工作区"
|
||||
|
||||
@@ -824,47 +796,47 @@ msgstr "只对主显示器上的工作区"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "用法:%s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1123
|
||||
#: ../src/ui/frames.c:1099
|
||||
msgid "Close Window"
|
||||
msgstr "关闭窗口"
|
||||
|
||||
#: ../src/ui/frames.c:1126
|
||||
#: ../src/ui/frames.c:1102
|
||||
msgid "Window Menu"
|
||||
msgstr "窗口菜单"
|
||||
|
||||
#: ../src/ui/frames.c:1129
|
||||
#: ../src/ui/frames.c:1105
|
||||
msgid "Minimize Window"
|
||||
msgstr "最小化窗口"
|
||||
|
||||
#: ../src/ui/frames.c:1132
|
||||
#: ../src/ui/frames.c:1108
|
||||
msgid "Maximize Window"
|
||||
msgstr "最大化窗口"
|
||||
|
||||
#: ../src/ui/frames.c:1135
|
||||
#: ../src/ui/frames.c:1111
|
||||
msgid "Restore Window"
|
||||
msgstr "恢复窗口"
|
||||
|
||||
#: ../src/ui/frames.c:1138
|
||||
#: ../src/ui/frames.c:1114
|
||||
msgid "Roll Up Window"
|
||||
msgstr "卷起窗口"
|
||||
|
||||
#: ../src/ui/frames.c:1141
|
||||
#: ../src/ui/frames.c:1117
|
||||
msgid "Unroll Window"
|
||||
msgstr "展开窗口"
|
||||
|
||||
#: ../src/ui/frames.c:1144
|
||||
#: ../src/ui/frames.c:1120
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "窗口常居顶端"
|
||||
|
||||
#: ../src/ui/frames.c:1147
|
||||
#: ../src/ui/frames.c:1123
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "取消窗口常居顶端"
|
||||
|
||||
#: ../src/ui/frames.c:1150
|
||||
#: ../src/ui/frames.c:1126
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "总在可见工作区"
|
||||
|
||||
#: ../src/ui/frames.c:1153
|
||||
#: ../src/ui/frames.c:1129
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "只将窗口放在一个工作区"
|
||||
|
||||
@@ -1067,72 +1039,48 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:253
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "top"
|
||||
msgstr "上"
|
||||
|
||||
#: ../src/ui/theme.c:255
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "bottom"
|
||||
msgstr "下"
|
||||
|
||||
#: ../src/ui/theme.c:257
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "left"
|
||||
msgstr "左"
|
||||
|
||||
#: ../src/ui/theme.c:259
|
||||
#: ../src/ui/theme.c:261
|
||||
msgid "right"
|
||||
msgstr "右"
|
||||
|
||||
#: ../src/ui/theme.c:286
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "框架几何布局没有指定“%s”尺寸"
|
||||
|
||||
#: ../src/ui/theme.c:305
|
||||
#: ../src/ui/theme.c:307
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "框架几何布局没有指定“%s”尺寸(该尺寸是为边框“%s”指定的)"
|
||||
|
||||
#: ../src/ui/theme.c:342
|
||||
#: ../src/ui/theme.c:344
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "按钮长宽比 %g 不合理"
|
||||
|
||||
#: ../src/ui/theme.c:354
|
||||
#: ../src/ui/theme.c:356
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "框架几何布局没有指定按钮大小"
|
||||
|
||||
#: ../src/ui/theme.c:1060
|
||||
#: ../src/ui/theme.c:1064
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "渐变应至少有两种颜色"
|
||||
|
||||
#: ../src/ui/theme.c:1205
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr ""
|
||||
"GTK 颜色规范要求色彩名称和其后备值必须在随后的圆括号内,例如 "
|
||||
"gtk:custom(foo,bar);无法解析“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1221
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr ""
|
||||
"gtk:custom 中包含无效的字符 %c,仅允许使用 A-Za-z0-9-_"
|
||||
|
||||
#: ../src/ui/theme.c:1235
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr "Gtk:custom 的格式为 gtk:custom(color_name,fallback),“%s”不符合该格式"
|
||||
|
||||
#: ../src/ui/theme.c:1271
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -1141,7 +1089,7 @@ msgstr ""
|
||||
"GTK 颜色规范必须将状态包含在方括号中,例如 gtk:fg[NORMAL]其中 NORMAL 是状态;"
|
||||
"无法解析“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1285
|
||||
#: ../src/ui/theme.c:1216
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -1150,148 +1098,148 @@ msgstr ""
|
||||
"GTK 颜色规范必须在状态后有一个闭方括号,例如 gtk:fg[NORMAL],其中 NORMAL 是状"
|
||||
"态;无法解析“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1296
|
||||
#: ../src/ui/theme.c:1227
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "不理解颜色规范中的状态“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1309
|
||||
#: ../src/ui/theme.c:1240
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "不理解颜色规范中的颜色组成部分“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1339
|
||||
#: ../src/ui/theme.c:1270
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
"format"
|
||||
msgstr "混合格式为“blend/bg_color/fg_color/alpha”,“%s”不符合该格式"
|
||||
|
||||
#: ../src/ui/theme.c:1350
|
||||
#: ../src/ui/theme.c:1281
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "无法解析混合色中的 Alpha 值“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1360
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "混合色中的 Alpha 值“%s”不在 0.0 到 1.0 之间"
|
||||
|
||||
#: ../src/ui/theme.c:1407
|
||||
#: ../src/ui/theme.c:1338
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "阴影格式为“shade/base_color/factor”,“%s”不符合该格式"
|
||||
|
||||
#: ../src/ui/theme.c:1418
|
||||
#: ../src/ui/theme.c:1349
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "无法解析阴影色中的阴影因子“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1428
|
||||
#: ../src/ui/theme.c:1359
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "阴影色中的阴影因子“%s”为负数"
|
||||
|
||||
#: ../src/ui/theme.c:1457
|
||||
#: ../src/ui/theme.c:1388
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "无法解析颜色“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1768
|
||||
#: ../src/ui/theme.c:1646
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "坐标表达式包含不允许的字符“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1795
|
||||
#: ../src/ui/theme.c:1673
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "坐标表达式包含无法解析的浮点数“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1809
|
||||
#: ../src/ui/theme.c:1687
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "坐标表达式包含无法解析的整数“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1931
|
||||
#: ../src/ui/theme.c:1809
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr "坐标表达式在该文本开始处包含未知的运算符:“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1988
|
||||
#: ../src/ui/theme.c:1866
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "坐标表达式为空或无法理解"
|
||||
|
||||
#: ../src/ui/theme.c:2099 ../src/ui/theme.c:2109 ../src/ui/theme.c:2143
|
||||
#: ../src/ui/theme.c:1977 ../src/ui/theme.c:1987 ../src/ui/theme.c:2021
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "坐标表达式用零做除数"
|
||||
|
||||
#: ../src/ui/theme.c:2151
|
||||
#: ../src/ui/theme.c:2029
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "坐标表达式试图对浮点数使用 mod 运算符"
|
||||
|
||||
#: ../src/ui/theme.c:2207
|
||||
#: ../src/ui/theme.c:2085
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "坐标表达式的运算符“%s”应该是一个操作数"
|
||||
|
||||
#: ../src/ui/theme.c:2216
|
||||
#: ../src/ui/theme.c:2094
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "坐标表达式的某个操作数应该是运算符"
|
||||
|
||||
#: ../src/ui/theme.c:2224
|
||||
#: ../src/ui/theme.c:2102
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "坐标表达式以运算符结尾,而不是以操作数结尾"
|
||||
|
||||
#: ../src/ui/theme.c:2234
|
||||
#: ../src/ui/theme.c:2112
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
"operand in between"
|
||||
msgstr "坐标表达式的运算符“%c”后面跟着运算符“%c”,之间没有操作数"
|
||||
|
||||
#: ../src/ui/theme.c:2385 ../src/ui/theme.c:2430
|
||||
#: ../src/ui/theme.c:2263 ../src/ui/theme.c:2308
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "坐标表达式有未知的变量或常数“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:2484
|
||||
#: ../src/ui/theme.c:2362
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "坐标表达式溢出了其缓冲区。"
|
||||
|
||||
#: ../src/ui/theme.c:2513
|
||||
#: ../src/ui/theme.c:2391
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "坐标表达式有一个闭括号,而没有开括号"
|
||||
|
||||
#: ../src/ui/theme.c:2577
|
||||
#: ../src/ui/theme.c:2455
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "坐标表达式有一个开括号,而没有闭括号"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2466
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "坐标表达式似乎没有任何运算符或操作数"
|
||||
|
||||
#: ../src/ui/theme.c:2800 ../src/ui/theme.c:2820 ../src/ui/theme.c:2840
|
||||
#: ../src/ui/theme.c:2676 ../src/ui/theme.c:2696 ../src/ui/theme.c:2716
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "主题包含的一个表达式产生错误:%s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4511
|
||||
#: ../src/ui/theme.c:4410
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -1300,25 +1248,25 @@ msgstr ""
|
||||
"必须为该框架风格指定<button function=\"%s\" state=\"%s\" draw_ops=\"whatever"
|
||||
"\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5044 ../src/ui/theme.c:5069
|
||||
#: ../src/ui/theme.c:4940 ../src/ui/theme.c:4965
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"缺少 <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5117
|
||||
#: ../src/ui/theme.c:5013
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "无法载入主题“%s”:%s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5253 ../src/ui/theme.c:5260 ../src/ui/theme.c:5267
|
||||
#: ../src/ui/theme.c:5274 ../src/ui/theme.c:5281
|
||||
#: ../src/ui/theme.c:5149 ../src/ui/theme.c:5156 ../src/ui/theme.c:5163
|
||||
#: ../src/ui/theme.c:5170 ../src/ui/theme.c:5177
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "没有为主题“%2$s”设置 <%1$s>"
|
||||
|
||||
#: ../src/ui/theme.c:5289
|
||||
#: ../src/ui/theme.c:5185
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1327,13 +1275,13 @@ msgstr ""
|
||||
"没有为窗口类型“%s”(在主题“%s”中)设置框架风格,请添加一个 <window type=\"%s\" "
|
||||
"style_set=\"whatever\"/> 元素"
|
||||
|
||||
#: ../src/ui/theme.c:5728 ../src/ui/theme.c:5790 ../src/ui/theme.c:5853
|
||||
#: ../src/ui/theme.c:5635 ../src/ui/theme.c:5697 ../src/ui/theme.c:5760
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "用户定义的常数必须以大写字母开头;而“%s”却不必"
|
||||
|
||||
#: ../src/ui/theme.c:5736 ../src/ui/theme.c:5798 ../src/ui/theme.c:5861
|
||||
#: ../src/ui/theme.c:5643 ../src/ui/theme.c:5705 ../src/ui/theme.c:5768
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "常数“%s”已被定义"
|
||||
@@ -1772,88 +1720,88 @@ msgstr "这是示例对话框中的示例消息"
|
||||
msgid "Fake menu item %d\n"
|
||||
msgstr "虚假菜单项 %d\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:371
|
||||
#: ../src/ui/theme-viewer.c:370
|
||||
msgid "Border-only window"
|
||||
msgstr "只有边框的窗口"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:373
|
||||
#: ../src/ui/theme-viewer.c:372
|
||||
msgid "Bar"
|
||||
msgstr "栏"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:390
|
||||
#: ../src/ui/theme-viewer.c:389
|
||||
msgid "Normal Application Window"
|
||||
msgstr "普通的应用程序窗口"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:394
|
||||
#: ../src/ui/theme-viewer.c:393
|
||||
msgid "Dialog Box"
|
||||
msgstr "对话框"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:398
|
||||
#: ../src/ui/theme-viewer.c:397
|
||||
msgid "Modal Dialog Box"
|
||||
msgstr "模态对话框"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:402
|
||||
#: ../src/ui/theme-viewer.c:401
|
||||
msgid "Utility Palette"
|
||||
msgstr "工具盘"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:406
|
||||
#: ../src/ui/theme-viewer.c:405
|
||||
msgid "Torn-off Menu"
|
||||
msgstr "撕下的菜单"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:410
|
||||
#: ../src/ui/theme-viewer.c:409
|
||||
msgid "Border"
|
||||
msgstr "边框"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:414
|
||||
#: ../src/ui/theme-viewer.c:413
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "依附的模态对话框"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:747
|
||||
#: ../src/ui/theme-viewer.c:744
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "按钮布局测试 %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:776
|
||||
#: ../src/ui/theme-viewer.c:773
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g 毫秒用来绘制一个窗口框架"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:821
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "用法:metacity-theme-viewer [主题名称]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:828
|
||||
#: ../src/ui/theme-viewer.c:825
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "载入主题出错:%s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:834
|
||||
#: ../src/ui/theme-viewer.c:831
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "在 %2$g 秒内载入主题“%1$s”\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:878
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Normal Title Font"
|
||||
msgstr "普通标题字体"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:884
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Small Title Font"
|
||||
msgstr "小标题字体"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:890
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
msgid "Large Title Font"
|
||||
msgstr "大标题字体"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:895
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
msgid "Button Layouts"
|
||||
msgstr "按钮布局"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:900
|
||||
#: ../src/ui/theme-viewer.c:897
|
||||
msgid "Benchmark"
|
||||
msgstr "基准"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:952
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "窗口标题在这里"
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ libmutter_la_SOURCES = \
|
||||
compositor/compositor.c \
|
||||
compositor/compositor-private.h \
|
||||
compositor/meta-background-actor.c \
|
||||
compositor/meta-background-actor-private.h \
|
||||
compositor/meta-background-actor.h \
|
||||
compositor/meta-module.c \
|
||||
compositor/meta-module.h \
|
||||
compositor/meta-plugin.c \
|
||||
@@ -55,8 +55,6 @@ libmutter_la_SOURCES = \
|
||||
compositor/meta-shadow-factory-private.h \
|
||||
compositor/meta-shaped-texture.c \
|
||||
compositor/meta-shaped-texture.h \
|
||||
compositor/meta-texture-rectangle.c \
|
||||
compositor/meta-texture-rectangle.h \
|
||||
compositor/meta-texture-tower.c \
|
||||
compositor/meta-texture-tower.h \
|
||||
compositor/meta-window-actor.c \
|
||||
@@ -68,7 +66,6 @@ libmutter_la_SOURCES = \
|
||||
compositor/region-utils.c \
|
||||
compositor/region-utils.h \
|
||||
meta/compositor.h \
|
||||
meta/meta-background-actor.h \
|
||||
meta/meta-plugin.h \
|
||||
meta/meta-shadow-factory.h \
|
||||
meta/meta-window-actor.h \
|
||||
@@ -78,6 +75,20 @@ libmutter_la_SOURCES = \
|
||||
core/constraints.h \
|
||||
core/core.c \
|
||||
core/delete.c \
|
||||
core/device.c \
|
||||
meta/device.h \
|
||||
core/device-keyboard.c \
|
||||
core/device-keyboard.h \
|
||||
core/device-pointer.c \
|
||||
core/device-pointer.h \
|
||||
core/device-private.h \
|
||||
core/device-map.c \
|
||||
meta/device-map.h \
|
||||
core/device-map-private.h \
|
||||
core/device-map-core.c \
|
||||
core/device-map-core.h \
|
||||
core/devices-core.c \
|
||||
core/devices-core.h \
|
||||
core/display.c \
|
||||
core/display-private.h \
|
||||
meta/display.h \
|
||||
@@ -100,6 +111,8 @@ libmutter_la_SOURCES = \
|
||||
meta/group.h \
|
||||
core/iconcache.c \
|
||||
core/iconcache.h \
|
||||
core/input-events.c \
|
||||
core/input-events.h \
|
||||
core/keybindings.c \
|
||||
core/keybindings-private.h \
|
||||
core/main.c \
|
||||
@@ -157,6 +170,14 @@ libmutter_la_SOURCES = \
|
||||
ui/preview-widget.c \
|
||||
$(mutter_built_sources)
|
||||
|
||||
if HAVE_XINPUT2
|
||||
libmutter_la_SOURCES += \
|
||||
core/device-map-xi2.c \
|
||||
core/device-map-xi2.h \
|
||||
core/devices-xi2.c \
|
||||
core/devices-xi2.h
|
||||
endif
|
||||
|
||||
libmutter_la_LDFLAGS = -no-undefined
|
||||
libmutter_la_LIBADD = $(MUTTER_LIBS)
|
||||
|
||||
@@ -167,13 +188,14 @@ libmutterinclude_base_headers = \
|
||||
meta/common.h \
|
||||
meta/compositor-mutter.h \
|
||||
meta/compositor.h \
|
||||
meta/device.h \
|
||||
meta/device-map.h \
|
||||
meta/display.h \
|
||||
meta/errors.h \
|
||||
meta/gradient.h \
|
||||
meta/group.h \
|
||||
meta/keybindings.h \
|
||||
meta/main.h \
|
||||
meta/meta-background-actor.h \
|
||||
meta/meta-plugin.h \
|
||||
meta/meta-shadow-factory.h \
|
||||
meta/meta-window-actor.h \
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#include <meta/compositor.h>
|
||||
#include <meta/display.h>
|
||||
#include "meta-plugin-manager.h"
|
||||
#include "meta-window-actor-private.h"
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
typedef struct _MetaCompScreen MetaCompScreen;
|
||||
@@ -42,10 +41,6 @@ struct _MetaCompScreen
|
||||
GHashTable *windows_by_xid;
|
||||
Window output;
|
||||
|
||||
/* Used for unredirecting fullscreen windows */
|
||||
guint disable_unredirect_count;
|
||||
MetaWindowActor *unredirected_window;
|
||||
|
||||
/* Before we create the output window */
|
||||
XserverRegion pending_input_region;
|
||||
|
||||
|
||||
@@ -15,9 +15,11 @@
|
||||
#include <meta/meta-shadow-factory.h>
|
||||
#include "meta-window-actor-private.h"
|
||||
#include "meta-window-group.h"
|
||||
#include "meta-background-actor-private.h"
|
||||
#include "meta-background-actor.h"
|
||||
#include "window-private.h" /* to check window->hidden */
|
||||
#include "display-private.h" /* for meta_display_lookup_x_window() */
|
||||
#include "core.h" /* for meta_core_select_events() */
|
||||
#include "input-events.h"
|
||||
#include <X11/extensions/shape.h>
|
||||
#include <X11/extensions/Xcomposite.h>
|
||||
|
||||
@@ -109,6 +111,28 @@ process_damage (MetaCompositor *compositor,
|
||||
meta_window_actor_process_damage (window_actor, event);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SHAPE
|
||||
static void
|
||||
process_shape (MetaCompositor *compositor,
|
||||
XShapeEvent *event,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MetaWindowActor *window_actor;
|
||||
|
||||
if (window == NULL)
|
||||
return;
|
||||
|
||||
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
|
||||
if (window_actor == NULL)
|
||||
return;
|
||||
|
||||
if (event->kind == ShapeBounding)
|
||||
{
|
||||
meta_window_actor_update_shape (window_actor, event->shaped);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
process_property_notify (MetaCompositor *compositor,
|
||||
XPropertyEvent *event,
|
||||
@@ -125,7 +149,8 @@ process_property_notify (MetaCompositor *compositor,
|
||||
MetaScreen *screen = l->data;
|
||||
if (event->window == meta_screen_get_xroot (screen))
|
||||
{
|
||||
meta_background_actor_update (screen);
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||
meta_background_actor_update (META_BACKGROUND_ACTOR (info->background_actor));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -155,7 +180,6 @@ get_output_window (MetaScreen *screen)
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
Window output, xroot;
|
||||
XWindowAttributes attr;
|
||||
long event_mask;
|
||||
|
||||
xroot = meta_screen_get_xroot (screen);
|
||||
@@ -169,13 +193,7 @@ get_output_window (MetaScreen *screen)
|
||||
KeyPressMask | KeyReleaseMask;
|
||||
|
||||
output = XCompositeGetOverlayWindow (xdisplay, xroot);
|
||||
|
||||
if (XGetWindowAttributes (xdisplay, output, &attr))
|
||||
{
|
||||
event_mask |= attr.your_event_mask;
|
||||
}
|
||||
|
||||
XSelectInput (xdisplay, output, event_mask);
|
||||
meta_core_select_events (xdisplay, output, event_mask, TRUE);
|
||||
|
||||
return output;
|
||||
}
|
||||
@@ -341,26 +359,34 @@ meta_begin_modal_for_plugin (MetaScreen *screen,
|
||||
* merge the two.
|
||||
*/
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdpy = meta_display_get_xdisplay (display);
|
||||
MetaCompositor *compositor = display->compositor;
|
||||
gboolean pointer_grabbed = FALSE;
|
||||
gboolean keyboard_grabbed = FALSE;
|
||||
int result;
|
||||
gboolean result;
|
||||
MetaDevice *device;
|
||||
MetaGrabInfo *grab_info;
|
||||
|
||||
if (compositor->modal_plugin != NULL || display->grab_op != META_GRAB_OP_NONE)
|
||||
/* FIXME: need a real device here, and probably
|
||||
* some exclusion mode for other devices */
|
||||
device = meta_device_map_lookup (display->device_map,
|
||||
META_CORE_POINTER_ID);
|
||||
|
||||
grab_info = meta_display_get_grab_info (display, device);
|
||||
|
||||
if (compositor->modal_plugin != NULL || grab_info != NULL)
|
||||
return FALSE;
|
||||
|
||||
if ((options & META_MODAL_POINTER_ALREADY_GRABBED) == 0)
|
||||
{
|
||||
result = XGrabPointer (xdpy, grab_window,
|
||||
False, /* owner_events */
|
||||
(ButtonPressMask | ButtonReleaseMask |
|
||||
EnterWindowMask | LeaveWindowMask | PointerMotionMask),
|
||||
GrabModeAsync, GrabModeAsync,
|
||||
None, /* confine to */
|
||||
cursor,
|
||||
timestamp);
|
||||
if (result != Success)
|
||||
result = meta_device_grab (device,
|
||||
grab_window,
|
||||
(ButtonPressMask | ButtonReleaseMask |
|
||||
EnterWindowMask | LeaveWindowMask | PointerMotionMask),
|
||||
cursor,
|
||||
FALSE,
|
||||
FALSE,
|
||||
timestamp);
|
||||
if (!result)
|
||||
goto fail;
|
||||
|
||||
pointer_grabbed = TRUE;
|
||||
@@ -368,22 +394,25 @@ meta_begin_modal_for_plugin (MetaScreen *screen,
|
||||
|
||||
if ((options & META_MODAL_KEYBOARD_ALREADY_GRABBED) == 0)
|
||||
{
|
||||
result = XGrabKeyboard (xdpy, grab_window,
|
||||
False, /* owner_events */
|
||||
GrabModeAsync, GrabModeAsync,
|
||||
timestamp);
|
||||
|
||||
if (result != Success)
|
||||
result = meta_device_grab (meta_device_get_paired_device (device),
|
||||
grab_window,
|
||||
(KeyPressMask | KeyReleaseMask),
|
||||
META_CURSOR_DEFAULT,
|
||||
FALSE, FALSE,
|
||||
timestamp);
|
||||
if (!result)
|
||||
goto fail;
|
||||
|
||||
keyboard_grabbed = TRUE;
|
||||
}
|
||||
|
||||
display->grab_op = META_GRAB_OP_COMPOSITOR;
|
||||
display->grab_window = NULL;
|
||||
display->grab_screen = screen;
|
||||
display->grab_have_pointer = TRUE;
|
||||
display->grab_have_keyboard = TRUE;
|
||||
grab_info = meta_display_create_grab_info (display, device);
|
||||
|
||||
grab_info->grab_op = META_GRAB_OP_COMPOSITOR;
|
||||
grab_info->grab_window = NULL;
|
||||
grab_info->grab_screen = screen;
|
||||
grab_info->grab_have_pointer = TRUE;
|
||||
grab_info->grab_have_keyboard = TRUE;
|
||||
|
||||
compositor->modal_plugin = plugin;
|
||||
|
||||
@@ -391,9 +420,9 @@ meta_begin_modal_for_plugin (MetaScreen *screen,
|
||||
|
||||
fail:
|
||||
if (pointer_grabbed)
|
||||
XUngrabPointer (xdpy, timestamp);
|
||||
meta_device_ungrab (device, timestamp);
|
||||
if (keyboard_grabbed)
|
||||
XUngrabKeyboard (xdpy, timestamp);
|
||||
meta_device_ungrab (meta_device_get_paired_device (device), timestamp);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -404,20 +433,19 @@ meta_end_modal_for_plugin (MetaScreen *screen,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdpy = meta_display_get_xdisplay (display);
|
||||
MetaCompositor *compositor = display->compositor;
|
||||
MetaDevice *device;
|
||||
|
||||
g_return_if_fail (compositor->modal_plugin == plugin);
|
||||
|
||||
XUngrabPointer (xdpy, timestamp);
|
||||
XUngrabKeyboard (xdpy, timestamp);
|
||||
/* FIXME: need a real device here */
|
||||
device = meta_device_map_lookup (display->device_map,
|
||||
META_CORE_POINTER_ID);
|
||||
|
||||
display->grab_op = META_GRAB_OP_NONE;
|
||||
display->grab_window = NULL;
|
||||
display->grab_screen = NULL;
|
||||
display->grab_have_pointer = FALSE;
|
||||
display->grab_have_keyboard = FALSE;
|
||||
meta_device_ungrab (device, timestamp);
|
||||
meta_device_ungrab (meta_device_get_paired_device (device), timestamp);
|
||||
|
||||
meta_display_remove_grab_info (display, device);
|
||||
compositor->modal_plugin = NULL;
|
||||
}
|
||||
|
||||
@@ -450,7 +478,6 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
Window xroot = meta_screen_get_xroot (screen);
|
||||
Window xwin;
|
||||
gint width, height;
|
||||
XWindowAttributes attr;
|
||||
long event_mask;
|
||||
guint n_retries;
|
||||
guint max_retries;
|
||||
@@ -525,15 +552,10 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
KeyPressMask | KeyReleaseMask |
|
||||
StructureNotifyMask;
|
||||
|
||||
if (XGetWindowAttributes (xdisplay, xwin, &attr))
|
||||
{
|
||||
event_mask |= attr.your_event_mask;
|
||||
}
|
||||
|
||||
XSelectInput (xdisplay, xwin, event_mask);
|
||||
meta_core_select_events (xdisplay, xwin, event_mask, TRUE);
|
||||
|
||||
info->window_group = meta_window_group_new (screen);
|
||||
info->background_actor = meta_background_actor_new_for_screen (screen);
|
||||
info->background_actor = meta_background_actor_new (screen);
|
||||
info->overlay_group = clutter_group_new ();
|
||||
info->hidden_group = clutter_group_new ();
|
||||
|
||||
@@ -598,38 +620,6 @@ meta_compositor_unmanage_screen (MetaCompositor *compositor,
|
||||
XCompositeUnredirectSubwindows (xdisplay, xroot, CompositeRedirectManual);
|
||||
}
|
||||
|
||||
/*
|
||||
* Shapes the cow so that the given window is exposed,
|
||||
* when xwin is None it clears the shape again
|
||||
*/
|
||||
static void
|
||||
meta_shape_cow_for_window (MetaScreen *screen,
|
||||
Window xwin)
|
||||
{
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||
Display *xdisplay = meta_display_get_xdisplay (meta_screen_get_display (screen));
|
||||
|
||||
if (xwin == None)
|
||||
XFixesSetWindowShapeRegion (xdisplay, info->output, ShapeBounding, 0, 0, None);
|
||||
else
|
||||
{
|
||||
XserverRegion output_region;
|
||||
XRectangle screen_rect;
|
||||
int width, height;
|
||||
|
||||
meta_screen_get_size (screen, &width, &height);
|
||||
screen_rect.x = 0;
|
||||
screen_rect.y = 0;
|
||||
screen_rect.width = width;
|
||||
screen_rect.height = height;
|
||||
|
||||
output_region = XFixesCreateRegionFromWindow (xdisplay, xwin, WindowRegionBounding);
|
||||
XFixesInvertRegion (xdisplay, output_region, &screen_rect, output_region);
|
||||
XFixesSetWindowShapeRegion (xdisplay, info->output, ShapeBounding, 0, 0, output_region);
|
||||
XFixesDestroyRegion (xdisplay, output_region);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_compositor_add_window (MetaCompositor *compositor,
|
||||
MetaWindow *window)
|
||||
@@ -650,25 +640,12 @@ meta_compositor_remove_window (MetaCompositor *compositor,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MetaWindowActor *window_actor = NULL;
|
||||
MetaScreen *screen;
|
||||
MetaCompScreen *info;
|
||||
|
||||
DEBUG_TRACE ("meta_compositor_remove_window\n");
|
||||
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
|
||||
if (!window_actor)
|
||||
return;
|
||||
|
||||
screen = meta_window_get_screen (window);
|
||||
info = meta_screen_get_compositor_data (screen);
|
||||
|
||||
if (window_actor == info->unredirected_window)
|
||||
{
|
||||
meta_window_actor_set_redirected (window_actor, TRUE);
|
||||
meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (info->unredirected_window)),
|
||||
None);
|
||||
info->unredirected_window = NULL;
|
||||
}
|
||||
|
||||
meta_window_actor_destroy (window_actor);
|
||||
}
|
||||
|
||||
@@ -680,9 +657,15 @@ meta_compositor_set_updates (MetaCompositor *compositor,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_grabbed_event (XEvent *event)
|
||||
is_grabbed_event (MetaDisplay *display,
|
||||
XEvent *event)
|
||||
{
|
||||
switch (event->xany.type)
|
||||
guint evtype;
|
||||
|
||||
if (!meta_input_event_get_type (display, event, &evtype))
|
||||
return FALSE;
|
||||
|
||||
switch (evtype)
|
||||
{
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
@@ -696,16 +679,6 @@ is_grabbed_event (XEvent *event)
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
meta_compositor_window_shape_changed (MetaCompositor *compositor,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MetaWindowActor *window_actor;
|
||||
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
|
||||
meta_window_actor_update_shape (window_actor);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_compositor_process_event: (skip)
|
||||
*
|
||||
@@ -715,7 +688,8 @@ meta_compositor_process_event (MetaCompositor *compositor,
|
||||
XEvent *event,
|
||||
MetaWindow *window)
|
||||
{
|
||||
if (compositor->modal_plugin && is_grabbed_event (event))
|
||||
if (compositor->modal_plugin &&
|
||||
is_grabbed_event (compositor->display, event))
|
||||
{
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (compositor->modal_plugin);
|
||||
|
||||
@@ -785,6 +759,13 @@ meta_compositor_process_event (MetaCompositor *compositor,
|
||||
DEBUG_TRACE ("meta_compositor_process_event (process_damage)\n");
|
||||
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, window);
|
||||
}
|
||||
#endif /* HAVE_SHAPE */
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1131,7 +1112,7 @@ meta_compositor_sync_screen_size (MetaCompositor *compositor,
|
||||
|
||||
clutter_actor_set_size (info->stage, width, height);
|
||||
|
||||
meta_background_actor_screen_size_changed (screen);
|
||||
meta_background_actor_screen_size_changed (META_BACKGROUND_ACTOR (info->background_actor));
|
||||
|
||||
meta_verbose ("Changed size for stage on screen %d to %dx%d\n",
|
||||
meta_screen_get_screen_number (screen),
|
||||
@@ -1142,33 +1123,6 @@ static void
|
||||
pre_paint_windows (MetaCompScreen *info)
|
||||
{
|
||||
GList *l;
|
||||
MetaWindowActor *top_window;
|
||||
MetaWindowActor *expected_unredirected_window = NULL;
|
||||
|
||||
top_window = g_list_last (info->windows)->data;
|
||||
|
||||
if (meta_window_actor_should_unredirect (top_window) &&
|
||||
info->disable_unredirect_count == 0)
|
||||
expected_unredirected_window = top_window;
|
||||
|
||||
if (info->unredirected_window != expected_unredirected_window)
|
||||
{
|
||||
if (info->unredirected_window != NULL)
|
||||
{
|
||||
meta_window_actor_set_redirected (info->unredirected_window, TRUE);
|
||||
meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (info->unredirected_window)),
|
||||
None);
|
||||
}
|
||||
|
||||
if (expected_unredirected_window != NULL)
|
||||
{
|
||||
meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (top_window)),
|
||||
meta_window_actor_get_x_window (top_window));
|
||||
meta_window_actor_set_redirected (top_window, FALSE);
|
||||
}
|
||||
|
||||
info->unredirected_window = expected_unredirected_window;
|
||||
}
|
||||
|
||||
for (l = info->windows; l; l = l->next)
|
||||
meta_window_actor_pre_paint (l->data);
|
||||
@@ -1272,37 +1226,6 @@ meta_get_overlay_window (MetaScreen *screen)
|
||||
return info->output;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_disable_unredirect_for_screen:
|
||||
* @screen: a #MetaScreen
|
||||
*
|
||||
* Disables unredirection, can be usefull in situations where having
|
||||
* unredirected windows is undesireable like when recording a video.
|
||||
*
|
||||
*/
|
||||
void
|
||||
meta_disable_unredirect_for_screen (MetaScreen *screen)
|
||||
{
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||
if (info != NULL)
|
||||
info->disable_unredirect_count = info->disable_unredirect_count + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_enable_unredirect_for_screen:
|
||||
* @screen: a #MetaScreen
|
||||
*
|
||||
* Enables unredirection which reduces the overhead for apps like games.
|
||||
*
|
||||
*/
|
||||
void
|
||||
meta_enable_unredirect_for_screen (MetaScreen *screen)
|
||||
{
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||
if (info != NULL)
|
||||
info->disable_unredirect_count = MAX(0, info->disable_unredirect_count - 1);
|
||||
}
|
||||
|
||||
#define FLASH_TIME_MS 50
|
||||
|
||||
static void
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#ifndef META_BACKGROUND_ACTOR_PRIVATE_H
|
||||
#define META_BACKGROUND_ACTOR_PRIVATE_H
|
||||
|
||||
#include <meta/screen.h>
|
||||
#include <meta/meta-background-actor.h>
|
||||
|
||||
void meta_background_actor_set_visible_region (MetaBackgroundActor *self,
|
||||
cairo_region_t *visible_region);
|
||||
|
||||
void meta_background_actor_update (MetaScreen *screen);
|
||||
void meta_background_actor_screen_size_changed (MetaScreen *screen);
|
||||
|
||||
#endif /* META_BACKGROUND_ACTOR_PRIVATE_H */
|
||||
@@ -33,180 +33,71 @@
|
||||
#include "cogl-utils.h"
|
||||
#include "compositor-private.h"
|
||||
#include <meta/errors.h>
|
||||
#include "meta-background-actor-private.h"
|
||||
#include "meta-background-actor.h"
|
||||
|
||||
/* We allow creating multiple MetaBackgroundActors for the same MetaScreen to
|
||||
* allow different rendering options to be set for different copies.
|
||||
* But we want to share the same underlying CoglTexture for efficiency and
|
||||
* to avoid driver bugs that might occur if we created multiple CoglTexturePixmaps
|
||||
* for the same pixmap.
|
||||
*
|
||||
* This structure holds common information.
|
||||
*/
|
||||
typedef struct _MetaScreenBackground MetaScreenBackground;
|
||||
|
||||
struct _MetaScreenBackground
|
||||
struct _MetaBackgroundActorClass
|
||||
{
|
||||
MetaScreen *screen;
|
||||
GSList *actors;
|
||||
ClutterActorClass parent_class;
|
||||
};
|
||||
|
||||
struct _MetaBackgroundActor
|
||||
{
|
||||
ClutterActor parent;
|
||||
|
||||
CoglHandle material;
|
||||
MetaScreen *screen;
|
||||
cairo_region_t *visible_region;
|
||||
float texture_width;
|
||||
float texture_height;
|
||||
CoglHandle texture;
|
||||
CoglMaterialWrapMode wrap_mode;
|
||||
|
||||
guint have_pixmap : 1;
|
||||
};
|
||||
|
||||
struct _MetaBackgroundActorPrivate
|
||||
{
|
||||
MetaScreenBackground *background;
|
||||
CoglHandle material;
|
||||
cairo_region_t *visible_region;
|
||||
float dim_factor;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
|
||||
PROP_DIM_FACTOR,
|
||||
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
static GParamSpec *obj_props[PROP_LAST];
|
||||
|
||||
G_DEFINE_TYPE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
static void set_texture (MetaScreenBackground *background,
|
||||
CoglHandle texture);
|
||||
static void set_texture_to_stage_color (MetaScreenBackground *background);
|
||||
|
||||
static void
|
||||
on_notify_stage_color (GObject *stage,
|
||||
GParamSpec *pspec,
|
||||
MetaScreenBackground *background)
|
||||
update_wrap_mode (MetaBackgroundActor *self)
|
||||
{
|
||||
if (!background->have_pixmap)
|
||||
set_texture_to_stage_color (background);
|
||||
}
|
||||
|
||||
static void
|
||||
free_screen_background (MetaScreenBackground *background)
|
||||
{
|
||||
set_texture (background, COGL_INVALID_HANDLE);
|
||||
|
||||
if (background->screen != NULL)
|
||||
{
|
||||
ClutterActor *stage = meta_get_stage_for_screen (background->screen);
|
||||
g_signal_handlers_disconnect_by_func (stage,
|
||||
(gpointer) on_notify_stage_color,
|
||||
background);
|
||||
background->screen = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static MetaScreenBackground *
|
||||
meta_screen_background_get (MetaScreen *screen)
|
||||
{
|
||||
MetaScreenBackground *background;
|
||||
|
||||
background = g_object_get_data (G_OBJECT (screen), "meta-screen-background");
|
||||
if (background == NULL)
|
||||
{
|
||||
ClutterActor *stage;
|
||||
|
||||
background = g_new0 (MetaScreenBackground, 1);
|
||||
|
||||
background->screen = screen;
|
||||
g_object_set_data_full (G_OBJECT (screen), "meta-screen-background",
|
||||
background, (GDestroyNotify) free_screen_background);
|
||||
|
||||
stage = meta_get_stage_for_screen (screen);
|
||||
g_signal_connect (stage, "notify::color",
|
||||
G_CALLBACK (on_notify_stage_color), background);
|
||||
|
||||
meta_background_actor_update (screen);
|
||||
}
|
||||
|
||||
return background;
|
||||
}
|
||||
|
||||
static void
|
||||
update_wrap_mode_of_actor (MetaBackgroundActor *self)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
|
||||
cogl_material_set_layer_wrap_mode (priv->material, 0, priv->background->wrap_mode);
|
||||
}
|
||||
|
||||
static void
|
||||
update_wrap_mode (MetaScreenBackground *background)
|
||||
{
|
||||
GSList *l;
|
||||
int width, height;
|
||||
CoglMaterialWrapMode wrap_mode;
|
||||
|
||||
meta_screen_get_size (background->screen, &width, &height);
|
||||
meta_screen_get_size (self->screen, &width, &height);
|
||||
|
||||
/* We turn off repeating when we have a full-screen pixmap to keep from
|
||||
* getting artifacts from one side of the image sneaking into the other
|
||||
* side of the image via bilinear filtering.
|
||||
*/
|
||||
if (width == background->texture_width && height == background->texture_height)
|
||||
background->wrap_mode = COGL_MATERIAL_WRAP_MODE_CLAMP_TO_EDGE;
|
||||
if (width == self->texture_width && height == self->texture_height)
|
||||
wrap_mode = COGL_MATERIAL_WRAP_MODE_CLAMP_TO_EDGE;
|
||||
else
|
||||
background->wrap_mode = COGL_MATERIAL_WRAP_MODE_REPEAT;
|
||||
wrap_mode = COGL_MATERIAL_WRAP_MODE_REPEAT;
|
||||
|
||||
for (l = background->actors; l; l = l->next)
|
||||
update_wrap_mode_of_actor (l->data);
|
||||
cogl_material_set_layer_wrap_mode (self->material, 0, wrap_mode);
|
||||
}
|
||||
|
||||
static void
|
||||
set_texture_on_actor (MetaBackgroundActor *self)
|
||||
set_texture (MetaBackgroundActor *self,
|
||||
CoglHandle texture)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
MetaDisplay *display = meta_screen_get_display (priv->background->screen);
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_screen_get_display (self->screen);
|
||||
|
||||
/* This may trigger destruction of an old texture pixmap, which, if
|
||||
* the underlying X pixmap is already gone has the tendency to trigger
|
||||
* X errors inside DRI. For safety, trap errors */
|
||||
meta_error_trap_push (display);
|
||||
cogl_material_set_layer (priv->material, 0, priv->background->texture);
|
||||
cogl_material_set_layer (self->material, 0, texture);
|
||||
meta_error_trap_pop (display);
|
||||
|
||||
self->texture_width = cogl_texture_get_width (texture);
|
||||
self->texture_height = cogl_texture_get_height (texture);
|
||||
|
||||
update_wrap_mode (self);
|
||||
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
||||
}
|
||||
|
||||
static void
|
||||
set_texture (MetaScreenBackground *background,
|
||||
CoglHandle texture)
|
||||
{
|
||||
MetaDisplay *display = meta_screen_get_display (background->screen);
|
||||
GSList *l;
|
||||
|
||||
/* This may trigger destruction of an old texture pixmap, which, if
|
||||
* the underlying X pixmap is already gone has the tendency to trigger
|
||||
* X errors inside DRI. For safety, trap errors */
|
||||
meta_error_trap_push (display);
|
||||
if (background->texture != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (background->texture);
|
||||
background->texture = COGL_INVALID_HANDLE;
|
||||
}
|
||||
meta_error_trap_pop (display);
|
||||
|
||||
if (texture != COGL_INVALID_HANDLE)
|
||||
background->texture = cogl_handle_ref (texture);
|
||||
|
||||
background->texture_width = cogl_texture_get_width (background->texture);
|
||||
background->texture_height = cogl_texture_get_height (background->texture);
|
||||
|
||||
for (l = background->actors; l; l = l->next)
|
||||
set_texture_on_actor (l->data);
|
||||
|
||||
update_wrap_mode (background);
|
||||
}
|
||||
|
||||
/* Sets our material to paint with a 1x1 texture of the stage's background
|
||||
* color; doing this when we have no pixmap allows the application to turn
|
||||
* off painting the stage. There might be a performance benefit to
|
||||
@@ -215,9 +106,9 @@ set_texture (MetaScreenBackground *background,
|
||||
* actually pick up the (small?) performance win. This is just a fallback.
|
||||
*/
|
||||
static void
|
||||
set_texture_to_stage_color (MetaScreenBackground *background)
|
||||
set_texture_to_stage_color (MetaBackgroundActor *self)
|
||||
{
|
||||
ClutterActor *stage = meta_get_stage_for_screen (background->screen);
|
||||
ClutterActor *stage = meta_get_stage_for_screen (self->screen);
|
||||
ClutterColor color;
|
||||
CoglHandle texture;
|
||||
|
||||
@@ -229,28 +120,39 @@ set_texture_to_stage_color (MetaScreenBackground *background)
|
||||
texture = meta_create_color_texture_4ub (color.red, color.green,
|
||||
color.blue, 0xff,
|
||||
COGL_TEXTURE_NO_SLICING);
|
||||
set_texture (background, texture);
|
||||
set_texture (self, texture);
|
||||
cogl_handle_unref (texture);
|
||||
}
|
||||
|
||||
static void
|
||||
on_notify_stage_color (GObject *stage,
|
||||
GParamSpec *pspec,
|
||||
MetaBackgroundActor *self)
|
||||
{
|
||||
if (!self->have_pixmap)
|
||||
set_texture_to_stage_color (self);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_dispose (GObject *object)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
|
||||
meta_background_actor_set_visible_region (self, NULL);
|
||||
|
||||
if (priv->background != NULL)
|
||||
if (self->material != COGL_INVALID_HANDLE)
|
||||
{
|
||||
priv->background->actors = g_slist_remove (priv->background->actors, self);
|
||||
priv->background = NULL;
|
||||
cogl_handle_unref (self->material);
|
||||
self->material = COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
if (priv->material != COGL_INVALID_HANDLE)
|
||||
if (self->screen != NULL)
|
||||
{
|
||||
cogl_handle_unref (priv->material);
|
||||
priv->material = COGL_INVALID_HANDLE;
|
||||
ClutterActor *stage = meta_get_stage_for_screen (self->screen);
|
||||
g_signal_handlers_disconnect_by_func (stage,
|
||||
(gpointer) on_notify_stage_color,
|
||||
self);
|
||||
self->screen = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -261,15 +163,14 @@ meta_background_actor_get_preferred_width (ClutterActor *actor,
|
||||
gfloat *natural_width_p)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
int width, height;
|
||||
|
||||
meta_screen_get_size (priv->background->screen, &width, &height);
|
||||
meta_screen_get_size (self->screen, &width, &height);
|
||||
|
||||
if (min_width_p)
|
||||
*min_width_p = width;
|
||||
if (natural_width_p)
|
||||
*natural_width_p = width;
|
||||
*natural_width_p = height;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -280,10 +181,9 @@ meta_background_actor_get_preferred_height (ClutterActor *actor,
|
||||
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
int width, height;
|
||||
|
||||
meta_screen_get_size (priv->background->screen, &width, &height);
|
||||
meta_screen_get_size (self->screen, &width, &height);
|
||||
|
||||
if (min_height_p)
|
||||
*min_height_p = height;
|
||||
@@ -295,39 +195,32 @@ static void
|
||||
meta_background_actor_paint (ClutterActor *actor)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
guint8 opacity = clutter_actor_get_paint_opacity (actor);
|
||||
guint8 color_component;
|
||||
guchar opacity = clutter_actor_get_paint_opacity (actor);
|
||||
int width, height;
|
||||
|
||||
meta_screen_get_size (priv->background->screen, &width, &height);
|
||||
meta_screen_get_size (self->screen, &width, &height);
|
||||
|
||||
color_component = (int)(0.5 + opacity * priv->dim_factor);
|
||||
cogl_material_set_color4ub (self->material,
|
||||
opacity, opacity, opacity, opacity);
|
||||
|
||||
cogl_material_set_color4ub (priv->material,
|
||||
color_component,
|
||||
color_component,
|
||||
color_component,
|
||||
opacity);
|
||||
cogl_set_source (self->material);
|
||||
|
||||
cogl_set_source (priv->material);
|
||||
|
||||
if (priv->visible_region)
|
||||
if (self->visible_region)
|
||||
{
|
||||
int n_rectangles = cairo_region_num_rectangles (priv->visible_region);
|
||||
int n_rectangles = cairo_region_num_rectangles (self->visible_region);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < n_rectangles; i++)
|
||||
{
|
||||
cairo_rectangle_int_t rect;
|
||||
cairo_region_get_rectangle (priv->visible_region, i, &rect);
|
||||
cairo_region_get_rectangle (self->visible_region, i, &rect);
|
||||
|
||||
cogl_rectangle_with_texture_coords (rect.x, rect.y,
|
||||
rect.x + rect.width, rect.y + rect.height,
|
||||
rect.x / priv->background->texture_width,
|
||||
rect.y / priv->background->texture_height,
|
||||
(rect.x + rect.width) / priv->background->texture_width,
|
||||
(rect.y + rect.height) / priv->background->texture_height);
|
||||
rect.x / self->texture_width,
|
||||
rect.y / self->texture_height,
|
||||
(rect.x + rect.width) / self->texture_width,
|
||||
(rect.y + rect.height) / self->texture_height);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -335,160 +228,85 @@ meta_background_actor_paint (ClutterActor *actor)
|
||||
cogl_rectangle_with_texture_coords (0.0f, 0.0f,
|
||||
width, height,
|
||||
0.0f, 0.0f,
|
||||
width / priv->background->texture_width,
|
||||
height / priv->background->texture_height);
|
||||
width / self->texture_width,
|
||||
height / self->texture_height);
|
||||
}
|
||||
}
|
||||
|
||||
#if CLUTTER_CHECK_VERSION(1, 5, 2)
|
||||
static gboolean
|
||||
meta_background_actor_get_paint_volume (ClutterActor *actor,
|
||||
ClutterPaintVolume *volume)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
int width, height;
|
||||
|
||||
meta_screen_get_size (priv->background->screen, &width, &height);
|
||||
meta_screen_get_size (self->screen, &width, &height);
|
||||
|
||||
clutter_paint_volume_set_width (volume, width);
|
||||
clutter_paint_volume_set_height (volume, height);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_set_dim_factor (MetaBackgroundActor *self,
|
||||
gfloat dim_factor)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
|
||||
if (priv->dim_factor == dim_factor)
|
||||
return;
|
||||
|
||||
priv->dim_factor = dim_factor;
|
||||
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_DIM_FACTOR]);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_get_property(GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DIM_FACTOR:
|
||||
g_value_set_float (value, priv->dim_factor);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_set_property(GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DIM_FACTOR:
|
||||
meta_background_actor_set_dim_factor (self, g_value_get_float (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
meta_background_actor_class_init (MetaBackgroundActorClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
|
||||
GParamSpec *pspec;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaBackgroundActorPrivate));
|
||||
|
||||
object_class->dispose = meta_background_actor_dispose;
|
||||
object_class->get_property = meta_background_actor_get_property;
|
||||
object_class->set_property = meta_background_actor_set_property;
|
||||
|
||||
actor_class->get_preferred_width = meta_background_actor_get_preferred_width;
|
||||
actor_class->get_preferred_height = meta_background_actor_get_preferred_height;
|
||||
actor_class->paint = meta_background_actor_paint;
|
||||
#if CLUTTER_CHECK_VERSION(1, 5, 2)
|
||||
actor_class->get_paint_volume = meta_background_actor_get_paint_volume;
|
||||
|
||||
/**
|
||||
* MetaBackgroundActor:dim-factor:
|
||||
*
|
||||
* Factor to dim the background by, between 0.0 (black) and 1.0 (original
|
||||
* colors)
|
||||
*/
|
||||
pspec = g_param_spec_float ("dim-factor",
|
||||
"Dim factor",
|
||||
"Factor to dim the background by",
|
||||
0.0, 1.0,
|
||||
1.0,
|
||||
G_PARAM_READWRITE);
|
||||
obj_props[PROP_DIM_FACTOR] = pspec;
|
||||
g_object_class_install_property (object_class, PROP_DIM_FACTOR, pspec);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_init (MetaBackgroundActor *self)
|
||||
meta_background_actor_init (MetaBackgroundActor *background_actor)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv;
|
||||
|
||||
priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
|
||||
META_TYPE_BACKGROUND_ACTOR,
|
||||
MetaBackgroundActorPrivate);
|
||||
priv->dim_factor = 1.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_actor_new:
|
||||
* @screen: the #MetaScreen
|
||||
* meta_background_actor_new:
|
||||
*
|
||||
* Creates a new actor to draw the background for the given screen.
|
||||
*
|
||||
* Return value: the newly created background actor
|
||||
* Return value: (transfer none): the newly created background actor
|
||||
*/
|
||||
ClutterActor *
|
||||
meta_background_actor_new_for_screen (MetaScreen *screen)
|
||||
meta_background_actor_new (MetaScreen *screen)
|
||||
{
|
||||
MetaBackgroundActor *self;
|
||||
MetaBackgroundActorPrivate *priv;
|
||||
ClutterActor *stage;
|
||||
|
||||
g_return_val_if_fail (META_IS_SCREEN (screen), NULL);
|
||||
|
||||
self = g_object_new (META_TYPE_BACKGROUND_ACTOR, NULL);
|
||||
priv = self->priv;
|
||||
|
||||
priv->background = meta_screen_background_get (screen);
|
||||
priv->background->actors = g_slist_prepend (priv->background->actors, self);
|
||||
self->screen = screen;
|
||||
|
||||
priv->material = meta_create_texture_material (NULL);
|
||||
self->material = meta_create_texture_material (NULL);
|
||||
cogl_material_set_layer_wrap_mode (self->material, 0,
|
||||
COGL_MATERIAL_WRAP_MODE_REPEAT);
|
||||
|
||||
set_texture_on_actor (self);
|
||||
update_wrap_mode_of_actor (self);
|
||||
stage = meta_get_stage_for_screen (self->screen);
|
||||
g_signal_connect (stage, "notify::color",
|
||||
G_CALLBACK (on_notify_stage_color), self);
|
||||
|
||||
meta_background_actor_update (self);
|
||||
|
||||
return CLUTTER_ACTOR (self);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_actor_update:
|
||||
* @screen: a #MetaScreen
|
||||
* @self: a #MetaBackgroundActor
|
||||
*
|
||||
* Refetches the _XROOTPMAP_ID property for the root window and updates
|
||||
* the contents of the background actor based on that. There's no attempt
|
||||
@@ -498,9 +316,8 @@ meta_background_actor_new_for_screen (MetaScreen *screen)
|
||||
* a PropertyNotify event for the property.
|
||||
*/
|
||||
void
|
||||
meta_background_actor_update (MetaScreen *screen)
|
||||
meta_background_actor_update (MetaBackgroundActor *self)
|
||||
{
|
||||
MetaScreenBackground *background;
|
||||
MetaDisplay *display;
|
||||
MetaCompositor *compositor;
|
||||
Atom type;
|
||||
@@ -510,13 +327,14 @@ meta_background_actor_update (MetaScreen *screen)
|
||||
guchar *data;
|
||||
Pixmap root_pixmap_id;
|
||||
|
||||
background = meta_screen_background_get (screen);
|
||||
display = meta_screen_get_display (screen);
|
||||
g_return_if_fail (META_IS_BACKGROUND_ACTOR (self));
|
||||
|
||||
display = meta_screen_get_display (self->screen);
|
||||
compositor = meta_display_get_compositor (display);
|
||||
|
||||
root_pixmap_id = None;
|
||||
if (!XGetWindowProperty (meta_display_get_xdisplay (display),
|
||||
meta_screen_get_xroot (screen),
|
||||
meta_screen_get_xroot (self->screen),
|
||||
compositor->atom_x_root_pixmap,
|
||||
0, LONG_MAX,
|
||||
False,
|
||||
@@ -544,16 +362,16 @@ meta_background_actor_update (MetaScreen *screen)
|
||||
|
||||
if (texture != COGL_INVALID_HANDLE)
|
||||
{
|
||||
set_texture (background, texture);
|
||||
set_texture (self, texture);
|
||||
cogl_handle_unref (texture);
|
||||
|
||||
background->have_pixmap = True;
|
||||
self->have_pixmap = True;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
background->have_pixmap = False;
|
||||
set_texture_to_stage_color (background);
|
||||
self->have_pixmap = False;
|
||||
set_texture_to_stage_color (self);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -569,46 +387,37 @@ void
|
||||
meta_background_actor_set_visible_region (MetaBackgroundActor *self,
|
||||
cairo_region_t *visible_region)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv;
|
||||
|
||||
g_return_if_fail (META_IS_BACKGROUND_ACTOR (self));
|
||||
|
||||
priv = self->priv;
|
||||
|
||||
if (priv->visible_region)
|
||||
if (self->visible_region)
|
||||
{
|
||||
cairo_region_destroy (priv->visible_region);
|
||||
priv->visible_region = NULL;
|
||||
cairo_region_destroy (self->visible_region);
|
||||
self->visible_region = NULL;
|
||||
}
|
||||
|
||||
if (visible_region)
|
||||
{
|
||||
cairo_rectangle_int_t screen_rect = { 0 };
|
||||
meta_screen_get_size (priv->background->screen, &screen_rect.width, &screen_rect.height);
|
||||
meta_screen_get_size (self->screen, &screen_rect.width, &screen_rect.height);
|
||||
|
||||
/* Doing the intersection here is probably unnecessary - MetaWindowGroup
|
||||
* should never compute a visible area that's larger than the root screen!
|
||||
* but it's not that expensive and adds some extra robustness.
|
||||
*/
|
||||
priv->visible_region = cairo_region_create_rectangle (&screen_rect);
|
||||
cairo_region_intersect (priv->visible_region, visible_region);
|
||||
self->visible_region = cairo_region_create_rectangle (&screen_rect);
|
||||
cairo_region_intersect (self->visible_region, visible_region);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_actor_screen_size_changed:
|
||||
* @screen: a #MetaScreen
|
||||
* @self: a #MetaBackgroundActor
|
||||
*
|
||||
* Called by the compositor when the size of the #MetaScreen changes
|
||||
*/
|
||||
void
|
||||
meta_background_actor_screen_size_changed (MetaScreen *screen)
|
||||
meta_background_actor_screen_size_changed (MetaBackgroundActor *self)
|
||||
{
|
||||
MetaScreenBackground *background = meta_screen_background_get (screen);
|
||||
GSList *l;
|
||||
|
||||
update_wrap_mode (background);
|
||||
|
||||
for (l = background->actors; l; l = l->next)
|
||||
clutter_actor_queue_relayout (l->data);
|
||||
update_wrap_mode (self);
|
||||
clutter_actor_queue_relayout (CLUTTER_ACTOR (self));
|
||||
}
|
||||
|
||||
@@ -46,20 +46,13 @@ typedef struct _MetaBackgroundActor MetaBackgroundActor;
|
||||
typedef struct _MetaBackgroundActorClass MetaBackgroundActorClass;
|
||||
typedef struct _MetaBackgroundActorPrivate MetaBackgroundActorPrivate;
|
||||
|
||||
struct _MetaBackgroundActorClass
|
||||
{
|
||||
ClutterActorClass parent_class;
|
||||
};
|
||||
|
||||
struct _MetaBackgroundActor
|
||||
{
|
||||
ClutterActor parent;
|
||||
|
||||
MetaBackgroundActorPrivate *priv;
|
||||
};
|
||||
|
||||
GType meta_background_actor_get_type (void);
|
||||
|
||||
ClutterActor *meta_background_actor_new_for_screen (MetaScreen *screen);
|
||||
ClutterActor *meta_background_actor_new (MetaScreen *screen);
|
||||
|
||||
void meta_background_actor_update (MetaBackgroundActor *actor);
|
||||
void meta_background_actor_set_visible_region (MetaBackgroundActor *self,
|
||||
cairo_region_t *visible_region);
|
||||
void meta_background_actor_screen_size_changed (MetaBackgroundActor *self);
|
||||
|
||||
#endif /* META_BACKGROUND_ACTOR_H */
|
||||
@@ -27,13 +27,13 @@
|
||||
|
||||
#include "meta-shaped-texture.h"
|
||||
#include "meta-texture-tower.h"
|
||||
#include "meta-texture-rectangle.h"
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#include <cogl/cogl.h>
|
||||
#include <string.h>
|
||||
|
||||
static void meta_shaped_texture_dispose (GObject *object);
|
||||
static void meta_shaped_texture_finalize (GObject *object);
|
||||
static void meta_shaped_texture_notify (GObject *object,
|
||||
GParamSpec *pspec);
|
||||
|
||||
@@ -49,8 +49,13 @@ static void meta_shaped_texture_update_area (ClutterX11TexturePixmap *texture,
|
||||
|
||||
static void meta_shaped_texture_dirty_mask (MetaShapedTexture *stex);
|
||||
|
||||
#ifdef HAVE_GLX_TEXTURE_PIXMAP
|
||||
G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture,
|
||||
CLUTTER_GLX_TYPE_TEXTURE_PIXMAP);
|
||||
#else /* HAVE_GLX_TEXTURE_PIXMAP */
|
||||
G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture,
|
||||
CLUTTER_X11_TYPE_TEXTURE_PIXMAP);
|
||||
#endif /* HAVE_GLX_TEXTURE_PIXMAP */
|
||||
|
||||
#define META_SHAPED_TEXTURE_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_SHAPED_TEXTURE, \
|
||||
@@ -64,15 +69,11 @@ struct _MetaShapedTexturePrivate
|
||||
CoglHandle material_unshaped;
|
||||
|
||||
cairo_region_t *clip_region;
|
||||
cairo_region_t *shape_region;
|
||||
|
||||
cairo_region_t *overlay_region;
|
||||
cairo_path_t *overlay_path;
|
||||
|
||||
cairo_region_t *visible_pixels_region;
|
||||
|
||||
guint mask_width, mask_height;
|
||||
|
||||
GArray *rectangles;
|
||||
|
||||
guint create_mipmaps : 1;
|
||||
};
|
||||
|
||||
@@ -84,6 +85,7 @@ meta_shaped_texture_class_init (MetaShapedTextureClass *klass)
|
||||
ClutterX11TexturePixmapClass *x11_texture_class = (ClutterX11TexturePixmapClass *) klass;
|
||||
|
||||
gobject_class->dispose = meta_shaped_texture_dispose;
|
||||
gobject_class->finalize = meta_shaped_texture_finalize;
|
||||
gobject_class->notify = meta_shaped_texture_notify;
|
||||
|
||||
actor_class->paint = meta_shaped_texture_paint;
|
||||
@@ -101,10 +103,8 @@ meta_shaped_texture_init (MetaShapedTexture *self)
|
||||
|
||||
priv = self->priv = META_SHAPED_TEXTURE_GET_PRIVATE (self);
|
||||
|
||||
priv->shape_region = NULL;
|
||||
priv->overlay_path = NULL;
|
||||
priv->overlay_region = NULL;
|
||||
priv->visible_pixels_region = NULL;
|
||||
priv->rectangles = g_array_new (FALSE, FALSE, sizeof (XRectangle));
|
||||
|
||||
priv->paint_tower = meta_texture_tower_new ();
|
||||
priv->mask_texture = COGL_INVALID_HANDLE;
|
||||
priv->create_mipmaps = TRUE;
|
||||
@@ -133,13 +133,22 @@ meta_shaped_texture_dispose (GObject *object)
|
||||
priv->material_unshaped = COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
meta_shaped_texture_set_shape_region (self, NULL);
|
||||
meta_shaped_texture_set_clip_region (self, NULL);
|
||||
meta_shaped_texture_set_overlay_path (self, NULL, NULL);
|
||||
|
||||
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_shaped_texture_finalize (GObject *object)
|
||||
{
|
||||
MetaShapedTexture *self = (MetaShapedTexture *) object;
|
||||
MetaShapedTexturePrivate *priv = self->priv;
|
||||
|
||||
g_array_free (priv->rectangles, TRUE);
|
||||
|
||||
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_shaped_texture_notify (GObject *object,
|
||||
GParamSpec *pspec)
|
||||
@@ -170,139 +179,27 @@ meta_shaped_texture_dirty_mask (MetaShapedTexture *stex)
|
||||
{
|
||||
MetaShapedTexturePrivate *priv = stex->priv;
|
||||
|
||||
if (priv->visible_pixels_region != NULL)
|
||||
if (priv->mask_texture != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cairo_region_destroy (priv->visible_pixels_region);
|
||||
priv->visible_pixels_region = NULL;
|
||||
GLuint mask_gl_tex;
|
||||
GLenum mask_gl_target;
|
||||
|
||||
if (priv->mask_texture == COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (priv->mask_texture);
|
||||
priv->mask_texture = COGL_INVALID_HANDLE;
|
||||
}
|
||||
cogl_texture_get_gl_texture (priv->mask_texture,
|
||||
&mask_gl_tex, &mask_gl_target);
|
||||
|
||||
#ifdef GL_TEXTURE_RECTANGLE_ARB
|
||||
if (mask_gl_target == GL_TEXTURE_RECTANGLE_ARB)
|
||||
glDeleteTextures (1, &mask_gl_tex);
|
||||
#endif
|
||||
|
||||
cogl_handle_unref (priv->mask_texture);
|
||||
priv->mask_texture = COGL_INVALID_HANDLE;
|
||||
|
||||
if (priv->material != COGL_INVALID_HANDLE)
|
||||
cogl_material_set_layer (priv->material, 1, COGL_INVALID_HANDLE);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
scan_visible_region (MetaShapedTexture *stex,
|
||||
guchar *mask_data,
|
||||
int stride)
|
||||
{
|
||||
MetaShapedTexturePrivate *priv = stex->priv;
|
||||
cairo_region_t *visible_pixels_region;
|
||||
cairo_region_t *overlay_region;
|
||||
int i, n_rects;
|
||||
|
||||
/* The visible pixels region contains all pixel values above 0.
|
||||
* This is somewhat complicated when there's an overlay: we
|
||||
* need to scan all regions potentially modified by it.
|
||||
*/
|
||||
|
||||
if (priv->visible_pixels_region)
|
||||
cairo_region_destroy (priv->visible_pixels_region);
|
||||
|
||||
priv->visible_pixels_region = cairo_region_copy (priv->shape_region);
|
||||
|
||||
visible_pixels_region = priv->visible_pixels_region;
|
||||
overlay_region = priv->overlay_region;
|
||||
|
||||
/* With no overlay region, the visible region is defined
|
||||
* by the mask region, so we don't need to scan anything. */
|
||||
if (overlay_region == NULL)
|
||||
return;
|
||||
|
||||
/* Subtract all the rectangles in the overlay region so that we can
|
||||
* scan all the pixels potentially added by the overlay path. */
|
||||
cairo_region_subtract (visible_pixels_region, overlay_region);
|
||||
|
||||
n_rects = cairo_region_num_rectangles (overlay_region);
|
||||
|
||||
for (i = 0; i < n_rects; i++)
|
||||
{
|
||||
int x, y;
|
||||
cairo_rectangle_int_t rect;
|
||||
|
||||
cairo_region_get_rectangle (overlay_region, i, &rect);
|
||||
|
||||
for (y = rect.y; y < (rect.y + rect.height); y++)
|
||||
{
|
||||
for (x = rect.x; x < (rect.x + rect.width); x++)
|
||||
{
|
||||
int w = x;
|
||||
while (mask_data[y * stride + w] > 0 && w < (rect.x + rect.width))
|
||||
w++;
|
||||
|
||||
if (w > 0)
|
||||
{
|
||||
cairo_rectangle_int_t tmp;
|
||||
tmp.x = x;
|
||||
tmp.y = y;
|
||||
tmp.width = w - x;
|
||||
tmp.height = 1;
|
||||
cairo_region_union_rectangle (visible_pixels_region, &tmp);
|
||||
x = w;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
install_overlay_path (MetaShapedTexture *stex,
|
||||
guchar *mask_data,
|
||||
int tex_width,
|
||||
int tex_height,
|
||||
int stride)
|
||||
{
|
||||
MetaShapedTexturePrivate *priv = stex->priv;
|
||||
int i, n_rects;
|
||||
cairo_t *cr;
|
||||
cairo_rectangle_int_t rect;
|
||||
cairo_surface_t *surface;
|
||||
|
||||
if (priv->overlay_region == NULL)
|
||||
return;
|
||||
|
||||
surface = cairo_image_surface_create_for_data (mask_data,
|
||||
CAIRO_FORMAT_A8,
|
||||
tex_width,
|
||||
tex_height,
|
||||
stride);
|
||||
|
||||
cr = cairo_create (surface);
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
|
||||
|
||||
n_rects = cairo_region_num_rectangles (priv->overlay_region);
|
||||
for (i = 0; i < n_rects; i++)
|
||||
{
|
||||
cairo_region_get_rectangle (priv->overlay_region, i, &rect);
|
||||
cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height);
|
||||
}
|
||||
|
||||
cairo_fill_preserve (cr);
|
||||
if (priv->overlay_path == NULL)
|
||||
{
|
||||
/* If we have an overlay region but not an overlay path, then we
|
||||
* just need to clear the rectangles in the overlay region. */
|
||||
goto out;
|
||||
}
|
||||
|
||||
cairo_clip (cr);
|
||||
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
|
||||
cairo_set_source_rgba (cr, 1, 1, 1, 1);
|
||||
|
||||
cairo_append_path (cr, priv->overlay_path);
|
||||
cairo_fill (cr);
|
||||
|
||||
out:
|
||||
cairo_destroy (cr);
|
||||
cairo_surface_destroy (surface);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_shaped_texture_ensure_mask (MetaShapedTexture *stex)
|
||||
{
|
||||
@@ -325,42 +222,22 @@ meta_shaped_texture_ensure_mask (MetaShapedTexture *stex)
|
||||
meta_shaped_texture_dirty_mask (stex);
|
||||
|
||||
/* If we don't have a mask texture yet then create one */
|
||||
if (priv->visible_pixels_region == NULL)
|
||||
if (priv->mask_texture == COGL_INVALID_HANDLE)
|
||||
{
|
||||
guchar *mask_data;
|
||||
int i;
|
||||
int n_rects;
|
||||
int stride;
|
||||
const XRectangle *rect;
|
||||
GLenum paint_gl_target;
|
||||
|
||||
/* If we have no shape region and no (or an empty) overlay region, we
|
||||
* don't need to create a full mask texture, so quit early. */
|
||||
if (priv->shape_region == NULL &&
|
||||
(priv->overlay_region == NULL ||
|
||||
cairo_region_num_rectangles (priv->overlay_region) == 0))
|
||||
{
|
||||
/* With no mask, the visible region is just
|
||||
* {0, 0, tex_width, tex_height}. */
|
||||
cairo_rectangle_int_t rect = { 0, 0, tex_width, tex_height };
|
||||
priv->visible_pixels_region = cairo_region_create_rectangle (&rect);
|
||||
return;
|
||||
}
|
||||
|
||||
stride = cairo_format_stride_for_width (CAIRO_FORMAT_A8, tex_width);
|
||||
|
||||
/* Create data for an empty image */
|
||||
mask_data = g_malloc0 (stride * tex_height);
|
||||
mask_data = g_malloc0 (tex_width * tex_height);
|
||||
|
||||
n_rects = cairo_region_num_rectangles (priv->shape_region);
|
||||
|
||||
/* Fill in each rectangle. */
|
||||
for (i = 0; i < n_rects; i ++)
|
||||
/* Cut out a hole for each rectangle */
|
||||
for (rect = (XRectangle *) priv->rectangles->data
|
||||
+ priv->rectangles->len;
|
||||
rect-- > (XRectangle *) priv->rectangles->data;)
|
||||
{
|
||||
cairo_rectangle_int_t rect;
|
||||
cairo_region_get_rectangle (priv->shape_region, i, &rect);
|
||||
|
||||
gint x1 = rect.x, x2 = x1 + rect.width;
|
||||
gint y1 = rect.y, y2 = y1 + rect.height;
|
||||
gint x1 = rect->x, x2 = x1 + rect->width;
|
||||
gint y1 = rect->y, y2 = y1 + rect->height;
|
||||
guchar *p;
|
||||
|
||||
/* Clip the rectangle to the size of the texture */
|
||||
@@ -370,32 +247,35 @@ meta_shaped_texture_ensure_mask (MetaShapedTexture *stex)
|
||||
y2 = CLAMP (y2, y1, (gint) tex_height);
|
||||
|
||||
/* Fill the rectangle */
|
||||
for (p = mask_data + y1 * stride + x1;
|
||||
for (p = mask_data + y1 * tex_width + x1;
|
||||
y1 < y2;
|
||||
y1++, p += stride)
|
||||
y1++, p += tex_width)
|
||||
memset (p, 255, x2 - x1);
|
||||
}
|
||||
|
||||
install_overlay_path (stex, mask_data, tex_width, tex_height, stride);
|
||||
scan_visible_region (stex, mask_data, stride);
|
||||
|
||||
cogl_texture_get_gl_texture (paint_tex, NULL, &paint_gl_target);
|
||||
|
||||
#ifdef GL_TEXTURE_RECTANGLE_ARB
|
||||
if (paint_gl_target == GL_TEXTURE_RECTANGLE_ARB)
|
||||
{
|
||||
GLuint tex;
|
||||
|
||||
glGenTextures (1, &tex);
|
||||
glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex);
|
||||
glPixelStorei (GL_UNPACK_ROW_LENGTH, tex_width);
|
||||
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
|
||||
glPixelStorei (GL_UNPACK_SKIP_ROWS, 0);
|
||||
glPixelStorei (GL_UNPACK_SKIP_PIXELS, 0);
|
||||
glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0,
|
||||
GL_ALPHA, tex_width, tex_height,
|
||||
0, GL_ALPHA, GL_UNSIGNED_BYTE, mask_data);
|
||||
|
||||
priv->mask_texture
|
||||
= meta_texture_rectangle_new (tex_width, tex_height,
|
||||
0, /* flags */
|
||||
/* data format */
|
||||
COGL_PIXEL_FORMAT_A_8,
|
||||
/* internal GL format */
|
||||
GL_ALPHA,
|
||||
/* internal cogl format */
|
||||
COGL_PIXEL_FORMAT_A_8,
|
||||
/* rowstride */
|
||||
stride,
|
||||
mask_data);
|
||||
= cogl_texture_new_from_foreign (tex,
|
||||
GL_TEXTURE_RECTANGLE_ARB,
|
||||
tex_width, tex_height,
|
||||
0, 0,
|
||||
COGL_PIXEL_FORMAT_A_8);
|
||||
}
|
||||
else
|
||||
#endif /* GL_TEXTURE_RECTANGLE_ARB */
|
||||
@@ -403,7 +283,7 @@ meta_shaped_texture_ensure_mask (MetaShapedTexture *stex)
|
||||
COGL_TEXTURE_NONE,
|
||||
COGL_PIXEL_FORMAT_A_8,
|
||||
COGL_PIXEL_FORMAT_ANY,
|
||||
stride,
|
||||
tex_width,
|
||||
mask_data);
|
||||
|
||||
g_free (mask_data);
|
||||
@@ -462,9 +342,9 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
||||
if (tex_width == 0 || tex_height == 0) /* no contents yet */
|
||||
return;
|
||||
|
||||
if (priv->shape_region == NULL)
|
||||
if (priv->rectangles->len < 1)
|
||||
{
|
||||
/* No region means an unclipped shape. Use a single-layer texture. */
|
||||
/* If there are no rectangles use a single-layer texture */
|
||||
|
||||
if (priv->material_unshaped == COGL_INVALID_HANDLE)
|
||||
{
|
||||
@@ -564,8 +444,8 @@ meta_shaped_texture_pick (ClutterActor *actor,
|
||||
MetaShapedTexture *stex = (MetaShapedTexture *) actor;
|
||||
MetaShapedTexturePrivate *priv = stex->priv;
|
||||
|
||||
/* If there is no region then use the regular pick */
|
||||
if (priv->shape_region == NULL)
|
||||
/* If there are no rectangles then use the regular pick */
|
||||
if (priv->rectangles->len < 1)
|
||||
CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class)
|
||||
->pick (actor, color);
|
||||
else if (clutter_actor_should_pick_paint (actor))
|
||||
@@ -685,8 +565,7 @@ meta_shaped_texture_clear (MetaShapedTexture *stex)
|
||||
}
|
||||
|
||||
void
|
||||
meta_shaped_texture_set_shape_region (MetaShapedTexture *stex,
|
||||
cairo_region_t *region)
|
||||
meta_shaped_texture_clear_rectangles (MetaShapedTexture *stex)
|
||||
{
|
||||
MetaShapedTexturePrivate *priv;
|
||||
|
||||
@@ -694,54 +573,24 @@ meta_shaped_texture_set_shape_region (MetaShapedTexture *stex,
|
||||
|
||||
priv = stex->priv;
|
||||
|
||||
if (priv->shape_region != NULL)
|
||||
{
|
||||
cairo_region_destroy (priv->shape_region);
|
||||
priv->shape_region = NULL;
|
||||
}
|
||||
|
||||
if (region != NULL)
|
||||
{
|
||||
cairo_region_reference (region);
|
||||
priv->shape_region = region;
|
||||
}
|
||||
|
||||
g_array_set_size (priv->rectangles, 0);
|
||||
meta_shaped_texture_dirty_mask (stex);
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_shaped_texture_get_visible_pixels_region:
|
||||
* @stex: a #MetaShapedTexture
|
||||
*
|
||||
* Return a region enclosing only visible pixels: those with
|
||||
* alpha values above 0.
|
||||
*
|
||||
* Returns: a #cairo_region_t
|
||||
*/
|
||||
cairo_region_t *
|
||||
meta_shaped_texture_get_visible_pixels_region (MetaShapedTexture *stex)
|
||||
void
|
||||
meta_shaped_texture_add_rectangle (MetaShapedTexture *stex,
|
||||
const XRectangle *rect)
|
||||
{
|
||||
g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL);
|
||||
g_return_if_fail (META_IS_SHAPED_TEXTURE (stex));
|
||||
|
||||
meta_shaped_texture_ensure_mask (stex);
|
||||
return stex->priv->visible_pixels_region;
|
||||
meta_shaped_texture_add_rectangles (stex, 1, rect);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_shaped_texture_set_overlay_path:
|
||||
* @stex: a #MetaShapedTexture
|
||||
* @overlay_region: A region containing the parts of the mask to overlay.
|
||||
* All rectangles in this region are wiped clear to full transparency,
|
||||
* and the overlay path is clipped to this region.
|
||||
* @overlay_path (transfer full): This path will be painted onto the mask
|
||||
* texture with a fully opaque source. Due to the lack of refcounting
|
||||
* in #cairo_path_t, ownership of the path is assumed.
|
||||
*/
|
||||
void
|
||||
meta_shaped_texture_set_overlay_path (MetaShapedTexture *stex,
|
||||
cairo_region_t *overlay_region,
|
||||
cairo_path_t *overlay_path)
|
||||
meta_shaped_texture_add_rectangles (MetaShapedTexture *stex,
|
||||
size_t num_rects,
|
||||
const XRectangle *rects)
|
||||
{
|
||||
MetaShapedTexturePrivate *priv;
|
||||
|
||||
@@ -749,25 +598,10 @@ meta_shaped_texture_set_overlay_path (MetaShapedTexture *stex,
|
||||
|
||||
priv = stex->priv;
|
||||
|
||||
if (priv->overlay_region != NULL)
|
||||
{
|
||||
cairo_region_destroy (priv->overlay_region);
|
||||
priv->overlay_region = NULL;
|
||||
}
|
||||
|
||||
if (priv->overlay_path != NULL)
|
||||
{
|
||||
cairo_path_destroy (priv->overlay_path);
|
||||
priv->overlay_path = NULL;
|
||||
}
|
||||
|
||||
cairo_region_reference (overlay_region);
|
||||
priv->overlay_region = overlay_region;
|
||||
|
||||
/* cairo_path_t does not have refcounting. */
|
||||
priv->overlay_path = overlay_path;
|
||||
g_array_append_vals (priv->rectangles, rects, num_rects);
|
||||
|
||||
meta_shaped_texture_dirty_mask (stex);
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,7 +29,11 @@
|
||||
#include <config.h>
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#ifdef HAVE_GLX_TEXTURE_PIXMAP
|
||||
#include <clutter/glx/clutter-glx.h>
|
||||
#else
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
#endif /* HAVE_GLX_TEXTURE_PIXMAP */
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
@@ -46,12 +50,20 @@ typedef struct _MetaShapedTexturePrivate MetaShapedTexturePrivate;
|
||||
|
||||
struct _MetaShapedTextureClass
|
||||
{
|
||||
#ifdef HAVE_GLX_TEXTURE_PIXMAP
|
||||
ClutterGLXTexturePixmapClass parent_class;
|
||||
#else
|
||||
ClutterX11TexturePixmapClass parent_class;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct _MetaShapedTexture
|
||||
{
|
||||
#ifdef HAVE_GLX_TEXTURE_PIXMAP
|
||||
ClutterGLXTexturePixmap parent;
|
||||
#else
|
||||
ClutterX11TexturePixmap parent;
|
||||
#endif
|
||||
|
||||
MetaShapedTexturePrivate *priv;
|
||||
};
|
||||
@@ -65,14 +77,13 @@ void meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex,
|
||||
|
||||
void meta_shaped_texture_clear (MetaShapedTexture *stex);
|
||||
|
||||
void meta_shaped_texture_set_shape_region (MetaShapedTexture *stex,
|
||||
cairo_region_t *region);
|
||||
void meta_shaped_texture_clear_rectangles (MetaShapedTexture *stex);
|
||||
|
||||
cairo_region_t *meta_shaped_texture_get_visible_pixels_region (MetaShapedTexture *stex);
|
||||
|
||||
void meta_shaped_texture_set_overlay_path (MetaShapedTexture *stex,
|
||||
cairo_region_t *overlay_region,
|
||||
cairo_path_t *overlay_path);
|
||||
void meta_shaped_texture_add_rectangle (MetaShapedTexture *stex,
|
||||
const XRectangle *rect);
|
||||
void meta_shaped_texture_add_rectangles (MetaShapedTexture *stex,
|
||||
size_t num_rects,
|
||||
const XRectangle *rects);
|
||||
|
||||
/* Assumes ownership of clip_region */
|
||||
void meta_shaped_texture_set_clip_region (MetaShapedTexture *stex,
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
/*
|
||||
* texture rectangle
|
||||
*
|
||||
* A small utility function to help create a rectangle texture
|
||||
*
|
||||
* Authored By Neil Roberts <neil@linux.intel.com>
|
||||
*
|
||||
* Copyright (C) 2011 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "meta-texture-rectangle.h"
|
||||
|
||||
#ifdef GL_TEXTURE_RECTANGLE_ARB
|
||||
|
||||
static void (* pf_glGetIntegerv) (GLenum pname, GLint *params);
|
||||
static void (* pf_glTexImage2D) (GLenum target, GLint level,
|
||||
GLint internalFormat,
|
||||
GLsizei width, GLsizei height,
|
||||
GLint border, GLenum format, GLenum type,
|
||||
const GLvoid *pixels);
|
||||
static void (* pf_glGenTextures) (GLsizei n, GLuint *textures);
|
||||
static void (* pf_glDeleteTextures) (GLsizei n, const GLuint *texture);
|
||||
static void (* pf_glBindTexture) (GLenum target, GLuint texture);
|
||||
|
||||
static void
|
||||
rectangle_texture_destroy_cb (void *user_data)
|
||||
{
|
||||
GLuint tex = GPOINTER_TO_UINT (user_data);
|
||||
|
||||
pf_glDeleteTextures (1, &tex);
|
||||
}
|
||||
|
||||
#endif /* GL_TEXTURE_RECTANGLE_ARB */
|
||||
|
||||
CoglHandle
|
||||
meta_texture_rectangle_new (unsigned int width,
|
||||
unsigned int height,
|
||||
CoglTextureFlags flags,
|
||||
CoglPixelFormat format,
|
||||
GLenum internal_gl_format,
|
||||
GLenum internal_format,
|
||||
unsigned int rowstride,
|
||||
const guint8 *data)
|
||||
{
|
||||
CoglHandle cogl_tex = COGL_INVALID_HANDLE;
|
||||
|
||||
#ifdef GL_TEXTURE_RECTANGLE_ARB
|
||||
|
||||
static CoglUserDataKey user_data_key;
|
||||
GLint old_binding;
|
||||
GLuint tex;
|
||||
|
||||
if (pf_glGenTextures == NULL)
|
||||
{
|
||||
pf_glGetIntegerv = (void *) cogl_get_proc_address ("glGetIntegerv");
|
||||
pf_glTexImage2D = (void *) cogl_get_proc_address ("glTexImage2D");
|
||||
pf_glGenTextures = (void *) cogl_get_proc_address ("glGenTextures");
|
||||
pf_glDeleteTextures = (void *) cogl_get_proc_address ("glDeleteTextures");
|
||||
pf_glBindTexture = (void *) cogl_get_proc_address ("glBindTexture");
|
||||
}
|
||||
|
||||
pf_glGenTextures (1, &tex);
|
||||
pf_glGetIntegerv (GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_binding);
|
||||
pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex);
|
||||
pf_glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0,
|
||||
internal_gl_format, width, height,
|
||||
0, internal_gl_format,
|
||||
GL_UNSIGNED_BYTE, NULL);
|
||||
pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, old_binding);
|
||||
|
||||
cogl_tex = cogl_texture_new_from_foreign (tex,
|
||||
GL_TEXTURE_RECTANGLE_ARB,
|
||||
width, height,
|
||||
0, 0, /* no waste */
|
||||
internal_format);
|
||||
|
||||
/* Cogl won't destroy the GL texture when a foreign texture is used
|
||||
so we need to destroy it manually. We can set a destroy
|
||||
notification callback to do this transparently */
|
||||
cogl_object_set_user_data (cogl_tex,
|
||||
&user_data_key,
|
||||
GUINT_TO_POINTER (tex),
|
||||
rectangle_texture_destroy_cb);
|
||||
|
||||
/* Use cogl_texture_set_region instead of uploading the data
|
||||
directly with GL calls so that we can let Cogl deal with setting
|
||||
the pixel store parameters and handling format conversion */
|
||||
if (data)
|
||||
cogl_texture_set_region (cogl_tex,
|
||||
0, 0, /* src x/y */
|
||||
0, 0, /* dst x/y */
|
||||
width, height, /* dst width/height */
|
||||
width, height, /* src width/height */
|
||||
format,
|
||||
rowstride,
|
||||
data);
|
||||
|
||||
#endif /* GL_TEXTURE_RECTANGLE_ARB */
|
||||
|
||||
return cogl_tex;
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
* texture rectangle
|
||||
*
|
||||
* A small utility function to help create a rectangle texture
|
||||
*
|
||||
* Authored By Neil Roberts <neil@linux.intel.com>
|
||||
*
|
||||
* Copyright (C) 2011 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __META_TEXTURE_RECTANGLE_H__
|
||||
#define __META_TEXTURE_RECTANGLE_H__
|
||||
|
||||
#include <cogl/cogl.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
CoglHandle
|
||||
meta_texture_rectangle_new (unsigned int width,
|
||||
unsigned int height,
|
||||
CoglTextureFlags flags,
|
||||
CoglPixelFormat format,
|
||||
GLenum internal_gl_format,
|
||||
GLenum internal_format,
|
||||
unsigned int rowstride,
|
||||
const guint8 *data);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __META_TEXTURE_RECTANGLE_H__ */
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "meta-texture-tower.h"
|
||||
#include "meta-texture-rectangle.h"
|
||||
|
||||
#ifndef M_LOG2E
|
||||
#define M_LOG2E 1.4426950408889634074
|
||||
@@ -110,6 +109,22 @@ texture_is_rectangle (CoglHandle texture)
|
||||
}
|
||||
#endif /* GL_TEXTURE_RECTANGLE_ARB */
|
||||
|
||||
static void
|
||||
free_texture (CoglHandle texture)
|
||||
{
|
||||
#ifdef GL_TEXTURE_RECTANGLE_ARB
|
||||
GLuint gl_tex;
|
||||
GLenum gl_target;
|
||||
|
||||
cogl_texture_get_gl_texture (texture, &gl_tex, &gl_target);
|
||||
|
||||
if (gl_target == GL_TEXTURE_RECTANGLE_ARB)
|
||||
glDeleteTextures (1, &gl_tex);
|
||||
#endif /* GL_TEXTURE_RECTANGLE_ARB */
|
||||
|
||||
cogl_handle_unref (texture);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_texture_tower_update_area:
|
||||
* @tower: a MetaTextureTower
|
||||
@@ -137,7 +152,7 @@ meta_texture_tower_set_base_texture (MetaTextureTower *tower,
|
||||
{
|
||||
if (tower->textures[i] != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (tower->textures[i]);
|
||||
free_texture (tower->textures[i]);
|
||||
tower->textures[i] = COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
@@ -369,18 +384,23 @@ texture_tower_create_texture (MetaTextureTower *tower,
|
||||
if ((!is_power_of_two (width) || !is_power_of_two (height)) &&
|
||||
texture_is_rectangle (tower->textures[level - 1]))
|
||||
{
|
||||
tower->textures[level] =
|
||||
meta_texture_rectangle_new (width, height,
|
||||
0, /* flags */
|
||||
/* data format */
|
||||
TEXTURE_FORMAT,
|
||||
/* internal GL format */
|
||||
GL_RGBA,
|
||||
/* internal cogl format */
|
||||
TEXTURE_FORMAT,
|
||||
/* rowstride */
|
||||
width * 4,
|
||||
NULL);
|
||||
GLuint tex = 0;
|
||||
|
||||
glGenTextures (1, &tex);
|
||||
glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex);
|
||||
glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0,
|
||||
GL_RGBA, width,height,
|
||||
#if TEXTURE_FORMAT == COGL_PIXEL_FORMAT_BGRA_8888_PRE
|
||||
0, GL_BGRA, GL_UNSIGNED_BYTE,
|
||||
#else /* assume big endian */
|
||||
0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,
|
||||
#endif
|
||||
NULL);
|
||||
|
||||
tower->textures[level] = cogl_texture_new_from_foreign (tex, GL_TEXTURE_RECTANGLE_ARB,
|
||||
width, height,
|
||||
0, 0,
|
||||
TEXTURE_FORMAT);
|
||||
}
|
||||
else
|
||||
#endif /* GL_TEXTURE_RECTANGLE_ARB */
|
||||
@@ -410,7 +430,12 @@ texture_tower_revalidate_fbo (MetaTextureTower *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;
|
||||
|
||||
@@ -26,22 +26,15 @@ void meta_window_actor_unmaximize (MetaWindowActor *self,
|
||||
|
||||
void meta_window_actor_process_damage (MetaWindowActor *self,
|
||||
XDamageNotifyEvent *event);
|
||||
|
||||
void meta_window_actor_pre_paint (MetaWindowActor *self);
|
||||
|
||||
void meta_window_actor_invalidate_shadow (MetaWindowActor *self);
|
||||
|
||||
void meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state);
|
||||
|
||||
gboolean meta_window_actor_should_unredirect (MetaWindowActor *self);
|
||||
|
||||
void meta_window_actor_get_shape_bounds (MetaWindowActor *self,
|
||||
cairo_rectangle_int_t *bounds);
|
||||
|
||||
gboolean meta_window_actor_effect_in_progress (MetaWindowActor *self);
|
||||
void meta_window_actor_sync_actor_position (MetaWindowActor *self);
|
||||
void meta_window_actor_sync_visibility (MetaWindowActor *self);
|
||||
void meta_window_actor_update_shape (MetaWindowActor *self);
|
||||
void meta_window_actor_update_shape (MetaWindowActor *self,
|
||||
gboolean shaped);
|
||||
void meta_window_actor_update_opacity (MetaWindowActor *self);
|
||||
void meta_window_actor_mapped (MetaWindowActor *self);
|
||||
void meta_window_actor_unmapped (MetaWindowActor *self);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#define _ISOC99_SOURCE /* for roundf */
|
||||
#include <math.h>
|
||||
|
||||
#include <X11/extensions/shape.h>
|
||||
@@ -10,8 +11,6 @@
|
||||
#include <X11/extensions/Xrender.h>
|
||||
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
#define COGL_ENABLE_EXPERIMENTAL_API
|
||||
#include <cogl/cogl-texture-pixmap-x11.h>
|
||||
#include <gdk/gdk.h> /* for gdk_rectangle_union() */
|
||||
|
||||
#include <meta/display.h>
|
||||
@@ -36,6 +35,8 @@ static guint signals[LAST_SIGNAL] = {0};
|
||||
|
||||
struct _MetaWindowActorPrivate
|
||||
{
|
||||
XWindowAttributes attrs;
|
||||
|
||||
MetaWindow *window;
|
||||
Window xwindow;
|
||||
MetaScreen *screen;
|
||||
@@ -67,7 +68,8 @@ struct _MetaWindowActorPrivate
|
||||
|
||||
/* If the window is shaped, a region that matches the shape */
|
||||
cairo_region_t *shape_region;
|
||||
/* A rectangular region with the visible extents of the window */
|
||||
/* A rectangular region with the unshaped extends of the window
|
||||
* texture */
|
||||
cairo_region_t *bounding_region;
|
||||
/* The region we should clip to when painting the shadow */
|
||||
cairo_region_t *shadow_clip;
|
||||
@@ -75,10 +77,6 @@ struct _MetaWindowActorPrivate
|
||||
/* Extracted size-invariant shape used for shadows */
|
||||
MetaWindowShape *shadow_shape;
|
||||
|
||||
gint last_width;
|
||||
gint last_height;
|
||||
MetaFrameBorders last_borders;
|
||||
|
||||
gint freeze_count;
|
||||
|
||||
char * shadow_class;
|
||||
@@ -96,6 +94,7 @@ struct _MetaWindowActorPrivate
|
||||
|
||||
guint visible : 1;
|
||||
guint mapped : 1;
|
||||
guint shaped : 1;
|
||||
guint argb32 : 1;
|
||||
guint disposed : 1;
|
||||
guint redecorating : 1;
|
||||
@@ -114,8 +113,6 @@ struct _MetaWindowActorPrivate
|
||||
guint no_shadow : 1;
|
||||
|
||||
guint no_more_x_calls : 1;
|
||||
|
||||
guint unredirected : 1;
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -145,10 +142,10 @@ static void meta_window_actor_get_property (GObject *object,
|
||||
GParamSpec *pspec);
|
||||
|
||||
static void meta_window_actor_paint (ClutterActor *actor);
|
||||
|
||||
#if CLUTTER_CHECK_VERSION(1, 5, 2)
|
||||
static gboolean meta_window_actor_get_paint_volume (ClutterActor *actor,
|
||||
ClutterPaintVolume *volume);
|
||||
|
||||
#endif
|
||||
|
||||
static void meta_window_actor_detach (MetaWindowActor *self);
|
||||
static gboolean meta_window_actor_has_shadow (MetaWindowActor *self);
|
||||
@@ -157,6 +154,54 @@ static void meta_window_actor_clear_shape_region (MetaWindowActor *self);
|
||||
static void meta_window_actor_clear_bounding_region (MetaWindowActor *self);
|
||||
static void meta_window_actor_clear_shadow_clip (MetaWindowActor *self);
|
||||
|
||||
static gboolean is_shaped (MetaDisplay *display,
|
||||
Window xwindow);
|
||||
/*
|
||||
* Register GType wrapper for XWindowAttributes, so we do not have to
|
||||
* query window attributes in the MetaWindowActor constructor but can pass
|
||||
* them as a property to the constructor (so we can gracefully handle the case
|
||||
* where no attributes can be retrieved).
|
||||
*
|
||||
* NB -- we only need a subset of the attributes; at some point we might want
|
||||
* to just store the relevant values rather than the whole struct.
|
||||
*/
|
||||
#define META_TYPE_XATTRS (meta_xattrs_get_type ())
|
||||
|
||||
static GType meta_xattrs_get_type (void) G_GNUC_CONST;
|
||||
|
||||
static XWindowAttributes *
|
||||
meta_xattrs_copy (const XWindowAttributes *attrs)
|
||||
{
|
||||
XWindowAttributes *result;
|
||||
|
||||
g_return_val_if_fail (attrs != NULL, NULL);
|
||||
|
||||
result = (XWindowAttributes*) g_malloc (sizeof (XWindowAttributes));
|
||||
*result = *attrs;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_xattrs_free (XWindowAttributes *attrs)
|
||||
{
|
||||
g_return_if_fail (attrs != NULL);
|
||||
|
||||
g_free (attrs);
|
||||
}
|
||||
|
||||
static GType
|
||||
meta_xattrs_get_type (void)
|
||||
{
|
||||
static GType our_type = 0;
|
||||
|
||||
if (!our_type)
|
||||
our_type = g_boxed_type_register_static ("XWindowAttributes",
|
||||
(GBoxedCopyFunc) meta_xattrs_copy,
|
||||
(GBoxedFreeFunc) meta_xattrs_free);
|
||||
return our_type;
|
||||
}
|
||||
|
||||
G_DEFINE_TYPE (MetaWindowActor, meta_window_actor, CLUTTER_TYPE_GROUP);
|
||||
|
||||
static void
|
||||
@@ -175,7 +220,9 @@ meta_window_actor_class_init (MetaWindowActorClass *klass)
|
||||
object_class->constructed = meta_window_actor_constructed;
|
||||
|
||||
actor_class->paint = meta_window_actor_paint;
|
||||
#if CLUTTER_CHECK_VERSION(1, 5, 2)
|
||||
actor_class->get_paint_volume = meta_window_actor_get_paint_volume;
|
||||
#endif
|
||||
|
||||
pspec = g_param_spec_object ("meta-window",
|
||||
"MetaWindow",
|
||||
@@ -208,6 +255,16 @@ meta_window_actor_class_init (MetaWindowActorClass *klass)
|
||||
PROP_X_WINDOW,
|
||||
pspec);
|
||||
|
||||
pspec = g_param_spec_boxed ("x-window-attributes",
|
||||
"XWindowAttributes",
|
||||
"XWindowAttributes",
|
||||
META_TYPE_XATTRS,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_X_WINDOW_ATTRIBUTES,
|
||||
pspec);
|
||||
|
||||
pspec = g_param_spec_boolean ("no-shadow",
|
||||
"No shadow",
|
||||
"Do not add shaddow to this window",
|
||||
@@ -268,6 +325,7 @@ window_decorated_notify (MetaWindow *mw,
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
Window new_xwindow;
|
||||
XWindowAttributes attrs;
|
||||
|
||||
/*
|
||||
* Basically, we have to reconstruct the the internals of this object
|
||||
@@ -299,6 +357,16 @@ window_decorated_notify (MetaWindow *mw,
|
||||
|
||||
priv->xwindow = new_xwindow;
|
||||
|
||||
if (!XGetWindowAttributes (xdisplay, new_xwindow, &attrs))
|
||||
{
|
||||
g_warning ("Could not obtain attributes for window 0x%x after "
|
||||
"decoration change",
|
||||
(guint) new_xwindow);
|
||||
return;
|
||||
}
|
||||
|
||||
g_object_set (self, "x-window-attributes", &attrs, NULL);
|
||||
|
||||
/*
|
||||
* Recreate the contents.
|
||||
*/
|
||||
@@ -321,14 +389,24 @@ meta_window_actor_constructed (GObject *object)
|
||||
MetaScreen *screen = priv->screen;
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Window xwindow = priv->xwindow;
|
||||
MetaWindow *window = priv->window;
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
XRenderPictFormat *format;
|
||||
|
||||
priv->damage = XDamageCreate (xdisplay, xwindow,
|
||||
XDamageReportBoundingBox);
|
||||
#ifdef HAVE_SHAPE
|
||||
/* Listen for ShapeNotify events on the window */
|
||||
if (meta_display_has_shape (display))
|
||||
XShapeSelectInput (xdisplay, xwindow, ShapeNotifyMask);
|
||||
#endif
|
||||
|
||||
format = XRenderFindVisualFormat (xdisplay, window->xvisual);
|
||||
priv->shaped = is_shaped (display, xwindow);
|
||||
|
||||
if (priv->attrs.class == InputOnly)
|
||||
priv->damage = None;
|
||||
else
|
||||
priv->damage = XDamageCreate (xdisplay, xwindow,
|
||||
XDamageReportBoundingBox);
|
||||
|
||||
format = XRenderFindVisualFormat (xdisplay, priv->attrs.visual);
|
||||
|
||||
if (format && format->type == PictTypeDirect && format->direct.alphaMask)
|
||||
priv->argb32 = TRUE;
|
||||
@@ -348,9 +426,9 @@ meta_window_actor_constructed (GObject *object)
|
||||
*/
|
||||
g_object_ref (priv->actor);
|
||||
|
||||
g_signal_connect (window, "notify::decorated",
|
||||
g_signal_connect (priv->window, "notify::decorated",
|
||||
G_CALLBACK (window_decorated_notify), self);
|
||||
g_signal_connect (window, "notify::appears-focused",
|
||||
g_signal_connect (priv->window, "notify::appears-focused",
|
||||
G_CALLBACK (window_appears_focused_notify), self);
|
||||
}
|
||||
else
|
||||
@@ -363,7 +441,7 @@ meta_window_actor_constructed (GObject *object)
|
||||
}
|
||||
|
||||
meta_window_actor_update_opacity (self);
|
||||
meta_window_actor_update_shape (self);
|
||||
meta_window_actor_update_shape (self, priv->shaped);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -477,6 +555,9 @@ meta_window_actor_set_property (GObject *object,
|
||||
case PROP_X_WINDOW:
|
||||
priv->xwindow = g_value_get_ulong (value);
|
||||
break;
|
||||
case PROP_X_WINDOW_ATTRIBUTES:
|
||||
priv->attrs = *((XWindowAttributes*)g_value_get_boxed (value));
|
||||
break;
|
||||
case PROP_NO_SHADOW:
|
||||
{
|
||||
gboolean newv = g_value_get_boolean (value);
|
||||
@@ -527,6 +608,9 @@ meta_window_actor_get_property (GObject *object,
|
||||
case PROP_X_WINDOW:
|
||||
g_value_set_ulong (value, priv->xwindow);
|
||||
break;
|
||||
case PROP_X_WINDOW_ATTRIBUTES:
|
||||
g_value_set_boxed (value, &priv->attrs);
|
||||
break;
|
||||
case PROP_NO_SHADOW:
|
||||
g_value_set_boolean (value, priv->no_shadow);
|
||||
break;
|
||||
@@ -577,7 +661,7 @@ meta_window_actor_get_shadow_params (MetaWindowActor *self,
|
||||
params);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
meta_window_actor_get_shape_bounds (MetaWindowActor *self,
|
||||
cairo_rectangle_int_t *bounds)
|
||||
{
|
||||
@@ -587,7 +671,7 @@ meta_window_actor_get_shape_bounds (MetaWindowActor *self,
|
||||
* where getting the shape fails on a window being destroyed
|
||||
* and similar.
|
||||
*/
|
||||
if (priv->shape_region)
|
||||
if (priv->shaped && priv->shape_region)
|
||||
cairo_region_get_extents (priv->shape_region, bounds);
|
||||
else if (priv->bounding_region)
|
||||
cairo_region_get_extents (priv->bounding_region, bounds);
|
||||
@@ -595,6 +679,7 @@ meta_window_actor_get_shape_bounds (MetaWindowActor *self,
|
||||
bounds->x = bounds->y = bounds->width = bounds->height = 0;
|
||||
}
|
||||
|
||||
#if CLUTTER_CHECK_VERSION(1, 5, 2)
|
||||
static void
|
||||
meta_window_actor_get_shadow_bounds (MetaWindowActor *self,
|
||||
gboolean appears_focused,
|
||||
@@ -615,6 +700,7 @@ meta_window_actor_get_shadow_bounds (MetaWindowActor *self,
|
||||
shape_bounds.height,
|
||||
bounds);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If we have an ARGB32 window that we decorate with a frame, it's
|
||||
* probably something like a translucent terminal - something where
|
||||
@@ -683,6 +769,7 @@ meta_window_actor_paint (ClutterActor *actor)
|
||||
CLUTTER_ACTOR_CLASS (meta_window_actor_parent_class)->paint (actor);
|
||||
}
|
||||
|
||||
#if CLUTTER_CHECK_VERSION(1, 5, 2)
|
||||
static gboolean
|
||||
meta_window_actor_get_paint_volume (ClutterActor *actor,
|
||||
ClutterPaintVolume *volume)
|
||||
@@ -724,6 +811,26 @@ meta_window_actor_get_paint_volume (ClutterActor *actor,
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif /* CLUTTER_CHECK_VERSION */
|
||||
|
||||
static gboolean
|
||||
is_shaped (MetaDisplay *display, Window xwindow)
|
||||
{
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
gint xws, yws, xbs, ybs;
|
||||
guint wws, hws, wbs, hbs;
|
||||
gint bounding_shaped, clip_shaped;
|
||||
|
||||
if (meta_display_has_shape (display))
|
||||
{
|
||||
XShapeQueryExtents (xdisplay, xwindow, &bounding_shaped,
|
||||
&xws, &yws, &wws, &hws, &clip_shaped,
|
||||
&xbs, &ybs, &wbs, &hbs);
|
||||
return (bounding_shaped != 0);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_window_actor_has_shadow (MetaWindowActor *self)
|
||||
@@ -769,7 +876,7 @@ meta_window_actor_has_shadow (MetaWindowActor *self)
|
||||
/*
|
||||
* Add shadows to override redirect windows (e.g., Gtk menus).
|
||||
*/
|
||||
if (priv->window->override_redirect)
|
||||
if (priv->attrs.override_redirect)
|
||||
{
|
||||
meta_verbose ("Window 0x%x has shadow because it is override redirect.\n",
|
||||
(guint)priv->xwindow);
|
||||
@@ -1212,62 +1319,6 @@ meta_window_actor_detach (MetaWindowActor *self)
|
||||
meta_window_actor_queue_create_pixmap (self);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_window_actor_should_unredirect (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindow *metaWindow = meta_window_actor_get_meta_window (self);
|
||||
MetaScreen *screen = meta_window_get_screen (metaWindow);
|
||||
|
||||
if (meta_window_is_override_redirect (metaWindow))
|
||||
{
|
||||
int screen_width, screen_height;
|
||||
MetaRectangle window_rect;
|
||||
meta_screen_get_size (screen, &screen_width, &screen_height);
|
||||
meta_window_get_outer_rect (metaWindow, &window_rect);
|
||||
|
||||
if (window_rect.x == 0 && window_rect.y == 0 &&
|
||||
window_rect.width == screen_width && window_rect.height == screen_height)
|
||||
return TRUE;
|
||||
else
|
||||
{
|
||||
int num_monitors = meta_screen_get_n_monitors (screen);
|
||||
int i;
|
||||
MetaRectangle monitor_rect;
|
||||
|
||||
for (i = 0; i < num_monitors; i++)
|
||||
{
|
||||
meta_screen_get_monitor_geometry (screen , i, &monitor_rect);
|
||||
if (monitor_rect.x == window_rect.x && monitor_rect.y == window_rect.y &&
|
||||
monitor_rect.width == window_rect.width && monitor_rect.height == window_rect.height)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state)
|
||||
{
|
||||
MetaWindow *metaWindow = meta_window_actor_get_meta_window (self);
|
||||
|
||||
Display *xdisplay = meta_display_get_xdisplay (meta_window_get_display (metaWindow));
|
||||
Window xwin = meta_window_actor_get_x_window (self);
|
||||
|
||||
if (state)
|
||||
{
|
||||
XCompositeRedirectWindow (xdisplay, xwin, CompositeRedirectManual);
|
||||
meta_window_actor_queue_create_pixmap (self);
|
||||
self->priv->unredirected = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
XCompositeUnredirectWindow (xdisplay, xwin, CompositeRedirectManual);
|
||||
self->priv->unredirected = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_destroy (MetaWindowActor *self)
|
||||
{
|
||||
@@ -1324,18 +1375,21 @@ meta_window_actor_sync_actor_position (MetaWindowActor *self)
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
MetaRectangle window_rect;
|
||||
|
||||
meta_window_get_input_rect (priv->window, &window_rect);
|
||||
meta_window_get_outer_rect (priv->window, &window_rect);
|
||||
|
||||
if (priv->last_width != window_rect.width ||
|
||||
priv->last_height != window_rect.height)
|
||||
if (priv->attrs.width != window_rect.width ||
|
||||
priv->attrs.height != window_rect.height)
|
||||
{
|
||||
priv->size_changed = TRUE;
|
||||
meta_window_actor_queue_create_pixmap (self);
|
||||
|
||||
priv->last_width = window_rect.width;
|
||||
priv->last_height = window_rect.height;
|
||||
}
|
||||
|
||||
/* XXX deprecated: please use meta_window_get_outer_rect instead */
|
||||
priv->attrs.width = window_rect.width;
|
||||
priv->attrs.height = window_rect.height;
|
||||
priv->attrs.x = window_rect.x;
|
||||
priv->attrs.y = window_rect.y;
|
||||
|
||||
if (meta_window_actor_effect_in_progress (self))
|
||||
return;
|
||||
|
||||
@@ -1493,11 +1547,13 @@ MetaWindowActor *
|
||||
meta_window_actor_new (MetaWindow *window)
|
||||
{
|
||||
MetaScreen *screen = meta_window_get_screen (window);
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||
MetaWindowActor *self;
|
||||
MetaWindowActorPrivate *priv;
|
||||
MetaFrame *frame;
|
||||
Window top_window;
|
||||
XWindowAttributes attrs;
|
||||
|
||||
frame = meta_window_get_frame (window);
|
||||
if (frame)
|
||||
@@ -1507,17 +1563,20 @@ meta_window_actor_new (MetaWindow *window)
|
||||
|
||||
meta_verbose ("add window: Meta %p, xwin 0x%x\n", window, (guint)top_window);
|
||||
|
||||
/* FIXME: Remove the redundant data we store in self->priv->attrs, and
|
||||
* simply query metacity core for the data. */
|
||||
if (!XGetWindowAttributes (meta_display_get_xdisplay (display), top_window, &attrs))
|
||||
return NULL;
|
||||
|
||||
self = g_object_new (META_TYPE_WINDOW_ACTOR,
|
||||
"meta-window", window,
|
||||
"x-window", top_window,
|
||||
"meta-screen", screen,
|
||||
"x-window-attributes", &attrs,
|
||||
NULL);
|
||||
|
||||
priv = self->priv;
|
||||
|
||||
priv->last_width = -1;
|
||||
priv->last_height = -1;
|
||||
|
||||
priv->mapped = meta_window_toplevel_is_mapped (priv->window);
|
||||
if (priv->mapped)
|
||||
meta_window_actor_queue_create_pixmap (self);
|
||||
@@ -1604,73 +1663,62 @@ meta_window_actor_clear_shadow_clip (MetaWindowActor *self)
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_actor_update_bounding_region_and_borders (MetaWindowActor *self,
|
||||
int width,
|
||||
int height)
|
||||
meta_window_actor_update_bounding_region (MetaWindowActor *self,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
MetaFrame *frame;
|
||||
MetaFrameBorders borders;
|
||||
cairo_rectangle_int_t bounding_rectangle;
|
||||
|
||||
bounding_rectangle.x = 0;
|
||||
bounding_rectangle.y = 0;
|
||||
|
||||
frame = priv->window->frame;
|
||||
if (frame != NULL)
|
||||
{
|
||||
meta_frame_calc_borders (frame, &borders);
|
||||
|
||||
bounding_rectangle.x = borders.invisible.left;
|
||||
bounding_rectangle.y = borders.invisible.top;
|
||||
|
||||
width -= borders.invisible.left + borders.invisible.right;
|
||||
height -= borders.invisible.top + borders.invisible.bottom;
|
||||
}
|
||||
|
||||
bounding_rectangle.width = width;
|
||||
bounding_rectangle.height = height;
|
||||
cairo_rectangle_int_t bounding_rectangle = { 0, 0, width, height };
|
||||
|
||||
if (priv->bounding_region != NULL)
|
||||
{
|
||||
cairo_rectangle_int_t old_bounding_rectangle;
|
||||
cairo_region_get_extents (priv->bounding_region, &old_bounding_rectangle);
|
||||
|
||||
/* Because the bounding region doesn't include the invisible borders,
|
||||
* we need to make sure that the border sizes haven't changed before
|
||||
* short-circuiting early.
|
||||
*/
|
||||
if (bounding_rectangle.width == old_bounding_rectangle.width &&
|
||||
bounding_rectangle.height == old_bounding_rectangle.height &&
|
||||
priv->last_borders.invisible.left == borders.invisible.left &&
|
||||
priv->last_borders.invisible.right == borders.invisible.right &&
|
||||
priv->last_borders.invisible.top == borders.invisible.top &&
|
||||
priv->last_borders.invisible.bottom == borders.invisible.bottom)
|
||||
if (old_bounding_rectangle.width == width && old_bounding_rectangle.height == height)
|
||||
return;
|
||||
}
|
||||
|
||||
priv->last_borders = borders;
|
||||
|
||||
meta_window_actor_clear_bounding_region (self);
|
||||
|
||||
priv->bounding_region = cairo_region_create_rectangle (&bounding_rectangle);
|
||||
|
||||
meta_window_actor_update_shape (self);
|
||||
if (priv->shaped)
|
||||
{
|
||||
/* If we're shaped, the implicit shape region clipping we need to do needs
|
||||
* to be updated.
|
||||
*/
|
||||
meta_window_actor_update_shape (self, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* When we're shaped, we use the shape region to generate the shadow; the shape
|
||||
* region only changes when we get ShapeNotify event; but for unshaped windows
|
||||
* we generate the shadow from the bounding region, so we need to recompute
|
||||
* the shadow when the size changes.
|
||||
*/
|
||||
meta_window_actor_invalidate_shadow (self);
|
||||
}
|
||||
|
||||
g_signal_emit (self, signals[SIZE_CHANGED], 0);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_actor_update_shape_region (MetaWindowActor *self,
|
||||
cairo_region_t *region)
|
||||
int n_rects,
|
||||
XRectangle *rects)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
int i;
|
||||
|
||||
meta_window_actor_clear_shape_region (self);
|
||||
|
||||
/* region must be non-null */
|
||||
priv->shape_region = region;
|
||||
cairo_region_reference (region);
|
||||
priv->shape_region = cairo_region_create ();
|
||||
for (i = 0; i < n_rects; i++)
|
||||
{
|
||||
cairo_rectangle_int_t rect = { rects[i].x, rects[i].y, rects[i].width, rects[i].height };
|
||||
cairo_region_union_rectangle (priv->shape_region, &rect);
|
||||
}
|
||||
|
||||
/* Our "shape_region" is called the "bounding region" in the X Shape
|
||||
* Extension Documentation.
|
||||
@@ -1704,7 +1752,7 @@ meta_window_actor_get_obscured_region (MetaWindowActor *self)
|
||||
|
||||
if (!priv->argb32 && priv->opacity == 0xff && priv->back_pixmap)
|
||||
{
|
||||
if (priv->shape_region)
|
||||
if (priv->shaped)
|
||||
return priv->shape_region;
|
||||
else
|
||||
return priv->bounding_region;
|
||||
@@ -1726,7 +1774,7 @@ dump_region (cairo_region_t *region)
|
||||
for (i = 0; i < n_rects; i++)
|
||||
{
|
||||
cairo_rectangle_int_t rect;
|
||||
cairo_region_get_rectangle (region, i, &rect);
|
||||
cairo_region_get_rectangle (region, &rect);
|
||||
g_print ("+%d+%dx%dx%d ",
|
||||
rect.x, rect.y, rect.width, rect.height);
|
||||
}
|
||||
@@ -1754,8 +1802,19 @@ meta_window_actor_set_visible_region (MetaWindowActor *self,
|
||||
/* Get the area of the window texture that would be drawn if
|
||||
* we weren't obscured at all
|
||||
*/
|
||||
texture_clip_region = meta_shaped_texture_get_visible_pixels_region (META_SHAPED_TEXTURE (priv->actor));
|
||||
texture_clip_region = cairo_region_copy (texture_clip_region);
|
||||
if (priv->shaped)
|
||||
{
|
||||
if (priv->shape_region)
|
||||
texture_clip_region = cairo_region_copy (priv->shape_region);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (priv->bounding_region)
|
||||
texture_clip_region = cairo_region_copy (priv->bounding_region);
|
||||
}
|
||||
|
||||
if (!texture_clip_region)
|
||||
texture_clip_region = cairo_region_create ();
|
||||
|
||||
/* Then intersect that with the visible region to get the region
|
||||
* that we actually need to redraw.
|
||||
@@ -1816,19 +1875,6 @@ meta_window_actor_reset_visible_regions (MetaWindowActor *self)
|
||||
meta_window_actor_clear_shadow_clip (self);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
texture_pixmap_using_extension (ClutterX11TexturePixmap *texture)
|
||||
{
|
||||
ClutterTexture *self = CLUTTER_TEXTURE (texture);
|
||||
CoglHandle handle;
|
||||
|
||||
handle = clutter_texture_get_cogl_texture (self);
|
||||
|
||||
return handle != NULL &&
|
||||
cogl_is_texture_pixmap_x11 (handle) &&
|
||||
cogl_texture_pixmap_x11_is_using_tfp_extension (handle);
|
||||
}
|
||||
|
||||
static void
|
||||
check_needs_pixmap (MetaWindowActor *self)
|
||||
{
|
||||
@@ -1883,7 +1929,7 @@ check_needs_pixmap (MetaWindowActor *self)
|
||||
if (priv->back_pixmap == None)
|
||||
{
|
||||
meta_verbose ("Unable to get named pixmap for %p\n", self);
|
||||
meta_window_actor_update_bounding_region_and_borders (self, 0, 0);
|
||||
meta_window_actor_update_bounding_region (self, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1899,15 +1945,18 @@ check_needs_pixmap (MetaWindowActor *self)
|
||||
* do it here.
|
||||
* See: http://bugzilla.clutter-project.org/show_bug.cgi?id=2236
|
||||
*/
|
||||
if (G_UNLIKELY (!texture_pixmap_using_extension (CLUTTER_X11_TEXTURE_PIXMAP (priv->actor))))
|
||||
#ifdef HAVE_GLX_TEXTURE_PIXMAP
|
||||
if (G_UNLIKELY (!clutter_glx_texture_pixmap_using_extension (
|
||||
CLUTTER_GLX_TEXTURE_PIXMAP (priv->actor))))
|
||||
g_warning ("NOTE: Not using GLX TFP!\n");
|
||||
#endif
|
||||
|
||||
g_object_get (priv->actor,
|
||||
"pixmap-width", &pxm_width,
|
||||
"pixmap-height", &pxm_height,
|
||||
NULL);
|
||||
|
||||
meta_window_actor_update_bounding_region_and_borders (self, pxm_width, pxm_height);
|
||||
meta_window_actor_update_bounding_region (self, pxm_width, pxm_height);
|
||||
}
|
||||
|
||||
meta_error_trap_pop (display);
|
||||
@@ -1964,7 +2013,7 @@ check_needs_shadow (MetaWindowActor *self)
|
||||
{
|
||||
if (priv->shadow_shape == NULL)
|
||||
{
|
||||
if (priv->shape_region)
|
||||
if (priv->shaped && priv->shape_region)
|
||||
priv->shadow_shape = meta_window_shape_new (priv->shape_region);
|
||||
else if (priv->bounding_region)
|
||||
priv->shadow_shape = meta_window_shape_new (priv->bounding_region);
|
||||
@@ -2003,10 +2052,6 @@ meta_window_actor_process_damage (MetaWindowActor *self,
|
||||
|
||||
priv->received_damage = TRUE;
|
||||
|
||||
/* Drop damage event for unredirected windows */
|
||||
if (self->priv->unredirected)
|
||||
return;
|
||||
|
||||
if (is_frozen (self))
|
||||
{
|
||||
/* The window is frozen due to an effect in progress: we ignore damage
|
||||
@@ -2049,181 +2094,29 @@ meta_window_actor_sync_visibility (MetaWindowActor *self)
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
set_integral_bounding_rect (cairo_rectangle_int_t *rect,
|
||||
double x, double y,
|
||||
double width, double height)
|
||||
{
|
||||
rect->x = floor(x);
|
||||
rect->y = floor(y);
|
||||
rect->width = ceil(x + width) - rect->x;
|
||||
rect->height = ceil(y + height) - rect->y;
|
||||
}
|
||||
|
||||
static void
|
||||
update_corners (MetaWindowActor *self,
|
||||
MetaFrameBorders *borders)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
MetaRectangle outer;
|
||||
cairo_rectangle_int_t corner_rects[4];
|
||||
cairo_region_t *corner_region;
|
||||
cairo_path_t *corner_path;
|
||||
float top_left, top_right, bottom_left, bottom_right;
|
||||
float x, y;
|
||||
|
||||
/* need these to build a path */
|
||||
cairo_t *cr;
|
||||
cairo_surface_t *surface;
|
||||
|
||||
if (!priv->window->frame)
|
||||
return;
|
||||
|
||||
meta_window_get_outer_rect (priv->window, &outer);
|
||||
|
||||
meta_frame_get_corner_radiuses (priv->window->frame,
|
||||
&top_left,
|
||||
&top_right,
|
||||
&bottom_left,
|
||||
&bottom_right);
|
||||
|
||||
/* Unfortunately, cairo does not allow us to create a context
|
||||
* without a surface. Create a 0x0 image surface to "paint to"
|
||||
* so we can get the path. */
|
||||
surface = cairo_image_surface_create (CAIRO_FORMAT_A8,
|
||||
0, 0);
|
||||
|
||||
cr = cairo_create (surface);
|
||||
|
||||
/* top left */
|
||||
x = borders->invisible.left;
|
||||
y = borders->invisible.top;
|
||||
|
||||
set_integral_bounding_rect (&corner_rects[0],
|
||||
x, y, top_left, top_left);
|
||||
|
||||
cairo_arc (cr,
|
||||
x + top_left,
|
||||
y + top_left,
|
||||
top_left,
|
||||
0, M_PI*2);
|
||||
|
||||
|
||||
/* top right */
|
||||
x = borders->invisible.left + outer.width - top_right;
|
||||
y = borders->invisible.top;
|
||||
|
||||
set_integral_bounding_rect (&corner_rects[1],
|
||||
x, y, top_right, top_right);
|
||||
|
||||
cairo_arc (cr,
|
||||
x,
|
||||
y + top_right,
|
||||
top_right,
|
||||
0, M_PI*2);
|
||||
|
||||
/* bottom left */
|
||||
x = borders->invisible.left;
|
||||
y = borders->invisible.top + outer.height - bottom_left;
|
||||
|
||||
set_integral_bounding_rect (&corner_rects[2],
|
||||
x, y, bottom_left, bottom_left);
|
||||
|
||||
cairo_arc (cr,
|
||||
x + bottom_left,
|
||||
y,
|
||||
bottom_left,
|
||||
0, M_PI*2);
|
||||
|
||||
/* bottom right */
|
||||
x = borders->invisible.left + outer.width - bottom_right;
|
||||
y = borders->invisible.top + outer.height - bottom_right;
|
||||
|
||||
set_integral_bounding_rect (&corner_rects[3],
|
||||
x, y, bottom_right, bottom_right);
|
||||
|
||||
cairo_arc (cr,
|
||||
x,
|
||||
y,
|
||||
bottom_right,
|
||||
0, M_PI*2);
|
||||
|
||||
corner_path = cairo_copy_path (cr);
|
||||
|
||||
cairo_surface_destroy (surface);
|
||||
cairo_destroy (cr);
|
||||
|
||||
corner_region = cairo_region_create_rectangles (corner_rects, 4);
|
||||
|
||||
meta_shaped_texture_set_overlay_path (META_SHAPED_TEXTURE (priv->actor),
|
||||
corner_region, corner_path);
|
||||
|
||||
cairo_region_destroy (corner_region);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
check_needs_reshape (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
MetaScreen *screen = priv->screen;
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
MetaFrameBorders borders;
|
||||
cairo_region_t *region;
|
||||
|
||||
if (!priv->needs_reshape)
|
||||
return;
|
||||
|
||||
meta_shaped_texture_set_shape_region (META_SHAPED_TEXTURE (priv->actor), NULL);
|
||||
meta_shaped_texture_clear_rectangles (META_SHAPED_TEXTURE (priv->actor));
|
||||
meta_window_actor_clear_shape_region (self);
|
||||
|
||||
if (priv->window->frame)
|
||||
meta_frame_calc_borders (priv->window->frame, &borders);
|
||||
else
|
||||
meta_frame_borders_clear (&borders);
|
||||
|
||||
region = meta_window_get_frame_bounds (priv->window);
|
||||
if (region != NULL)
|
||||
{
|
||||
/* This returns the window's internal frame bounds region,
|
||||
* so we need to copy it because we modify it below. */
|
||||
region = cairo_region_copy (region);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If we have no region, we have no frame. We have no frame,
|
||||
* so just use the bounding region instead */
|
||||
region = cairo_region_copy (priv->bounding_region);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SHAPE
|
||||
if (priv->window->has_shape)
|
||||
if (priv->shaped)
|
||||
{
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
XRectangle *rects;
|
||||
int n_rects, ordering;
|
||||
cairo_rectangle_int_t client_area;
|
||||
|
||||
client_area.width = priv->window->rect.width;
|
||||
client_area.height = priv->window->rect.height;
|
||||
|
||||
if (priv->window->frame)
|
||||
{
|
||||
client_area.x = borders.total.left;
|
||||
client_area.y = borders.total.top;
|
||||
}
|
||||
else
|
||||
{
|
||||
client_area.x = 0;
|
||||
client_area.y = 0;
|
||||
}
|
||||
|
||||
/* Punch out client area. */
|
||||
cairo_region_subtract_rectangle (region, &client_area);
|
||||
|
||||
meta_error_trap_push (display);
|
||||
rects = XShapeGetRectangles (xdisplay,
|
||||
priv->window->xwindow,
|
||||
priv->xwindow,
|
||||
ShapeBounding,
|
||||
&n_rects,
|
||||
&ordering);
|
||||
@@ -2231,38 +2124,27 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
|
||||
if (rects)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < n_rects; i ++)
|
||||
{
|
||||
cairo_rectangle_int_t rect = { rects[i].x + client_area.x,
|
||||
rects[i].y + client_area.y,
|
||||
rects[i].width,
|
||||
rects[i].height };
|
||||
cairo_region_union_rectangle (region, &rect);
|
||||
}
|
||||
meta_shaped_texture_add_rectangles (META_SHAPED_TEXTURE (priv->actor),
|
||||
n_rects, rects);
|
||||
|
||||
meta_window_actor_update_shape_region (self, n_rects, rects);
|
||||
|
||||
XFree (rects);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
meta_shaped_texture_set_shape_region (META_SHAPED_TEXTURE (priv->actor),
|
||||
region);
|
||||
|
||||
meta_window_actor_update_shape_region (self, region);
|
||||
|
||||
cairo_region_destroy (region);
|
||||
|
||||
update_corners (self, &borders);
|
||||
|
||||
priv->needs_reshape = FALSE;
|
||||
meta_window_actor_invalidate_shadow (self);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_update_shape (MetaWindowActor *self)
|
||||
meta_window_actor_update_shape (MetaWindowActor *self,
|
||||
gboolean shaped)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
|
||||
priv->shaped = shaped;
|
||||
priv->needs_reshape = TRUE;
|
||||
if (priv->shadow_shape != NULL)
|
||||
{
|
||||
@@ -2288,7 +2170,7 @@ meta_window_actor_pre_paint (MetaWindowActor *self)
|
||||
return;
|
||||
}
|
||||
|
||||
if (priv->received_damage && !self->priv->unredirected)
|
||||
if (priv->received_damage)
|
||||
{
|
||||
meta_error_trap_push (display);
|
||||
XDamageSubtract (xdisplay, priv->damage, None, None);
|
||||
|
||||
@@ -7,10 +7,9 @@
|
||||
|
||||
#include <gdk/gdk.h> /* for gdk_rectangle_intersect() */
|
||||
|
||||
#include "compositor-private.h"
|
||||
#include "meta-window-actor-private.h"
|
||||
#include "meta-window-group.h"
|
||||
#include "meta-background-actor-private.h"
|
||||
#include "meta-background-actor.h"
|
||||
|
||||
struct _MetaWindowGroupClass
|
||||
{
|
||||
@@ -104,19 +103,12 @@ actor_is_untransformed (ClutterActor *actor,
|
||||
static void
|
||||
meta_window_group_paint (ClutterActor *actor)
|
||||
{
|
||||
cairo_region_t *visible_region;
|
||||
cairo_region_t *unredirected_window_region = NULL;
|
||||
ClutterActor *stage;
|
||||
cairo_rectangle_int_t visible_rect, unredirected_rect;
|
||||
GList *children, *l;
|
||||
|
||||
MetaWindowGroup *window_group = META_WINDOW_GROUP (actor);
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (window_group->screen);
|
||||
if (info->unredirected_window != NULL)
|
||||
{
|
||||
meta_window_actor_get_shape_bounds (META_WINDOW_ACTOR (info->unredirected_window), &unredirected_rect);
|
||||
unredirected_window_region = cairo_region_create_rectangle (&unredirected_rect);
|
||||
}
|
||||
cairo_region_t *visible_region;
|
||||
GLboolean scissor_test;
|
||||
cairo_rectangle_int_t screen_rect = { 0 };
|
||||
cairo_rectangle_int_t scissor_rect;
|
||||
GList *children, *l;
|
||||
|
||||
/* We walk the list from top to bottom (opposite of painting order),
|
||||
* and subtract the opaque area of each window out of the visible
|
||||
@@ -125,20 +117,39 @@ meta_window_group_paint (ClutterActor *actor)
|
||||
children = clutter_container_get_children (CLUTTER_CONTAINER (actor));
|
||||
children = g_list_reverse (children);
|
||||
|
||||
/* Get the clipped redraw bounds from Clutter so that we can avoid
|
||||
* painting shadows on windows that don't need to be painted in this
|
||||
* frame. In the case of a multihead setup with mismatched monitor
|
||||
* sizes, we could intersect this with an accurate union of the
|
||||
* monitors to avoid painting shadows that are visible only in the
|
||||
* holes. */
|
||||
stage = clutter_actor_get_stage (actor);
|
||||
clutter_stage_get_redraw_clip_bounds (CLUTTER_STAGE (stage),
|
||||
&visible_rect);
|
||||
/* Start off with the full screen area (for a multihead setup, we
|
||||
* might want to use a more accurate union of the monitors to avoid
|
||||
* painting in holes from mismatched monitor sizes. That's just an
|
||||
* optimization, however.)
|
||||
*/
|
||||
meta_screen_get_size (window_group->screen, &screen_rect.width, &screen_rect.height);
|
||||
|
||||
visible_region = cairo_region_create_rectangle (&visible_rect);
|
||||
/* When doing a partial stage paint, Clutter will set the GL scissor
|
||||
* box to the clip rectangle for the partial repaint. We combine the screen
|
||||
* rectangle with the scissor box to get the region we need to
|
||||
* paint. (Strangely, the scissor box sometimes seems to be bigger
|
||||
* than the stage ... Clutter should probably be clampimg)
|
||||
*/
|
||||
glGetBooleanv (GL_SCISSOR_TEST, &scissor_test);
|
||||
|
||||
if (unredirected_window_region)
|
||||
cairo_region_subtract (visible_region, unredirected_window_region);
|
||||
if (scissor_test)
|
||||
{
|
||||
GLint scissor_box[4];
|
||||
glGetIntegerv (GL_SCISSOR_BOX, scissor_box);
|
||||
|
||||
scissor_rect.x = scissor_box[0];
|
||||
scissor_rect.y = screen_rect.height - (scissor_box[1] + scissor_box[3]);
|
||||
scissor_rect.width = scissor_box[2];
|
||||
scissor_rect.height = scissor_box[3];
|
||||
|
||||
gdk_rectangle_intersect (&scissor_rect, &screen_rect, &scissor_rect);
|
||||
}
|
||||
else
|
||||
{
|
||||
scissor_rect = screen_rect;
|
||||
}
|
||||
|
||||
visible_region = cairo_region_create_rectangle (&scissor_rect);
|
||||
|
||||
for (l = children; l; l = l->next)
|
||||
{
|
||||
@@ -177,9 +188,6 @@ meta_window_group_paint (ClutterActor *actor)
|
||||
|
||||
cairo_region_destroy (visible_region);
|
||||
|
||||
if (unredirected_window_region)
|
||||
cairo_region_destroy (unredirected_window_region);
|
||||
|
||||
CLUTTER_ACTOR_CLASS (meta_window_group_parent_class)->paint (actor);
|
||||
|
||||
/* Now that we are done painting, unset the visible regions (they will
|
||||
|
||||
@@ -230,6 +230,35 @@ bell_flash_window_frame (MetaWindow *window)
|
||||
bell_unflash_frame, window->frame, NULL);
|
||||
}
|
||||
|
||||
static MetaWindow *
|
||||
get_flash_window (MetaDisplay *display,
|
||||
XkbAnyEvent *xkb_ev)
|
||||
{
|
||||
XkbBellNotifyEvent *xkb_bell_event;
|
||||
MetaWindow *window;
|
||||
|
||||
g_assert (xkb_ev->xkb_type == XkbBellNotify);
|
||||
|
||||
xkb_bell_event = (XkbBellNotifyEvent *) xkb_ev;
|
||||
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
|
||||
|
||||
if (!window &&
|
||||
g_hash_table_size (display->focus_info) == 1)
|
||||
{
|
||||
GHashTableIter iter;
|
||||
MetaFocusInfo *info;
|
||||
|
||||
/* If there is only one focused window, use it */
|
||||
g_hash_table_iter_init (&iter, display->focus_info);
|
||||
|
||||
if (g_hash_table_iter_next (&iter, NULL, (gpointer *) &info) &&
|
||||
info->focus_window && info->focus_window->frame)
|
||||
window = info->focus_window;
|
||||
}
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flashes the frame of the focussed window. If there is no focussed window,
|
||||
* flashes the screen.
|
||||
@@ -241,15 +270,11 @@ static void
|
||||
bell_flash_frame (MetaDisplay *display,
|
||||
XkbAnyEvent *xkb_ev)
|
||||
{
|
||||
XkbBellNotifyEvent *xkb_bell_event = (XkbBellNotifyEvent *) xkb_ev;
|
||||
MetaWindow *window;
|
||||
|
||||
g_assert (xkb_ev->xkb_type == XkbBellNotify);
|
||||
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
|
||||
if (!window && (display->focus_window))
|
||||
{
|
||||
window = display->focus_window;
|
||||
}
|
||||
window = get_flash_window (display, xkb_ev);
|
||||
|
||||
if (window && window->frame)
|
||||
{
|
||||
bell_flash_window_frame (window);
|
||||
@@ -310,9 +335,7 @@ meta_bell_notify (MetaDisplay *display,
|
||||
ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, _("Bell event"));
|
||||
ca_proplist_sets (p, CA_PROP_CANBERRA_CACHE_CONTROL, "permanent");
|
||||
|
||||
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
|
||||
if (!window && (display->focus_window) && (display->focus_window->frame))
|
||||
window = display->focus_window;
|
||||
window = get_flash_window (display, xkb_ev);
|
||||
|
||||
if (window)
|
||||
{
|
||||
|
||||
@@ -118,7 +118,7 @@ typedef struct
|
||||
{
|
||||
MetaRectangle orig;
|
||||
MetaRectangle current;
|
||||
MetaFrameBorders *borders;
|
||||
MetaFrameGeometry *fgeom;
|
||||
ActionType action_type;
|
||||
gboolean is_user_action;
|
||||
|
||||
@@ -194,7 +194,7 @@ static gboolean constrain_partially_onscreen (MetaWindow *window,
|
||||
|
||||
static void setup_constraint_info (ConstraintInfo *info,
|
||||
MetaWindow *window,
|
||||
MetaFrameBorders *orig_borders,
|
||||
MetaFrameGeometry *orig_fgeom,
|
||||
MetaMoveResizeFlags flags,
|
||||
int resize_gravity,
|
||||
const MetaRectangle *orig,
|
||||
@@ -204,11 +204,11 @@ static void place_window_if_needed (MetaWindow *window,
|
||||
static void update_onscreen_requirements (MetaWindow *window,
|
||||
ConstraintInfo *info);
|
||||
static void extend_by_frame (MetaRectangle *rect,
|
||||
const MetaFrameBorders *borders);
|
||||
const MetaFrameGeometry *fgeom);
|
||||
static void unextend_by_frame (MetaRectangle *rect,
|
||||
const MetaFrameBorders *borders);
|
||||
const MetaFrameGeometry *fgeom);
|
||||
static inline void get_size_limits (const MetaWindow *window,
|
||||
const MetaFrameBorders *borders,
|
||||
const MetaFrameGeometry *fgeom,
|
||||
gboolean include_frame,
|
||||
MetaRectangle *min_size,
|
||||
MetaRectangle *max_size);
|
||||
@@ -279,7 +279,7 @@ do_all_constraints (MetaWindow *window,
|
||||
|
||||
void
|
||||
meta_window_constrain (MetaWindow *window,
|
||||
MetaFrameBorders *orig_borders,
|
||||
MetaFrameGeometry *orig_fgeom,
|
||||
MetaMoveResizeFlags flags,
|
||||
int resize_gravity,
|
||||
const MetaRectangle *orig,
|
||||
@@ -302,7 +302,7 @@ meta_window_constrain (MetaWindow *window,
|
||||
|
||||
setup_constraint_info (&info,
|
||||
window,
|
||||
orig_borders,
|
||||
orig_fgeom,
|
||||
flags,
|
||||
resize_gravity,
|
||||
orig,
|
||||
@@ -337,14 +337,14 @@ meta_window_constrain (MetaWindow *window,
|
||||
* not gobject-style--gobject would be more pain than it's worth) or
|
||||
* smart pointers would be so much nicer here. *shrug*
|
||||
*/
|
||||
if (!orig_borders)
|
||||
g_free (info.borders);
|
||||
if (!orig_fgeom)
|
||||
g_free (info.fgeom);
|
||||
}
|
||||
|
||||
static void
|
||||
setup_constraint_info (ConstraintInfo *info,
|
||||
MetaWindow *window,
|
||||
MetaFrameBorders *orig_borders,
|
||||
MetaFrameGeometry *orig_fgeom,
|
||||
MetaMoveResizeFlags flags,
|
||||
int resize_gravity,
|
||||
const MetaRectangle *orig,
|
||||
@@ -357,10 +357,10 @@ setup_constraint_info (ConstraintInfo *info,
|
||||
info->current = *new;
|
||||
|
||||
/* Create a fake frame geometry if none really exists */
|
||||
if (orig_borders && !window->fullscreen)
|
||||
info->borders = orig_borders;
|
||||
if (orig_fgeom && !window->fullscreen)
|
||||
info->fgeom = orig_fgeom;
|
||||
else
|
||||
info->borders = g_new0 (MetaFrameBorders, 1);
|
||||
info->fgeom = g_new0 (MetaFrameGeometry, 1);
|
||||
|
||||
if (flags & META_IS_MOVE_ACTION && flags & META_IS_RESIZE_ACTION)
|
||||
info->action_type = ACTION_MOVE_AND_RESIZE;
|
||||
@@ -461,6 +461,7 @@ setup_constraint_info (ConstraintInfo *info,
|
||||
"Setting up constraint info:\n"
|
||||
" orig: %d,%d +%d,%d\n"
|
||||
" new : %d,%d +%d,%d\n"
|
||||
" fgeom: %d,%d,%d,%d\n"
|
||||
" action_type : %s\n"
|
||||
" is_user_action : %s\n"
|
||||
" resize_gravity : %s\n"
|
||||
@@ -470,6 +471,8 @@ setup_constraint_info (ConstraintInfo *info,
|
||||
info->orig.x, info->orig.y, info->orig.width, info->orig.height,
|
||||
info->current.x, info->current.y,
|
||||
info->current.width, info->current.height,
|
||||
info->fgeom->left_width, info->fgeom->right_width,
|
||||
info->fgeom->top_height, info->fgeom->bottom_height,
|
||||
(info->action_type == ACTION_MOVE) ? "Move" :
|
||||
(info->action_type == ACTION_RESIZE) ? "Resize" :
|
||||
(info->action_type == ACTION_MOVE_AND_RESIZE) ? "Move&Resize" :
|
||||
@@ -510,7 +513,7 @@ place_window_if_needed(MetaWindow *window,
|
||||
MetaWorkspace *cur_workspace;
|
||||
const MetaMonitorInfo *monitor_info;
|
||||
|
||||
meta_window_place (window, info->borders, info->orig.x, info->orig.y,
|
||||
meta_window_place (window, info->fgeom, info->orig.x, info->orig.y,
|
||||
&placed_rect.x, &placed_rect.y);
|
||||
did_placement = TRUE;
|
||||
|
||||
@@ -570,7 +573,7 @@ place_window_if_needed(MetaWindow *window,
|
||||
|
||||
/* maximization may have changed frame geometry */
|
||||
if (window->frame && !window->fullscreen)
|
||||
meta_frame_calc_borders (window->frame, info->borders);
|
||||
meta_frame_calc_geometry (window->frame, info->fgeom);
|
||||
|
||||
if (window->fullscreen_after_placement)
|
||||
{
|
||||
@@ -631,7 +634,7 @@ update_onscreen_requirements (MetaWindow *window,
|
||||
/* The require onscreen/on-single-monitor and titlebar_visible
|
||||
* stuff is relative to the outer window, not the inner
|
||||
*/
|
||||
extend_by_frame (&info->current, info->borders);
|
||||
extend_by_frame (&info->current, info->fgeom);
|
||||
|
||||
/* Update whether we want future constraint runs to require the
|
||||
* window to be on fully onscreen.
|
||||
@@ -667,7 +670,7 @@ update_onscreen_requirements (MetaWindow *window,
|
||||
MetaRectangle titlebar_rect;
|
||||
|
||||
titlebar_rect = info->current;
|
||||
titlebar_rect.height = info->borders->visible.top;
|
||||
titlebar_rect.height = info->fgeom->top_height;
|
||||
old = window->require_titlebar_visible;
|
||||
window->require_titlebar_visible =
|
||||
meta_rectangle_overlaps_with_region (info->usable_screen_region,
|
||||
@@ -680,32 +683,32 @@ update_onscreen_requirements (MetaWindow *window,
|
||||
}
|
||||
|
||||
/* Don't forget to restore the position of the window */
|
||||
unextend_by_frame (&info->current, info->borders);
|
||||
unextend_by_frame (&info->current, info->fgeom);
|
||||
}
|
||||
|
||||
static void
|
||||
extend_by_frame (MetaRectangle *rect,
|
||||
const MetaFrameBorders *borders)
|
||||
const MetaFrameGeometry *fgeom)
|
||||
{
|
||||
rect->x -= borders->visible.left;
|
||||
rect->y -= borders->visible.top;
|
||||
rect->width += borders->visible.left + borders->visible.right;
|
||||
rect->height += borders->visible.top + borders->visible.bottom;
|
||||
rect->x -= fgeom->left_width;
|
||||
rect->y -= fgeom->top_height;
|
||||
rect->width += fgeom->left_width + fgeom->right_width;
|
||||
rect->height += fgeom->top_height + fgeom->bottom_height;
|
||||
}
|
||||
|
||||
static void
|
||||
unextend_by_frame (MetaRectangle *rect,
|
||||
const MetaFrameBorders *borders)
|
||||
const MetaFrameGeometry *fgeom)
|
||||
{
|
||||
rect->x += borders->visible.left;
|
||||
rect->y += borders->visible.top;
|
||||
rect->width -= borders->visible.left + borders->visible.right;
|
||||
rect->height -= borders->visible.top + borders->visible.bottom;
|
||||
rect->x += fgeom->left_width;
|
||||
rect->y += fgeom->top_height;
|
||||
rect->width -= fgeom->left_width + fgeom->right_width;
|
||||
rect->height -= fgeom->top_height + fgeom->bottom_height;
|
||||
}
|
||||
|
||||
static inline void
|
||||
get_size_limits (const MetaWindow *window,
|
||||
const MetaFrameBorders *borders,
|
||||
const MetaFrameGeometry *fgeom,
|
||||
gboolean include_frame,
|
||||
MetaRectangle *min_size,
|
||||
MetaRectangle *max_size)
|
||||
@@ -720,8 +723,8 @@ get_size_limits (const MetaWindow *window,
|
||||
|
||||
if (include_frame)
|
||||
{
|
||||
int fw = borders->visible.left + borders->visible.right;
|
||||
int fh = borders->visible.top + borders->visible.bottom;
|
||||
int fw = fgeom->left_width + fgeom->right_width;
|
||||
int fh = fgeom->top_height + fgeom->bottom_height;
|
||||
|
||||
min_size->width += fw;
|
||||
min_size->height += fh;
|
||||
@@ -749,25 +752,27 @@ constrain_modal_dialog (MetaWindow *window,
|
||||
MetaWindow *parent = meta_window_get_transient_for (window);
|
||||
gboolean constraint_already_satisfied;
|
||||
|
||||
if (!meta_window_is_attached_dialog (window))
|
||||
if (!meta_prefs_get_attach_modal_dialogs ())
|
||||
return TRUE;
|
||||
if (window->type != META_WINDOW_MODAL_DIALOG || !parent)
|
||||
return TRUE;
|
||||
|
||||
x = parent->rect.x + (parent->rect.width / 2 - info->current.width / 2);
|
||||
y = 0;
|
||||
if (parent->frame)
|
||||
{
|
||||
MetaFrameBorders borders;
|
||||
MetaFrameGeometry fgeom;
|
||||
|
||||
x += parent->frame->rect.x;
|
||||
y += parent->frame->rect.y;
|
||||
|
||||
meta_frame_calc_borders (parent->frame, &borders);
|
||||
y += borders.total.top;
|
||||
meta_frame_calc_geometry (parent->frame, &fgeom);
|
||||
y += fgeom.top_height;
|
||||
|
||||
y += info->borders->visible.top;
|
||||
y += info->fgeom->top_height;
|
||||
}
|
||||
else
|
||||
y = parent->rect.y + info->borders->visible.top;
|
||||
y = parent->rect.y + info->fgeom->top_height;
|
||||
|
||||
constraint_already_satisfied = (x == info->current.x) && (y == info->current.y);
|
||||
|
||||
@@ -826,19 +831,19 @@ constrain_maximization (MetaWindow *window,
|
||||
active_workspace_struts = window->screen->active_workspace->all_struts;
|
||||
|
||||
target_size = info->current;
|
||||
extend_by_frame (&target_size, info->borders);
|
||||
extend_by_frame (&target_size, info->fgeom);
|
||||
meta_rectangle_expand_to_avoiding_struts (&target_size,
|
||||
&info->entire_monitor,
|
||||
direction,
|
||||
active_workspace_struts);
|
||||
}
|
||||
/* Now make target_size = maximized size of client window */
|
||||
unextend_by_frame (&target_size, info->borders);
|
||||
unextend_by_frame (&target_size, info->fgeom);
|
||||
|
||||
/* Check min size constraints; max size constraints are ignored for maximized
|
||||
* windows, as per bug 327543.
|
||||
*/
|
||||
get_size_limits (window, info->borders, FALSE, &min_size, &max_size);
|
||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||
hminbad = target_size.width < min_size.width && window->maximized_horizontally;
|
||||
vminbad = target_size.height < min_size.height && window->maximized_vertically;
|
||||
if (hminbad || vminbad)
|
||||
@@ -880,6 +885,7 @@ constrain_tiling (MetaWindow *window,
|
||||
gboolean hminbad, vminbad;
|
||||
gboolean horiz_equal, vert_equal;
|
||||
gboolean constraint_already_satisfied;
|
||||
MetaDevice *pointer;
|
||||
|
||||
if (priority > PRIORITY_TILING)
|
||||
return TRUE;
|
||||
@@ -888,16 +894,18 @@ constrain_tiling (MetaWindow *window,
|
||||
if (!META_WINDOW_TILED_SIDE_BY_SIDE (window))
|
||||
return TRUE;
|
||||
|
||||
pointer = meta_window_guess_grab_pointer (window);
|
||||
|
||||
/* Calculate target_size - as the tile previews need this as well, we
|
||||
* use an external function for the actual calculation
|
||||
*/
|
||||
meta_window_get_current_tile_area (window, &target_size);
|
||||
unextend_by_frame (&target_size, info->borders);
|
||||
meta_window_get_current_tile_area (window, pointer, &target_size);
|
||||
unextend_by_frame (&target_size, info->fgeom);
|
||||
|
||||
/* Check min size constraints; max size constraints are ignored as for
|
||||
* maximized windows.
|
||||
*/
|
||||
get_size_limits (window, info->borders, FALSE, &min_size, &max_size);
|
||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||
hminbad = target_size.width < min_size.width;
|
||||
vminbad = target_size.height < min_size.height;
|
||||
if (hminbad || vminbad)
|
||||
@@ -940,7 +948,7 @@ constrain_fullscreen (MetaWindow *window,
|
||||
|
||||
monitor = info->entire_monitor;
|
||||
|
||||
get_size_limits (window, info->borders, FALSE, &min_size, &max_size);
|
||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||
too_big = !meta_rectangle_could_fit_rect (&monitor, &min_size);
|
||||
too_small = !meta_rectangle_could_fit_rect (&max_size, &monitor);
|
||||
if (too_big || too_small)
|
||||
@@ -1049,7 +1057,7 @@ constrain_size_limits (MetaWindow *window,
|
||||
return TRUE;
|
||||
|
||||
/* Determine whether constraint is already satisfied; exit if it is */
|
||||
get_size_limits (window, info->borders, FALSE, &min_size, &max_size);
|
||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||
/* We ignore max-size limits for maximized windows; see #327543 */
|
||||
if (window->maximized_horizontally)
|
||||
max_size.width = MAX (max_size.width, info->current.width);
|
||||
@@ -1241,8 +1249,8 @@ do_screen_and_monitor_relative_constraints (
|
||||
|
||||
/* Determine whether constraint applies; exit if it doesn't */
|
||||
how_far_it_can_be_smushed = info->current;
|
||||
get_size_limits (window, info->borders, TRUE, &min_size, &max_size);
|
||||
extend_by_frame (&info->current, info->borders);
|
||||
get_size_limits (window, info->fgeom, TRUE, &min_size, &max_size);
|
||||
extend_by_frame (&info->current, info->fgeom);
|
||||
|
||||
if (info->action_type != ACTION_MOVE)
|
||||
{
|
||||
@@ -1262,7 +1270,7 @@ do_screen_and_monitor_relative_constraints (
|
||||
&info->current);
|
||||
if (exit_early || constraint_satisfied || check_only)
|
||||
{
|
||||
unextend_by_frame (&info->current, info->borders);
|
||||
unextend_by_frame (&info->current, info->fgeom);
|
||||
return constraint_satisfied;
|
||||
}
|
||||
|
||||
@@ -1286,7 +1294,7 @@ do_screen_and_monitor_relative_constraints (
|
||||
info->fixed_directions,
|
||||
&info->current);
|
||||
|
||||
unextend_by_frame (&info->current, info->borders);
|
||||
unextend_by_frame (&info->current, info->fgeom);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1357,15 +1365,18 @@ constrain_titlebar_visible (MetaWindow *window,
|
||||
int bottom_amount;
|
||||
int horiz_amount_offscreen, vert_amount_offscreen;
|
||||
int horiz_amount_onscreen, vert_amount_onscreen;
|
||||
MetaGrabInfo *grab_info;
|
||||
|
||||
if (priority > PRIORITY_TITLEBAR_VISIBLE)
|
||||
return TRUE;
|
||||
|
||||
grab_info = window->cur_grab;
|
||||
|
||||
/* Allow the titlebar beyond the top of the screen only if the user wasn't
|
||||
* clicking on the frame to start the move.
|
||||
*/
|
||||
unconstrained_user_action =
|
||||
info->is_user_action && !window->display->grab_frame_action;
|
||||
info->is_user_action && (!grab_info || !grab_info->grab_frame_action);
|
||||
|
||||
/* Exit early if we know the constraint won't apply--note that this constraint
|
||||
* is only meant for normal windows (e.g. we don't want docks to be shoved
|
||||
@@ -1399,8 +1410,8 @@ constrain_titlebar_visible (MetaWindow *window,
|
||||
*/
|
||||
if (window->frame)
|
||||
{
|
||||
bottom_amount = info->current.height + info->borders->visible.bottom;
|
||||
vert_amount_onscreen = info->borders->visible.top;
|
||||
bottom_amount = info->current.height + info->fgeom->bottom_height;
|
||||
vert_amount_onscreen = info->fgeom->top_height;
|
||||
}
|
||||
else
|
||||
bottom_amount = vert_amount_offscreen;
|
||||
@@ -1474,8 +1485,8 @@ constrain_partially_onscreen (MetaWindow *window,
|
||||
*/
|
||||
if (window->frame)
|
||||
{
|
||||
bottom_amount = info->current.height + info->borders->visible.bottom;
|
||||
vert_amount_onscreen = info->borders->visible.top;
|
||||
bottom_amount = info->current.height + info->fgeom->bottom_height;
|
||||
vert_amount_onscreen = info->fgeom->top_height;
|
||||
}
|
||||
else
|
||||
bottom_amount = vert_amount_offscreen;
|
||||
|
||||
@@ -39,7 +39,7 @@ typedef enum
|
||||
} MetaMoveResizeFlags;
|
||||
|
||||
void meta_window_constrain (MetaWindow *window,
|
||||
MetaFrameBorders *orig_borders,
|
||||
MetaFrameGeometry *orig_fgeom,
|
||||
MetaMoveResizeFlags flags,
|
||||
int resize_gravity,
|
||||
const MetaRectangle *orig,
|
||||
|
||||
200
src/core/core.c
200
src/core/core.c
@@ -30,6 +30,11 @@
|
||||
#include <meta/prefs.h>
|
||||
#include <meta/errors.h>
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
#include <X11/extensions/XInput2.h>
|
||||
#include "devices-xi2.h"
|
||||
#endif
|
||||
|
||||
/* Looks up the MetaWindow representing the frame of the given X window.
|
||||
* Used as a helper function by a bunch of the functions below.
|
||||
*
|
||||
@@ -245,9 +250,19 @@ lower_window_and_transients (MetaWindow *window,
|
||||
void
|
||||
meta_core_user_lower_and_unfocus (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int device_id,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
MetaDevice *pointer;
|
||||
|
||||
pointer = meta_device_map_lookup (window->display->device_map, device_id);
|
||||
|
||||
if (pointer == NULL)
|
||||
return;
|
||||
|
||||
if (!META_IS_DEVICE_POINTER (pointer))
|
||||
pointer = meta_device_get_paired_device (pointer);
|
||||
|
||||
lower_window_and_transients (window, NULL);
|
||||
|
||||
@@ -256,6 +271,7 @@ meta_core_user_lower_and_unfocus (Display *xdisplay,
|
||||
* this will be invoked via keyboard action or by a mouse action;
|
||||
* in either case the window or a modal child will have been focused.) */
|
||||
meta_workspace_focus_default_window (window->screen->active_workspace,
|
||||
pointer,
|
||||
NULL,
|
||||
timestamp);
|
||||
}
|
||||
@@ -263,16 +279,21 @@ meta_core_user_lower_and_unfocus (Display *xdisplay,
|
||||
void
|
||||
meta_core_lower_beneath_grab_window (Display *xdisplay,
|
||||
Window xwindow,
|
||||
int device_id,
|
||||
guint32 timestamp)
|
||||
{
|
||||
XWindowChanges changes;
|
||||
MetaDisplay *display;
|
||||
MetaScreen *screen;
|
||||
MetaWindow *grab_window;
|
||||
MetaDevice *pointer;
|
||||
MetaGrabInfo *grab_info;
|
||||
|
||||
display = meta_display_for_x_display (xdisplay);
|
||||
screen = meta_display_screen_for_xwindow (display, xwindow);
|
||||
grab_window = display->grab_window;
|
||||
pointer = meta_device_map_lookup (display->device_map, device_id);
|
||||
grab_info = meta_display_get_grab_info (display, pointer);
|
||||
grab_window = grab_info->grab_window;
|
||||
|
||||
if (grab_window == NULL)
|
||||
return;
|
||||
@@ -491,18 +512,27 @@ meta_core_get_active_workspace (Screen *xscreen)
|
||||
void
|
||||
meta_core_show_window_menu (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int device_id,
|
||||
int root_x,
|
||||
int root_y,
|
||||
int button,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
MetaDevice *device;
|
||||
|
||||
/* There is already a menu popped up,
|
||||
* most likely from another device
|
||||
*/
|
||||
if (window->menu)
|
||||
return;
|
||||
|
||||
if (meta_prefs_get_raise_on_click ())
|
||||
meta_window_raise (window);
|
||||
meta_window_focus (window, timestamp);
|
||||
|
||||
meta_window_show_menu (window, root_x, root_y, button, timestamp);
|
||||
device = meta_device_map_lookup (window->display->device_map, device_id);
|
||||
meta_window_show_menu (window, device, root_x, root_y, button, timestamp);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -638,6 +668,7 @@ meta_core_get_workspace_name_with_index (Display *xdisplay,
|
||||
gboolean
|
||||
meta_core_begin_grab_op (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int device_id,
|
||||
MetaGrabOp op,
|
||||
gboolean pointer_already_grabbed,
|
||||
gboolean frame_action,
|
||||
@@ -650,13 +681,16 @@ meta_core_begin_grab_op (Display *xdisplay,
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
MetaDisplay *display;
|
||||
MetaScreen *screen;
|
||||
|
||||
MetaDevice *device;
|
||||
|
||||
display = meta_display_for_x_display (xdisplay);
|
||||
screen = meta_display_screen_for_xwindow (display, frame_xwindow);
|
||||
|
||||
g_assert (screen != NULL);
|
||||
|
||||
return meta_display_begin_grab_op (display, screen, window,
|
||||
|
||||
device = meta_device_map_lookup (display->device_map, device_id);
|
||||
|
||||
return meta_display_begin_grab_op (display, screen, window, device,
|
||||
op, pointer_already_grabbed,
|
||||
frame_action,
|
||||
button, modmask,
|
||||
@@ -665,57 +699,58 @@ meta_core_begin_grab_op (Display *xdisplay,
|
||||
|
||||
void
|
||||
meta_core_end_grab_op (Display *xdisplay,
|
||||
int device_id,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_display_for_x_display (xdisplay);
|
||||
MetaDevice *device;
|
||||
|
||||
meta_display_end_grab_op (display, timestamp);
|
||||
display = meta_display_for_x_display (xdisplay);
|
||||
device = meta_device_map_lookup (display->device_map, device_id);
|
||||
|
||||
meta_display_end_grab_op (display, device, timestamp);
|
||||
}
|
||||
|
||||
MetaGrabOp
|
||||
meta_core_get_grab_op (Display *xdisplay)
|
||||
meta_core_frame_has_grab (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
gint *device_id,
|
||||
gint *button_ret)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_display_for_x_display (xdisplay);
|
||||
MetaWindow *window;
|
||||
|
||||
return display->grab_op;
|
||||
window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
if (window != NULL &&
|
||||
window->cur_grab != NULL)
|
||||
{
|
||||
if (button_ret)
|
||||
*button_ret = window->cur_grab->grab_button;
|
||||
|
||||
if (device_id)
|
||||
*device_id = meta_device_get_id (window->cur_grab->grab_pointer);
|
||||
|
||||
return window->cur_grab->grab_op;
|
||||
}
|
||||
|
||||
return META_GRAB_OP_NONE;
|
||||
}
|
||||
|
||||
Window
|
||||
meta_core_get_grab_frame (Display *xdisplay)
|
||||
meta_core_get_frame (Display *xdisplay,
|
||||
Window client_xwindow)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
MetaWindow *window;
|
||||
|
||||
display = meta_display_for_x_display (xdisplay);
|
||||
window = meta_display_lookup_x_window (display, client_xwindow);
|
||||
|
||||
g_assert (display != NULL);
|
||||
g_assert (display->grab_op == META_GRAB_OP_NONE ||
|
||||
display->grab_screen != NULL);
|
||||
g_assert (display->grab_op == META_GRAB_OP_NONE ||
|
||||
display->grab_screen->display->xdisplay == xdisplay);
|
||||
|
||||
if (display->grab_op != META_GRAB_OP_NONE &&
|
||||
display->grab_window &&
|
||||
display->grab_window->frame)
|
||||
return display->grab_window->frame->xwindow;
|
||||
else
|
||||
return None;
|
||||
}
|
||||
if (window &&
|
||||
window->frame)
|
||||
return window->frame->xwindow;
|
||||
|
||||
int
|
||||
meta_core_get_grab_button (Display *xdisplay)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_display_for_x_display (xdisplay);
|
||||
|
||||
if (display->grab_op == META_GRAB_OP_NONE)
|
||||
return -1;
|
||||
|
||||
return display->grab_button;
|
||||
return None;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -731,13 +766,24 @@ meta_core_grab_buttons (Display *xdisplay,
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_set_screen_cursor (Display *xdisplay,
|
||||
Window frame_on_screen,
|
||||
MetaCursor cursor)
|
||||
meta_core_set_screen_cursor (Display *xdisplay,
|
||||
Window frame_on_screen,
|
||||
gint device_id,
|
||||
MetaCursor cursor)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_on_screen);
|
||||
MetaDevice *pointer;
|
||||
|
||||
meta_frame_set_screen_cursor (window->frame, cursor);
|
||||
pointer = meta_device_map_lookup (window->display->device_map,
|
||||
device_id);
|
||||
|
||||
if (pointer == NULL)
|
||||
return;
|
||||
|
||||
if (!META_IS_DEVICE_POINTER (pointer))
|
||||
pointer = meta_device_get_paired_device (pointer);
|
||||
|
||||
meta_frame_set_screen_cursor (window->frame, pointer, cursor);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -775,3 +821,69 @@ meta_invalidate_default_icons (void)
|
||||
g_slist_free (windows);
|
||||
}
|
||||
|
||||
/* Selects events on an xwindow, using XInput2 if available/in use,
|
||||
* this function doesn't require the xwindow to have a backing
|
||||
* MetaWindow.
|
||||
*/
|
||||
void
|
||||
meta_core_select_events (Display *xdisplay,
|
||||
Window xwindow,
|
||||
gint evmask,
|
||||
gboolean preserve_old_mask)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_display_for_x_display (xdisplay);
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (display->have_xinput2)
|
||||
{
|
||||
XIEventMask mask;
|
||||
|
||||
mask.deviceid = XIAllMasterDevices;
|
||||
mask.mask = meta_device_xi2_translate_event_mask (evmask,
|
||||
&mask.mask_len);
|
||||
|
||||
if (preserve_old_mask)
|
||||
{
|
||||
XIEventMask *prev;
|
||||
gint n_masks, i, j;
|
||||
|
||||
prev = XIGetSelectedEvents (xdisplay, xwindow, &n_masks);
|
||||
|
||||
for (i = 0; i < n_masks; i++)
|
||||
{
|
||||
if (prev[i].deviceid != XIAllMasterDevices)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < MIN (mask.mask_len, prev[i].mask_len); j++)
|
||||
mask.mask[j] |= prev[i].mask[j];
|
||||
}
|
||||
|
||||
XFree (prev);
|
||||
}
|
||||
|
||||
XISelectEvents (xdisplay, xwindow, &mask, 1);
|
||||
|
||||
/* Unset any input event so they are only handled via XInput2 */
|
||||
evmask &= ~(KeyPressMask | KeyReleaseMask |
|
||||
ButtonPressMask | ButtonReleaseMask |
|
||||
EnterWindowMask | LeaveWindowMask |
|
||||
PointerMotionMask | PointerMotionHintMask |
|
||||
Button1MotionMask | Button2MotionMask |
|
||||
Button3MotionMask | Button4MotionMask |
|
||||
Button5MotionMask | ButtonMotionMask |
|
||||
FocusChangeMask);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (preserve_old_mask)
|
||||
{
|
||||
XWindowAttributes attr;
|
||||
|
||||
if (XGetWindowAttributes (xdisplay, xwindow, &attr))
|
||||
evmask |= attr.your_event_mask;
|
||||
}
|
||||
|
||||
XSelectInput (xdisplay, xwindow, evmask);
|
||||
}
|
||||
|
||||
@@ -110,6 +110,7 @@ void meta_core_user_raise (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
void meta_core_user_lower_and_unfocus (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int device_id,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_core_user_focus (Display *xdisplay,
|
||||
@@ -118,6 +119,7 @@ void meta_core_user_focus (Display *xdisplay,
|
||||
|
||||
void meta_core_lower_beneath_grab_window (Display *xdisplay,
|
||||
Window xwindow,
|
||||
int device_id,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_core_minimize (Display *xdisplay,
|
||||
@@ -163,6 +165,7 @@ const char* meta_core_get_workspace_name_with_index (Display *xdisplay,
|
||||
|
||||
void meta_core_show_window_menu (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int device_id,
|
||||
int root_x,
|
||||
int root_y,
|
||||
int button,
|
||||
@@ -175,6 +178,7 @@ void meta_core_get_menu_accelerator (MetaMenuOp menu_op,
|
||||
|
||||
gboolean meta_core_begin_grab_op (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int device_id,
|
||||
MetaGrabOp op,
|
||||
gboolean pointer_already_grabbed,
|
||||
gboolean frame_action,
|
||||
@@ -184,18 +188,29 @@ gboolean meta_core_begin_grab_op (Display *xdisplay,
|
||||
int root_x,
|
||||
int root_y);
|
||||
void meta_core_end_grab_op (Display *xdisplay,
|
||||
int device_id,
|
||||
guint32 timestamp);
|
||||
MetaGrabOp meta_core_get_grab_op (Display *xdisplay);
|
||||
Window meta_core_get_grab_frame (Display *xdisplay);
|
||||
int meta_core_get_grab_button (Display *xdisplay);
|
||||
|
||||
MetaGrabOp meta_core_frame_has_grab (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
gint *device_id,
|
||||
gint *button_ret);
|
||||
Window meta_core_get_frame (Display *xdisplay,
|
||||
Window client_xwindow);
|
||||
|
||||
void meta_core_grab_buttons (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
|
||||
void meta_core_set_screen_cursor (Display *xdisplay,
|
||||
Window frame_on_screen,
|
||||
MetaCursor cursor);
|
||||
void meta_core_set_screen_cursor (Display *xdisplay,
|
||||
Window frame_on_screen,
|
||||
int device_id,
|
||||
MetaCursor cursor);
|
||||
|
||||
void meta_core_select_events (Display *xdisplay,
|
||||
Window xwindow,
|
||||
gint evmask,
|
||||
gboolean preserve_old_mask);
|
||||
|
||||
|
||||
/* Used because we ignore EnterNotify when a window is unmapped that
|
||||
* really shouldn't cause focus changes, by comparing the event serial
|
||||
|
||||
69
src/core/device-keyboard.c
Normal file
69
src/core/device-keyboard.c
Normal file
@@ -0,0 +1,69 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Keyboard device abstraction */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include "device-keyboard.h"
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE (MetaDeviceKeyboard,
|
||||
meta_device_keyboard,
|
||||
META_TYPE_DEVICE)
|
||||
|
||||
static void
|
||||
meta_device_keyboard_class_init (MetaDeviceKeyboardClass *klass)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_keyboard_init (MetaDeviceKeyboard *keyboard)
|
||||
{
|
||||
}
|
||||
|
||||
Window
|
||||
meta_device_keyboard_get_focus_window (MetaDeviceKeyboard *keyboard)
|
||||
{
|
||||
MetaDeviceKeyboardClass *klass;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE_KEYBOARD (keyboard), None);
|
||||
|
||||
klass = META_DEVICE_KEYBOARD_GET_CLASS (keyboard);
|
||||
|
||||
if (!klass->get_focus_window)
|
||||
return None;
|
||||
|
||||
return (klass->get_focus_window) (keyboard);
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_keyboard_set_focus_window (MetaDeviceKeyboard *keyboard,
|
||||
Window xwindow,
|
||||
Time timestamp)
|
||||
{
|
||||
MetaDeviceKeyboardClass *klass;
|
||||
|
||||
g_return_if_fail (META_IS_DEVICE_KEYBOARD (keyboard));
|
||||
|
||||
klass = META_DEVICE_KEYBOARD_GET_CLASS (keyboard);
|
||||
|
||||
if (klass->set_focus_window)
|
||||
(klass->set_focus_window) (keyboard, xwindow, timestamp);
|
||||
}
|
||||
69
src/core/device-keyboard.h
Normal file
69
src/core/device-keyboard.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/**
|
||||
* \file device-keyboard.h Keyboard device abstraction
|
||||
*
|
||||
* Input devices.
|
||||
* This file contains the internal abstraction of keyboard devices so
|
||||
* XInput2/core events can be handled similarly.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICE_KEYBOARD_H
|
||||
#define META_DEVICE_KEYBOARD_H
|
||||
|
||||
#include "display-private.h"
|
||||
#include "device-private.h"
|
||||
|
||||
#define META_TYPE_DEVICE_KEYBOARD (meta_device_keyboard_get_type ())
|
||||
#define META_DEVICE_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_KEYBOARD, MetaDeviceKeyboard))
|
||||
#define META_DEVICE_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_KEYBOARD, MetaDeviceKeyboardClass))
|
||||
#define META_IS_DEVICE_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_KEYBOARD))
|
||||
#define META_IS_DEVICE_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_KEYBOARD))
|
||||
#define META_DEVICE_KEYBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_KEYBOARD, MetaDeviceKeyboardClass))
|
||||
|
||||
typedef struct _MetaDeviceKeyboard MetaDeviceKeyboard;
|
||||
typedef struct _MetaDeviceKeyboardClass MetaDeviceKeyboardClass;
|
||||
|
||||
struct _MetaDeviceKeyboard
|
||||
{
|
||||
MetaDevice parent_instance;
|
||||
};
|
||||
|
||||
struct _MetaDeviceKeyboardClass
|
||||
{
|
||||
MetaDeviceClass parent_instance;
|
||||
|
||||
Window (* get_focus_window) (MetaDeviceKeyboard *keyboard);
|
||||
void (* set_focus_window) (MetaDeviceKeyboard *keyboard,
|
||||
Window xwindow,
|
||||
Time timestamp);
|
||||
};
|
||||
|
||||
GType meta_device_keyboard_get_type (void) G_GNUC_CONST;
|
||||
|
||||
Window meta_device_keyboard_get_focus_window (MetaDeviceKeyboard *keyboard);
|
||||
void meta_device_keyboard_set_focus_window (MetaDeviceKeyboard *keyboard,
|
||||
Window xwindow,
|
||||
Time timestamp);
|
||||
|
||||
|
||||
#endif /* META_DEVICE_KEYBOARD_H */
|
||||
134
src/core/device-map-core.c
Normal file
134
src/core/device-map-core.c
Normal file
@@ -0,0 +1,134 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Input device map, core protocol implementation */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "device-map-core.h"
|
||||
#include "devices-core.h"
|
||||
|
||||
G_DEFINE_TYPE (MetaDeviceMapCore, meta_device_map_core, META_TYPE_DEVICE_MAP)
|
||||
|
||||
static gboolean
|
||||
meta_device_map_core_grab_key (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers,
|
||||
gboolean sync)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
gint retval;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
retval = XGrabKey (display->xdisplay, keycode, modifiers,
|
||||
xwindow, True,
|
||||
GrabModeAsync, /* Never care about the other device */
|
||||
(sync) ? GrabModeSync : GrabModeAsync);
|
||||
|
||||
return (retval == Success);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_core_ungrab_key (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
XUngrabKey (display->xdisplay, keycode, modifiers, xwindow);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_device_map_core_grab_button (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers,
|
||||
guint evmask,
|
||||
gboolean sync)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
gint retval;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
retval = XGrabButton (display->xdisplay, n_button,
|
||||
modifiers, xwindow, False,
|
||||
evmask,
|
||||
(sync) ? GrabModeSync : GrabModeAsync,
|
||||
GrabModeAsync, /* Never care about the other device */
|
||||
None, None);
|
||||
|
||||
return (retval == Success);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_core_ungrab_button (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
XUngrabButton (display->xdisplay, n_button, modifiers, xwindow);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_core_constructed (GObject *object)
|
||||
{
|
||||
MetaDeviceMap *device_map = META_DEVICE_MAP (object);
|
||||
MetaDevice *pointer, *keyboard;
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
|
||||
/* Insert core devices */
|
||||
pointer = meta_device_pointer_core_new (display);
|
||||
meta_device_map_add_device (device_map, pointer);
|
||||
|
||||
keyboard = meta_device_keyboard_core_new (display);
|
||||
meta_device_map_add_device (device_map, keyboard);
|
||||
|
||||
meta_device_pair_devices (pointer, keyboard);
|
||||
|
||||
g_object_unref (pointer);
|
||||
g_object_unref (keyboard);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_core_class_init (MetaDeviceMapCoreClass *klass)
|
||||
{
|
||||
MetaDeviceMapClass *device_map_class = META_DEVICE_MAP_CLASS (klass);
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->constructed = meta_device_map_core_constructed;
|
||||
|
||||
device_map_class->grab_key = meta_device_map_core_grab_key;
|
||||
device_map_class->ungrab_key = meta_device_map_core_ungrab_key;
|
||||
device_map_class->grab_button = meta_device_map_core_grab_button;
|
||||
device_map_class->ungrab_button = meta_device_map_core_ungrab_button;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_core_init (MetaDeviceMapCore *device_map)
|
||||
{
|
||||
}
|
||||
56
src/core/device-map-core.h
Normal file
56
src/core/device-map-core.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/**
|
||||
* \file device-map-core.h device map for core devices
|
||||
*
|
||||
* Input devices.
|
||||
* This file contains the core protocol implementation of the device map
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICE_MAP_CORE_H
|
||||
#define META_DEVICE_MAP_CORE_H
|
||||
|
||||
typedef struct _MetaDeviceMapCore MetaDeviceMapCore;
|
||||
typedef struct _MetaDeviceMapCoreClass MetaDeviceMapCoreClass;
|
||||
|
||||
#include "device-map-private.h"
|
||||
|
||||
#define META_TYPE_DEVICE_MAP_CORE (meta_device_map_core_get_type ())
|
||||
#define META_DEVICE_MAP_CORE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_MAP_CORE, MetaDeviceMapCore))
|
||||
#define META_DEVICE_MAP_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_MAP_CORE, MetaDeviceMapCoreClass))
|
||||
#define META_IS_DEVICE_MAP_CORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_MAP_CORE))
|
||||
#define META_IS_DEVICE_MAP_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_MAP_CORE))
|
||||
#define META_DEVICE_MAP_CORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_MAP_CORE, MetaDeviceMapCoreClass))
|
||||
|
||||
struct _MetaDeviceMapCore
|
||||
{
|
||||
MetaDeviceMap parent_instance;
|
||||
};
|
||||
|
||||
struct _MetaDeviceMapCoreClass
|
||||
{
|
||||
MetaDeviceMapClass parent_class;
|
||||
};
|
||||
|
||||
GType meta_device_map_core_get_type (void) G_GNUC_CONST;
|
||||
|
||||
#endif /* META_DEVICE_MAP_CORE_H */
|
||||
111
src/core/device-map-private.h
Normal file
111
src/core/device-map-private.h
Normal file
@@ -0,0 +1,111 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/**
|
||||
* \file device-map.h object containing input devices
|
||||
*
|
||||
* Input devices.
|
||||
* This file contains the device map, used to find out the device behind
|
||||
* XInput2/core events.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICE_MAP_PRIVATE_H
|
||||
#define META_DEVICE_MAP_PRIVATE_H
|
||||
|
||||
#include <meta/device-map.h>
|
||||
#include <meta/device.h>
|
||||
#include "display-private.h"
|
||||
#include "device-private.h"
|
||||
|
||||
/* Device IDs for Virtual Core Pointer/Keyboard,
|
||||
* use only in case of emergency.
|
||||
*/
|
||||
#define META_CORE_POINTER_ID 2
|
||||
#define META_CORE_KEYBOARD_ID 3
|
||||
|
||||
struct _MetaDeviceMap
|
||||
{
|
||||
GObject parent_instance;
|
||||
gpointer priv;
|
||||
};
|
||||
|
||||
struct _MetaDeviceMapClass
|
||||
{
|
||||
GObjectClass parent_instance;
|
||||
|
||||
void (* device_added) (MetaDeviceMap *device_map,
|
||||
MetaDevice *device);
|
||||
void (* device_removed) (MetaDeviceMap *device_map,
|
||||
MetaDevice *device);
|
||||
|
||||
gboolean (* grab_key) (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers,
|
||||
gboolean sync);
|
||||
void (* ungrab_key) (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers);
|
||||
|
||||
gboolean (* grab_button) (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers,
|
||||
guint evmask,
|
||||
gboolean sync);
|
||||
void (* ungrab_button) (MetaDeviceMap *pointer,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers);
|
||||
};
|
||||
|
||||
GType meta_device_map_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MetaDeviceMap * meta_device_map_new (MetaDisplay *display,
|
||||
gboolean force_core);
|
||||
|
||||
void meta_device_map_add_device (MetaDeviceMap *device_map,
|
||||
MetaDevice *device);
|
||||
void meta_device_map_remove_device (MetaDeviceMap *device_map,
|
||||
MetaDevice *device);
|
||||
|
||||
gboolean meta_device_map_grab_key (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers,
|
||||
gboolean sync);
|
||||
void meta_device_map_ungrab_key (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers);
|
||||
gboolean meta_device_map_grab_button (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers,
|
||||
guint evmask,
|
||||
gboolean sync);
|
||||
void meta_device_map_ungrab_button (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers);
|
||||
|
||||
#endif /* META_DEVICE_MAP_PRIVATE_H */
|
||||
269
src/core/device-map-xi2.c
Normal file
269
src/core/device-map-xi2.c
Normal file
@@ -0,0 +1,269 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Input device map, XInput2 implementation */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "device-map-xi2.h"
|
||||
#include <X11/extensions/XInput2.h>
|
||||
#include "devices-xi2.h"
|
||||
|
||||
#define XINPUT2_VERSION_MAJOR 2
|
||||
#define XINPUT2_VERSION_MINOR 0
|
||||
|
||||
G_DEFINE_TYPE (MetaDeviceMapXI2, meta_device_map_xi2, META_TYPE_DEVICE_MAP)
|
||||
|
||||
static gboolean
|
||||
meta_device_map_xi2_grab_key (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers,
|
||||
gboolean sync)
|
||||
{
|
||||
XIGrabModifiers mods = { modifiers, 0 };
|
||||
MetaDisplay *display;
|
||||
XIEventMask mask;
|
||||
gint retval;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
|
||||
mask.deviceid = XIAllMasterDevices;
|
||||
mask.mask = meta_device_xi2_translate_event_mask (KeyPressMask |
|
||||
KeyReleaseMask,
|
||||
&mask.mask_len);
|
||||
/* FIXME: Doesn't seem to work with
|
||||
* XIAllMasterDevices, use the VCK
|
||||
* at the moment
|
||||
*/
|
||||
retval = XIGrabKeycode (display->xdisplay,
|
||||
META_CORE_KEYBOARD_ID,
|
||||
keycode, xwindow,
|
||||
(sync) ? GrabModeSync : GrabModeAsync,
|
||||
GrabModeAsync, /* Never care about the other device */
|
||||
True, &mask, 1, &mods);
|
||||
|
||||
return (retval == Success);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_xi2_ungrab_key (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers)
|
||||
{
|
||||
XIGrabModifiers mods = { modifiers, 0 };
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
XIUngrabKeycode (display->xdisplay,
|
||||
META_CORE_KEYBOARD_ID,
|
||||
keycode, xwindow,
|
||||
1, &mods);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_device_map_xi2_grab_button (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers,
|
||||
guint evmask,
|
||||
gboolean sync)
|
||||
{
|
||||
XIGrabModifiers mods = { modifiers, 0 };
|
||||
XIEventMask mask;
|
||||
MetaDisplay *display;
|
||||
int retval;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
|
||||
mask.deviceid = XIAllMasterDevices;
|
||||
mask.mask = meta_device_xi2_translate_event_mask (evmask, &mask.mask_len);
|
||||
|
||||
retval = XIGrabButton (display->xdisplay,
|
||||
XIAllMasterDevices,
|
||||
n_button, xwindow, None,
|
||||
(sync) ? GrabModeSync : GrabModeAsync,
|
||||
GrabModeAsync, /* Never care about the other device */
|
||||
False, &mask, 1, &mods);
|
||||
|
||||
return (retval == Success);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_xi2_ungrab_button (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers)
|
||||
{
|
||||
XIGrabModifiers mods = { modifiers, 0 };
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
XIUngrabButton (display->xdisplay,
|
||||
META_CORE_POINTER_ID,
|
||||
//XIAllMasterDevices,
|
||||
n_button, xwindow, 1, &mods);
|
||||
}
|
||||
|
||||
static void
|
||||
add_device_from_info (MetaDeviceMap *device_map,
|
||||
gint use,
|
||||
gint device_id)
|
||||
{
|
||||
MetaDevice *device;
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
|
||||
if (use == XIMasterPointer)
|
||||
device = meta_device_pointer_xi2_new (display, device_id);
|
||||
else if (use == XIMasterKeyboard)
|
||||
device = meta_device_keyboard_xi2_new (display, device_id);
|
||||
|
||||
if (device)
|
||||
{
|
||||
meta_device_map_add_device (device_map, device);
|
||||
g_object_unref (device);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pair_devices (gpointer key,
|
||||
gpointer value,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaDevice *device1, *device2;
|
||||
MetaDeviceMap *device_map;
|
||||
|
||||
device_map = user_data;
|
||||
device1 = meta_device_map_lookup (device_map, GPOINTER_TO_INT (key));
|
||||
device2 = meta_device_map_lookup (device_map, GPOINTER_TO_INT (value));
|
||||
|
||||
meta_device_pair_devices (device1, device2);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_xi2_constructed (GObject *object)
|
||||
{
|
||||
MetaDeviceMap *device_map = META_DEVICE_MAP (object);
|
||||
MetaDisplay *display;
|
||||
XIDeviceInfo *info;
|
||||
GHashTable *pairs;
|
||||
int n_devices, i;
|
||||
|
||||
display = meta_device_map_get_display (device_map);
|
||||
|
||||
/* We're only interested in master devices,
|
||||
* detached slave devices are left for applications
|
||||
* to handle.
|
||||
*/
|
||||
info = XIQueryDevice (display->xdisplay, XIAllMasterDevices, &n_devices);
|
||||
pairs = g_hash_table_new (NULL, NULL);
|
||||
|
||||
for (i = 0; i < n_devices; i++)
|
||||
{
|
||||
add_device_from_info (device_map, info[i].use, info[i].deviceid);
|
||||
g_hash_table_insert (pairs,
|
||||
GINT_TO_POINTER (info[i].deviceid),
|
||||
GINT_TO_POINTER (info[i].attachment));
|
||||
}
|
||||
|
||||
g_hash_table_foreach (pairs, pair_devices, device_map);
|
||||
g_hash_table_destroy (pairs);
|
||||
|
||||
XIFreeDeviceInfo (info);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_xi2_class_init (MetaDeviceMapXI2Class *klass)
|
||||
{
|
||||
MetaDeviceMapClass *device_map_class = META_DEVICE_MAP_CLASS (klass);
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->constructed = meta_device_map_xi2_constructed;
|
||||
|
||||
device_map_class->grab_key = meta_device_map_xi2_grab_key;
|
||||
device_map_class->ungrab_key = meta_device_map_xi2_ungrab_key;
|
||||
device_map_class->grab_button = meta_device_map_xi2_grab_button;
|
||||
device_map_class->ungrab_button = meta_device_map_xi2_ungrab_button;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_xi2_init (MetaDeviceMapXI2 *device_map)
|
||||
{
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_device_map_xi2_handle_hierarchy_event (MetaDeviceMapXI2 *device_map,
|
||||
XEvent *ev)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_map_get_display (META_DEVICE_MAP (device_map));
|
||||
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIHierarchyEvent *xev;
|
||||
GHashTable *pairs;
|
||||
gint i;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
xev = (XIHierarchyEvent *) ev->xcookie.data;
|
||||
|
||||
if (xev->evtype != XI_HierarchyChanged)
|
||||
return FALSE;
|
||||
|
||||
pairs = g_hash_table_new (NULL, NULL);
|
||||
|
||||
for (i = 0; i < xev->num_info; i++)
|
||||
{
|
||||
if (xev->info[i].flags & XIMasterAdded)
|
||||
{
|
||||
add_device_from_info (META_DEVICE_MAP (device_map),
|
||||
xev->info[i].use,
|
||||
xev->info[i].deviceid);
|
||||
g_hash_table_insert (pairs,
|
||||
GINT_TO_POINTER (xev->info[i].deviceid),
|
||||
GINT_TO_POINTER (xev->info[i].attachment));
|
||||
}
|
||||
else if (xev->info[i].flags & XIMasterRemoved)
|
||||
{
|
||||
MetaDevice *device;
|
||||
|
||||
device = meta_device_map_lookup (META_DEVICE_MAP (device_map),
|
||||
xev->info[i].deviceid);
|
||||
|
||||
if (device)
|
||||
meta_device_map_remove_device (META_DEVICE_MAP (device_map),
|
||||
device);
|
||||
}
|
||||
}
|
||||
|
||||
g_hash_table_foreach (pairs, pair_devices, device_map);
|
||||
g_hash_table_destroy (pairs);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
59
src/core/device-map-xi2.h
Normal file
59
src/core/device-map-xi2.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/**
|
||||
* \file device-map-xi2.h device map for XInput2 devices
|
||||
*
|
||||
* Input devices.
|
||||
* This file contains the XInput2 implementation of the device map
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICE_MAP_XI2_H
|
||||
#define META_DEVICE_MAP_XI2_H
|
||||
|
||||
typedef struct _MetaDeviceMapXI2 MetaDeviceMapXI2;
|
||||
typedef struct _MetaDeviceMapXI2Class MetaDeviceMapXI2Class;
|
||||
|
||||
#include "device-map-private.h"
|
||||
|
||||
#define META_TYPE_DEVICE_MAP_XI2 (meta_device_map_xi2_get_type ())
|
||||
#define META_DEVICE_MAP_XI2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_MAP_XI2, MetaDeviceMapXI2))
|
||||
#define META_DEVICE_MAP_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_MAP_XI2, MetaDeviceMapXI2Class))
|
||||
#define META_IS_DEVICE_MAP_XI2(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_MAP_XI2))
|
||||
#define META_IS_DEVICE_MAP_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_MAP_XI2))
|
||||
#define META_DEVICE_MAP_XI2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_MAP_XI2, MetaDeviceMapXI2Class))
|
||||
|
||||
struct _MetaDeviceMapXI2
|
||||
{
|
||||
MetaDeviceMap parent_instance;
|
||||
};
|
||||
|
||||
struct _MetaDeviceMapXI2Class
|
||||
{
|
||||
MetaDeviceMapClass parent_class;
|
||||
};
|
||||
|
||||
GType meta_device_map_xi2_get_type (void) G_GNUC_CONST;
|
||||
|
||||
gboolean meta_device_map_xi2_handle_hierarchy_event (MetaDeviceMapXI2 *device_map,
|
||||
XEvent *ev);
|
||||
|
||||
#endif /* META_DEVICE_MAP_XI2_H */
|
||||
390
src/core/device-map.c
Normal file
390
src/core/device-map.c
Normal file
@@ -0,0 +1,390 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Input device map */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "device-map-private.h"
|
||||
#include "device-map-core.h"
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
#include <X11/extensions/XInput2.h>
|
||||
#include "device-map-xi2.h"
|
||||
|
||||
#define XINPUT2_VERSION_MAJOR 2
|
||||
#define XINPUT2_VERSION_MINOR 0
|
||||
#endif
|
||||
|
||||
G_DEFINE_TYPE (MetaDeviceMap, meta_device_map, G_TYPE_OBJECT)
|
||||
|
||||
typedef struct MetaDeviceMapPrivate MetaDeviceMapPrivate;
|
||||
|
||||
struct MetaDeviceMapPrivate
|
||||
{
|
||||
MetaDisplay *display;
|
||||
GHashTable *devices;
|
||||
};
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_DISPLAY
|
||||
};
|
||||
|
||||
enum {
|
||||
DEVICE_ADDED,
|
||||
DEVICE_REMOVED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
static void
|
||||
meta_device_map_get_property (GObject *object,
|
||||
guint param_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaDeviceMapPrivate *priv;
|
||||
|
||||
priv = META_DEVICE_MAP (object)->priv;
|
||||
|
||||
switch (param_id)
|
||||
{
|
||||
case PROP_DISPLAY:
|
||||
g_value_set_object (value, priv->display);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_set_property (GObject *object,
|
||||
guint param_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaDeviceMapPrivate *priv;
|
||||
|
||||
priv = META_DEVICE_MAP (object)->priv;
|
||||
|
||||
switch (param_id)
|
||||
{
|
||||
case PROP_DISPLAY:
|
||||
priv->display = g_value_get_object (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_finalize (GObject *object)
|
||||
{
|
||||
MetaDeviceMapPrivate *priv;
|
||||
GHashTableIter iter;
|
||||
MetaDevice *device;
|
||||
|
||||
priv = META_DEVICE_MAP (object)->priv;
|
||||
g_hash_table_iter_init (&iter, priv->devices);
|
||||
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &device))
|
||||
{
|
||||
/* Detach the device */
|
||||
g_hash_table_iter_steal (&iter);
|
||||
|
||||
g_signal_emit (object, signals[DEVICE_REMOVED], 0, device);
|
||||
g_object_unref (device);
|
||||
}
|
||||
|
||||
g_hash_table_destroy (priv->devices);
|
||||
G_OBJECT_CLASS (meta_device_map_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_class_init (MetaDeviceMapClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->get_property = meta_device_map_get_property;
|
||||
object_class->set_property = meta_device_map_set_property;
|
||||
object_class->finalize = meta_device_map_finalize;
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_DISPLAY,
|
||||
g_param_spec_object ("display",
|
||||
"Display",
|
||||
"Display",
|
||||
META_TYPE_DISPLAY,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
signals[DEVICE_ADDED] =
|
||||
g_signal_new ("device-added",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
G_TYPE_NONE, 1, META_TYPE_DEVICE);
|
||||
signals[DEVICE_REMOVED] =
|
||||
g_signal_new ("device-removed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__OBJECT,
|
||||
G_TYPE_NONE, 1, META_TYPE_DEVICE);
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaDeviceMapPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_map_init (MetaDeviceMap *device_map)
|
||||
{
|
||||
MetaDeviceMapPrivate *priv;
|
||||
|
||||
priv = device_map->priv = G_TYPE_INSTANCE_GET_PRIVATE (device_map,
|
||||
META_TYPE_DEVICE_MAP,
|
||||
MetaDeviceMapPrivate);
|
||||
priv->devices = g_hash_table_new_full (NULL, NULL, NULL,
|
||||
(GDestroyNotify) g_object_unref);
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_map_add_device (MetaDeviceMap *device_map,
|
||||
MetaDevice *device)
|
||||
{
|
||||
MetaDeviceMapPrivate *priv;
|
||||
|
||||
priv = device_map->priv;
|
||||
g_hash_table_insert (priv->devices,
|
||||
GINT_TO_POINTER (meta_device_get_id (device)),
|
||||
g_object_ref (device));
|
||||
|
||||
g_signal_emit (device_map, signals[DEVICE_ADDED], 0, device);
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_map_remove_device (MetaDeviceMap *device_map,
|
||||
MetaDevice *device)
|
||||
{
|
||||
MetaDeviceMapPrivate *priv;
|
||||
|
||||
priv = device_map->priv;
|
||||
|
||||
if (g_hash_table_steal (priv->devices,
|
||||
GINT_TO_POINTER (meta_device_get_id (device))))
|
||||
{
|
||||
g_signal_emit (device_map, signals[DEVICE_REMOVED], 0, device);
|
||||
g_object_unref (device);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
|
||||
static gboolean
|
||||
initialize_xinput (MetaDisplay *display)
|
||||
{
|
||||
int major, minor, opcode;
|
||||
int unused;
|
||||
|
||||
if (!XQueryExtension (display->xdisplay,
|
||||
"XInputExtension",
|
||||
&opcode, &unused, &unused))
|
||||
return FALSE;
|
||||
|
||||
major = XINPUT2_VERSION_MAJOR;
|
||||
minor = XINPUT2_VERSION_MINOR;
|
||||
|
||||
XIQueryVersion (display->xdisplay, &major, &minor);
|
||||
|
||||
if (major == XINPUT2_VERSION_MAJOR &&
|
||||
minor == XINPUT2_VERSION_MINOR)
|
||||
{
|
||||
display->have_xinput2 = TRUE;
|
||||
display->xinput2_opcode = opcode;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
|
||||
MetaDeviceMap *
|
||||
meta_device_map_new (MetaDisplay *display,
|
||||
gboolean force_core)
|
||||
{
|
||||
GType type = META_TYPE_DEVICE_MAP_CORE;
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (!force_core &&
|
||||
initialize_xinput (display))
|
||||
type = META_TYPE_DEVICE_MAP_XI2;
|
||||
#endif
|
||||
|
||||
return g_object_new (type,
|
||||
"display", display,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_device_map_lookup:
|
||||
* @device_map: a #MetaDeviceMap
|
||||
* @device_id: ID for a device
|
||||
*
|
||||
* returns the device corresponding to @device_id
|
||||
*
|
||||
* Returns: (transfer none): (allow-none): The matching device, or %NULL.
|
||||
**/
|
||||
MetaDevice *
|
||||
meta_device_map_lookup (MetaDeviceMap *device_map,
|
||||
gint device_id)
|
||||
{
|
||||
MetaDeviceMapPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), NULL);
|
||||
|
||||
priv = device_map->priv;
|
||||
return g_hash_table_lookup (priv->devices,
|
||||
GINT_TO_POINTER (device_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_device_map_get_display:
|
||||
* @device_map: a #MetaDeviceMap
|
||||
*
|
||||
* Returns the #MetaDisplay to which @device_map belongs to.
|
||||
*
|
||||
* Returns: (transfer none): The #MetaDisplay.
|
||||
**/
|
||||
MetaDisplay *
|
||||
meta_device_map_get_display (MetaDeviceMap *device_map)
|
||||
{
|
||||
MetaDeviceMapPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), NULL);
|
||||
|
||||
priv = device_map->priv;
|
||||
return priv->display;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_device_map_list_devices:
|
||||
* @device_map: a #MetaDeviceMap
|
||||
*
|
||||
* Returns the list of devices that @device_map holds.
|
||||
*
|
||||
* Returns: (element-type Meta.Device) (transfer container): the list
|
||||
* of devices, the contained objects are owned by @device_map
|
||||
* and should not be unref'ed. The list must be freed with
|
||||
* g_list_free().
|
||||
**/
|
||||
GList *
|
||||
meta_device_map_list_devices (MetaDeviceMap *device_map)
|
||||
{
|
||||
MetaDeviceMapPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), NULL);
|
||||
|
||||
priv = device_map->priv;
|
||||
return g_hash_table_get_values (priv->devices);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_device_map_grab_key (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers,
|
||||
gboolean sync)
|
||||
{
|
||||
MetaDeviceMapClass *klass;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), FALSE);
|
||||
g_return_val_if_fail (xwindow != None, FALSE);
|
||||
|
||||
klass = META_DEVICE_MAP_GET_CLASS (device_map);
|
||||
|
||||
if (!klass->grab_key)
|
||||
return FALSE;
|
||||
|
||||
return (klass->grab_key) (device_map, xwindow, keycode, modifiers, sync);
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_map_ungrab_key (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint keycode,
|
||||
guint modifiers)
|
||||
{
|
||||
MetaDeviceMapClass *klass;
|
||||
|
||||
g_return_if_fail (META_IS_DEVICE_MAP (device_map));
|
||||
g_return_if_fail (xwindow != None);
|
||||
|
||||
klass = META_DEVICE_MAP_GET_CLASS (device_map);
|
||||
|
||||
if (klass->ungrab_key)
|
||||
(klass->ungrab_key) (device_map, xwindow, keycode, modifiers);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_device_map_grab_button (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers,
|
||||
guint evmask,
|
||||
gboolean sync)
|
||||
{
|
||||
MetaDeviceMapClass *klass;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), FALSE);
|
||||
g_return_val_if_fail (xwindow != None, FALSE);
|
||||
|
||||
klass = META_DEVICE_MAP_GET_CLASS (device_map);
|
||||
|
||||
if (!klass->grab_button)
|
||||
return FALSE;
|
||||
|
||||
return (klass->grab_button) (device_map, xwindow, n_button,
|
||||
modifiers, evmask, sync);
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_map_ungrab_button (MetaDeviceMap *device_map,
|
||||
Window xwindow,
|
||||
guint n_button,
|
||||
guint modifiers)
|
||||
{
|
||||
MetaDeviceMapClass *klass;
|
||||
|
||||
g_return_if_fail (META_IS_DEVICE_MAP (device_map));
|
||||
g_return_if_fail (xwindow != None);
|
||||
|
||||
klass = META_DEVICE_MAP_GET_CLASS (device_map);
|
||||
|
||||
if (klass->ungrab_button)
|
||||
(klass->ungrab_button) (device_map, xwindow, n_button, modifiers);
|
||||
}
|
||||
124
src/core/device-pointer.c
Normal file
124
src/core/device-pointer.c
Normal file
@@ -0,0 +1,124 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Pointer device abstraction */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include "device-pointer.h"
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE (MetaDevicePointer,
|
||||
meta_device_pointer,
|
||||
META_TYPE_DEVICE)
|
||||
|
||||
static void
|
||||
meta_device_pointer_class_init (MetaDevicePointerClass *klass)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_pointer_init (MetaDevicePointer *pointer)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_pointer_warp (MetaDevicePointer *pointer,
|
||||
MetaScreen *screen,
|
||||
gint x,
|
||||
gint y)
|
||||
{
|
||||
MetaDevicePointerClass *klass;
|
||||
|
||||
g_return_if_fail (META_IS_DEVICE_POINTER (pointer));
|
||||
g_return_if_fail (META_IS_SCREEN (screen));
|
||||
|
||||
klass = META_DEVICE_POINTER_GET_CLASS (pointer);
|
||||
|
||||
if (klass->warp)
|
||||
(klass->warp) (pointer, screen, x, y);
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_pointer_set_window_cursor (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
MetaCursor cursor)
|
||||
{
|
||||
MetaDevicePointerClass *klass;
|
||||
|
||||
g_return_if_fail (META_IS_DEVICE_POINTER (pointer));
|
||||
g_return_if_fail (xwindow != None);
|
||||
|
||||
klass = META_DEVICE_POINTER_GET_CLASS (pointer);
|
||||
|
||||
if (klass->set_window_cursor)
|
||||
(klass->set_window_cursor) (pointer, xwindow, cursor);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_device_pointer_query_position (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
Window *root_ret,
|
||||
Window *child_ret,
|
||||
gint *root_x_ret,
|
||||
gint *root_y_ret,
|
||||
gint *x_ret,
|
||||
gint *y_ret,
|
||||
guint *mask_ret)
|
||||
{
|
||||
MetaDevicePointerClass *klass;
|
||||
gint root_x, root_y, x, y;
|
||||
Window root, child;
|
||||
gboolean retval;
|
||||
guint mask;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE_POINTER (pointer), FALSE);
|
||||
g_return_val_if_fail (xwindow != None, FALSE);
|
||||
|
||||
klass = META_DEVICE_POINTER_GET_CLASS (pointer);
|
||||
|
||||
if (!klass->query_position)
|
||||
return FALSE;
|
||||
|
||||
retval = (klass->query_position) (pointer, xwindow, &root, &child,
|
||||
&root_x, &root_y, &x, &y, &mask);
|
||||
|
||||
if (root_ret)
|
||||
*root_ret = root;
|
||||
|
||||
if (child_ret)
|
||||
*child_ret = child;
|
||||
|
||||
if (root_x_ret)
|
||||
*root_x_ret = root_x;
|
||||
|
||||
if (root_y_ret)
|
||||
*root_y_ret = root_y;
|
||||
|
||||
if (x_ret)
|
||||
*x_ret = x;
|
||||
|
||||
if (y_ret)
|
||||
*y_ret = y;
|
||||
|
||||
if (mask_ret)
|
||||
*mask_ret = mask;
|
||||
|
||||
return retval;
|
||||
}
|
||||
95
src/core/device-pointer.h
Normal file
95
src/core/device-pointer.h
Normal file
@@ -0,0 +1,95 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/**
|
||||
* \file device-pointer.h Pointer device abstraction
|
||||
*
|
||||
* Input devices.
|
||||
* This file contains the internal abstraction of pointer devices so
|
||||
* XInput2/core events can be handled similarly.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICE_POINTER_H
|
||||
#define META_DEVICE_POINTER_H
|
||||
|
||||
#include "display-private.h"
|
||||
#include <meta/screen.h>
|
||||
#include "device-private.h"
|
||||
|
||||
#define META_TYPE_DEVICE_POINTER (meta_device_pointer_get_type ())
|
||||
#define META_DEVICE_POINTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_POINTER, MetaDevicePointer))
|
||||
#define META_DEVICE_POINTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_POINTER, MetaDevicePointerClass))
|
||||
#define META_IS_DEVICE_POINTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_POINTER))
|
||||
#define META_IS_DEVICE_POINTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_POINTER))
|
||||
#define META_DEVICE_POINTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_POINTER, MetaDevicePointerClass))
|
||||
|
||||
typedef struct _MetaDevicePointer MetaDevicePointer;
|
||||
typedef struct _MetaDevicePointerClass MetaDevicePointerClass;
|
||||
|
||||
struct _MetaDevicePointer
|
||||
{
|
||||
MetaDevice parent_instance;
|
||||
};
|
||||
|
||||
struct _MetaDevicePointerClass
|
||||
{
|
||||
MetaDeviceClass parent_instance;
|
||||
|
||||
void (* warp) (MetaDevicePointer *pointer,
|
||||
MetaScreen *screen,
|
||||
gint x,
|
||||
gint y);
|
||||
|
||||
void (* set_window_cursor) (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
MetaCursor cursor);
|
||||
gboolean (* query_position) (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
Window *root,
|
||||
Window *child,
|
||||
gint *root_x,
|
||||
gint *root_y,
|
||||
gint *x,
|
||||
gint *y,
|
||||
guint *mask);
|
||||
};
|
||||
|
||||
GType meta_device_pointer_get_type (void) G_GNUC_CONST;
|
||||
|
||||
void meta_device_pointer_warp (MetaDevicePointer *pointer,
|
||||
MetaScreen *screen,
|
||||
gint x,
|
||||
gint y);
|
||||
void meta_device_pointer_set_window_cursor (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
MetaCursor cursor);
|
||||
|
||||
gboolean meta_device_pointer_query_position (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
Window *root,
|
||||
Window *child,
|
||||
gint *root_x,
|
||||
gint *root_y,
|
||||
gint *x,
|
||||
gint *y,
|
||||
guint *mask);
|
||||
|
||||
#endif /* META_DEVICE_POINTER_H */
|
||||
80
src/core/device-private.h
Normal file
80
src/core/device-private.h
Normal file
@@ -0,0 +1,80 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/**
|
||||
* \file device.h Input device abstraction
|
||||
*
|
||||
* Input devices.
|
||||
* This file contains the internal abstraction of input devices so
|
||||
* XInput2/core events can be handled similarly.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICE_PRIVATE_H
|
||||
#define META_DEVICE_PRIVATE_H
|
||||
|
||||
#include <meta/device.h>
|
||||
#include "display-private.h"
|
||||
|
||||
struct _MetaDevice
|
||||
{
|
||||
GObject parent_instance;
|
||||
gpointer priv;
|
||||
};
|
||||
|
||||
struct _MetaDeviceClass
|
||||
{
|
||||
GObjectClass parent_instance;
|
||||
|
||||
void (* allow_events) (MetaDevice *device,
|
||||
int mode,
|
||||
Time time);
|
||||
|
||||
gboolean (* grab) (MetaDevice *device,
|
||||
Window xwindow,
|
||||
guint evmask,
|
||||
MetaCursor cursor,
|
||||
gboolean owner_events,
|
||||
gboolean sync,
|
||||
Time time);
|
||||
void (* ungrab) (MetaDevice *device,
|
||||
Time time);
|
||||
};
|
||||
|
||||
GType meta_device_get_type (void) G_GNUC_CONST;
|
||||
|
||||
void meta_device_allow_events (MetaDevice *device,
|
||||
int mode,
|
||||
Time time);
|
||||
|
||||
gboolean meta_device_grab (MetaDevice *device,
|
||||
Window xwindow,
|
||||
guint evmask,
|
||||
MetaCursor cursor,
|
||||
gboolean owner_events,
|
||||
gboolean sync,
|
||||
Time time);
|
||||
void meta_device_ungrab (MetaDevice *device,
|
||||
Time time);
|
||||
|
||||
void meta_device_pair_devices (MetaDevice *device,
|
||||
MetaDevice *other_device);
|
||||
|
||||
#endif /* META_DEVICE_PRIVATE_H */
|
||||
270
src/core/device.c
Normal file
270
src/core/device.c
Normal file
@@ -0,0 +1,270 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Input device abstraction */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include "device-private.h"
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE (MetaDevice, meta_device, G_TYPE_OBJECT)
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_DEVICE_ID,
|
||||
PROP_DISPLAY,
|
||||
PROP_PAIRED_DEVICE
|
||||
};
|
||||
|
||||
typedef struct MetaDevicePrivate MetaDevicePrivate;
|
||||
|
||||
struct MetaDevicePrivate
|
||||
{
|
||||
MetaDisplay *display;
|
||||
MetaDevice *paired_device;
|
||||
gint device_id;
|
||||
};
|
||||
|
||||
static void
|
||||
meta_device_get_property (GObject *object,
|
||||
guint param_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
switch (param_id)
|
||||
{
|
||||
case PROP_DEVICE_ID:
|
||||
g_value_set_int (value,
|
||||
meta_device_get_id (META_DEVICE (object)));
|
||||
break;
|
||||
case PROP_DISPLAY:
|
||||
g_value_set_object (value,
|
||||
meta_device_get_display (META_DEVICE (object)));
|
||||
break;
|
||||
case PROP_PAIRED_DEVICE:
|
||||
g_value_set_object (value,
|
||||
meta_device_get_paired_device (META_DEVICE (object)));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_set_property (GObject *object,
|
||||
guint param_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaDevicePrivate *priv = META_DEVICE (object)->priv;
|
||||
|
||||
switch (param_id)
|
||||
{
|
||||
case PROP_DEVICE_ID:
|
||||
priv->device_id = g_value_get_int (value);
|
||||
break;
|
||||
case PROP_DISPLAY:
|
||||
priv->display = g_value_get_object (value);
|
||||
break;
|
||||
case PROP_PAIRED_DEVICE:
|
||||
meta_device_pair_devices (META_DEVICE (object),
|
||||
g_value_get_object (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_class_init (MetaDeviceClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->get_property = meta_device_get_property;
|
||||
object_class->set_property = meta_device_set_property;
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_DEVICE_ID,
|
||||
g_param_spec_int ("device-id",
|
||||
"Device ID",
|
||||
"Device ID",
|
||||
2, G_MAXINT, 2,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_DISPLAY,
|
||||
g_param_spec_object ("display",
|
||||
"Display",
|
||||
"Display",
|
||||
META_TYPE_DISPLAY,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_PAIRED_DEVICE,
|
||||
g_param_spec_object ("paired-device",
|
||||
"Paired device",
|
||||
"Paired device",
|
||||
META_TYPE_DEVICE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaDevicePrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_init (MetaDevice *device)
|
||||
{
|
||||
device->priv = G_TYPE_INSTANCE_GET_PRIVATE (device,
|
||||
META_TYPE_DEVICE,
|
||||
MetaDevicePrivate);
|
||||
}
|
||||
|
||||
int
|
||||
meta_device_get_id (MetaDevice *device)
|
||||
{
|
||||
MetaDevicePrivate *priv;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE (device), 0);
|
||||
|
||||
priv = device->priv;
|
||||
return priv->device_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_device_get_display:
|
||||
* @device: a #MetaDevice
|
||||
*
|
||||
* Returns the #MetaDisplay to which the device belongs
|
||||
*
|
||||
* Returns: (transfer none): the #MetaDisplay to which the device belongs
|
||||
**/
|
||||
MetaDisplay *
|
||||
meta_device_get_display (MetaDevice *device)
|
||||
{
|
||||
MetaDevicePrivate *priv;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE (device), NULL);
|
||||
|
||||
priv = device->priv;
|
||||
return priv->display;
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_allow_events (MetaDevice *device,
|
||||
int mode,
|
||||
Time time)
|
||||
{
|
||||
MetaDeviceClass *klass;
|
||||
|
||||
g_return_if_fail (META_IS_DEVICE (device));
|
||||
|
||||
klass = META_DEVICE_GET_CLASS (device);
|
||||
|
||||
if (klass->allow_events)
|
||||
(klass->allow_events) (device, mode, time);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_device_grab (MetaDevice *device,
|
||||
Window xwindow,
|
||||
guint evmask,
|
||||
MetaCursor cursor,
|
||||
gboolean owner_events,
|
||||
gboolean sync,
|
||||
Time time)
|
||||
{
|
||||
MetaDeviceClass *klass;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE (device), FALSE);
|
||||
g_return_val_if_fail (xwindow != None, FALSE);
|
||||
|
||||
klass = META_DEVICE_GET_CLASS (device);
|
||||
|
||||
if (!klass->grab)
|
||||
return FALSE;
|
||||
|
||||
return (klass->grab) (device, xwindow, evmask, cursor,
|
||||
owner_events, sync, time);
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_ungrab (MetaDevice *device,
|
||||
Time time)
|
||||
{
|
||||
MetaDeviceClass *klass;
|
||||
|
||||
g_return_if_fail (META_IS_DEVICE (device));
|
||||
|
||||
klass = META_DEVICE_GET_CLASS (device);
|
||||
|
||||
if (klass->ungrab)
|
||||
(klass->ungrab) (device, time);
|
||||
}
|
||||
|
||||
void
|
||||
meta_device_pair_devices (MetaDevice *device,
|
||||
MetaDevice *other_device)
|
||||
{
|
||||
MetaDevicePrivate *priv1, *priv2;
|
||||
|
||||
g_return_if_fail (META_IS_DEVICE (device));
|
||||
g_return_if_fail (META_IS_DEVICE (other_device));
|
||||
|
||||
priv1 = device->priv;
|
||||
priv2 = other_device->priv;
|
||||
|
||||
/* Consider safe multiple calls
|
||||
* on already paired devices
|
||||
*/
|
||||
if (priv1->paired_device != NULL &&
|
||||
priv2->paired_device != NULL &&
|
||||
priv1->paired_device == other_device &&
|
||||
priv2->paired_device == device)
|
||||
return;
|
||||
|
||||
g_return_if_fail (priv1->paired_device == NULL);
|
||||
g_return_if_fail (priv2->paired_device == NULL);
|
||||
|
||||
priv1->paired_device = g_object_ref (other_device);
|
||||
priv2->paired_device = g_object_ref (device);
|
||||
|
||||
g_object_notify (G_OBJECT (device), "paired-device");
|
||||
g_object_notify (G_OBJECT (other_device), "paired-device");
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_device_get_paired_device:
|
||||
* @device: a #MetaDevice
|
||||
*
|
||||
* Returns the paired device. Devices come in keyboard/pointer pairs.
|
||||
*
|
||||
* Returns: (transfer none): The paired device.
|
||||
**/
|
||||
MetaDevice *
|
||||
meta_device_get_paired_device (MetaDevice *device)
|
||||
{
|
||||
MetaDevicePrivate *priv;
|
||||
|
||||
g_return_val_if_fail (META_IS_DEVICE (device), NULL);
|
||||
|
||||
priv = device->priv;
|
||||
return priv->paired_device;
|
||||
}
|
||||
256
src/core/devices-core.c
Normal file
256
src/core/devices-core.c
Normal file
@@ -0,0 +1,256 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Core input devices implementation */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include "screen-private.h"
|
||||
#include "devices-core.h"
|
||||
#include "device-map-private.h"
|
||||
|
||||
/* Common functions */
|
||||
static void
|
||||
meta_device_core_common_allow_events (MetaDevice *device,
|
||||
int mode,
|
||||
Time time)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_get_display (device);
|
||||
XAllowEvents (display->xdisplay, mode, time);
|
||||
}
|
||||
|
||||
/* Core pointer */
|
||||
|
||||
G_DEFINE_TYPE (MetaDevicePointerCore,
|
||||
meta_device_pointer_core,
|
||||
META_TYPE_DEVICE_POINTER)
|
||||
|
||||
static gboolean
|
||||
meta_device_pointer_core_grab (MetaDevice *device,
|
||||
Window xwindow,
|
||||
guint evmask,
|
||||
MetaCursor cursor,
|
||||
gboolean owner_events,
|
||||
gboolean sync,
|
||||
Time time)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
Cursor xcursor;
|
||||
int retval;
|
||||
|
||||
display = meta_device_get_display (device);
|
||||
xcursor = meta_display_create_x_cursor (display, cursor);
|
||||
|
||||
retval = XGrabPointer (display->xdisplay,
|
||||
xwindow, owner_events,
|
||||
evmask,
|
||||
(sync) ? GrabModeSync : GrabModeAsync,
|
||||
(sync) ? GrabModeSync : GrabModeAsync,
|
||||
None, xcursor, time);
|
||||
|
||||
if (xcursor != None)
|
||||
XFreeCursor (display->xdisplay, xcursor);
|
||||
|
||||
return (retval == Success);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_pointer_core_ungrab (MetaDevice *device,
|
||||
Time time)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_get_display (device);
|
||||
XUngrabPointer (display->xdisplay, time);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_pointer_core_warp (MetaDevicePointer *pointer,
|
||||
MetaScreen *screen,
|
||||
gint x,
|
||||
gint y)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (pointer));
|
||||
XWarpPointer (display->xdisplay,
|
||||
None, screen->xroot,
|
||||
0, 0, 0, 0, x, y);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_pointer_core_set_window_cursor (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
MetaCursor cursor)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
Cursor xcursor;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (pointer));
|
||||
xcursor = meta_display_create_x_cursor (display, cursor);
|
||||
|
||||
XDefineCursor (display->xdisplay, xwindow, xcursor);
|
||||
|
||||
if (xcursor != None)
|
||||
XFreeCursor (display->xdisplay, xcursor);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_device_pointer_core_query_position (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
Window *root,
|
||||
Window *child,
|
||||
gint *root_x,
|
||||
gint *root_y,
|
||||
gint *x,
|
||||
gint *y,
|
||||
guint *mask)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (pointer));
|
||||
return XQueryPointer (display->xdisplay, xwindow,
|
||||
root, child, root_x, root_y,
|
||||
x, y, mask);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_pointer_core_class_init (MetaDevicePointerCoreClass *klass)
|
||||
{
|
||||
MetaDevicePointerClass *pointer_class = META_DEVICE_POINTER_CLASS (klass);
|
||||
MetaDeviceClass *device_class = META_DEVICE_CLASS (klass);
|
||||
|
||||
device_class->allow_events = meta_device_core_common_allow_events;
|
||||
device_class->grab = meta_device_pointer_core_grab;
|
||||
device_class->ungrab = meta_device_pointer_core_ungrab;
|
||||
|
||||
pointer_class->warp = meta_device_pointer_core_warp;
|
||||
pointer_class->set_window_cursor = meta_device_pointer_core_set_window_cursor;
|
||||
pointer_class->query_position = meta_device_pointer_core_query_position;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_pointer_core_init (MetaDevicePointerCore *pointer)
|
||||
{
|
||||
}
|
||||
|
||||
MetaDevice *
|
||||
meta_device_pointer_core_new (MetaDisplay *display)
|
||||
{
|
||||
return g_object_new (META_TYPE_DEVICE_POINTER_CORE,
|
||||
"device-id", META_CORE_POINTER_ID,
|
||||
"display", display,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
||||
/* Core Keyboard */
|
||||
|
||||
G_DEFINE_TYPE (MetaDeviceKeyboardCore,
|
||||
meta_device_keyboard_core,
|
||||
META_TYPE_DEVICE_KEYBOARD)
|
||||
|
||||
static gboolean
|
||||
meta_device_keyboard_core_grab (MetaDevice *device,
|
||||
Window xwindow,
|
||||
guint evmask,
|
||||
MetaCursor cursor,
|
||||
gboolean owner_events,
|
||||
gboolean sync,
|
||||
Time time)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
gint retval;
|
||||
|
||||
display = meta_device_get_display (device);
|
||||
retval = XGrabKeyboard (display->xdisplay, xwindow, owner_events,
|
||||
(sync) ? GrabModeSync : GrabModeAsync,
|
||||
(sync) ? GrabModeSync : GrabModeAsync,
|
||||
time);
|
||||
|
||||
return (retval == Success);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_keyboard_core_ungrab (MetaDevice *device,
|
||||
Time time)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_get_display (device);
|
||||
XUngrabKeyboard (display->xdisplay, time);
|
||||
}
|
||||
|
||||
static Window
|
||||
meta_device_keyboard_core_get_focus_window (MetaDeviceKeyboard *keyboard)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
Window xwindow;
|
||||
int unused;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (keyboard));
|
||||
XGetInputFocus (display->xdisplay, &xwindow, &unused);
|
||||
|
||||
return xwindow;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_keyboard_core_set_focus_window (MetaDeviceKeyboard *keyboard,
|
||||
Window xwindow,
|
||||
Time timestamp)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (keyboard));
|
||||
XSetInputFocus (display->xdisplay,
|
||||
xwindow,
|
||||
RevertToPointerRoot,
|
||||
timestamp);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_keyboard_core_class_init (MetaDeviceKeyboardCoreClass *klass)
|
||||
{
|
||||
MetaDeviceKeyboardClass *keyboard_class = META_DEVICE_KEYBOARD_CLASS (klass);
|
||||
MetaDeviceClass *device_class = META_DEVICE_CLASS (klass);
|
||||
|
||||
keyboard_class->get_focus_window = meta_device_keyboard_core_get_focus_window;
|
||||
keyboard_class->set_focus_window = meta_device_keyboard_core_set_focus_window;
|
||||
|
||||
device_class->allow_events = meta_device_core_common_allow_events;
|
||||
device_class->grab = meta_device_keyboard_core_grab;
|
||||
device_class->ungrab = meta_device_keyboard_core_ungrab;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_keyboard_core_init (MetaDeviceKeyboardCore *keyboard)
|
||||
{
|
||||
}
|
||||
|
||||
MetaDevice *
|
||||
meta_device_keyboard_core_new (MetaDisplay *display)
|
||||
{
|
||||
return g_object_new (META_TYPE_DEVICE_KEYBOARD_CORE,
|
||||
"device-id", META_CORE_KEYBOARD_ID,
|
||||
"display", display,
|
||||
NULL);
|
||||
}
|
||||
85
src/core/devices-core.h
Normal file
85
src/core/devices-core.h
Normal file
@@ -0,0 +1,85 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/**
|
||||
* \file devices-core.h Core input devices implementation
|
||||
*
|
||||
* Input devices.
|
||||
* This file contains the core X protocol implementation of input devices.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICES_CORE_H
|
||||
#define META_DEVICES_CORE_H
|
||||
|
||||
#include "device-pointer.h"
|
||||
#include "device-keyboard.h"
|
||||
|
||||
/* Pointer */
|
||||
#define META_TYPE_DEVICE_POINTER_CORE (meta_device_pointer_core_get_type ())
|
||||
#define META_DEVICE_POINTER_CORE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_POINTER_CORE, MetaDevicePointerCore))
|
||||
#define META_DEVICE_POINTER_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_POINTER_CORE, MetaDevicePointerCoreClass))
|
||||
#define META_IS_DEVICE_POINTER_CORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_POINTER_CORE))
|
||||
#define META_IS_DEVICE_POINTER_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_POINTER_CORE))
|
||||
#define META_DEVICE_POINTER_CORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_POINTER_CORE, MetaDevicePointerCoreClass))
|
||||
|
||||
typedef struct _MetaDevicePointerCore MetaDevicePointerCore;
|
||||
typedef struct _MetaDevicePointerCoreClass MetaDevicePointerCoreClass;
|
||||
|
||||
struct _MetaDevicePointerCore
|
||||
{
|
||||
MetaDevicePointer parent_instance;
|
||||
};
|
||||
|
||||
struct _MetaDevicePointerCoreClass
|
||||
{
|
||||
MetaDevicePointerClass parent_class;
|
||||
};
|
||||
|
||||
GType meta_device_pointer_core_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MetaDevice *meta_device_pointer_core_new (MetaDisplay *display);
|
||||
|
||||
/* Keyboard */
|
||||
#define META_TYPE_DEVICE_KEYBOARD_CORE (meta_device_keyboard_core_get_type ())
|
||||
#define META_DEVICE_KEYBOARD_CORE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_KEYBOARD_CORE, MetaDeviceKeyboardCore))
|
||||
#define META_DEVICE_KEYBOARD_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_KEYBOARD_CORE, MetaDeviceKeyboardCoreClass))
|
||||
#define META_IS_DEVICE_KEYBOARD_CORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_KEYBOARD_CORE))
|
||||
#define META_IS_DEVICE_KEYBOARD_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_KEYBOARD_CORE))
|
||||
#define META_DEVICE_KEYBOARD_CORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_KEYBOARD_CORE, MetaDeviceKeyboardCoreClass))
|
||||
|
||||
typedef struct _MetaDeviceKeyboardCore MetaDeviceKeyboardCore;
|
||||
typedef struct _MetaDeviceKeyboardCoreClass MetaDeviceKeyboardCoreClass;
|
||||
|
||||
struct _MetaDeviceKeyboardCore
|
||||
{
|
||||
MetaDeviceKeyboard parent_instance;
|
||||
};
|
||||
|
||||
struct _MetaDeviceKeyboardCoreClass
|
||||
{
|
||||
MetaDeviceKeyboardClass parent_class;
|
||||
};
|
||||
|
||||
GType meta_device_keyboard_core_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MetaDevice *meta_device_keyboard_core_new (MetaDisplay *display);
|
||||
|
||||
#endif /* META_DEVICES_CORE_H */
|
||||
343
src/core/devices-xi2.c
Normal file
343
src/core/devices-xi2.c
Normal file
@@ -0,0 +1,343 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* XInput2 devices implementation */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include "devices-xi2.h"
|
||||
#include "display-private.h"
|
||||
#include "screen-private.h"
|
||||
#include <X11/extensions/XInput2.h>
|
||||
|
||||
/* Common functions */
|
||||
static void
|
||||
meta_device_xi2_common_allow_events (MetaDevice *device,
|
||||
int mode,
|
||||
Time time)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
gint device_id;
|
||||
|
||||
display = meta_device_get_display (device);
|
||||
device_id = meta_device_get_id (device);
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case AsyncPointer:
|
||||
case AsyncKeyboard:
|
||||
mode = XIAsyncDevice;
|
||||
break;
|
||||
case SyncPointer:
|
||||
case SyncKeyboard:
|
||||
mode = XISyncDevice;
|
||||
break;
|
||||
case ReplayPointer:
|
||||
case ReplayKeyboard:
|
||||
mode = XIReplayDevice;
|
||||
break;
|
||||
case AsyncBoth:
|
||||
mode = XIAsyncPair;
|
||||
break;
|
||||
case SyncBoth:
|
||||
mode = XISyncPair;
|
||||
break;
|
||||
}
|
||||
|
||||
XIAllowEvents (display->xdisplay, device_id, mode, time);
|
||||
}
|
||||
|
||||
guchar *
|
||||
meta_device_xi2_translate_event_mask (guint evmask,
|
||||
gint *len)
|
||||
{
|
||||
guchar *mask;
|
||||
|
||||
*len = XIMaskLen (XI_LASTEVENT);
|
||||
mask = g_new0 (guchar, *len);
|
||||
|
||||
if (evmask & KeyPressMask)
|
||||
XISetMask (mask, XI_KeyPress);
|
||||
if (evmask & KeyReleaseMask)
|
||||
XISetMask (mask, XI_KeyRelease);
|
||||
if (evmask & ButtonPressMask)
|
||||
XISetMask (mask, XI_ButtonPress);
|
||||
if (evmask & ButtonReleaseMask)
|
||||
XISetMask (mask, XI_ButtonRelease);
|
||||
if (evmask & EnterWindowMask)
|
||||
XISetMask (mask, XI_Enter);
|
||||
if (evmask & LeaveWindowMask)
|
||||
XISetMask (mask, XI_Leave);
|
||||
|
||||
/* No motion hints in XI2 at the moment... */
|
||||
if (evmask & PointerMotionMask ||
|
||||
evmask & PointerMotionHintMask)
|
||||
XISetMask (mask, XI_Motion);
|
||||
|
||||
if (evmask & FocusChangeMask)
|
||||
{
|
||||
XISetMask (mask, XI_FocusIn);
|
||||
XISetMask (mask, XI_FocusOut);
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_device_xi2_common_grab (MetaDevice *device,
|
||||
Window xwindow,
|
||||
guint evmask,
|
||||
MetaCursor cursor,
|
||||
gboolean owner_events,
|
||||
gboolean sync,
|
||||
Time time)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
XIEventMask mask;
|
||||
gint device_id, retval;
|
||||
Cursor xcursor;
|
||||
|
||||
display = meta_device_get_display (device);
|
||||
device_id = meta_device_get_id (device);
|
||||
xcursor = meta_display_create_x_cursor (display, cursor);
|
||||
|
||||
mask.deviceid = device_id;
|
||||
mask.mask = meta_device_xi2_translate_event_mask (evmask, &mask.mask_len);
|
||||
|
||||
retval = XIGrabDevice (display->xdisplay,
|
||||
device_id, xwindow,
|
||||
time, xcursor,
|
||||
(sync) ? GrabModeSync : GrabModeAsync,
|
||||
(sync) ? GrabModeSync : GrabModeAsync,
|
||||
owner_events, &mask);
|
||||
|
||||
if (xcursor != None)
|
||||
XFreeCursor (display->xdisplay, xcursor);
|
||||
|
||||
return (retval == Success);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_xi2_common_ungrab (MetaDevice *device,
|
||||
Time time)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
gint device_id;
|
||||
|
||||
display = meta_device_get_display (device);
|
||||
device_id = meta_device_get_id (device);
|
||||
|
||||
XIUngrabDevice (display->xdisplay, device_id, time);
|
||||
}
|
||||
|
||||
/* Pointer */
|
||||
|
||||
G_DEFINE_TYPE (MetaDevicePointerXI2,
|
||||
meta_device_pointer_xi2,
|
||||
META_TYPE_DEVICE_POINTER)
|
||||
|
||||
static void
|
||||
meta_device_pointer_xi2_warp (MetaDevicePointer *pointer,
|
||||
MetaScreen *screen,
|
||||
gint x,
|
||||
gint y)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
int device_id;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (pointer));
|
||||
device_id = meta_device_get_id (META_DEVICE (pointer));
|
||||
|
||||
XIWarpPointer (display->xdisplay,
|
||||
device_id,
|
||||
None, screen->xroot,
|
||||
0, 0, 0, 0, x, y);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_pointer_xi2_set_window_cursor (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
MetaCursor cursor)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
Cursor xcursor;
|
||||
int device_id;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (pointer));
|
||||
device_id = meta_device_get_id (META_DEVICE (pointer));
|
||||
xcursor = meta_display_create_x_cursor (display, cursor);
|
||||
|
||||
if (xcursor != None)
|
||||
{
|
||||
XIDefineCursor (display->xdisplay, device_id, xwindow, xcursor);
|
||||
XFreeCursor (display->xdisplay, xcursor);
|
||||
}
|
||||
else
|
||||
XIUndefineCursor (display->xdisplay, device_id, xwindow);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_device_pointer_xi2_query_position (MetaDevicePointer *pointer,
|
||||
Window xwindow,
|
||||
Window *root_ret,
|
||||
Window *child_ret,
|
||||
gint *root_x_ret,
|
||||
gint *root_y_ret,
|
||||
gint *x_ret,
|
||||
gint *y_ret,
|
||||
guint *mask_ret)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
XIModifierState mods;
|
||||
XIGroupState group_unused;
|
||||
XIButtonState buttons;
|
||||
gdouble root_x, root_y, x, y;
|
||||
int device_id;
|
||||
gboolean retval;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (pointer));
|
||||
device_id = meta_device_get_id (META_DEVICE (pointer));
|
||||
|
||||
retval = XIQueryPointer (display->xdisplay,
|
||||
device_id, xwindow,
|
||||
root_ret, child_ret,
|
||||
&root_x, &root_y, &x, &y,
|
||||
&buttons, &mods,
|
||||
&group_unused);
|
||||
if (mask_ret)
|
||||
{
|
||||
*mask_ret = mods.effective;
|
||||
|
||||
if (XIMaskIsSet (buttons.mask, 1))
|
||||
*mask_ret |= Button1Mask;
|
||||
else if (XIMaskIsSet (buttons.mask, 2))
|
||||
*mask_ret |= Button2Mask;
|
||||
else if (XIMaskIsSet (buttons.mask, 3))
|
||||
*mask_ret |= Button3Mask;
|
||||
}
|
||||
|
||||
if (root_x_ret)
|
||||
*root_x_ret = (int) root_x;
|
||||
|
||||
if (root_y_ret)
|
||||
*root_y_ret = (int) root_y;
|
||||
|
||||
if (x_ret)
|
||||
*x_ret = (int) x;
|
||||
|
||||
if (y_ret)
|
||||
*y_ret = (int) y;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_pointer_xi2_class_init (MetaDevicePointerXI2Class *klass)
|
||||
{
|
||||
MetaDevicePointerClass *pointer_class = META_DEVICE_POINTER_CLASS (klass);
|
||||
MetaDeviceClass *device_class = META_DEVICE_CLASS (klass);
|
||||
|
||||
device_class->allow_events = meta_device_xi2_common_allow_events;
|
||||
device_class->grab = meta_device_xi2_common_grab;
|
||||
device_class->ungrab = meta_device_xi2_common_ungrab;
|
||||
|
||||
pointer_class->warp = meta_device_pointer_xi2_warp;
|
||||
pointer_class->set_window_cursor = meta_device_pointer_xi2_set_window_cursor;
|
||||
pointer_class->query_position = meta_device_pointer_xi2_query_position;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_pointer_xi2_init (MetaDevicePointerXI2 *pointer)
|
||||
{
|
||||
}
|
||||
|
||||
MetaDevice *
|
||||
meta_device_pointer_xi2_new (MetaDisplay *display,
|
||||
gint device_id)
|
||||
{
|
||||
return g_object_new (META_TYPE_DEVICE_POINTER_XI2,
|
||||
"device-id", device_id,
|
||||
"display", display,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/* Keyboard */
|
||||
|
||||
G_DEFINE_TYPE (MetaDeviceKeyboardXI2,
|
||||
meta_device_keyboard_xi2,
|
||||
META_TYPE_DEVICE_KEYBOARD)
|
||||
|
||||
static Window
|
||||
meta_device_keyboard_xi2_get_focus_window (MetaDeviceKeyboard *keyboard)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
Window xwindow;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (keyboard));
|
||||
XIGetFocus (display->xdisplay,
|
||||
meta_device_get_id (META_DEVICE (keyboard)),
|
||||
&xwindow);
|
||||
|
||||
return xwindow;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_keyboard_xi2_set_focus_window (MetaDeviceKeyboard *keyboard,
|
||||
Window xwindow,
|
||||
Time timestamp)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_device_get_display (META_DEVICE (keyboard));
|
||||
|
||||
XISetFocus (display->xdisplay,
|
||||
meta_device_get_id (META_DEVICE (keyboard)),
|
||||
xwindow,
|
||||
timestamp);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_keyboard_xi2_class_init (MetaDeviceKeyboardXI2Class *klass)
|
||||
{
|
||||
MetaDeviceKeyboardClass *keyboard_class = META_DEVICE_KEYBOARD_CLASS (klass);
|
||||
MetaDeviceClass *device_class = META_DEVICE_CLASS (klass);
|
||||
|
||||
keyboard_class->get_focus_window = meta_device_keyboard_xi2_get_focus_window;
|
||||
keyboard_class->set_focus_window = meta_device_keyboard_xi2_set_focus_window;
|
||||
|
||||
device_class->allow_events = meta_device_xi2_common_allow_events;
|
||||
device_class->grab = meta_device_xi2_common_grab;
|
||||
device_class->ungrab = meta_device_xi2_common_ungrab;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_device_keyboard_xi2_init (MetaDeviceKeyboardXI2 *keyboard)
|
||||
{
|
||||
}
|
||||
|
||||
MetaDevice *
|
||||
meta_device_keyboard_xi2_new (MetaDisplay *display,
|
||||
gint device_id)
|
||||
{
|
||||
return g_object_new (META_TYPE_DEVICE_KEYBOARD_XI2,
|
||||
"device-id", device_id,
|
||||
"display", display,
|
||||
NULL);
|
||||
}
|
||||
92
src/core/devices-xi2.h
Normal file
92
src/core/devices-xi2.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/**
|
||||
* \file devices-xi2.h XInput2 input devices implementation
|
||||
*
|
||||
* Input devices.
|
||||
* This file contains the XInput2 implementation of input devices.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICES_XI2_H
|
||||
#define META_DEVICES_XI2_H
|
||||
|
||||
#include "device-pointer.h"
|
||||
#include "device-keyboard.h"
|
||||
|
||||
/* Pointer */
|
||||
#define META_TYPE_DEVICE_POINTER_XI2 (meta_device_pointer_xi2_get_type ())
|
||||
#define META_DEVICE_POINTER_XI2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_POINTER_XI2, MetaDevicePointerXI2))
|
||||
#define META_DEVICE_POINTER_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_POINTER_XI2, MetaDevicePointerXI2Class))
|
||||
#define META_IS_DEVICE_POINTER_XI2(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_POINTER_XI2))
|
||||
#define META_IS_DEVICE_POINTER_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_POINTER_XI2))
|
||||
#define META_DEVICE_POINTER_XI2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_POINTER_XI2, MetaDevicePointerXI2Class))
|
||||
|
||||
typedef struct _MetaDevicePointerXI2 MetaDevicePointerXI2;
|
||||
typedef struct _MetaDevicePointerXI2Class MetaDevicePointerXI2Class;
|
||||
|
||||
struct _MetaDevicePointerXI2
|
||||
{
|
||||
MetaDevicePointer parent_instance;
|
||||
};
|
||||
|
||||
struct _MetaDevicePointerXI2Class
|
||||
{
|
||||
MetaDevicePointerClass parent_class;
|
||||
};
|
||||
|
||||
GType meta_device_pointer_xi2_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MetaDevice *meta_device_pointer_xi2_new (MetaDisplay *display,
|
||||
gint device_id);
|
||||
|
||||
/* Keyboard */
|
||||
#define META_TYPE_DEVICE_KEYBOARD_XI2 (meta_device_keyboard_xi2_get_type ())
|
||||
#define META_DEVICE_KEYBOARD_XI2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_KEYBOARD_XI2, MetaDeviceKeyboardXI2))
|
||||
#define META_DEVICE_KEYBOARD_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_KEYBOARD_XI2, MetaDeviceKeyboardXI2Class))
|
||||
#define META_IS_DEVICE_KEYBOARD_XI2(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_KEYBOARD_XI2))
|
||||
#define META_IS_DEVICE_KEYBOARD_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_KEYBOARD_XI2))
|
||||
#define META_DEVICE_KEYBOARD_XI2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_KEYBOARD_XI2, MetaDeviceKeyboardXI2Class))
|
||||
|
||||
typedef struct _MetaDeviceKeyboardXI2 MetaDeviceKeyboardXI2;
|
||||
typedef struct _MetaDeviceKeyboardXI2Class MetaDeviceKeyboardXI2Class;
|
||||
|
||||
struct _MetaDeviceKeyboardXI2
|
||||
{
|
||||
MetaDeviceKeyboard parent_instance;
|
||||
};
|
||||
|
||||
struct _MetaDeviceKeyboardXI2Class
|
||||
{
|
||||
MetaDeviceKeyboardClass parent_class;
|
||||
};
|
||||
|
||||
GType meta_device_keyboard_xi2_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MetaDevice *meta_device_keyboard_xi2_new (MetaDisplay *display,
|
||||
gint device_id);
|
||||
|
||||
/* Helper function for translating event masks */
|
||||
guchar * meta_device_xi2_translate_event_mask (guint evmask,
|
||||
gint *len);
|
||||
|
||||
|
||||
#endif /* META_DEVICES_XI2_H */
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <meta/boxes.h>
|
||||
#include <meta/display.h>
|
||||
#include "keybindings-private.h"
|
||||
#include "device-map-private.h"
|
||||
#include <meta/prefs.h>
|
||||
|
||||
#ifdef HAVE_STARTUP_NOTIFICATION
|
||||
@@ -56,6 +57,9 @@ typedef struct _MetaWindowPropHooks MetaWindowPropHooks;
|
||||
|
||||
typedef struct MetaEdgeResistanceData MetaEdgeResistanceData;
|
||||
|
||||
typedef struct _MetaGrabInfo MetaGrabInfo;
|
||||
typedef struct _MetaFocusInfo MetaFocusInfo;
|
||||
|
||||
typedef void (* MetaWindowPingFunc) (MetaDisplay *display,
|
||||
Window xwindow,
|
||||
guint32 timestamp,
|
||||
@@ -84,6 +88,65 @@ typedef enum {
|
||||
META_TILE_MAXIMIZED
|
||||
} MetaTileMode;
|
||||
|
||||
struct _MetaGrabInfo
|
||||
{
|
||||
MetaDevice *grab_pointer;
|
||||
MetaDevice *grab_keyboard;
|
||||
|
||||
MetaGrabOp grab_op;
|
||||
MetaScreen *grab_screen;
|
||||
MetaWindow *grab_window;
|
||||
Window grab_xwindow;
|
||||
int grab_button;
|
||||
int grab_anchor_root_x;
|
||||
int grab_anchor_root_y;
|
||||
MetaRectangle grab_anchor_window_pos;
|
||||
MetaTileMode grab_tile_mode;
|
||||
int grab_latest_motion_x;
|
||||
int grab_latest_motion_y;
|
||||
gulong grab_mask;
|
||||
guint grab_have_pointer : 1;
|
||||
guint grab_have_keyboard : 1;
|
||||
guint grab_frame_action : 1;
|
||||
/* During a resize operation, the directions in which we've broken
|
||||
* out of the initial maximization state */
|
||||
guint grab_resize_unmaximize : 2; /* MetaMaximizeFlags */
|
||||
MetaRectangle grab_initial_window_pos;
|
||||
int grab_initial_x, grab_initial_y; /* These are only relevant for */
|
||||
gboolean grab_threshold_movement_reached; /* raise_on_click == FALSE. */
|
||||
MetaResizePopup *grab_resize_popup;
|
||||
GTimeVal grab_last_moveresize_time;
|
||||
guint32 grab_motion_notify_time;
|
||||
GList* grab_old_window_stacking;
|
||||
unsigned int grab_last_user_action_was_snap;
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
|
||||
XSyncAlarm grab_sync_request_alarm;
|
||||
#endif
|
||||
int grab_resize_timeout_id;
|
||||
};
|
||||
|
||||
struct _MetaFocusInfo
|
||||
{
|
||||
/* This is the actual window from focus events,
|
||||
* not the one we last set
|
||||
*/
|
||||
MetaWindow *focus_window;
|
||||
|
||||
/* window we are expecting a FocusIn event for or the current focus
|
||||
* window if we are not expecting any FocusIn/FocusOut events; not
|
||||
* perfect because applications can call XSetInputFocus directly.
|
||||
* (It could also be messed up if a timestamp later than current
|
||||
* time is sent to meta_display_set_input_focus_window, though that
|
||||
* would be a programming error). See bug 154598 for more info.
|
||||
*/
|
||||
MetaWindow *expected_focus_window;
|
||||
|
||||
/* last timestamp passed to XSetInputFocus */
|
||||
guint32 last_focus_time;
|
||||
};
|
||||
|
||||
struct _MetaDisplay
|
||||
{
|
||||
GObject parent_instance;
|
||||
@@ -102,22 +165,8 @@ struct _MetaDisplay
|
||||
#include <meta/atomnames.h>
|
||||
#undef item
|
||||
|
||||
/* This is the actual window from focus events,
|
||||
* not the one we last set
|
||||
*/
|
||||
MetaWindow *focus_window;
|
||||
|
||||
/* window we are expecting a FocusIn event for or the current focus
|
||||
* window if we are not expecting any FocusIn/FocusOut events; not
|
||||
* perfect because applications can call XSetInputFocus directly.
|
||||
* (It could also be messed up if a timestamp later than current
|
||||
* time is sent to meta_display_set_input_focus_window, though that
|
||||
* would be a programming error). See bug 154598 for more info.
|
||||
*/
|
||||
MetaWindow *expected_focus_window;
|
||||
|
||||
/* last timestamp passed to XSetInputFocus */
|
||||
guint32 last_focus_time;
|
||||
/* keyboard -> MetaFocusInfo hashtable */
|
||||
GHashTable *focus_info;
|
||||
|
||||
/* last user interaction time in any app */
|
||||
guint32 last_user_time;
|
||||
@@ -177,34 +226,11 @@ struct _MetaDisplay
|
||||
/* Alt+click button grabs */
|
||||
unsigned int window_grab_modifiers;
|
||||
|
||||
/* current window operation */
|
||||
MetaGrabOp grab_op;
|
||||
MetaScreen *grab_screen;
|
||||
MetaWindow *grab_window;
|
||||
Window grab_xwindow;
|
||||
int grab_button;
|
||||
int grab_anchor_root_x;
|
||||
int grab_anchor_root_y;
|
||||
MetaRectangle grab_anchor_window_pos;
|
||||
MetaTileMode grab_tile_mode;
|
||||
int grab_latest_motion_x;
|
||||
int grab_latest_motion_y;
|
||||
gulong grab_mask;
|
||||
guint grab_have_pointer : 1;
|
||||
guint grab_have_keyboard : 1;
|
||||
guint grab_frame_action : 1;
|
||||
/* During a resize operation, the directions in which we've broken
|
||||
* out of the initial maximization state */
|
||||
guint grab_resize_unmaximize : 2; /* MetaMaximizeFlags */
|
||||
MetaRectangle grab_initial_window_pos;
|
||||
int grab_initial_x, grab_initial_y; /* These are only relevant for */
|
||||
gboolean grab_threshold_movement_reached; /* raise_on_click == FALSE. */
|
||||
MetaResizePopup *grab_resize_popup;
|
||||
GTimeVal grab_last_moveresize_time;
|
||||
guint32 grab_motion_notify_time;
|
||||
GList* grab_old_window_stacking;
|
||||
MetaEdgeResistanceData *grab_edge_resistance_data;
|
||||
unsigned int grab_last_user_action_was_snap;
|
||||
/* per-device current window operation */
|
||||
GHashTable *current_grabs;
|
||||
|
||||
/* per-screen edge resistance cache */
|
||||
GHashTable *edge_resistance_info;
|
||||
|
||||
/* we use property updates as sentinels for certain window focus events
|
||||
* to avoid some race conditions on EnterNotify events
|
||||
@@ -215,11 +241,6 @@ struct _MetaDisplay
|
||||
int xkb_base_event_type;
|
||||
guint32 last_bell_time;
|
||||
#endif
|
||||
#ifdef HAVE_XSYNC
|
||||
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
|
||||
XSyncAlarm grab_sync_request_alarm;
|
||||
#endif
|
||||
int grab_resize_timeout_id;
|
||||
|
||||
/* Keybindings stuff */
|
||||
MetaKeyBinding *key_bindings;
|
||||
@@ -266,6 +287,9 @@ struct _MetaDisplay
|
||||
/* Managed by compositor.c */
|
||||
MetaCompositor *compositor;
|
||||
|
||||
/* Managed by device-map.c */
|
||||
MetaDeviceMap *device_map;
|
||||
|
||||
int render_event_base;
|
||||
int render_error_base;
|
||||
|
||||
@@ -289,6 +313,12 @@ struct _MetaDisplay
|
||||
int shape_event_base;
|
||||
int shape_error_base;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
int xinput2_opcode;
|
||||
unsigned int have_xinput2 : 1;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
unsigned int have_xsync : 1;
|
||||
#define META_DISPLAY_HAS_XSYNC(display) ((display)->have_xsync)
|
||||
@@ -378,12 +408,14 @@ Cursor meta_display_create_x_cursor (MetaDisplay *display,
|
||||
|
||||
void meta_display_set_grab_op_cursor (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
MetaDevice *device,
|
||||
MetaGrabOp op,
|
||||
gboolean change_pointer,
|
||||
Window grab_xwindow,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_display_check_threshold_reached (MetaDisplay *display,
|
||||
MetaDevice *device,
|
||||
int x,
|
||||
int y);
|
||||
void meta_display_grab_window_buttons (MetaDisplay *display,
|
||||
@@ -397,7 +429,8 @@ void meta_display_ungrab_focus_window_button (MetaDisplay *display,
|
||||
MetaWindow *window);
|
||||
|
||||
/* Next function is defined in edge-resistance.c */
|
||||
void meta_display_cleanup_edges (MetaDisplay *display);
|
||||
void meta_display_cleanup_edges (MetaDisplay *display,
|
||||
MetaScreen *screen);
|
||||
|
||||
/* make a request to ensure the event serial has changed */
|
||||
void meta_display_increment_event_serial (MetaDisplay *display);
|
||||
@@ -445,4 +478,15 @@ void meta_display_overlay_key_activate (MetaDisplay *display);
|
||||
/* In above-tab-keycode.c */
|
||||
guint meta_display_get_above_tab_keycode (MetaDisplay *display);
|
||||
|
||||
MetaGrabInfo * meta_display_create_grab_info (MetaDisplay *display,
|
||||
MetaDevice *device);
|
||||
void meta_display_remove_grab_info (MetaDisplay *display,
|
||||
MetaDevice *device);
|
||||
|
||||
MetaGrabInfo * meta_display_get_grab_info (MetaDisplay *display,
|
||||
MetaDevice *device);
|
||||
MetaFocusInfo * meta_display_get_focus_info (MetaDisplay *display,
|
||||
MetaDevice *device);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
2982
src/core/display.c
2982
src/core/display.c
File diff suppressed because it is too large
Load Diff
@@ -30,12 +30,12 @@
|
||||
/* A simple macro for whether a given window's edges are potentially
|
||||
* relevant for resistance/snapping during a move/resize operation
|
||||
*/
|
||||
#define WINDOW_EDGES_RELEVANT(window, display) \
|
||||
meta_window_should_be_showing (window) && \
|
||||
window->screen == display->grab_screen && \
|
||||
window != display->grab_window && \
|
||||
window->type != META_WINDOW_DESKTOP && \
|
||||
window->type != META_WINDOW_MENU && \
|
||||
#define WINDOW_EDGES_RELEVANT(window, display, screen) \
|
||||
meta_window_should_be_showing (window) && \
|
||||
window->screen == screen && \
|
||||
window->cur_grab == NULL && \
|
||||
window->type != META_WINDOW_DESKTOP && \
|
||||
window->type != META_WINDOW_MENU && \
|
||||
window->type != META_WINDOW_SPLASHSCREEN
|
||||
|
||||
struct ResistanceDataForAnEdge
|
||||
@@ -44,8 +44,9 @@ struct ResistanceDataForAnEdge
|
||||
guint timeout_id;
|
||||
int timeout_edge_pos;
|
||||
gboolean timeout_over;
|
||||
GSourceFunc timeout_func;
|
||||
MetaEdgeResistanceFunc timeout_func;
|
||||
MetaWindow *window;
|
||||
MetaDevice *device;
|
||||
int keyboard_buildup;
|
||||
};
|
||||
typedef struct ResistanceDataForAnEdge ResistanceDataForAnEdge;
|
||||
@@ -63,7 +64,9 @@ struct MetaEdgeResistanceData
|
||||
ResistanceDataForAnEdge bottom_data;
|
||||
};
|
||||
|
||||
static void compute_resistance_and_snapping_edges (MetaDisplay *display);
|
||||
static MetaEdgeResistanceData *
|
||||
compute_resistance_and_snapping_edges (MetaDisplay *display,
|
||||
MetaScreen *screen);
|
||||
|
||||
/* !WARNING!: this function can return invalid indices (namely, either -1 or
|
||||
* edges->len); this is by design, but you need to remember this.
|
||||
@@ -318,20 +321,22 @@ edge_resistance_timeout (gpointer data)
|
||||
|
||||
resistance_data->timeout_over = TRUE;
|
||||
resistance_data->timeout_id = 0;
|
||||
(*resistance_data->timeout_func)(resistance_data->window);
|
||||
(*resistance_data->timeout_func) (resistance_data->window,
|
||||
resistance_data->device);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static int
|
||||
apply_edge_resistance (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
int old_pos,
|
||||
int new_pos,
|
||||
const MetaRectangle *old_rect,
|
||||
const MetaRectangle *new_rect,
|
||||
GArray *edges,
|
||||
ResistanceDataForAnEdge *resistance_data,
|
||||
GSourceFunc timeout_func,
|
||||
MetaEdgeResistanceFunc timeout_func,
|
||||
gboolean xdir,
|
||||
gboolean keyboard_op)
|
||||
{
|
||||
@@ -445,6 +450,7 @@ apply_edge_resistance (MetaWindow *window,
|
||||
resistance_data->timeout_over = FALSE;
|
||||
resistance_data->timeout_func = timeout_func;
|
||||
resistance_data->window = window;
|
||||
resistance_data->device = device;
|
||||
}
|
||||
if (!resistance_data->timeout_over &&
|
||||
timeout_length_ms != 0)
|
||||
@@ -533,29 +539,28 @@ apply_edge_snapping (int old_pos,
|
||||
* a proposed new position (ignoring edge resistance/snapping), and then
|
||||
* applies edge resistance to EACH edge (separately) updating new_outer.
|
||||
* It returns true if new_outer is modified, false otherwise.
|
||||
*
|
||||
* display->grab_edge_resistance_data MUST already be setup or calling this
|
||||
* function will cause a crash.
|
||||
*/
|
||||
static gboolean
|
||||
apply_edge_resistance_to_each_side (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
const MetaRectangle *old_outer,
|
||||
MetaRectangle *new_outer,
|
||||
GSourceFunc timeout_func,
|
||||
gboolean auto_snap,
|
||||
gboolean keyboard_op,
|
||||
gboolean is_resize)
|
||||
apply_edge_resistance_to_each_side (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
const MetaRectangle *old_outer,
|
||||
MetaRectangle *new_outer,
|
||||
MetaEdgeResistanceFunc timeout_func,
|
||||
gboolean auto_snap,
|
||||
gboolean keyboard_op,
|
||||
gboolean is_resize)
|
||||
{
|
||||
MetaEdgeResistanceData *edge_data;
|
||||
MetaRectangle modified_rect;
|
||||
gboolean modified;
|
||||
int new_left, new_right, new_top, new_bottom;
|
||||
|
||||
if (display->grab_edge_resistance_data == NULL)
|
||||
compute_resistance_and_snapping_edges (display);
|
||||
edge_data = g_hash_table_lookup (display->edge_resistance_info,
|
||||
window->screen);
|
||||
|
||||
edge_data = display->grab_edge_resistance_data;
|
||||
if (!edge_data)
|
||||
edge_data = compute_resistance_and_snapping_edges (display, window->screen);
|
||||
|
||||
if (auto_snap)
|
||||
{
|
||||
@@ -601,7 +606,7 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
|
||||
if (!is_resize || window->size_hints.width_inc == 1)
|
||||
{
|
||||
/* Now, apply the normal horizontal edge resistance */
|
||||
new_left = apply_edge_resistance (window,
|
||||
new_left = apply_edge_resistance (window, device,
|
||||
BOX_LEFT (*old_outer),
|
||||
BOX_LEFT (*new_outer),
|
||||
old_outer,
|
||||
@@ -611,7 +616,7 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
|
||||
timeout_func,
|
||||
TRUE,
|
||||
keyboard_op);
|
||||
new_right = apply_edge_resistance (window,
|
||||
new_right = apply_edge_resistance (window, device,
|
||||
BOX_RIGHT (*old_outer),
|
||||
BOX_RIGHT (*new_outer),
|
||||
old_outer,
|
||||
@@ -630,7 +635,7 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
|
||||
/* Same for vertical resizes... */
|
||||
if (!is_resize || window->size_hints.height_inc == 1)
|
||||
{
|
||||
new_top = apply_edge_resistance (window,
|
||||
new_top = apply_edge_resistance (window, device,
|
||||
BOX_TOP (*old_outer),
|
||||
BOX_TOP (*new_outer),
|
||||
old_outer,
|
||||
@@ -640,7 +645,7 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
|
||||
timeout_func,
|
||||
FALSE,
|
||||
keyboard_op);
|
||||
new_bottom = apply_edge_resistance (window,
|
||||
new_bottom = apply_edge_resistance (window, device,
|
||||
BOX_BOTTOM (*old_outer),
|
||||
BOX_BOTTOM (*new_outer),
|
||||
old_outer,
|
||||
@@ -669,15 +674,20 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_cleanup_edges (MetaDisplay *display)
|
||||
meta_display_cleanup_edges (MetaDisplay *display,
|
||||
MetaScreen *screen)
|
||||
{
|
||||
guint i,j;
|
||||
MetaEdgeResistanceData *edge_data = display->grab_edge_resistance_data;
|
||||
MetaEdgeResistanceData *edge_data;
|
||||
GHashTable *edges_to_be_freed;
|
||||
|
||||
edge_data = g_hash_table_lookup (display->edge_resistance_info, screen);
|
||||
|
||||
if (edge_data == NULL) /* Not currently cached */
|
||||
return;
|
||||
|
||||
g_hash_table_steal (display->edge_resistance_info, screen);
|
||||
|
||||
/* We first need to clean out any window edges */
|
||||
edges_to_be_freed = g_hash_table_new_full (g_direct_hash, g_direct_equal,
|
||||
g_free, NULL);
|
||||
@@ -750,8 +760,7 @@ meta_display_cleanup_edges (MetaDisplay *display)
|
||||
edge_data->bottom_data.timeout_id != 0)
|
||||
g_source_remove (edge_data->bottom_data.timeout_id);
|
||||
|
||||
g_free (display->grab_edge_resistance_data);
|
||||
display->grab_edge_resistance_data = NULL;
|
||||
g_free (edge_data);
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -763,8 +772,9 @@ stupid_sort_requiring_extra_pointer_dereference (gconstpointer a,
|
||||
return meta_rectangle_edge_cmp_ignore_type (*a_edge, *b_edge);
|
||||
}
|
||||
|
||||
static void
|
||||
static MetaEdgeResistanceData *
|
||||
cache_edges (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
GList *window_edges,
|
||||
GList *monitor_edges,
|
||||
GList *screen_edges)
|
||||
@@ -848,9 +858,8 @@ cache_edges (MetaDisplay *display,
|
||||
/*
|
||||
* 2nd: Allocate the edges
|
||||
*/
|
||||
g_assert (display->grab_edge_resistance_data == NULL);
|
||||
display->grab_edge_resistance_data = g_new0 (MetaEdgeResistanceData, 1);
|
||||
edge_data = display->grab_edge_resistance_data;
|
||||
edge_data = g_new0 (MetaEdgeResistanceData, 1);
|
||||
|
||||
edge_data->left_edges = g_array_sized_new (FALSE,
|
||||
FALSE,
|
||||
sizeof(MetaEdge*),
|
||||
@@ -917,21 +926,21 @@ cache_edges (MetaDisplay *display,
|
||||
* avoided this sort by sticking them into the array with some simple
|
||||
* merging of the lists).
|
||||
*/
|
||||
g_array_sort (display->grab_edge_resistance_data->left_edges,
|
||||
g_array_sort (edge_data->left_edges,
|
||||
stupid_sort_requiring_extra_pointer_dereference);
|
||||
g_array_sort (display->grab_edge_resistance_data->right_edges,
|
||||
g_array_sort (edge_data->right_edges,
|
||||
stupid_sort_requiring_extra_pointer_dereference);
|
||||
g_array_sort (display->grab_edge_resistance_data->top_edges,
|
||||
g_array_sort (edge_data->top_edges,
|
||||
stupid_sort_requiring_extra_pointer_dereference);
|
||||
g_array_sort (display->grab_edge_resistance_data->bottom_edges,
|
||||
g_array_sort (edge_data->bottom_edges,
|
||||
stupid_sort_requiring_extra_pointer_dereference);
|
||||
|
||||
return edge_data;
|
||||
}
|
||||
|
||||
static void
|
||||
initialize_grab_edge_resistance_data (MetaDisplay *display)
|
||||
initialize_grab_edge_resistance_data (MetaEdgeResistanceData *edge_data)
|
||||
{
|
||||
MetaEdgeResistanceData *edge_data = display->grab_edge_resistance_data;
|
||||
|
||||
edge_data->left_data.timeout_setup = FALSE;
|
||||
edge_data->right_data.timeout_setup = FALSE;
|
||||
edge_data->top_data.timeout_setup = FALSE;
|
||||
@@ -943,8 +952,9 @@ initialize_grab_edge_resistance_data (MetaDisplay *display)
|
||||
edge_data->bottom_data.keyboard_buildup = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
compute_resistance_and_snapping_edges (MetaDisplay *display)
|
||||
static MetaEdgeResistanceData *
|
||||
compute_resistance_and_snapping_edges (MetaDisplay *display,
|
||||
MetaScreen *screen)
|
||||
{
|
||||
GList *stacked_windows;
|
||||
GList *cur_window_iter;
|
||||
@@ -956,18 +966,17 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
|
||||
* in the layer that we are working on
|
||||
*/
|
||||
GSList *rem_windows, *rem_win_stacking;
|
||||
MetaEdgeResistanceData *edge_data;
|
||||
|
||||
g_assert (display->grab_window != NULL);
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Computing edges to resist-movement or snap-to for %s.\n",
|
||||
display->grab_window->desc);
|
||||
"Computing edges to resist-movement or snap-to for screen %s.\n",
|
||||
screen->screen_name);
|
||||
|
||||
/*
|
||||
* 1st: Get the list of relevant windows, from bottom to top
|
||||
*/
|
||||
stacked_windows =
|
||||
meta_stack_list_windows (display->grab_screen->stack,
|
||||
display->grab_screen->active_workspace);
|
||||
meta_stack_list_windows (screen->stack, screen->active_workspace);
|
||||
|
||||
/*
|
||||
* 2nd: we need to separate that stacked list into a list of windows that
|
||||
@@ -981,7 +990,7 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
|
||||
while (cur_window_iter != NULL)
|
||||
{
|
||||
MetaWindow *cur_window = cur_window_iter->data;
|
||||
if (WINDOW_EDGES_RELEVANT (cur_window, display))
|
||||
if (WINDOW_EDGES_RELEVANT (cur_window, display, screen))
|
||||
{
|
||||
MetaRectangle *new_rect;
|
||||
new_rect = g_new (MetaRectangle, 1);
|
||||
@@ -1016,7 +1025,7 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
|
||||
* resistance (note that dock edges are considered screen edges
|
||||
* which are handled separately
|
||||
*/
|
||||
if (WINDOW_EDGES_RELEVANT (cur_window, display) &&
|
||||
if (WINDOW_EDGES_RELEVANT (cur_window, display, screen) &&
|
||||
cur_window->type != META_WINDOW_DOCK)
|
||||
{
|
||||
GList *new_edges;
|
||||
@@ -1028,7 +1037,7 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
|
||||
* by other windows or DOCKS, but that's handled below).
|
||||
*/
|
||||
meta_rectangle_intersect (&cur_rect,
|
||||
&display->grab_screen->rect,
|
||||
&screen->rect,
|
||||
&reduced);
|
||||
|
||||
new_edges = NULL;
|
||||
@@ -1123,32 +1132,36 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
|
||||
* monitor edges in an array for quick access. Free the edges since
|
||||
* they've been cached elsewhere.
|
||||
*/
|
||||
cache_edges (display,
|
||||
edges,
|
||||
display->grab_screen->active_workspace->monitor_edges,
|
||||
display->grab_screen->active_workspace->screen_edges);
|
||||
edge_data = cache_edges (display, screen,
|
||||
edges,
|
||||
screen->active_workspace->monitor_edges,
|
||||
screen->active_workspace->screen_edges);
|
||||
g_list_free (edges);
|
||||
|
||||
/*
|
||||
* 6th: Initialize the resistance timeouts and buildups
|
||||
*/
|
||||
initialize_grab_edge_resistance_data (display);
|
||||
initialize_grab_edge_resistance_data (edge_data);
|
||||
|
||||
return edge_data;
|
||||
}
|
||||
|
||||
/* Note that old_[xy] and new_[xy] are with respect to inner positions of
|
||||
* the window.
|
||||
*/
|
||||
void
|
||||
meta_window_edge_resistance_for_move (MetaWindow *window,
|
||||
int old_x,
|
||||
int old_y,
|
||||
int *new_x,
|
||||
int *new_y,
|
||||
GSourceFunc timeout_func,
|
||||
gboolean snap,
|
||||
gboolean is_keyboard_op)
|
||||
meta_window_edge_resistance_for_move (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
int old_x,
|
||||
int old_y,
|
||||
int *new_x,
|
||||
int *new_y,
|
||||
MetaEdgeResistanceFunc timeout_func,
|
||||
gboolean snap,
|
||||
gboolean is_keyboard_op)
|
||||
{
|
||||
MetaRectangle old_outer, proposed_outer, new_outer;
|
||||
MetaGrabInfo *grab_info;
|
||||
gboolean is_resize;
|
||||
|
||||
meta_window_get_outer_rect (window, &old_outer);
|
||||
@@ -1158,10 +1171,14 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
|
||||
proposed_outer.y += (*new_y - old_y);
|
||||
new_outer = proposed_outer;
|
||||
|
||||
window->display->grab_last_user_action_was_snap = snap;
|
||||
grab_info = meta_display_get_grab_info (window->display, device);
|
||||
g_assert (grab_info != NULL);
|
||||
|
||||
grab_info->grab_last_user_action_was_snap = snap;
|
||||
is_resize = FALSE;
|
||||
if (apply_edge_resistance_to_each_side (window->display,
|
||||
window,
|
||||
device,
|
||||
&old_outer,
|
||||
&new_outer,
|
||||
timeout_func,
|
||||
@@ -1223,18 +1240,20 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
|
||||
* sizes of the inner window.
|
||||
*/
|
||||
void
|
||||
meta_window_edge_resistance_for_resize (MetaWindow *window,
|
||||
int old_width,
|
||||
int old_height,
|
||||
int *new_width,
|
||||
int *new_height,
|
||||
int gravity,
|
||||
GSourceFunc timeout_func,
|
||||
gboolean snap,
|
||||
gboolean is_keyboard_op)
|
||||
meta_window_edge_resistance_for_resize (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
int old_width,
|
||||
int old_height,
|
||||
int *new_width,
|
||||
int *new_height,
|
||||
int gravity,
|
||||
MetaEdgeResistanceFunc timeout_func,
|
||||
gboolean snap,
|
||||
gboolean is_keyboard_op)
|
||||
{
|
||||
MetaRectangle old_outer, new_outer;
|
||||
int proposed_outer_width, proposed_outer_height;
|
||||
MetaGrabInfo *grab_info;
|
||||
gboolean is_resize;
|
||||
|
||||
meta_window_get_outer_rect (window, &old_outer);
|
||||
@@ -1246,10 +1265,14 @@ meta_window_edge_resistance_for_resize (MetaWindow *window,
|
||||
proposed_outer_width,
|
||||
proposed_outer_height);
|
||||
|
||||
window->display->grab_last_user_action_was_snap = snap;
|
||||
grab_info = meta_display_get_grab_info (window->display, device);
|
||||
g_assert (grab_info != NULL);
|
||||
|
||||
grab_info->grab_last_user_action_was_snap = snap;
|
||||
is_resize = TRUE;
|
||||
if (apply_edge_resistance_to_each_side (window->display,
|
||||
window,
|
||||
device,
|
||||
&old_outer,
|
||||
&new_outer,
|
||||
timeout_func,
|
||||
|
||||
@@ -26,23 +26,28 @@
|
||||
|
||||
#include "window-private.h"
|
||||
|
||||
void meta_window_edge_resistance_for_move (MetaWindow *window,
|
||||
int old_x,
|
||||
int old_y,
|
||||
int *new_x,
|
||||
int *new_y,
|
||||
GSourceFunc timeout_func,
|
||||
gboolean snap,
|
||||
gboolean is_keyboard_op);
|
||||
void meta_window_edge_resistance_for_resize (MetaWindow *window,
|
||||
int old_width,
|
||||
int old_height,
|
||||
int *new_width,
|
||||
int *new_height,
|
||||
int gravity,
|
||||
GSourceFunc timeout_func,
|
||||
gboolean snap,
|
||||
gboolean is_keyboard_op);
|
||||
typedef gboolean (* MetaEdgeResistanceFunc) (MetaWindow *window,
|
||||
MetaDevice *device);
|
||||
|
||||
void meta_window_edge_resistance_for_move (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
int old_x,
|
||||
int old_y,
|
||||
int *new_x,
|
||||
int *new_y,
|
||||
MetaEdgeResistanceFunc func,
|
||||
gboolean snap,
|
||||
gboolean is_keyboard_op);
|
||||
void meta_window_edge_resistance_for_resize (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
int old_width,
|
||||
int old_height,
|
||||
int *new_width,
|
||||
int *new_height,
|
||||
int gravity,
|
||||
MetaEdgeResistanceFunc func,
|
||||
gboolean snap,
|
||||
gboolean is_keyboard_op);
|
||||
|
||||
#endif /* META_EDGE_RESISTANCE_H */
|
||||
|
||||
|
||||
122
src/core/frame.c
122
src/core/frame.c
@@ -28,6 +28,7 @@
|
||||
#include "bell.h"
|
||||
#include <meta/errors.h>
|
||||
#include "keybindings-private.h"
|
||||
#include "device-pointer.h"
|
||||
|
||||
#include <X11/extensions/Xrender.h>
|
||||
|
||||
@@ -64,9 +65,10 @@ meta_window_ensure_frame (MetaWindow *window)
|
||||
frame->child_y = 0;
|
||||
frame->bottom_height = 0;
|
||||
frame->right_width = 0;
|
||||
frame->current_cursor = 0;
|
||||
frame->cursors = g_hash_table_new (NULL, NULL);
|
||||
|
||||
frame->mapped = FALSE;
|
||||
frame->need_reapply_frame_shape = TRUE;
|
||||
frame->is_flashing = FALSE;
|
||||
|
||||
meta_verbose ("Framing window %s: visual %s default, depth %d default depth %d\n",
|
||||
@@ -166,6 +168,14 @@ meta_window_ensure_frame (MetaWindow *window)
|
||||
/* Move keybindings to frame instead of window */
|
||||
meta_window_grab_keys (window);
|
||||
|
||||
/* Shape mask */
|
||||
meta_ui_apply_frame_shape (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
frame->rect.width,
|
||||
frame->rect.height,
|
||||
frame->window->has_shape);
|
||||
frame->need_reapply_frame_shape = FALSE;
|
||||
|
||||
meta_display_ungrab (window->display);
|
||||
}
|
||||
|
||||
@@ -220,9 +230,10 @@ meta_window_destroy_frame (MetaWindow *window)
|
||||
|
||||
/* Move keybindings to window instead of frame */
|
||||
meta_window_grab_keys (window);
|
||||
|
||||
|
||||
g_hash_table_destroy (frame->cursors);
|
||||
g_free (frame);
|
||||
|
||||
|
||||
/* Put our state back where it should be */
|
||||
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
|
||||
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
|
||||
@@ -236,6 +247,12 @@ meta_frame_get_flags (MetaFrame *frame)
|
||||
|
||||
flags = 0;
|
||||
|
||||
/* Disallow frame operations
|
||||
* while the popup menu is open.
|
||||
*/
|
||||
if (frame->window->menu)
|
||||
return flags;
|
||||
|
||||
if (frame->window->border_only)
|
||||
{
|
||||
; /* FIXME this may disable the _function_ as well as decor
|
||||
@@ -302,34 +319,40 @@ meta_frame_get_flags (MetaFrame *frame)
|
||||
}
|
||||
|
||||
void
|
||||
meta_frame_borders_clear (MetaFrameBorders *self)
|
||||
meta_frame_calc_geometry (MetaFrame *frame,
|
||||
MetaFrameGeometry *geomp)
|
||||
{
|
||||
self->visible.top = self->invisible.top = self->total.top = 0;
|
||||
self->visible.bottom = self->invisible.bottom = self->total.bottom = 0;
|
||||
self->visible.left = self->invisible.left = self->total.left = 0;
|
||||
self->visible.right = self->invisible.right = self->total.right = 0;
|
||||
MetaFrameGeometry geom;
|
||||
MetaWindow *window;
|
||||
|
||||
window = frame->window;
|
||||
|
||||
meta_ui_get_frame_geometry (window->screen->ui,
|
||||
frame->xwindow,
|
||||
&geom.top_height,
|
||||
&geom.bottom_height,
|
||||
&geom.left_width,
|
||||
&geom.right_width);
|
||||
|
||||
*geomp = geom;
|
||||
}
|
||||
|
||||
void
|
||||
meta_frame_calc_borders (MetaFrame *frame,
|
||||
MetaFrameBorders *borders)
|
||||
static gboolean
|
||||
update_shape (MetaFrame *frame)
|
||||
{
|
||||
meta_ui_get_frame_borders (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
borders);
|
||||
}
|
||||
if (frame->need_reapply_frame_shape)
|
||||
{
|
||||
meta_ui_apply_frame_shape (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
frame->rect.width,
|
||||
frame->rect.height,
|
||||
frame->window->has_shape);
|
||||
frame->need_reapply_frame_shape = FALSE;
|
||||
|
||||
void
|
||||
meta_frame_get_corner_radiuses (MetaFrame *frame,
|
||||
float *top_left,
|
||||
float *top_right,
|
||||
float *bottom_left,
|
||||
float *bottom_right)
|
||||
{
|
||||
meta_ui_get_corner_radiuses (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
top_left, top_right,
|
||||
bottom_left, bottom_right);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
@@ -338,6 +361,11 @@ meta_frame_sync_to_window (MetaFrame *frame,
|
||||
gboolean need_move,
|
||||
gboolean need_resize)
|
||||
{
|
||||
if (!(need_move || need_resize))
|
||||
{
|
||||
return update_shape (frame);
|
||||
}
|
||||
|
||||
meta_topic (META_DEBUG_GEOMETRY,
|
||||
"Syncing frame geometry %d,%d %dx%d (SE: %d,%d)\n",
|
||||
frame->rect.x, frame->rect.y,
|
||||
@@ -352,8 +380,19 @@ meta_frame_sync_to_window (MetaFrame *frame,
|
||||
frame->xwindow,
|
||||
frame->rect.width,
|
||||
frame->rect.height);
|
||||
|
||||
/* we need new shape if we're resized */
|
||||
frame->need_reapply_frame_shape = TRUE;
|
||||
}
|
||||
|
||||
/* Done before the window resize, because doing it before means
|
||||
* part of the window being resized becomes unshaped, which may
|
||||
* be sort of hard to see with bg = None. If we did it after
|
||||
* window resize, part of the window being resized would become
|
||||
* shaped, which might be more visible.
|
||||
*/
|
||||
update_shape (frame);
|
||||
|
||||
meta_ui_move_resize_frame (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
frame->rect.x,
|
||||
@@ -369,8 +408,7 @@ meta_frame_sync_to_window (MetaFrame *frame,
|
||||
/* If we're interactively resizing the frame, repaint
|
||||
* it immediately so we don't start to lag.
|
||||
*/
|
||||
if (frame->window->display->grab_window ==
|
||||
frame->window)
|
||||
if (frame->window->cur_grab != NULL)
|
||||
meta_ui_repaint_frame (frame->window->screen->ui,
|
||||
frame->xwindow);
|
||||
}
|
||||
@@ -395,22 +433,22 @@ meta_frame_queue_draw (MetaFrame *frame)
|
||||
}
|
||||
|
||||
void
|
||||
meta_frame_set_screen_cursor (MetaFrame *frame,
|
||||
MetaCursor cursor)
|
||||
meta_frame_set_screen_cursor (MetaFrame *frame,
|
||||
MetaDevice *pointer,
|
||||
MetaCursor cursor)
|
||||
{
|
||||
Cursor xcursor;
|
||||
if (cursor == frame->current_cursor)
|
||||
MetaCursor old_cursor;
|
||||
|
||||
old_cursor = GPOINTER_TO_UINT (g_hash_table_lookup (frame->cursors, pointer));
|
||||
|
||||
if (cursor == old_cursor)
|
||||
return;
|
||||
frame->current_cursor = cursor;
|
||||
if (cursor == META_CURSOR_DEFAULT)
|
||||
XUndefineCursor (frame->window->display->xdisplay, frame->xwindow);
|
||||
else
|
||||
{
|
||||
xcursor = meta_display_create_x_cursor (frame->window->display, cursor);
|
||||
XDefineCursor (frame->window->display->xdisplay, frame->xwindow, xcursor);
|
||||
XFlush (frame->window->display->xdisplay);
|
||||
XFreeCursor (frame->window->display->xdisplay, xcursor);
|
||||
}
|
||||
|
||||
g_hash_table_insert (frame->cursors, pointer,
|
||||
GUINT_TO_POINTER (cursor));
|
||||
meta_device_pointer_set_window_cursor (META_DEVICE_POINTER (pointer),
|
||||
frame->xwindow, cursor);
|
||||
XFlush (frame->window->display->xdisplay);
|
||||
}
|
||||
|
||||
Window
|
||||
|
||||
@@ -26,6 +26,17 @@
|
||||
|
||||
#include "window-private.h"
|
||||
|
||||
typedef struct _MetaFrameGeometry MetaFrameGeometry;
|
||||
|
||||
struct _MetaFrameGeometry
|
||||
{
|
||||
/* border sizes (space between frame and child) */
|
||||
int left_width;
|
||||
int right_width;
|
||||
int top_height;
|
||||
int bottom_height;
|
||||
};
|
||||
|
||||
struct _MetaFrame
|
||||
{
|
||||
/* window we frame */
|
||||
@@ -34,7 +45,7 @@ struct _MetaFrame
|
||||
/* reparent window */
|
||||
Window xwindow;
|
||||
|
||||
MetaCursor current_cursor;
|
||||
GHashTable *cursors;
|
||||
|
||||
/* This rect is trusted info from where we put the
|
||||
* frame, not the result of ConfigureNotify
|
||||
@@ -60,15 +71,8 @@ MetaFrameFlags meta_frame_get_flags (MetaFrame *frame);
|
||||
Window meta_frame_get_xwindow (MetaFrame *frame);
|
||||
|
||||
/* These should ONLY be called from meta_window_move_resize_internal */
|
||||
void meta_frame_calc_borders (MetaFrame *frame,
|
||||
MetaFrameBorders *borders);
|
||||
|
||||
void meta_frame_get_corner_radiuses (MetaFrame *frame,
|
||||
float *top_left,
|
||||
float *top_right,
|
||||
float *bottom_left,
|
||||
float *bottom_right);
|
||||
|
||||
void meta_frame_calc_geometry (MetaFrame *frame,
|
||||
MetaFrameGeometry *geomp);
|
||||
gboolean meta_frame_sync_to_window (MetaFrame *frame,
|
||||
int gravity,
|
||||
gboolean need_move,
|
||||
@@ -76,7 +80,8 @@ gboolean meta_frame_sync_to_window (MetaFrame *frame,
|
||||
|
||||
cairo_region_t *meta_frame_get_frame_bounds (MetaFrame *frame);
|
||||
|
||||
void meta_frame_set_screen_cursor (MetaFrame *frame,
|
||||
void meta_frame_set_screen_cursor (MetaFrame *frame,
|
||||
MetaDevice *pointer,
|
||||
MetaCursor cursor);
|
||||
|
||||
#endif
|
||||
|
||||
677
src/core/input-events.c
Normal file
677
src/core/input-events.c
Normal file
@@ -0,0 +1,677 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* XEvent utility methods */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include "input-events.h"
|
||||
#include "devices-core.h"
|
||||
#include "device-map-private.h"
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
#include <X11/extensions/XInput2.h>
|
||||
#endif
|
||||
|
||||
/* Quite a hack: normalizes XI2 events to their
|
||||
* core event equivalent, so most code is shared
|
||||
* for both implementations, code handling input
|
||||
* events should use the helper functions so
|
||||
* the actual event is treated correctly.
|
||||
*/
|
||||
gboolean
|
||||
meta_input_event_get_type (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *ev_type)
|
||||
{
|
||||
guint type = 0; /* Silence gcc */
|
||||
gboolean retval = TRUE;
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (display->have_xinput2 &&
|
||||
ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
/* NB: GDK event filters already have generic events
|
||||
* allocated, so no need to do XGetEventData() on our own
|
||||
*/
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
switch (xev->evtype)
|
||||
{
|
||||
case XI_Motion:
|
||||
type = MotionNotify;
|
||||
break;
|
||||
case XI_ButtonPress:
|
||||
type = ButtonPress;
|
||||
break;
|
||||
case XI_ButtonRelease:
|
||||
type = ButtonRelease;
|
||||
break;
|
||||
case XI_KeyPress:
|
||||
type = KeyPress;
|
||||
break;
|
||||
case XI_KeyRelease:
|
||||
type = KeyRelease;
|
||||
break;
|
||||
case XI_FocusIn:
|
||||
type = FocusIn;
|
||||
break;
|
||||
case XI_FocusOut:
|
||||
type = FocusOut;
|
||||
break;
|
||||
case XI_Enter:
|
||||
type = EnterNotify;
|
||||
break;
|
||||
case XI_Leave:
|
||||
type = LeaveNotify;
|
||||
break;
|
||||
default:
|
||||
retval = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
{
|
||||
switch (ev->type)
|
||||
{
|
||||
case MotionNotify:
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
case FocusIn:
|
||||
case FocusOut:
|
||||
case EnterNotify:
|
||||
case LeaveNotify:
|
||||
type = ev->type;
|
||||
break;
|
||||
default:
|
||||
retval = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (retval)
|
||||
{
|
||||
if (ev_type)
|
||||
*ev_type = type;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_input_event_is_type (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint ev_type)
|
||||
{
|
||||
guint type;
|
||||
|
||||
if (!meta_input_event_get_type (display, ev, &type))
|
||||
return FALSE;
|
||||
|
||||
return (type == ev_type);
|
||||
}
|
||||
|
||||
Window
|
||||
meta_input_event_get_window (MetaDisplay *display,
|
||||
XEvent *ev)
|
||||
{
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
/* GDK event filters already have generic events allocated */
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
switch (xev->evtype)
|
||||
{
|
||||
case XI_Motion:
|
||||
case XI_ButtonPress:
|
||||
case XI_ButtonRelease:
|
||||
case XI_KeyPress:
|
||||
case XI_KeyRelease:
|
||||
return ((XIDeviceEvent *) xev)->event;
|
||||
case XI_FocusIn:
|
||||
case XI_FocusOut:
|
||||
case XI_Enter:
|
||||
case XI_Leave:
|
||||
return ((XIEnterEvent *) xev)->event;
|
||||
default:
|
||||
return None;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
return ev->xany.window;
|
||||
}
|
||||
|
||||
Window
|
||||
meta_input_event_get_root_window (MetaDisplay *display,
|
||||
XEvent *ev)
|
||||
{
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
switch (xev->evtype)
|
||||
{
|
||||
case XI_Motion:
|
||||
case XI_ButtonPress:
|
||||
case XI_ButtonRelease:
|
||||
case XI_KeyPress:
|
||||
case XI_KeyRelease:
|
||||
return ((XIDeviceEvent *) xev)->root;
|
||||
case XI_FocusIn:
|
||||
case XI_FocusOut:
|
||||
case XI_Enter:
|
||||
case XI_Leave:
|
||||
return ((XIEnterEvent *) xev)->root;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
{
|
||||
switch (ev->type)
|
||||
{
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
return ev->xkey.root;
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
return ev->xbutton.root;
|
||||
case EnterNotify:
|
||||
case LeaveNotify:
|
||||
return ev->xcrossing.root;
|
||||
case MotionNotify:
|
||||
return ev->xbutton.root;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return None;
|
||||
}
|
||||
|
||||
Time
|
||||
meta_input_event_get_time (MetaDisplay *display,
|
||||
XEvent *ev)
|
||||
{
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
switch (xev->evtype)
|
||||
{
|
||||
case XI_Motion:
|
||||
case XI_ButtonPress:
|
||||
case XI_ButtonRelease:
|
||||
case XI_KeyPress:
|
||||
case XI_KeyRelease:
|
||||
return ((XIDeviceEvent *) xev)->time;
|
||||
case XI_FocusIn:
|
||||
case XI_FocusOut:
|
||||
case XI_Enter:
|
||||
case XI_Leave:
|
||||
return ((XIEnterEvent *) xev)->time;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
{
|
||||
switch (ev->type)
|
||||
{
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
return ev->xkey.time;
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
return ev->xbutton.time;
|
||||
case EnterNotify:
|
||||
case LeaveNotify:
|
||||
return ev->xcrossing.time;
|
||||
case MotionNotify:
|
||||
return ev->xmotion.time;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return CurrentTime;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_input_event_get_coordinates (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
gdouble *x_ret,
|
||||
gdouble *y_ret,
|
||||
gdouble *x_root_ret,
|
||||
gdouble *y_root_ret)
|
||||
{
|
||||
gdouble x, y, x_root, y_root;
|
||||
gboolean retval = TRUE;
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
switch (xev->evtype)
|
||||
{
|
||||
case XI_Motion:
|
||||
case XI_ButtonPress:
|
||||
case XI_ButtonRelease:
|
||||
case XI_KeyPress:
|
||||
case XI_KeyRelease:
|
||||
{
|
||||
XIDeviceEvent *event = (XIDeviceEvent *) xev;
|
||||
|
||||
x = event->event_x;
|
||||
y = event->event_y;
|
||||
x_root = event->root_x;
|
||||
y_root = event->root_y;
|
||||
}
|
||||
|
||||
break;
|
||||
case XI_FocusIn:
|
||||
case XI_FocusOut:
|
||||
case XI_Enter:
|
||||
case XI_Leave:
|
||||
{
|
||||
XIEnterEvent *event = (XIEnterEvent *) xev;
|
||||
|
||||
x = event->event_x;
|
||||
y = event->event_y;
|
||||
x_root = event->root_x;
|
||||
y_root = event->root_y;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
retval = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
{
|
||||
switch (ev->type)
|
||||
{
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
x = ev->xkey.x;
|
||||
y = ev->xkey.y;
|
||||
x_root = ev->xkey.x_root;
|
||||
y_root = ev->xkey.y_root;
|
||||
break;
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
x = ev->xbutton.x;
|
||||
y = ev->xbutton.y;
|
||||
x_root = ev->xbutton.x_root;
|
||||
y_root = ev->xbutton.y_root;
|
||||
break;
|
||||
case EnterNotify:
|
||||
case LeaveNotify:
|
||||
x = ev->xcrossing.x;
|
||||
y = ev->xcrossing.y;
|
||||
x_root = ev->xcrossing.x_root;
|
||||
y_root = ev->xcrossing.y_root;
|
||||
break;
|
||||
case MotionNotify:
|
||||
x = ev->xmotion.x;
|
||||
y = ev->xmotion.y;
|
||||
x_root = ev->xmotion.x_root;
|
||||
y_root = ev->xmotion.y_root;
|
||||
break;
|
||||
default:
|
||||
retval = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (retval)
|
||||
{
|
||||
if (x_ret)
|
||||
*x_ret = x;
|
||||
|
||||
if (y_ret)
|
||||
*y_ret = y;
|
||||
|
||||
if (x_root_ret)
|
||||
*x_root_ret = x_root;
|
||||
|
||||
if (y_root_ret)
|
||||
*y_root_ret = y_root;
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_input_event_get_state (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *state)
|
||||
{
|
||||
gboolean retval = TRUE;
|
||||
guint s;
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
switch (xev->evtype)
|
||||
{
|
||||
case XI_Motion:
|
||||
case XI_ButtonPress:
|
||||
case XI_ButtonRelease:
|
||||
case XI_KeyPress:
|
||||
case XI_KeyRelease:
|
||||
s = ((XIDeviceEvent *) xev)->mods.effective;
|
||||
break;
|
||||
case XI_FocusIn:
|
||||
case XI_FocusOut:
|
||||
case XI_Enter:
|
||||
case XI_Leave:
|
||||
s = ((XIDeviceEvent *) xev)->mods.effective;
|
||||
break;
|
||||
default:
|
||||
retval = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
{
|
||||
switch (ev->type)
|
||||
{
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
s = ev->xkey.state;
|
||||
break;
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
s = ev->xbutton.state;
|
||||
break;
|
||||
case EnterNotify:
|
||||
case LeaveNotify:
|
||||
s = ev->xcrossing.state;
|
||||
break;
|
||||
case MotionNotify:
|
||||
s = ev->xmotion.state;
|
||||
break;
|
||||
default:
|
||||
retval = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (retval && state)
|
||||
*state = s;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_input_event_get_keycode (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *keycode)
|
||||
{
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
if (xev->evtype == XI_KeyPress ||
|
||||
xev->evtype == XI_KeyRelease)
|
||||
{
|
||||
if (keycode)
|
||||
{
|
||||
/* The detail field contains keycode for key events */
|
||||
*keycode = ((XIDeviceEvent *) xev)->detail;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
{
|
||||
if (ev->type == KeyPress ||
|
||||
ev->type == KeyRelease)
|
||||
{
|
||||
if (keycode)
|
||||
*keycode = ev->xkey.keycode;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_input_event_get_button (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *button)
|
||||
{
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
if (xev->evtype == XI_ButtonPress ||
|
||||
xev->evtype == XI_ButtonRelease)
|
||||
{
|
||||
if (button)
|
||||
{
|
||||
/* The detail field contains
|
||||
* button number for button events
|
||||
*/
|
||||
*button = ((XIDeviceEvent *) xev)->detail;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
{
|
||||
if (ev->type == ButtonPress ||
|
||||
ev->type == ButtonRelease)
|
||||
{
|
||||
if (button)
|
||||
*button = ev->xbutton.button;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* NB: Also works for focus in/out events */
|
||||
gboolean
|
||||
meta_input_event_get_crossing_details (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *mode_out,
|
||||
guint *detail_out)
|
||||
{
|
||||
gboolean retval = TRUE;
|
||||
guint mode, detail;
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
if (xev->evtype == XI_Enter ||
|
||||
xev->evtype == XI_Leave ||
|
||||
xev->evtype == XI_FocusIn ||
|
||||
xev->evtype == XI_FocusOut)
|
||||
{
|
||||
mode = ((XIEnterEvent *) xev)->mode;
|
||||
detail = ((XIEnterEvent *) xev)->detail;
|
||||
}
|
||||
else
|
||||
retval = FALSE;
|
||||
}
|
||||
else
|
||||
#endif /* HAVE_XINPUT2 */
|
||||
{
|
||||
if (ev->type == EnterNotify ||
|
||||
ev->type == LeaveNotify)
|
||||
{
|
||||
mode = ev->xcrossing.mode;
|
||||
detail = ev->xcrossing.detail;
|
||||
}
|
||||
else if (ev->type == FocusIn ||
|
||||
ev->type == FocusOut)
|
||||
{
|
||||
mode = ev->xfocus.mode;
|
||||
detail = ev->xfocus.detail;
|
||||
}
|
||||
else
|
||||
retval = FALSE;
|
||||
}
|
||||
|
||||
if (retval)
|
||||
{
|
||||
if (mode_out)
|
||||
*mode_out = mode;
|
||||
|
||||
if (detail_out)
|
||||
*detail_out = detail;
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
MetaDevice *
|
||||
meta_input_event_get_device (MetaDisplay *display,
|
||||
XEvent *ev)
|
||||
{
|
||||
guint evtype;
|
||||
|
||||
if (!meta_input_event_get_type (display, ev, &evtype))
|
||||
return NULL;
|
||||
|
||||
#ifdef HAVE_XINPUT2
|
||||
if (ev->type == GenericEvent &&
|
||||
ev->xcookie.extension == display->xinput2_opcode)
|
||||
{
|
||||
XIEvent *xev;
|
||||
|
||||
g_assert (display->have_xinput2 == TRUE);
|
||||
|
||||
xev = (XIEvent *) ev->xcookie.data;
|
||||
|
||||
switch (evtype)
|
||||
{
|
||||
case XI_Motion:
|
||||
case XI_ButtonPress:
|
||||
case XI_ButtonRelease:
|
||||
case XI_KeyPress:
|
||||
case XI_KeyRelease:
|
||||
return meta_device_map_lookup (display->device_map,
|
||||
((XIDeviceEvent *) xev)->deviceid);
|
||||
case XI_FocusIn:
|
||||
case XI_FocusOut:
|
||||
case XI_Enter:
|
||||
case XI_Leave:
|
||||
return meta_device_map_lookup (display->device_map,
|
||||
((XIEnterEvent *) xev)->deviceid);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
switch (ev->type)
|
||||
{
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
case FocusIn:
|
||||
case FocusOut:
|
||||
return meta_device_map_lookup (display->device_map,
|
||||
META_CORE_KEYBOARD_ID);
|
||||
default:
|
||||
/* All other events are pointers' */
|
||||
return meta_device_map_lookup (display->device_map,
|
||||
META_CORE_POINTER_ID);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
78
src/core/input-events.h
Normal file
78
src/core/input-events.h
Normal file
@@ -0,0 +1,78 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/**
|
||||
* \file event.h Utility functions for handling events
|
||||
*
|
||||
* Handling events.
|
||||
* This file contains helper methods to handle events, specially
|
||||
* input events, which can be either core or XInput2.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_EVENT_H
|
||||
#define META_EVENT_H
|
||||
|
||||
#include <config.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include "display-private.h"
|
||||
#include <meta/device-map.h>
|
||||
|
||||
gboolean meta_input_event_get_type (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *ev_type);
|
||||
gboolean meta_input_event_is_type (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint ev_type);
|
||||
|
||||
Window meta_input_event_get_window (MetaDisplay *display,
|
||||
XEvent *ev);
|
||||
Window meta_input_event_get_root_window (MetaDisplay *display,
|
||||
XEvent *ev);
|
||||
|
||||
Time meta_input_event_get_time (MetaDisplay *display,
|
||||
XEvent *ev);
|
||||
|
||||
gboolean meta_input_event_get_coordinates (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
gdouble *x_ret,
|
||||
gdouble *y_ret,
|
||||
gdouble *x_root_ret,
|
||||
gdouble *y_root_ret);
|
||||
|
||||
gboolean meta_input_event_get_state (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *state);
|
||||
gboolean meta_input_event_get_keycode (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *keycode);
|
||||
gboolean meta_input_event_get_button (MetaDisplay *display,
|
||||
XEvent *event,
|
||||
guint *button);
|
||||
gboolean meta_input_event_get_crossing_details (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *mode_out,
|
||||
guint *detail_out);
|
||||
|
||||
MetaDevice *meta_input_event_get_device (MetaDisplay *display,
|
||||
XEvent *ev);
|
||||
|
||||
|
||||
#endif /* META_EVENT_H */
|
||||
@@ -36,14 +36,18 @@ void meta_display_shutdown_keys (MetaDisplay *display);
|
||||
void meta_screen_grab_keys (MetaScreen *screen);
|
||||
void meta_screen_ungrab_keys (MetaScreen *screen);
|
||||
gboolean meta_screen_grab_all_keys (MetaScreen *screen,
|
||||
MetaDevice *device,
|
||||
guint32 timestamp);
|
||||
void meta_screen_ungrab_all_keys (MetaScreen *screen,
|
||||
void meta_screen_ungrab_all_keys (MetaScreen *screen,
|
||||
MetaDevice *device,
|
||||
guint32 timestamp);
|
||||
void meta_window_grab_keys (MetaWindow *window);
|
||||
void meta_window_ungrab_keys (MetaWindow *window);
|
||||
gboolean meta_window_grab_all_keys (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
guint32 timestamp);
|
||||
void meta_window_ungrab_all_keys (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
guint32 timestamp);
|
||||
gboolean meta_display_process_key_event (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -311,9 +311,12 @@ static GSourceFuncs event_funcs = {
|
||||
static void
|
||||
meta_clutter_init (void)
|
||||
{
|
||||
if (!meta_get_use_core_devices ())
|
||||
clutter_x11_enable_xinput ();
|
||||
|
||||
clutter_x11_set_display (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
|
||||
clutter_x11_disable_event_retrieval ();
|
||||
|
||||
|
||||
if (CLUTTER_INIT_SUCCESS == clutter_init (NULL, NULL))
|
||||
{
|
||||
GSource *source = g_source_new (&event_funcs, sizeof (GSource));
|
||||
@@ -424,6 +427,8 @@ meta_init (void)
|
||||
meta_set_verbose (TRUE);
|
||||
if (g_getenv ("MUTTER_DEBUG"))
|
||||
meta_set_debugging (TRUE);
|
||||
if (g_getenv ("MUTTER_USE_CORE_DEVICES"))
|
||||
meta_set_use_core_devices (TRUE);
|
||||
|
||||
if (g_get_home_dir ())
|
||||
if (chdir (g_get_home_dir ()) < 0)
|
||||
@@ -594,7 +599,6 @@ prefs_changed_callback (MetaPreference pref,
|
||||
switch (pref)
|
||||
{
|
||||
case META_PREF_THEME:
|
||||
case META_PREF_DRAGGABLE_BORDER_WIDTH:
|
||||
meta_ui_set_current_theme (meta_prefs_get_theme (), FALSE);
|
||||
meta_display_retheme_all ();
|
||||
break;
|
||||
|
||||
105
src/core/place.c
105
src/core/place.c
@@ -90,7 +90,8 @@ northwestcmp (gconstpointer a, gconstpointer b)
|
||||
|
||||
static void
|
||||
find_next_cascade (MetaWindow *window,
|
||||
MetaFrameBorders *borders,
|
||||
MetaDevice *pointer,
|
||||
MetaFrameGeometry *fgeom,
|
||||
/* visible windows on relevant workspaces */
|
||||
GList *windows,
|
||||
int x,
|
||||
@@ -120,10 +121,10 @@ find_next_cascade (MetaWindow *window,
|
||||
* manually cascade.
|
||||
*/
|
||||
#define CASCADE_FUZZ 15
|
||||
if (borders)
|
||||
if (fgeom)
|
||||
{
|
||||
x_threshold = MAX (borders->visible.left, CASCADE_FUZZ);
|
||||
y_threshold = MAX (borders->visible.top, CASCADE_FUZZ);
|
||||
x_threshold = MAX (fgeom->left_width, CASCADE_FUZZ);
|
||||
y_threshold = MAX (fgeom->top_height, CASCADE_FUZZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -136,7 +137,7 @@ find_next_cascade (MetaWindow *window,
|
||||
* of NW corner of window frame.
|
||||
*/
|
||||
|
||||
current = meta_screen_get_current_monitor (window->screen);
|
||||
current = meta_screen_get_current_monitor (window->screen, pointer);
|
||||
meta_window_get_work_area_for_monitor (window, current->number, &work_area);
|
||||
|
||||
cascade_x = MAX (0, work_area.x);
|
||||
@@ -224,21 +225,21 @@ find_next_cascade (MetaWindow *window,
|
||||
g_list_free (sorted);
|
||||
|
||||
/* Convert coords to position of window, not position of frame. */
|
||||
if (borders == NULL)
|
||||
if (fgeom == NULL)
|
||||
{
|
||||
*new_x = cascade_x;
|
||||
*new_y = cascade_y;
|
||||
}
|
||||
else
|
||||
{
|
||||
*new_x = cascade_x + borders->visible.left;
|
||||
*new_y = cascade_y + borders->visible.top;
|
||||
*new_x = cascade_x + fgeom->left_width;
|
||||
*new_y = cascade_y + fgeom->top_height;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
find_most_freespace (MetaWindow *window,
|
||||
MetaFrameBorders *borders,
|
||||
MetaFrameGeometry *fgeom,
|
||||
/* visible windows on relevant workspaces */
|
||||
MetaWindow *focus_window,
|
||||
int x,
|
||||
@@ -255,8 +256,8 @@ find_most_freespace (MetaWindow *window,
|
||||
MetaRectangle avoid;
|
||||
MetaRectangle outer;
|
||||
|
||||
frame_size_left = borders ? borders->visible.left : 0;
|
||||
frame_size_top = borders ? borders->visible.top : 0;
|
||||
frame_size_left = fgeom ? fgeom->left_width : 0;
|
||||
frame_size_top = fgeom ? fgeom->top_height : 0;
|
||||
|
||||
meta_window_get_work_area_current_monitor (focus_window, &work_area);
|
||||
meta_window_get_outer_rect (focus_window, &avoid);
|
||||
@@ -336,7 +337,7 @@ find_most_freespace (MetaWindow *window,
|
||||
|
||||
static void
|
||||
avoid_being_obscured_as_second_modal_dialog (MetaWindow *window,
|
||||
MetaFrameBorders *borders,
|
||||
MetaFrameGeometry *fgeom,
|
||||
int *x,
|
||||
int *y)
|
||||
{
|
||||
@@ -354,10 +355,17 @@ avoid_being_obscured_as_second_modal_dialog (MetaWindow *window,
|
||||
* know about the modal-to-the-main-window part.
|
||||
*/
|
||||
|
||||
MetaWindow *focus_window;
|
||||
MetaWindow *focus_window = NULL;
|
||||
MetaFocusInfo *focus_info;
|
||||
MetaRectangle overlap;
|
||||
MetaDevice *pointer, *keyboard;
|
||||
|
||||
focus_window = window->display->focus_window;
|
||||
pointer = meta_window_guess_grab_pointer (window);
|
||||
keyboard = meta_device_get_paired_device (pointer);
|
||||
focus_info = meta_display_get_focus_info (window->display, keyboard);
|
||||
|
||||
if (focus_window)
|
||||
focus_window = focus_info->focus_window;
|
||||
|
||||
if (window->denied_focus_and_not_transient &&
|
||||
window->wm_state_modal && /* FIXME: Maybe do this for all transients? */
|
||||
@@ -366,7 +374,7 @@ avoid_being_obscured_as_second_modal_dialog (MetaWindow *window,
|
||||
&focus_window->rect,
|
||||
&overlap))
|
||||
{
|
||||
find_most_freespace (window, borders, focus_window, *x, *y, x, y);
|
||||
find_most_freespace (window, fgeom, focus_window, *x, *y, x, y);
|
||||
meta_topic (META_DEBUG_PLACEMENT,
|
||||
"Dialog window %s was denied focus but may be modal "
|
||||
"to the focus window; had to move it to avoid the "
|
||||
@@ -506,7 +514,7 @@ center_tile_rect_in_area (MetaRectangle *rect,
|
||||
*/
|
||||
static gboolean
|
||||
find_first_fit (MetaWindow *window,
|
||||
MetaFrameBorders *borders,
|
||||
MetaFrameGeometry *fgeom,
|
||||
/* visible windows on relevant workspaces */
|
||||
GList *windows,
|
||||
int monitor,
|
||||
@@ -544,10 +552,10 @@ find_first_fit (MetaWindow *window,
|
||||
rect.width = window->rect.width;
|
||||
rect.height = window->rect.height;
|
||||
|
||||
if (borders)
|
||||
if (fgeom)
|
||||
{
|
||||
rect.width += borders->visible.left + borders->visible.right;
|
||||
rect.height += borders->visible.top + borders->visible.bottom;
|
||||
rect.width += fgeom->left_width + fgeom->right_width;
|
||||
rect.height += fgeom->top_height + fgeom->bottom_height;
|
||||
}
|
||||
|
||||
#ifdef WITH_VERBOSE_MODE
|
||||
@@ -570,10 +578,10 @@ find_first_fit (MetaWindow *window,
|
||||
{
|
||||
*new_x = rect.x;
|
||||
*new_y = rect.y;
|
||||
if (borders)
|
||||
if (fgeom)
|
||||
{
|
||||
*new_x += borders->visible.left;
|
||||
*new_y += borders->visible.top;
|
||||
*new_x += fgeom->left_width;
|
||||
*new_y += fgeom->top_height;
|
||||
}
|
||||
|
||||
retval = TRUE;
|
||||
@@ -598,10 +606,10 @@ find_first_fit (MetaWindow *window,
|
||||
{
|
||||
*new_x = rect.x;
|
||||
*new_y = rect.y;
|
||||
if (borders)
|
||||
if (fgeom)
|
||||
{
|
||||
*new_x += borders->visible.left;
|
||||
*new_y += borders->visible.top;
|
||||
*new_x += fgeom->left_width;
|
||||
*new_y += fgeom->top_height;
|
||||
}
|
||||
|
||||
retval = TRUE;
|
||||
@@ -629,10 +637,10 @@ find_first_fit (MetaWindow *window,
|
||||
{
|
||||
*new_x = rect.x;
|
||||
*new_y = rect.y;
|
||||
if (borders)
|
||||
if (fgeom)
|
||||
{
|
||||
*new_x += borders->visible.left;
|
||||
*new_y += borders->visible.top;
|
||||
*new_x += fgeom->left_width;
|
||||
*new_y += fgeom->top_height;
|
||||
}
|
||||
|
||||
retval = TRUE;
|
||||
@@ -652,7 +660,7 @@ find_first_fit (MetaWindow *window,
|
||||
|
||||
void
|
||||
meta_window_place (MetaWindow *window,
|
||||
MetaFrameBorders *borders,
|
||||
MetaFrameGeometry *fgeom,
|
||||
int x,
|
||||
int y,
|
||||
int *new_x,
|
||||
@@ -660,18 +668,21 @@ meta_window_place (MetaWindow *window,
|
||||
{
|
||||
GList *windows;
|
||||
const MetaMonitorInfo *xi;
|
||||
MetaDevice *pointer, *keyboard;
|
||||
|
||||
/* frame member variables should NEVER be used in here, only
|
||||
* MetaFrameBorders. But remember borders == NULL
|
||||
* MetaFrameGeometry. But remember fgeom == NULL
|
||||
* for undecorated windows. Also, this function should
|
||||
* NEVER have side effects other than computing the
|
||||
* placement coordinates.
|
||||
*/
|
||||
|
||||
|
||||
meta_topic (META_DEBUG_PLACEMENT, "Placing window %s\n", window->desc);
|
||||
|
||||
windows = NULL;
|
||||
|
||||
pointer = meta_window_guess_grab_pointer (window);
|
||||
keyboard = meta_device_get_paired_device (pointer);
|
||||
|
||||
switch (window->type)
|
||||
{
|
||||
/* Run placement algorithm on these. */
|
||||
@@ -756,7 +767,7 @@ meta_window_place (MetaWindow *window,
|
||||
{
|
||||
meta_topic (META_DEBUG_PLACEMENT,
|
||||
"Not placing window with PPosition or USPosition set\n");
|
||||
avoid_being_obscured_as_second_modal_dialog (window, borders, &x, &y);
|
||||
avoid_being_obscured_as_second_modal_dialog (window, fgeom, &x, &y);
|
||||
goto done_no_constraints;
|
||||
}
|
||||
}
|
||||
@@ -791,13 +802,13 @@ meta_window_place (MetaWindow *window,
|
||||
y += (parent->rect.height - window->rect.height)/3;
|
||||
|
||||
/* put top of child's frame, not top of child's client */
|
||||
if (borders)
|
||||
y += borders->visible.top;
|
||||
if (fgeom)
|
||||
y += fgeom->top_height;
|
||||
|
||||
meta_topic (META_DEBUG_PLACEMENT, "Centered window %s over transient parent\n",
|
||||
window->desc);
|
||||
|
||||
avoid_being_obscured_as_second_modal_dialog (window, borders, &x, &y);
|
||||
avoid_being_obscured_as_second_modal_dialog (window, fgeom, &x, &y);
|
||||
|
||||
goto done;
|
||||
}
|
||||
@@ -815,7 +826,7 @@ meta_window_place (MetaWindow *window,
|
||||
int w, h;
|
||||
|
||||
/* Warning, this function is a round trip! */
|
||||
xi = meta_screen_get_current_monitor (window->screen);
|
||||
xi = meta_screen_get_current_monitor (window->screen, pointer);
|
||||
|
||||
w = xi->rect.width;
|
||||
h = xi->rect.height;
|
||||
@@ -860,13 +871,13 @@ meta_window_place (MetaWindow *window,
|
||||
}
|
||||
|
||||
/* Warning, this is a round trip! */
|
||||
xi = meta_screen_get_current_monitor (window->screen);
|
||||
|
||||
xi = meta_screen_get_current_monitor (window->screen, pointer);
|
||||
|
||||
/* "Origin" placement algorithm */
|
||||
x = xi->rect.x;
|
||||
y = xi->rect.y;
|
||||
|
||||
if (find_first_fit (window, borders, windows,
|
||||
if (find_first_fit (window, fgeom, windows,
|
||||
xi->number,
|
||||
x, y, &x, &y))
|
||||
goto done_check_denied_focus;
|
||||
@@ -899,8 +910,8 @@ meta_window_place (MetaWindow *window,
|
||||
/* If no placement has been done, revert to cascade to avoid
|
||||
* fully overlapping window (e.g. starting multiple terminals)
|
||||
* */
|
||||
if (x == xi->rect.x && y == xi->rect.y)
|
||||
find_next_cascade (window, borders, windows, x, y, &x, &y);
|
||||
if (x == xi->rect.x && y == xi->rect.y)
|
||||
find_next_cascade (window, pointer, fgeom, windows, x, y, &x, &y);
|
||||
|
||||
done_check_denied_focus:
|
||||
/* If the window is being denied focus and isn't a transient of the
|
||||
@@ -913,8 +924,12 @@ meta_window_place (MetaWindow *window,
|
||||
gboolean found_fit;
|
||||
MetaWindow *focus_window;
|
||||
MetaRectangle overlap;
|
||||
MetaFocusInfo *focus_info;
|
||||
|
||||
focus_window = window->display->focus_window;
|
||||
focus_info = meta_display_get_focus_info (window->display, keyboard);
|
||||
g_assert (focus_info != NULL);
|
||||
|
||||
focus_window = focus_info->focus_window;
|
||||
g_assert (focus_window != NULL);
|
||||
|
||||
/* No need to do anything if the window doesn't overlap at all */
|
||||
@@ -934,7 +949,7 @@ meta_window_place (MetaWindow *window,
|
||||
x = xi->rect.x;
|
||||
y = xi->rect.y;
|
||||
|
||||
found_fit = find_first_fit (window, borders, focus_window_list,
|
||||
found_fit = find_first_fit (window, fgeom, focus_window_list,
|
||||
xi->number,
|
||||
x, y, &x, &y);
|
||||
g_list_free (focus_window_list);
|
||||
@@ -944,7 +959,7 @@ meta_window_place (MetaWindow *window,
|
||||
* as possible.
|
||||
*/
|
||||
if (!found_fit)
|
||||
find_most_freespace (window, borders, focus_window, x, y, &x, &y);
|
||||
find_most_freespace (window, fgeom, focus_window, x, y, &x, &y);
|
||||
}
|
||||
|
||||
done:
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
#include "frame.h"
|
||||
|
||||
void meta_window_place (MetaWindow *window,
|
||||
MetaFrameBorders *borders,
|
||||
MetaFrameGeometry *fgeom,
|
||||
int x,
|
||||
int y,
|
||||
int *new_x,
|
||||
|
||||
@@ -68,7 +68,6 @@
|
||||
|
||||
#define KEY_LIVE_HIDDEN_WINDOWS "/apps/mutter/general/live_hidden_windows"
|
||||
#define KEY_WORKSPACES_ONLY_ON_PRIMARY "/apps/mutter/general/workspaces_only_on_primary"
|
||||
#define KEY_DRAGGABLE_BORDER_WIDTH "/apps/mutter/general/draggable_border_width"
|
||||
|
||||
#define KEY_NO_TAB_POPUP "/apps/metacity/general/no_tab_popup"
|
||||
|
||||
@@ -101,7 +100,6 @@ static gboolean gnome_accessibility = FALSE;
|
||||
static gboolean gnome_animations = TRUE;
|
||||
static char *cursor_theme = NULL;
|
||||
static int cursor_size = 24;
|
||||
static int draggable_border_width = 10;
|
||||
static gboolean resize_with_right_button = FALSE;
|
||||
static gboolean edge_tiling = FALSE;
|
||||
static gboolean force_fullscreen = TRUE;
|
||||
@@ -495,11 +493,6 @@ static MetaIntPreference preferences_int[] =
|
||||
&cursor_size,
|
||||
1, 128, 24,
|
||||
},
|
||||
{ "/apps/mutter/general/draggable_border_width",
|
||||
META_PREF_DRAGGABLE_BORDER_WIDTH,
|
||||
&draggable_border_width,
|
||||
0, 64, 10,
|
||||
},
|
||||
{ NULL, 0, NULL, 0, 0, 0, },
|
||||
};
|
||||
|
||||
@@ -1686,7 +1679,6 @@ button_layout_handler (MetaPreference pref,
|
||||
if (string_value)
|
||||
sides = g_strsplit (string_value, ":", 2);
|
||||
|
||||
i = 0;
|
||||
if (sides != NULL && sides[0] != NULL)
|
||||
{
|
||||
char **buttons;
|
||||
@@ -1741,13 +1733,12 @@ button_layout_handler (MetaPreference pref,
|
||||
++b;
|
||||
}
|
||||
|
||||
new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
new_layout.left_buttons_has_spacer[i] = FALSE;
|
||||
|
||||
g_strfreev (buttons);
|
||||
}
|
||||
|
||||
new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
new_layout.left_buttons_has_spacer[i] = FALSE;
|
||||
|
||||
i = 0;
|
||||
if (sides != NULL && sides[0] != NULL && sides[1] != NULL)
|
||||
{
|
||||
char **buttons;
|
||||
@@ -1801,12 +1792,12 @@ button_layout_handler (MetaPreference pref,
|
||||
++b;
|
||||
}
|
||||
|
||||
new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
new_layout.right_buttons_has_spacer[i] = FALSE;
|
||||
|
||||
g_strfreev (buttons);
|
||||
}
|
||||
|
||||
new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
new_layout.right_buttons_has_spacer[i] = FALSE;
|
||||
|
||||
g_strfreev (sides);
|
||||
|
||||
/* Invert the button layout for RTL languages */
|
||||
@@ -1994,9 +1985,6 @@ meta_preference_to_string (MetaPreference pref)
|
||||
|
||||
case META_PREF_NO_TAB_POPUP:
|
||||
return "NO_TAB_POPUP";
|
||||
|
||||
case META_PREF_DRAGGABLE_BORDER_WIDTH:
|
||||
return "DRAGGABLE_BORDER_WIDTH";
|
||||
}
|
||||
|
||||
return "(unknown)";
|
||||
@@ -3050,12 +3038,6 @@ meta_prefs_set_no_tab_popup (gboolean whether)
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
meta_prefs_get_draggable_border_width (void)
|
||||
{
|
||||
return draggable_border_width;
|
||||
}
|
||||
|
||||
#ifndef HAVE_GCONF
|
||||
static void
|
||||
init_button_layout(void)
|
||||
|
||||
@@ -90,7 +90,8 @@ struct _MetaScreen
|
||||
MetaStack *stack;
|
||||
MetaStackTracker *stack_tracker;
|
||||
|
||||
MetaCursor current_cursor;
|
||||
/* per-pointer cursors */
|
||||
GHashTable *cursors;
|
||||
|
||||
Window flash_window;
|
||||
|
||||
@@ -158,8 +159,10 @@ void meta_screen_queue_frame_redraws (MetaScreen *scree
|
||||
void meta_screen_queue_window_resizes (MetaScreen *screen);
|
||||
|
||||
void meta_screen_set_cursor (MetaScreen *screen,
|
||||
MetaDevice *pointer,
|
||||
MetaCursor cursor);
|
||||
void meta_screen_update_cursor (MetaScreen *screen);
|
||||
void meta_screen_update_cursor (MetaScreen *screen,
|
||||
MetaDevice *pointer);
|
||||
|
||||
void meta_screen_tab_popup_create (MetaScreen *screen,
|
||||
MetaTabList list_type,
|
||||
@@ -182,9 +185,11 @@ void meta_screen_tile_preview_update (MetaScreen *screen,
|
||||
void meta_screen_tile_preview_hide (MetaScreen *screen);
|
||||
|
||||
MetaWindow* meta_screen_get_mouse_window (MetaScreen *screen,
|
||||
MetaDevice *pointer,
|
||||
MetaWindow *not_this_one);
|
||||
|
||||
const MetaMonitorInfo* meta_screen_get_current_monitor (MetaScreen *screen);
|
||||
const MetaMonitorInfo* meta_screen_get_current_monitor (MetaScreen *screen,
|
||||
MetaDevice *pointer);
|
||||
const MetaMonitorInfo* meta_screen_get_monitor_for_rect (MetaScreen *screen,
|
||||
MetaRectangle *rect);
|
||||
const MetaMonitorInfo* meta_screen_get_monitor_for_window (MetaScreen *screen,
|
||||
|
||||
@@ -37,10 +37,12 @@
|
||||
#include "workspace-private.h"
|
||||
#include "keybindings-private.h"
|
||||
#include "stack.h"
|
||||
#include "core.h"
|
||||
#include "xprops.h"
|
||||
#include <meta/compositor.h>
|
||||
#include "mutter-marshal.h"
|
||||
#include "mutter-enum-types.h"
|
||||
#include "device-pointer.h"
|
||||
|
||||
#ifdef HAVE_SOLARIS_XINERAMA
|
||||
#include <X11/extensions/xinerama.h>
|
||||
@@ -632,7 +634,6 @@ meta_screen_new (MetaDisplay *display,
|
||||
MetaScreen *screen;
|
||||
Window xroot;
|
||||
Display *xdisplay;
|
||||
XWindowAttributes attr;
|
||||
Window new_wm_sn_owner;
|
||||
Window current_wm_sn_owner;
|
||||
gboolean replace_current_wm;
|
||||
@@ -747,15 +748,15 @@ meta_screen_new (MetaDisplay *display,
|
||||
/* We need to or with the existing event mask since
|
||||
* gtk+ may be interested in other events.
|
||||
*/
|
||||
XGetWindowAttributes (xdisplay, xroot, &attr);
|
||||
XSelectInput (xdisplay,
|
||||
xroot,
|
||||
SubstructureRedirectMask | SubstructureNotifyMask |
|
||||
ColormapChangeMask | PropertyChangeMask |
|
||||
LeaveWindowMask | EnterWindowMask |
|
||||
KeyPressMask | KeyReleaseMask |
|
||||
FocusChangeMask | StructureNotifyMask |
|
||||
ExposureMask | attr.your_event_mask);
|
||||
meta_core_select_events (xdisplay, xroot,
|
||||
(SubstructureRedirectMask | SubstructureNotifyMask |
|
||||
ColormapChangeMask | PropertyChangeMask |
|
||||
LeaveWindowMask | EnterWindowMask |
|
||||
KeyPressMask | KeyReleaseMask |
|
||||
FocusChangeMask | StructureNotifyMask |
|
||||
ExposureMask),
|
||||
TRUE);
|
||||
|
||||
if (meta_error_trap_pop_with_return (display) != Success)
|
||||
{
|
||||
meta_warning (_("Screen %d on display \"%s\" already has a window manager\n"),
|
||||
@@ -777,10 +778,10 @@ meta_screen_new (MetaDisplay *display,
|
||||
screen->rect.x = screen->rect.y = 0;
|
||||
screen->rect.width = WidthOfScreen (screen->xscreen);
|
||||
screen->rect.height = HeightOfScreen (screen->xscreen);
|
||||
screen->current_cursor = -1; /* invalid/unset */
|
||||
screen->default_xvisual = DefaultVisualOfScreen (screen->xscreen);
|
||||
screen->default_depth = DefaultDepthOfScreen (screen->xscreen);
|
||||
screen->flash_window = None;
|
||||
screen->cursors = g_hash_table_new (NULL, NULL);
|
||||
|
||||
screen->wm_sn_selection_window = new_wm_sn_owner;
|
||||
screen->wm_sn_atom = wm_sn_atom;
|
||||
@@ -805,8 +806,6 @@ meta_screen_new (MetaDisplay *display,
|
||||
screen->last_monitor_index = 0;
|
||||
|
||||
reload_monitor_infos (screen);
|
||||
|
||||
meta_screen_set_cursor (screen, META_CURSOR_DEFAULT);
|
||||
|
||||
/* Handle creating a no_focus_window for this screen */
|
||||
screen->no_focus_window =
|
||||
@@ -941,7 +940,10 @@ meta_screen_free (MetaScreen *screen,
|
||||
meta_stack_tracker_free (screen->stack_tracker);
|
||||
|
||||
meta_error_trap_push_with_return (screen->display);
|
||||
XSelectInput (screen->display->xdisplay, screen->xroot, 0);
|
||||
meta_core_select_events (screen->display->xdisplay,
|
||||
screen->xroot, NoEventMask,
|
||||
FALSE);
|
||||
|
||||
if (meta_error_trap_pop_with_return (screen->display) != Success)
|
||||
meta_warning (_("Could not release screen %d on display \"%s\"\n"),
|
||||
screen->number, screen->display->name);
|
||||
@@ -965,6 +967,8 @@ meta_screen_free (MetaScreen *screen,
|
||||
|
||||
g_free (screen->screen_name);
|
||||
|
||||
g_hash_table_destroy (screen->cursors);
|
||||
|
||||
g_object_unref (screen);
|
||||
|
||||
XFlush (display->xdisplay);
|
||||
@@ -1578,31 +1582,33 @@ update_focus_mode (MetaScreen *screen)
|
||||
|
||||
void
|
||||
meta_screen_set_cursor (MetaScreen *screen,
|
||||
MetaDevice *pointer,
|
||||
MetaCursor cursor)
|
||||
{
|
||||
Cursor xcursor;
|
||||
MetaCursor old_cursor;
|
||||
|
||||
if (cursor == screen->current_cursor)
|
||||
old_cursor = GPOINTER_TO_UINT (g_hash_table_lookup (screen->cursors, pointer));
|
||||
|
||||
if (cursor == old_cursor)
|
||||
return;
|
||||
|
||||
screen->current_cursor = cursor;
|
||||
|
||||
xcursor = meta_display_create_x_cursor (screen->display, cursor);
|
||||
XDefineCursor (screen->display->xdisplay, screen->xroot, xcursor);
|
||||
XFlush (screen->display->xdisplay);
|
||||
XFreeCursor (screen->display->xdisplay, xcursor);
|
||||
g_hash_table_insert (screen->cursors, pointer,
|
||||
GUINT_TO_POINTER (cursor));
|
||||
|
||||
meta_screen_update_cursor (screen, pointer);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_update_cursor (MetaScreen *screen)
|
||||
meta_screen_update_cursor (MetaScreen *screen,
|
||||
MetaDevice *pointer)
|
||||
{
|
||||
Cursor xcursor;
|
||||
MetaCursor cursor;
|
||||
|
||||
xcursor = meta_display_create_x_cursor (screen->display,
|
||||
screen->current_cursor);
|
||||
XDefineCursor (screen->display->xdisplay, screen->xroot, xcursor);
|
||||
cursor = GPOINTER_TO_UINT (g_hash_table_lookup (screen->cursors, pointer));
|
||||
meta_device_pointer_set_window_cursor (META_DEVICE_POINTER (pointer),
|
||||
screen->xroot,
|
||||
cursor);
|
||||
XFlush (screen->display->xdisplay);
|
||||
XFreeCursor (screen->display->xdisplay, xcursor);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1856,9 +1862,21 @@ static gboolean
|
||||
meta_screen_tile_preview_update_timeout (gpointer data)
|
||||
{
|
||||
MetaScreen *screen = data;
|
||||
MetaWindow *window = screen->display->grab_window;
|
||||
MetaWindow *window = NULL;
|
||||
gboolean composited = screen->display->compositor != NULL;
|
||||
gboolean needs_preview = FALSE;
|
||||
MetaGrabInfo *grab_info;
|
||||
MetaDevice *pointer = NULL;
|
||||
GHashTableIter iter;
|
||||
|
||||
/* FIXME: we're just handling the first grab we find */
|
||||
g_hash_table_iter_init (&iter, screen->display->current_grabs);
|
||||
|
||||
if (g_hash_table_iter_next (&iter, NULL, (gpointer *) &grab_info))
|
||||
{
|
||||
window = grab_info->grab_window;
|
||||
pointer = grab_info->grab_pointer;
|
||||
}
|
||||
|
||||
screen->tile_preview_timeout_id = 0;
|
||||
|
||||
@@ -1901,8 +1919,8 @@ meta_screen_tile_preview_update_timeout (gpointer data)
|
||||
{
|
||||
MetaRectangle tile_rect;
|
||||
|
||||
meta_window_get_current_tile_area (window, &tile_rect);
|
||||
meta_tile_preview_show (screen->tile_preview, &tile_rect);
|
||||
meta_window_get_current_tile_area (window, pointer, &tile_rect);
|
||||
meta_tile_preview_show (screen->tile_preview, pointer, &tile_rect);
|
||||
}
|
||||
else
|
||||
meta_tile_preview_hide (screen->tile_preview);
|
||||
@@ -1947,28 +1965,23 @@ meta_screen_tile_preview_hide (MetaScreen *screen)
|
||||
|
||||
MetaWindow*
|
||||
meta_screen_get_mouse_window (MetaScreen *screen,
|
||||
MetaDevice *pointer,
|
||||
MetaWindow *not_this_one)
|
||||
{
|
||||
MetaWindow *window;
|
||||
Window root_return, child_return;
|
||||
int root_x_return, root_y_return;
|
||||
int win_x_return, win_y_return;
|
||||
unsigned int mask_return;
|
||||
|
||||
|
||||
if (not_this_one)
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Focusing mouse window excluding %s\n", not_this_one->desc);
|
||||
|
||||
meta_error_trap_push (screen->display);
|
||||
XQueryPointer (screen->display->xdisplay,
|
||||
screen->xroot,
|
||||
&root_return,
|
||||
&child_return,
|
||||
&root_x_return,
|
||||
&root_y_return,
|
||||
&win_x_return,
|
||||
&win_y_return,
|
||||
&mask_return);
|
||||
meta_device_pointer_query_position (META_DEVICE_POINTER (pointer),
|
||||
screen->xroot,
|
||||
NULL, NULL,
|
||||
&root_x_return,
|
||||
&root_y_return,
|
||||
NULL, NULL, NULL);
|
||||
meta_error_trap_pop (screen->display);
|
||||
|
||||
window = meta_stack_get_default_focus_window_at_point (screen->stack,
|
||||
@@ -2064,6 +2077,7 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
|
||||
const MetaMonitorInfo* current;
|
||||
const MetaMonitorInfo* tmp;
|
||||
GQueue* monitor_queue;
|
||||
MetaDevice *pointer;
|
||||
int* visited;
|
||||
int cur = 0;
|
||||
int i;
|
||||
@@ -2071,6 +2085,9 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
|
||||
*n_monitors = screen->n_monitor_infos;
|
||||
*monitors_list = g_new (int, screen->n_monitor_infos);
|
||||
|
||||
pointer = meta_device_map_lookup (screen->display->device_map,
|
||||
META_CORE_POINTER_ID);
|
||||
|
||||
/* we calculate a natural ordering by which to choose monitors for
|
||||
* window placement. We start at the current monitor, and perform
|
||||
* a breadth-first search of the monitors starting from that
|
||||
@@ -2085,7 +2102,7 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
|
||||
visited[i] = FALSE;
|
||||
}
|
||||
|
||||
current = meta_screen_get_current_monitor (screen);
|
||||
current = meta_screen_get_current_monitor (screen, pointer);
|
||||
monitor_queue = g_queue_new ();
|
||||
g_queue_push_tail (monitor_queue, (gpointer) current);
|
||||
visited[current->number] = TRUE;
|
||||
@@ -2152,7 +2169,8 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
|
||||
}
|
||||
|
||||
const MetaMonitorInfo*
|
||||
meta_screen_get_current_monitor (MetaScreen *screen)
|
||||
meta_screen_get_current_monitor (MetaScreen *screen,
|
||||
MetaDevice *pointer)
|
||||
{
|
||||
if (screen->n_monitor_infos == 1)
|
||||
return &screen->monitor_infos[0];
|
||||
@@ -2162,24 +2180,18 @@ meta_screen_get_current_monitor (MetaScreen *screen)
|
||||
|
||||
if (screen->display->monitor_cache_invalidated)
|
||||
{
|
||||
Window root_return, child_return;
|
||||
int win_x_return, win_y_return;
|
||||
unsigned int mask_return;
|
||||
int i;
|
||||
MetaRectangle pointer_position;
|
||||
|
||||
screen->display->monitor_cache_invalidated = FALSE;
|
||||
|
||||
pointer_position.width = pointer_position.height = 1;
|
||||
XQueryPointer (screen->display->xdisplay,
|
||||
screen->xroot,
|
||||
&root_return,
|
||||
&child_return,
|
||||
&pointer_position.x,
|
||||
&pointer_position.y,
|
||||
&win_x_return,
|
||||
&win_y_return,
|
||||
&mask_return);
|
||||
meta_device_pointer_query_position (META_DEVICE_POINTER (pointer),
|
||||
screen->xroot,
|
||||
NULL, NULL,
|
||||
&pointer_position.x,
|
||||
&pointer_position.y,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
screen->last_monitor_index = 0;
|
||||
for (i = 0; i < screen->n_monitor_infos; i++)
|
||||
@@ -3046,17 +3058,22 @@ static gboolean startup_sequence_timeout (void *data);
|
||||
static void
|
||||
update_startup_feedback (MetaScreen *screen)
|
||||
{
|
||||
MetaDevice *pointer;
|
||||
|
||||
pointer = meta_device_map_lookup (screen->display->device_map,
|
||||
META_CORE_POINTER_ID);
|
||||
|
||||
if (screen->startup_sequences != NULL)
|
||||
{
|
||||
meta_topic (META_DEBUG_STARTUP,
|
||||
"Setting busy cursor\n");
|
||||
meta_screen_set_cursor (screen, META_CURSOR_BUSY);
|
||||
meta_screen_set_cursor (screen, pointer, META_CURSOR_BUSY);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_topic (META_DEBUG_STARTUP,
|
||||
"Setting default cursor\n");
|
||||
meta_screen_set_cursor (screen, META_CURSOR_DEFAULT);
|
||||
meta_screen_set_cursor (screen, pointer, META_CURSOR_DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -211,13 +211,23 @@ meta_stack_thaw (MetaStack *stack)
|
||||
stack_sync_to_server (stack);
|
||||
}
|
||||
|
||||
typedef struct _FocusedForeachData FocusedForeachData;
|
||||
|
||||
struct _FocusedForeachData
|
||||
{
|
||||
MetaWindow *window;
|
||||
gboolean focused_transient;
|
||||
};
|
||||
|
||||
static gboolean
|
||||
is_focused_foreach (MetaWindow *window,
|
||||
void *data)
|
||||
{
|
||||
if (window == window->display->expected_focus_window)
|
||||
FocusedForeachData *focused_data = data;
|
||||
|
||||
if (window == focused_data->window)
|
||||
{
|
||||
*((gboolean*) data) = TRUE;
|
||||
focused_data->focused_transient = TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
@@ -240,6 +250,9 @@ get_standalone_layer (MetaWindow *window)
|
||||
{
|
||||
MetaStackLayer layer;
|
||||
gboolean focused_transient = FALSE;
|
||||
MetaFocusInfo *focus_info;
|
||||
MetaDevice *keyboard;
|
||||
FocusedForeachData focused_data = { 0 };
|
||||
|
||||
switch (window->type)
|
||||
{
|
||||
@@ -263,20 +276,30 @@ get_standalone_layer (MetaWindow *window)
|
||||
case META_WINDOW_OVERRIDE_OTHER:
|
||||
layer = META_LAYER_OVERRIDE_REDIRECT;
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
/* FIXME: How about other keyboards? should
|
||||
* we allow fullscreen for non-VCP/K anyway?
|
||||
*/
|
||||
keyboard = meta_device_map_lookup (window->display->device_map,
|
||||
META_CORE_KEYBOARD_ID);
|
||||
|
||||
focus_info = meta_display_get_focus_info (window->display, keyboard);
|
||||
focused_data.window = focus_info->expected_focus_window;
|
||||
|
||||
meta_window_foreach_transient (window,
|
||||
is_focused_foreach,
|
||||
&focused_transient);
|
||||
&focused_data);
|
||||
|
||||
if (window->wm_state_below)
|
||||
layer = META_LAYER_BOTTOM;
|
||||
else if (window->fullscreen &&
|
||||
(focused_transient ||
|
||||
window == window->display->expected_focus_window ||
|
||||
window->display->expected_focus_window == NULL ||
|
||||
(window->display->expected_focus_window != NULL &&
|
||||
!focus_info ||
|
||||
window == focus_info->expected_focus_window ||
|
||||
focus_info->expected_focus_window == NULL ||
|
||||
(focus_info->expected_focus_window != NULL &&
|
||||
windows_on_different_monitor (window,
|
||||
window->display->expected_focus_window))))
|
||||
focus_info->expected_focus_window))))
|
||||
layer = META_LAYER_FULLSCREEN;
|
||||
else if (window->wm_state_above)
|
||||
layer = META_LAYER_TOP;
|
||||
|
||||
@@ -81,6 +81,7 @@ meta_print_backtrace (void)
|
||||
static gint verbose_topics = 0;
|
||||
static gboolean is_debugging = FALSE;
|
||||
static gboolean replace_current = FALSE;
|
||||
static gboolean use_core_devices = FALSE;
|
||||
static int no_prefix = 0;
|
||||
|
||||
#ifdef WITH_VERBOSE_MODE
|
||||
@@ -209,6 +210,18 @@ meta_set_debugging (gboolean setting)
|
||||
is_debugging = setting;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_get_use_core_devices (void)
|
||||
{
|
||||
return use_core_devices;
|
||||
}
|
||||
|
||||
void
|
||||
meta_set_use_core_devices (gboolean setting)
|
||||
{
|
||||
use_core_devices = setting;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_get_replace_current_wm (void)
|
||||
{
|
||||
@@ -708,7 +721,6 @@ static guint last_later_id = 0;
|
||||
typedef struct
|
||||
{
|
||||
guint id;
|
||||
guint ref_count;
|
||||
MetaLaterType when;
|
||||
GSourceFunc func;
|
||||
gpointer data;
|
||||
@@ -724,30 +736,14 @@ static guint later_repaint_func = 0;
|
||||
|
||||
static void ensure_later_repaint_func (void);
|
||||
|
||||
static void
|
||||
unref_later (MetaLater *later)
|
||||
{
|
||||
if (--later->ref_count == 0)
|
||||
{
|
||||
if (later->notify)
|
||||
{
|
||||
later->notify (later->data);
|
||||
later->notify = NULL;
|
||||
}
|
||||
g_slice_free (MetaLater, later);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_later (MetaLater *later)
|
||||
{
|
||||
if (later->source)
|
||||
{
|
||||
g_source_remove (later->source);
|
||||
later->source = 0;
|
||||
}
|
||||
later->func = NULL;
|
||||
unref_later (later);
|
||||
g_source_remove (later->source);
|
||||
if (later->notify)
|
||||
later->notify (later->data);
|
||||
g_slice_free (MetaLater, later);
|
||||
}
|
||||
|
||||
/* Used to sort the list of laters with the highest priority
|
||||
@@ -763,41 +759,34 @@ compare_laters (gconstpointer a,
|
||||
static gboolean
|
||||
run_repaint_laters (gpointer data)
|
||||
{
|
||||
GSList *laters_copy;
|
||||
GSList *old_laters = laters;
|
||||
GSList *l;
|
||||
gboolean keep_timeline_running = FALSE;
|
||||
laters = NULL;
|
||||
|
||||
laters_copy = NULL;
|
||||
for (l = laters; l; l = l->next)
|
||||
for (l = old_laters; l; l = l->next)
|
||||
{
|
||||
MetaLater *later = l->data;
|
||||
if (later->source == 0 ||
|
||||
(later->when <= META_LATER_BEFORE_REDRAW && !later->run_once))
|
||||
{
|
||||
later->ref_count++;
|
||||
laters_copy = g_slist_prepend (laters_copy, later);
|
||||
}
|
||||
}
|
||||
laters_copy = g_slist_reverse (laters_copy);
|
||||
|
||||
for (l = laters_copy; l; l = l->next)
|
||||
{
|
||||
MetaLater *later = l->data;
|
||||
|
||||
if (later->func && later->func (later->data))
|
||||
{
|
||||
if (later->source == 0)
|
||||
keep_timeline_running = TRUE;
|
||||
if (later->func (later->data))
|
||||
{
|
||||
if (later->source == 0)
|
||||
keep_timeline_running = TRUE;
|
||||
laters = g_slist_insert_sorted (laters, later, compare_laters);
|
||||
}
|
||||
else
|
||||
destroy_later (later);
|
||||
}
|
||||
else
|
||||
meta_later_remove (later->id);
|
||||
unref_later (later);
|
||||
laters = g_slist_insert_sorted (laters, later, compare_laters);
|
||||
}
|
||||
|
||||
if (!keep_timeline_running)
|
||||
clutter_timeline_stop (later_timeline);
|
||||
|
||||
g_slist_free (laters_copy);
|
||||
g_slist_free (old_laters);
|
||||
|
||||
/* Just keep the repaint func around - it's cheap if the list is empty */
|
||||
return TRUE;
|
||||
@@ -824,7 +813,9 @@ call_idle_later (gpointer data)
|
||||
|
||||
if (!later->func (later->data))
|
||||
{
|
||||
meta_later_remove (later->id);
|
||||
laters = g_slist_remove (laters, later);
|
||||
later->source = 0;
|
||||
destroy_later (later);
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
@@ -860,7 +851,6 @@ meta_later_add (MetaLaterType when,
|
||||
MetaLater *later = g_slice_new0 (MetaLater);
|
||||
|
||||
later->id = ++last_later_id;
|
||||
later->ref_count = 1;
|
||||
later->when = when;
|
||||
later->func = func;
|
||||
later->data = data;
|
||||
|
||||
@@ -107,6 +107,10 @@ struct _MetaWindow
|
||||
Window xgroup_leader;
|
||||
Window xclient_leader;
|
||||
|
||||
/* window menu if any, and the pointer that popped it up */
|
||||
MetaWindowMenu *menu;
|
||||
MetaDevice *menu_device;
|
||||
|
||||
/* Initial workspace property */
|
||||
int initial_workspace;
|
||||
|
||||
@@ -318,8 +322,11 @@ struct _MetaWindow
|
||||
/* if TRUE, application is buggy and SYNC resizing is turned off */
|
||||
guint disable_sync : 1;
|
||||
|
||||
/* if TRUE, window is attached to its parent */
|
||||
guint attached : 1;
|
||||
/* if TRUE, window didn't yet get the FocusIn for window->focus_keyboard */
|
||||
guint expecting_focus_in : 1;
|
||||
|
||||
/* Keyboard currently owning the window focus, or NULL */
|
||||
MetaDevice *focus_keyboard;
|
||||
|
||||
/* if non-NULL, the bounds of the window frame */
|
||||
cairo_region_t *frame_bounds;
|
||||
@@ -398,6 +405,12 @@ struct _MetaWindow
|
||||
|
||||
/* Focused window that is (directly or indirectly) attached to this one */
|
||||
MetaWindow *attached_focus_window;
|
||||
|
||||
/* Current grab op for this window, or NULL */
|
||||
MetaGrabInfo *cur_grab;
|
||||
|
||||
/* Focus info if the window is focused, or NULL */
|
||||
MetaFocusInfo *cur_focus;
|
||||
};
|
||||
|
||||
struct _MetaWindowClass
|
||||
@@ -567,6 +580,7 @@ void meta_window_set_current_workspace_hint (MetaWindow *window);
|
||||
unsigned long meta_window_get_net_wm_desktop (MetaWindow *window);
|
||||
|
||||
void meta_window_show_menu (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
int root_x,
|
||||
int root_y,
|
||||
int button,
|
||||
@@ -595,6 +609,7 @@ void meta_window_get_work_area_all_monitors (MetaWindow *window,
|
||||
MetaRectangle *area);
|
||||
|
||||
void meta_window_get_current_tile_area (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
MetaRectangle *tile_area);
|
||||
|
||||
|
||||
@@ -616,13 +631,16 @@ void meta_window_free_delete_dialog (MetaWindow *window);
|
||||
|
||||
|
||||
void meta_window_begin_grab_op (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
MetaGrabOp op,
|
||||
gboolean frame_action,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_window_update_keyboard_resize (MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
gboolean update_cursor);
|
||||
void meta_window_update_keyboard_move (MetaWindow *window);
|
||||
void meta_window_update_keyboard_move (MetaWindow *window,
|
||||
MetaDevice *device);
|
||||
|
||||
void meta_window_update_layer (MetaWindow *window);
|
||||
|
||||
@@ -644,8 +662,13 @@ void meta_window_update_monitor (MetaWindow *window);
|
||||
void meta_window_update_on_all_workspaces (MetaWindow *window);
|
||||
|
||||
void meta_window_propagate_focus_appearance (MetaWindow *window,
|
||||
MetaDevice *keyboard,
|
||||
gboolean focused);
|
||||
|
||||
gboolean meta_window_should_attach_to_parent (MetaWindow *window);
|
||||
void meta_window_set_client_pointer (MetaWindow *window,
|
||||
MetaDevice *pointer);
|
||||
MetaDevice * meta_window_get_client_pointer (MetaWindow *window);
|
||||
|
||||
MetaDevice * meta_window_guess_grab_pointer (MetaWindow *window);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1469,48 +1469,46 @@ reload_transient_for (MetaWindow *window,
|
||||
gboolean initial)
|
||||
{
|
||||
MetaWindow *parent = NULL;
|
||||
Window transient_for, old_transient_for;
|
||||
|
||||
if (meta_window_appears_focused (window) && window->xtransient_for != None)
|
||||
meta_window_propagate_focus_appearance (window,
|
||||
window->focus_keyboard,
|
||||
FALSE);
|
||||
|
||||
window->xtransient_for = None;
|
||||
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
transient_for = value->v.xwindow;
|
||||
window->xtransient_for = value->v.xwindow;
|
||||
|
||||
parent = meta_display_lookup_x_window (window->display, transient_for);
|
||||
/* Make sure transient_for is valid */
|
||||
if (window->xtransient_for != None)
|
||||
{
|
||||
parent = meta_display_lookup_x_window (window->display,
|
||||
window->xtransient_for);
|
||||
if (!parent)
|
||||
{
|
||||
meta_warning (_("Invalid WM_TRANSIENT_FOR window 0x%lx specified "
|
||||
"for %s.\n"),
|
||||
transient_for, window->desc);
|
||||
transient_for = None;
|
||||
}
|
||||
|
||||
/* Make sure there is not a loop */
|
||||
while (parent)
|
||||
{
|
||||
if (parent == window)
|
||||
{
|
||||
meta_warning (_("WM_TRANSIENT_FOR window 0x%lx for %s "
|
||||
"would create loop.\n"),
|
||||
transient_for, window->desc);
|
||||
transient_for = None;
|
||||
break;
|
||||
}
|
||||
|
||||
parent = meta_display_lookup_x_window (parent->display,
|
||||
parent->xtransient_for);
|
||||
window->xtransient_for, window->desc);
|
||||
window->xtransient_for = None;
|
||||
}
|
||||
}
|
||||
else
|
||||
transient_for = None;
|
||||
|
||||
if (transient_for == window->xtransient_for)
|
||||
return;
|
||||
/* Make sure there is not a loop */
|
||||
while (parent)
|
||||
{
|
||||
if (parent == window)
|
||||
{
|
||||
meta_warning (_("WM_TRANSIENT_FOR window 0x%lx for %s "
|
||||
"would create loop.\n"),
|
||||
window->xtransient_for, window->desc);
|
||||
window->xtransient_for = None;
|
||||
break;
|
||||
}
|
||||
|
||||
if (meta_window_appears_focused (window) && window->xtransient_for != None)
|
||||
meta_window_propagate_focus_appearance (window, FALSE);
|
||||
|
||||
old_transient_for = window->xtransient_for;
|
||||
window->xtransient_for = transient_for;
|
||||
parent = meta_display_lookup_x_window (parent->display,
|
||||
parent->xtransient_for);
|
||||
}
|
||||
|
||||
window->transient_parent_is_root_window =
|
||||
window->xtransient_for == window->screen->xroot;
|
||||
@@ -1524,25 +1522,6 @@ reload_transient_for (MetaWindow *window,
|
||||
/* may now be a dialog */
|
||||
meta_window_recalc_window_type (window);
|
||||
|
||||
if (!window->constructing)
|
||||
{
|
||||
/* If the window attaches, detaches, or changes attached
|
||||
* parents, we need to destroy the MetaWindow and let a new one
|
||||
* be created (which happens as a side effect of
|
||||
* meta_window_unmanage()). The condition below is correct
|
||||
* because we know window->xtransient_for has changed.
|
||||
*/
|
||||
if (window->attached || meta_window_should_attach_to_parent (window))
|
||||
{
|
||||
guint32 timestamp;
|
||||
|
||||
window->xtransient_for = old_transient_for;
|
||||
timestamp = meta_display_get_current_time_roundtrip (window->display);
|
||||
meta_window_unmanage (window, timestamp);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* update stacking constraints */
|
||||
if (!window->override_redirect)
|
||||
meta_stack_update_transient (window->screen->stack, window);
|
||||
@@ -1560,7 +1539,9 @@ reload_transient_for (MetaWindow *window,
|
||||
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
|
||||
|
||||
if (meta_window_appears_focused (window) && window->xtransient_for != None)
|
||||
meta_window_propagate_focus_appearance (window, TRUE);
|
||||
meta_window_propagate_focus_appearance (window,
|
||||
window->focus_keyboard,
|
||||
TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
1140
src/core/window.c
1140
src/core/window.c
File diff suppressed because it is too large
Load Diff
@@ -85,6 +85,7 @@ GList* meta_workspace_get_onmonitor_region (MetaWorkspace *workspace,
|
||||
int which_monitor);
|
||||
|
||||
void meta_workspace_focus_default_window (MetaWorkspace *workspace,
|
||||
MetaDevice *pointer,
|
||||
MetaWindow *not_this_one,
|
||||
guint32 timestamp);
|
||||
|
||||
|
||||
@@ -538,7 +538,9 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
|
||||
MetaWorkspaceLayout layout1, layout2;
|
||||
gint num_workspaces, current_space, new_space;
|
||||
MetaMotionDirection direction;
|
||||
|
||||
MetaGrabInfo *grab_info;
|
||||
GHashTableIter iter;
|
||||
|
||||
meta_verbose ("Activating workspace %d\n",
|
||||
meta_workspace_index (workspace));
|
||||
|
||||
@@ -547,7 +549,7 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
|
||||
|
||||
/* Free any cached pointers to the workspaces's edges from
|
||||
* a current resize or move operation */
|
||||
meta_display_cleanup_edges (workspace->screen->display);
|
||||
meta_display_cleanup_edges (workspace->screen->display, workspace->screen);
|
||||
|
||||
if (workspace->screen->active_workspace)
|
||||
workspace_switch_sound (workspace->screen->active_workspace, workspace);
|
||||
@@ -570,10 +572,22 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
|
||||
return;
|
||||
|
||||
move_window = NULL;
|
||||
if (workspace->screen->display->grab_op == META_GRAB_OP_MOVING ||
|
||||
workspace->screen->display->grab_op == META_GRAB_OP_KEYBOARD_MOVING)
|
||||
move_window = workspace->screen->display->grab_window;
|
||||
|
||||
|
||||
/* FIXME: not quite multidevice friendly, but the whole
|
||||
* "move window to another workspace" isn't.
|
||||
*/
|
||||
g_hash_table_iter_init (&iter, workspace->screen->display->current_grabs);
|
||||
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &grab_info))
|
||||
{
|
||||
if (grab_info->grab_op == META_GRAB_OP_MOVING ||
|
||||
grab_info->grab_op == META_GRAB_OP_KEYBOARD_MOVING)
|
||||
{
|
||||
move_window = grab_info->grab_window;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (move_window != NULL)
|
||||
{
|
||||
if (move_window->on_all_workspaces)
|
||||
@@ -673,8 +687,13 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
|
||||
}
|
||||
else
|
||||
{
|
||||
MetaDevice *pointer;
|
||||
|
||||
pointer = meta_device_map_lookup (screen->display->device_map,
|
||||
META_CORE_POINTER_ID);
|
||||
meta_topic (META_DEBUG_FOCUS, "Focusing default window on new workspace\n");
|
||||
meta_workspace_focus_default_window (workspace, NULL, timestamp);
|
||||
meta_workspace_focus_default_window (workspace, pointer,
|
||||
NULL, timestamp);
|
||||
}
|
||||
|
||||
/* Emit switched signal from screen.c */
|
||||
@@ -774,7 +793,7 @@ meta_workspace_invalidate_work_area (MetaWorkspace *workspace)
|
||||
/* If we are in the middle of a resize or move operation, we
|
||||
* might have cached pointers to the workspace's edges */
|
||||
if (workspace == workspace->screen->active_workspace)
|
||||
meta_display_cleanup_edges (workspace->screen->display);
|
||||
meta_display_cleanup_edges (workspace->screen->display, workspace->screen);
|
||||
|
||||
g_free (workspace->work_area_monitor);
|
||||
workspace->work_area_monitor = NULL;
|
||||
@@ -1191,6 +1210,7 @@ meta_workspace_get_name (MetaWorkspace *workspace)
|
||||
|
||||
void
|
||||
meta_workspace_focus_default_window (MetaWorkspace *workspace,
|
||||
MetaDevice *pointer,
|
||||
MetaWindow *not_this_one,
|
||||
guint32 timestamp)
|
||||
{
|
||||
@@ -1207,7 +1227,8 @@ meta_workspace_focus_default_window (MetaWorkspace *workspace,
|
||||
else
|
||||
{
|
||||
MetaWindow * window;
|
||||
window = meta_screen_get_mouse_window (workspace->screen, not_this_one);
|
||||
window = meta_screen_get_mouse_window (workspace->screen,
|
||||
pointer, not_this_one);
|
||||
if (window &&
|
||||
window->type != META_WINDOW_DOCK &&
|
||||
window->type != META_WINDOW_DESKTOP)
|
||||
|
||||
@@ -25,10 +25,9 @@
|
||||
#ifndef META_COMMON_H
|
||||
#define META_COMMON_H
|
||||
|
||||
/* Don't include core headers here */
|
||||
/* Don't include GTK or core headers here */
|
||||
#include <X11/Xlib.h>
|
||||
#include <glib.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
typedef struct _MetaResizePopup MetaResizePopup;
|
||||
|
||||
@@ -303,23 +302,6 @@ struct _MetaButtonLayout
|
||||
gboolean right_buttons_has_spacer[MAX_BUTTONS_PER_CORNER];
|
||||
};
|
||||
|
||||
typedef struct _MetaFrameBorders MetaFrameBorders;
|
||||
struct _MetaFrameBorders
|
||||
{
|
||||
/* The frame border is made up of two pieces - an inner visible portion
|
||||
* and an outer portion that is invisible but responds to events.
|
||||
*/
|
||||
GtkBorder visible;
|
||||
GtkBorder invisible;
|
||||
|
||||
/* For convenience, we have a "total" border which is equal to the sum
|
||||
* of the two borders above. */
|
||||
GtkBorder total;
|
||||
};
|
||||
|
||||
/* sets all dimensions to zero */
|
||||
void meta_frame_borders_clear (MetaFrameBorders *self);
|
||||
|
||||
/* should investigate changing these to whatever most apps use */
|
||||
#define META_ICON_WIDTH 32
|
||||
#define META_ICON_HEIGHT 32
|
||||
|
||||
@@ -39,9 +39,6 @@ Window meta_get_overlay_window (MetaScreen *screen);
|
||||
GList *meta_get_window_actors (MetaScreen *screen);
|
||||
ClutterActor *meta_get_window_group_for_screen (MetaScreen *screen);
|
||||
|
||||
void meta_disable_unredirect_for_screen (MetaScreen *screen);
|
||||
void meta_enable_unredirect_for_screen (MetaScreen *screen);
|
||||
|
||||
ClutterActor *meta_get_background_actor_for_screen (MetaScreen *screen);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -64,9 +64,6 @@ void meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
void meta_compositor_unmanage_screen (MetaCompositor *compositor,
|
||||
MetaScreen *screen);
|
||||
|
||||
void meta_compositor_window_shape_changed (MetaCompositor *compositor,
|
||||
MetaWindow *window);
|
||||
|
||||
gboolean meta_compositor_process_event (MetaCompositor *compositor,
|
||||
XEvent *event,
|
||||
MetaWindow *window);
|
||||
|
||||
46
src/meta/device-map.h
Normal file
46
src/meta/device-map.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICE_MAP_H
|
||||
#define META_DEVICE_MAP_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <meta/types.h>
|
||||
#include <meta/device.h>
|
||||
|
||||
#define META_TYPE_DEVICE_MAP (meta_device_map_get_type ())
|
||||
#define META_DEVICE_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_MAP, MetaDeviceMap))
|
||||
#define META_DEVICE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_MAP, MetaDeviceMapClass))
|
||||
#define META_IS_DEVICE_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_MAP))
|
||||
#define META_IS_DEVICE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_MAP))
|
||||
#define META_DEVICE_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_MAP, MetaDeviceMapClass))
|
||||
|
||||
typedef struct _MetaDeviceMapClass MetaDeviceMapClass;
|
||||
|
||||
GType meta_device_map_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MetaDevice * meta_device_map_lookup (MetaDeviceMap *device_map,
|
||||
gint device_id);
|
||||
|
||||
MetaDisplay * meta_device_map_get_display (MetaDeviceMap *device_map);
|
||||
GList * meta_device_map_list_devices (MetaDeviceMap *device_map);
|
||||
|
||||
#endif
|
||||
44
src/meta/device.h
Normal file
44
src/meta/device.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011 Carlos Garnacho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_DEVICE_H
|
||||
#define META_DEVICE_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <meta/types.h>
|
||||
|
||||
#define META_TYPE_DEVICE (meta_device_get_type ())
|
||||
#define META_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE, MetaDevice))
|
||||
#define META_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE, MetaDeviceClass))
|
||||
#define META_IS_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE))
|
||||
#define META_IS_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE))
|
||||
#define META_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE, MetaDeviceClass))
|
||||
|
||||
typedef struct _MetaDeviceClass MetaDeviceClass;
|
||||
|
||||
GType meta_device_get_type (void) G_GNUC_CONST;
|
||||
|
||||
int meta_device_get_id (MetaDevice *device);
|
||||
MetaDisplay *meta_device_get_display (MetaDevice *device);
|
||||
|
||||
MetaDevice * meta_device_get_paired_device (MetaDevice *device);
|
||||
|
||||
#endif
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <meta/types.h>
|
||||
#include <meta/prefs.h>
|
||||
#include <meta/common.h>
|
||||
#include <meta/device-map.h>
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -74,6 +75,9 @@ gboolean meta_display_has_shape (MetaDisplay *display);
|
||||
|
||||
MetaScreen *meta_display_screen_for_root (MetaDisplay *display,
|
||||
Window xroot);
|
||||
|
||||
MetaWindow *meta_display_get_keyboard_focus_window (MetaDisplay *display,
|
||||
MetaDevice *keyboard);
|
||||
MetaWindow *meta_display_get_focus_window (MetaDisplay *display);
|
||||
|
||||
gboolean meta_display_xwindow_is_a_no_focus_window (MetaDisplay *display,
|
||||
@@ -108,9 +112,30 @@ MetaWindow* meta_display_get_tab_current (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
MetaWorkspace *workspace);
|
||||
|
||||
GList* meta_display_get_device_tab_list (MetaDisplay *display,
|
||||
MetaTabList type,
|
||||
MetaScreen *screen,
|
||||
MetaWorkspace *workspace,
|
||||
MetaDevice *device);
|
||||
|
||||
MetaWindow* meta_display_get_device_tab_next (MetaDisplay *display,
|
||||
MetaTabList type,
|
||||
MetaScreen *screen,
|
||||
MetaWorkspace *workspace,
|
||||
MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
gboolean backward);
|
||||
|
||||
MetaWindow* meta_display_get_device_tab_current (MetaDisplay *display,
|
||||
MetaTabList type,
|
||||
MetaScreen *screen,
|
||||
MetaWorkspace *workspace,
|
||||
MetaDevice *device);
|
||||
|
||||
gboolean meta_display_begin_grab_op (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
MetaWindow *window,
|
||||
MetaDevice *device,
|
||||
MetaGrabOp op,
|
||||
gboolean pointer_already_grabbed,
|
||||
gboolean frame_action,
|
||||
@@ -120,14 +145,28 @@ gboolean meta_display_begin_grab_op (MetaDisplay *display,
|
||||
int root_x,
|
||||
int root_y);
|
||||
void meta_display_end_grab_op (MetaDisplay *display,
|
||||
MetaDevice *device,
|
||||
guint32 timestamp);
|
||||
|
||||
MetaGrabOp meta_display_get_grab_op (MetaDisplay *display);
|
||||
|
||||
MetaGrabOp meta_display_get_device_grab_op (MetaDisplay *display,
|
||||
MetaDevice *device);
|
||||
|
||||
MetaKeyBindingAction meta_display_get_keybinding_action (MetaDisplay *display,
|
||||
unsigned int keycode,
|
||||
unsigned long mask);
|
||||
|
||||
void meta_display_set_keyboard_focus (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
MetaDevice *keyboard,
|
||||
gboolean focus_frame,
|
||||
guint32 timestamp);
|
||||
void meta_display_unset_keyboard_focus (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
MetaDevice *keyboard,
|
||||
guint32 timestamp);
|
||||
|
||||
/* meta_display_set_input_focus_window is like XSetInputFocus, except
|
||||
* that (a) it can't detect timestamps later than the current time,
|
||||
* since Mutter isn't part of the XServer, and thus gives erroneous
|
||||
@@ -155,4 +194,6 @@ GSList *meta_display_sort_windows_by_stacking (MetaDisplay *display,
|
||||
|
||||
Window meta_display_get_leader_window (MetaDisplay *display);
|
||||
|
||||
MetaDeviceMap * meta_display_get_device_map (MetaDisplay *display);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -67,6 +67,10 @@ void meta_keybindings_switch_window (MetaDisplay *display,
|
||||
MetaKeyBinding *binding);
|
||||
|
||||
|
||||
void meta_screen_ungrab_all_keys (MetaScreen *screen, guint32 timestamp);
|
||||
gboolean meta_screen_grab_all_keys (MetaScreen *screen, guint32 timestamp);
|
||||
void meta_screen_ungrab_all_keys (MetaScreen *screen,
|
||||
MetaDevice *device,
|
||||
guint32 timestamp);
|
||||
gboolean meta_screen_grab_all_keys (MetaScreen *screen,
|
||||
MetaDevice *device,
|
||||
guint32 timestamp);
|
||||
#endif
|
||||
|
||||
@@ -63,8 +63,7 @@ typedef enum
|
||||
META_PREF_FORCE_FULLSCREEN,
|
||||
META_PREF_LIVE_HIDDEN_WINDOWS,
|
||||
META_PREF_WORKSPACES_ONLY_ON_PRIMARY,
|
||||
META_PREF_NO_TAB_POPUP,
|
||||
META_PREF_DRAGGABLE_BORDER_WIDTH
|
||||
META_PREF_NO_TAB_POPUP
|
||||
} MetaPreference;
|
||||
|
||||
typedef void (* MetaPrefsChangedFunc) (MetaPreference pref,
|
||||
@@ -143,8 +142,6 @@ gboolean meta_prefs_get_workspaces_only_on_primary (void);
|
||||
gboolean meta_prefs_get_no_tab_popup (void);
|
||||
void meta_prefs_set_no_tab_popup (gboolean whether);
|
||||
|
||||
int meta_prefs_get_draggable_border_width (void);
|
||||
|
||||
/* XXX FIXME This should be x-macroed, but isn't yet because it would be
|
||||
* difficult (or perhaps impossible) to add the suffixes using the current
|
||||
* system. It needs some more thought, perhaps after the current system
|
||||
|
||||
@@ -52,8 +52,10 @@ struct _MetaPreview
|
||||
PangoLayout *layout;
|
||||
int text_height;
|
||||
|
||||
MetaFrameBorders borders;
|
||||
guint borders_cached : 1;
|
||||
int left_width;
|
||||
int right_width;
|
||||
int top_height;
|
||||
int bottom_height;
|
||||
|
||||
MetaButtonLayout button_layout;
|
||||
};
|
||||
|
||||
@@ -32,6 +32,8 @@ typedef struct _MetaFrame MetaFrame;
|
||||
typedef struct _MetaScreen MetaScreen;
|
||||
typedef struct _MetaWindow MetaWindow;
|
||||
typedef struct _MetaWorkspace MetaWorkspace;
|
||||
typedef struct _MetaDevice MetaDevice;
|
||||
typedef struct _MetaDeviceMap MetaDeviceMap;
|
||||
/**
|
||||
* MetaGroup: (skip)
|
||||
*
|
||||
|
||||
@@ -38,6 +38,9 @@ gboolean meta_is_syncing (void);
|
||||
void meta_set_syncing (gboolean setting);
|
||||
void meta_set_replace_current_wm (gboolean setting);
|
||||
|
||||
gboolean meta_get_use_core_devices (void);
|
||||
void meta_set_use_core_devices (gboolean setting);
|
||||
|
||||
void meta_debug_spew_real (const char *format,
|
||||
...) G_GNUC_PRINTF (1, 2);
|
||||
void meta_verbose_real (const char *format,
|
||||
|
||||
@@ -75,7 +75,6 @@ gboolean meta_window_is_shaded (MetaWindow *window);
|
||||
gboolean meta_window_is_override_redirect (MetaWindow *window);
|
||||
gboolean meta_window_is_skip_taskbar (MetaWindow *window);
|
||||
MetaRectangle *meta_window_get_rect (MetaWindow *window);
|
||||
void meta_window_get_input_rect (const MetaWindow *window, MetaRectangle *rect);
|
||||
void meta_window_get_outer_rect (const MetaWindow *window, MetaRectangle *rect);
|
||||
MetaScreen *meta_window_get_screen (MetaWindow *window);
|
||||
MetaDisplay *meta_window_get_display (MetaWindow *window);
|
||||
@@ -154,7 +153,6 @@ 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);
|
||||
gboolean meta_window_is_attached_dialog (MetaWindow *window);
|
||||
const char *meta_window_get_mutter_hints (MetaWindow *window);
|
||||
|
||||
MetaFrameType meta_window_get_frame_type (MetaWindow *window);
|
||||
|
||||
@@ -68,22 +68,5 @@
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/apps/mutter/general/draggable_border_width</key>
|
||||
<applyto>/apps/mutter/general/draggable_border_width</applyto>
|
||||
<owner>mutter</owner>
|
||||
<type>int</type>
|
||||
<default>10</default>
|
||||
<locale name="C">
|
||||
<short>Draggable border width</short>
|
||||
<long>
|
||||
The amount of total draggable borders. If the theme's visible
|
||||
borders are not enough, invisible borders will be added to meet
|
||||
this value.
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
</schemalist>
|
||||
</gconfschemafile>
|
||||
|
||||
586
src/ui/frames.c
586
src/ui/frames.c
File diff suppressed because it is too large
Load Diff
@@ -133,9 +133,10 @@ void meta_frames_update_frame_style (MetaFrames *frames,
|
||||
void meta_frames_repaint_frame (MetaFrames *frames,
|
||||
Window xwindow);
|
||||
|
||||
void meta_frames_get_borders (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
MetaFrameBorders *borders);
|
||||
void meta_frames_get_geometry (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
int *top_height, int *bottom_height,
|
||||
int *left_width, int *right_width);
|
||||
|
||||
void meta_frames_reset_bg (MetaFrames *frames,
|
||||
Window xwindow);
|
||||
@@ -144,18 +145,15 @@ void meta_frames_unflicker_bg (MetaFrames *frames,
|
||||
int target_width,
|
||||
int target_height);
|
||||
|
||||
void meta_frames_apply_shapes (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
int new_window_width,
|
||||
int new_window_height,
|
||||
gboolean window_has_shape);
|
||||
cairo_region_t *meta_frames_get_frame_bounds (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
int window_width,
|
||||
int window_height);
|
||||
|
||||
void meta_frames_get_corner_radiuses (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
float *top_left,
|
||||
float *top_right,
|
||||
float *bottom_left,
|
||||
float *bottom_right);
|
||||
|
||||
void meta_frames_move_resize_frame (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
int x,
|
||||
@@ -165,7 +163,8 @@ void meta_frames_move_resize_frame (MetaFrames *frames,
|
||||
void meta_frames_queue_draw (MetaFrames *frames,
|
||||
Window xwindow);
|
||||
|
||||
void meta_frames_notify_menu_hide (MetaFrames *frames);
|
||||
void meta_frames_notify_menu_hide (MetaFrames *frames,
|
||||
Window client_xwindow);
|
||||
|
||||
Window meta_frames_get_moving_frame (MetaFrames *frames);
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ menu_closed (GtkMenu *widget,
|
||||
|
||||
menu = data;
|
||||
|
||||
meta_frames_notify_menu_hide (menu->frames);
|
||||
meta_frames_notify_menu_hide (menu->frames, menu->client_xwindow);
|
||||
(* menu->func) (menu,
|
||||
GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||
menu->client_xwindow,
|
||||
@@ -157,7 +157,7 @@ activate_cb (GtkWidget *menuitem, gpointer data)
|
||||
|
||||
md = data;
|
||||
|
||||
meta_frames_notify_menu_hide (md->menu->frames);
|
||||
meta_frames_notify_menu_hide (md->menu->frames, md->menu->client_xwindow);
|
||||
(* md->menu->func) (md->menu,
|
||||
GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||
md->menu->client_xwindow,
|
||||
@@ -498,13 +498,17 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
|
||||
void
|
||||
meta_window_menu_popup (MetaWindowMenu *menu,
|
||||
MetaDevice *device,
|
||||
int root_x,
|
||||
int root_y,
|
||||
int button,
|
||||
guint32 timestamp)
|
||||
{
|
||||
GdkDeviceManager *device_manager;
|
||||
GdkDevice *gdkdevice;
|
||||
GdkDisplay *display;
|
||||
GdkPoint *pt;
|
||||
|
||||
|
||||
pt = g_new (GdkPoint, 1);
|
||||
|
||||
g_object_set_data_full (G_OBJECT (menu->menu),
|
||||
@@ -514,12 +518,18 @@ meta_window_menu_popup (MetaWindowMenu *menu,
|
||||
|
||||
pt->x = root_x;
|
||||
pt->y = root_y;
|
||||
|
||||
gtk_menu_popup (GTK_MENU (menu->menu),
|
||||
NULL, NULL,
|
||||
popup_position_func, pt,
|
||||
button,
|
||||
timestamp);
|
||||
|
||||
display = gtk_widget_get_display (menu->menu);
|
||||
device_manager = gdk_display_get_device_manager (display);
|
||||
gdkdevice = gdk_x11_device_manager_lookup (device_manager,
|
||||
meta_device_get_id (device));
|
||||
|
||||
gtk_menu_popup_for_device (GTK_MENU (menu->menu),
|
||||
gdkdevice,
|
||||
NULL, NULL,
|
||||
popup_position_func, pt, NULL,
|
||||
button,
|
||||
timestamp);
|
||||
|
||||
if (!gtk_widget_get_visible (menu->menu))
|
||||
meta_warning ("GtkMenu failed to grab the pointer\n");
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#define META_MENU_H
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <meta/device.h>
|
||||
#include "frames.h"
|
||||
|
||||
/* Stock icons */
|
||||
@@ -52,6 +53,7 @@ MetaWindowMenu* meta_window_menu_new (MetaFrames *frames,
|
||||
MetaWindowMenuFunc func,
|
||||
gpointer data);
|
||||
void meta_window_menu_popup (MetaWindowMenu *menu,
|
||||
MetaDevice *device,
|
||||
int root_x,
|
||||
int root_y,
|
||||
int button,
|
||||
|
||||
@@ -93,8 +93,11 @@ meta_preview_init (MetaPreview *preview)
|
||||
META_FRAME_HAS_FOCUS |
|
||||
META_FRAME_ALLOWS_SHADE |
|
||||
META_FRAME_ALLOWS_MOVE;
|
||||
|
||||
preview->borders_cached = FALSE;
|
||||
|
||||
preview->left_width = -1;
|
||||
preview->right_width = -1;
|
||||
preview->top_height = -1;
|
||||
preview->bottom_height = -1;
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
@@ -165,17 +168,26 @@ ensure_info (MetaPreview *preview)
|
||||
pango_font_description_free (font_desc);
|
||||
}
|
||||
|
||||
if (!preview->borders_cached)
|
||||
if (preview->top_height < 0)
|
||||
{
|
||||
if (preview->theme)
|
||||
meta_theme_get_frame_borders (preview->theme,
|
||||
preview->type,
|
||||
preview->text_height,
|
||||
preview->flags,
|
||||
&preview->borders);
|
||||
{
|
||||
meta_theme_get_frame_borders (preview->theme,
|
||||
preview->type,
|
||||
preview->text_height,
|
||||
preview->flags,
|
||||
&preview->top_height,
|
||||
&preview->bottom_height,
|
||||
&preview->left_width,
|
||||
&preview->right_width);
|
||||
}
|
||||
else
|
||||
meta_frame_borders_clear (&preview->borders);
|
||||
preview->borders_cached = TRUE;
|
||||
{
|
||||
preview->top_height = 0;
|
||||
preview->bottom_height = 0;
|
||||
preview->left_width = 0;
|
||||
preview->right_width = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,8 +215,8 @@ meta_preview_draw (GtkWidget *widget,
|
||||
ensure_info (preview);
|
||||
cairo_save (cr);
|
||||
|
||||
client_width = allocation.width - preview->borders.visible.left - preview->borders.visible.right;
|
||||
client_height = allocation.height - preview->borders.visible.top - preview->borders.visible.bottom;
|
||||
client_width = allocation.width - preview->left_width - preview->right_width;
|
||||
client_height = allocation.height - preview->top_height - preview->bottom_height;
|
||||
|
||||
if (client_width < 0)
|
||||
client_width = 1;
|
||||
@@ -246,7 +258,7 @@ meta_preview_get_preferred_width (GtkWidget *widget,
|
||||
|
||||
ensure_info (preview);
|
||||
|
||||
*minimum = *natural = preview->borders.visible.left + preview->borders.visible.right;
|
||||
*minimum = *natural = preview->left_width + preview->right_width;
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (preview));
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
@@ -277,7 +289,7 @@ meta_preview_get_preferred_height (GtkWidget *widget,
|
||||
|
||||
ensure_info (preview);
|
||||
|
||||
*minimum = *natural = preview->borders.visible.top + preview->borders.visible.bottom;
|
||||
*minimum = *natural = preview->top_height + preview->bottom_height;
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (preview));
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
@@ -314,11 +326,11 @@ meta_preview_size_allocate (GtkWidget *widget,
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
{
|
||||
gtk_widget_get_allocation (widget, &widget_allocation);
|
||||
child_allocation.x = widget_allocation.x + preview->borders.visible.left;
|
||||
child_allocation.y = widget_allocation.y + preview->borders.visible.top;
|
||||
|
||||
child_allocation.width = MAX (1, widget_allocation.width - preview->borders.visible.left - preview->borders.visible.right);
|
||||
child_allocation.height = MAX (1, widget_allocation.height - preview->borders.visible.top - preview->borders.visible.bottom);
|
||||
child_allocation.x = widget_allocation.x + preview->left_width;
|
||||
child_allocation.y = widget_allocation.y + preview->top_height;
|
||||
|
||||
child_allocation.width = MAX (1, widget_allocation.width - preview->left_width - preview->right_width);
|
||||
child_allocation.height = MAX (1, widget_allocation.height - preview->top_height - preview->bottom_height);
|
||||
|
||||
gtk_widget_size_allocate (child, &child_allocation);
|
||||
}
|
||||
@@ -333,7 +345,10 @@ clear_cache (MetaPreview *preview)
|
||||
preview->layout = NULL;
|
||||
}
|
||||
|
||||
preview->borders_cached = FALSE;
|
||||
preview->left_width = -1;
|
||||
preview->right_width = -1;
|
||||
preview->top_height = -1;
|
||||
preview->bottom_height = -1;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -858,12 +858,21 @@ static WnckWindowDisplayInfo
|
||||
meta_convert_meta_to_wnck (MetaWindow *window, MetaScreen *screen)
|
||||
{
|
||||
WnckWindowDisplayInfo wnck_window;
|
||||
MetaFocusInfo *focus_info;
|
||||
GHashTableIter iter;
|
||||
|
||||
wnck_window.icon = window->icon;
|
||||
wnck_window.mini_icon = window->mini_icon;
|
||||
|
||||
wnck_window.is_active = FALSE;
|
||||
if (window == window->display->expected_focus_window)
|
||||
wnck_window.is_active = TRUE;
|
||||
|
||||
g_hash_table_iter_init (&iter, window->display->focus_info);
|
||||
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &focus_info))
|
||||
{
|
||||
if (window == focus_info->expected_focus_window)
|
||||
wnck_window.is_active = TRUE;
|
||||
}
|
||||
|
||||
if (window->frame)
|
||||
{
|
||||
|
||||
@@ -217,7 +217,10 @@ struct _MetaButtonSpace
|
||||
*/
|
||||
struct _MetaFrameGeometry
|
||||
{
|
||||
MetaFrameBorders borders;
|
||||
int left_width;
|
||||
int right_width;
|
||||
int top_height;
|
||||
int bottom_height;
|
||||
|
||||
int width;
|
||||
int height;
|
||||
@@ -925,7 +928,10 @@ void meta_frame_layout_unref (MetaFrameLayout *layout)
|
||||
void meta_frame_layout_get_borders (const MetaFrameLayout *layout,
|
||||
int text_height,
|
||||
MetaFrameFlags flags,
|
||||
MetaFrameBorders *borders);
|
||||
int *top_height,
|
||||
int *bottom_height,
|
||||
int *left_width,
|
||||
int *right_width);
|
||||
void meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
int text_height,
|
||||
MetaFrameFlags flags,
|
||||
@@ -1118,8 +1124,10 @@ void meta_theme_get_frame_borders (MetaTheme *theme,
|
||||
MetaFrameType type,
|
||||
int text_height,
|
||||
MetaFrameFlags flags,
|
||||
MetaFrameBorders *borders);
|
||||
|
||||
int *top_height,
|
||||
int *bottom_height,
|
||||
int *left_width,
|
||||
int *right_width);
|
||||
void meta_theme_calc_geometry (MetaTheme *theme,
|
||||
MetaFrameType type,
|
||||
int text_height,
|
||||
@@ -1128,7 +1136,7 @@ void meta_theme_calc_geometry (MetaTheme *theme,
|
||||
int client_height,
|
||||
const MetaButtonLayout *button_layout,
|
||||
MetaFrameGeometry *fgeom);
|
||||
|
||||
|
||||
MetaFrameLayout* meta_theme_lookup_layout (MetaTheme *theme,
|
||||
const char *name);
|
||||
void meta_theme_insert_layout (MetaTheme *theme,
|
||||
|
||||
@@ -959,7 +959,7 @@ run_theme_benchmark (void)
|
||||
{
|
||||
GtkWidget* widget;
|
||||
cairo_surface_t *pixmap;
|
||||
MetaFrameBorders borders;
|
||||
int top_height, bottom_height, left_width, right_width;
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST] =
|
||||
{
|
||||
META_BUTTON_STATE_NORMAL,
|
||||
@@ -986,7 +986,10 @@ run_theme_benchmark (void)
|
||||
META_FRAME_TYPE_NORMAL,
|
||||
get_text_height (widget),
|
||||
get_flags (widget),
|
||||
&borders);
|
||||
&top_height,
|
||||
&bottom_height,
|
||||
&left_width,
|
||||
&right_width);
|
||||
|
||||
layout = create_title_layout (widget);
|
||||
|
||||
@@ -1021,8 +1024,8 @@ run_theme_benchmark (void)
|
||||
*/
|
||||
pixmap = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
|
||||
CAIRO_CONTENT_COLOR,
|
||||
client_width + borders.visible.left + borders.visible.right,
|
||||
client_height + borders.visible.top + borders.visible.bottom);
|
||||
client_width + left_width + right_width,
|
||||
client_height + top_height + bottom_height);
|
||||
|
||||
cr = cairo_create (pixmap);
|
||||
|
||||
|
||||
209
src/ui/theme.c
209
src/ui/theme.c
@@ -56,7 +56,6 @@
|
||||
#include "theme-private.h"
|
||||
#include <meta/util.h>
|
||||
#include <meta/gradient.h>
|
||||
#include <meta/prefs.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
@@ -401,9 +400,12 @@ void
|
||||
meta_frame_layout_get_borders (const MetaFrameLayout *layout,
|
||||
int text_height,
|
||||
MetaFrameFlags flags,
|
||||
MetaFrameBorders *borders)
|
||||
int *top_height,
|
||||
int *bottom_height,
|
||||
int *left_width,
|
||||
int *right_width)
|
||||
{
|
||||
int buttons_height, title_height, draggable_borders;
|
||||
int buttons_height, title_height;
|
||||
|
||||
g_return_if_fail (layout != NULL);
|
||||
|
||||
@@ -416,35 +418,35 @@ meta_frame_layout_get_borders (const MetaFrameLayout *layout,
|
||||
layout->title_vertical_pad +
|
||||
layout->title_border.top + layout->title_border.bottom;
|
||||
|
||||
borders->visible.top = MAX (buttons_height, title_height);
|
||||
borders->visible.left = layout->left_width;
|
||||
borders->visible.right = layout->right_width;
|
||||
if (flags & META_FRAME_SHADED)
|
||||
borders->visible.bottom = 0;
|
||||
else
|
||||
borders->visible.bottom = layout->bottom_height;
|
||||
if (top_height)
|
||||
{
|
||||
*top_height = MAX (buttons_height, title_height);
|
||||
}
|
||||
|
||||
if (left_width)
|
||||
*left_width = layout->left_width;
|
||||
if (right_width)
|
||||
*right_width = layout->right_width;
|
||||
|
||||
if (bottom_height)
|
||||
{
|
||||
if (flags & META_FRAME_SHADED)
|
||||
*bottom_height = 0;
|
||||
else
|
||||
*bottom_height = layout->bottom_height;
|
||||
}
|
||||
|
||||
if (flags & META_FRAME_FULLSCREEN)
|
||||
{
|
||||
meta_frame_borders_clear (borders);
|
||||
return;
|
||||
if (top_height)
|
||||
*top_height = 0;
|
||||
if (bottom_height)
|
||||
*bottom_height = 0;
|
||||
if (left_width)
|
||||
*left_width = 0;
|
||||
if (right_width)
|
||||
*right_width = 0;
|
||||
}
|
||||
|
||||
draggable_borders = meta_prefs_get_draggable_border_width ();
|
||||
|
||||
borders->invisible.left = MAX (0, draggable_borders - borders->visible.left);
|
||||
borders->invisible.right = MAX (0, draggable_borders - borders->visible.right);
|
||||
borders->invisible.bottom = MAX (0, draggable_borders - borders->visible.bottom);
|
||||
|
||||
/* borders.visible is the height of the *title bar*. We can't do the same
|
||||
* algorithm here, titlebars are expectedly much bigger. Just subtract a couple
|
||||
* pixels to get a proper feel. */
|
||||
borders->invisible.top = MAX (0, draggable_borders - 2);
|
||||
|
||||
borders->total.left = borders->invisible.left + borders->visible.left;
|
||||
borders->total.right = borders->invisible.right + borders->visible.right;
|
||||
borders->total.bottom = borders->invisible.bottom + borders->visible.bottom;
|
||||
borders->total.top = borders->invisible.top + borders->visible.top;
|
||||
}
|
||||
|
||||
static MetaButtonType
|
||||
@@ -632,19 +634,18 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
gboolean left_buttons_has_spacer[MAX_BUTTONS_PER_CORNER];
|
||||
GdkRectangle *right_bg_rects[MAX_BUTTONS_PER_CORNER];
|
||||
gboolean right_buttons_has_spacer[MAX_BUTTONS_PER_CORNER];
|
||||
|
||||
MetaFrameBorders borders;
|
||||
|
||||
meta_frame_layout_get_borders (layout, text_height,
|
||||
flags,
|
||||
&borders);
|
||||
&fgeom->top_height,
|
||||
&fgeom->bottom_height,
|
||||
&fgeom->left_width,
|
||||
&fgeom->right_width);
|
||||
|
||||
fgeom->borders = borders;
|
||||
|
||||
width = client_width + borders.total.left + borders.total.right;
|
||||
width = client_width + fgeom->left_width + fgeom->right_width;
|
||||
|
||||
height = ((flags & META_FRAME_SHADED) ? 0: client_height) +
|
||||
borders.total.top + borders.total.bottom;
|
||||
fgeom->top_height + fgeom->bottom_height;
|
||||
|
||||
fgeom->width = width;
|
||||
fgeom->height = height;
|
||||
@@ -661,7 +662,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
switch (layout->button_sizing)
|
||||
{
|
||||
case META_BUTTON_SIZING_ASPECT:
|
||||
button_height = borders.visible.top - layout->button_border.top - layout->button_border.bottom;
|
||||
button_height = fgeom->top_height - layout->button_border.top - layout->button_border.bottom;
|
||||
button_width = button_height / layout->button_aspect;
|
||||
break;
|
||||
case META_BUTTON_SIZING_FIXED:
|
||||
@@ -846,11 +847,11 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
fgeom->n_right_buttons = n_right;
|
||||
|
||||
/* center buttons vertically */
|
||||
button_y = (borders.visible.top -
|
||||
(button_height + layout->button_border.top + layout->button_border.bottom)) / 2 + layout->button_border.top + borders.invisible.top;
|
||||
button_y = (fgeom->top_height -
|
||||
(button_height + layout->button_border.top + layout->button_border.bottom)) / 2 + layout->button_border.top;
|
||||
|
||||
/* right edge of farthest-right button */
|
||||
x = width - layout->right_titlebar_edge - borders.invisible.right;
|
||||
x = width - layout->right_titlebar_edge;
|
||||
|
||||
i = n_right - 1;
|
||||
while (i >= 0)
|
||||
@@ -898,7 +899,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
/* Now x changes to be position from the left and we go through
|
||||
* the left-side buttons
|
||||
*/
|
||||
x = layout->left_titlebar_edge + borders.invisible.left;
|
||||
x = layout->left_titlebar_edge;
|
||||
for (i = 0; i < n_left; i++)
|
||||
{
|
||||
MetaButtonSpace *rect;
|
||||
@@ -941,9 +942,9 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
* rather than centering it like the buttons
|
||||
*/
|
||||
fgeom->title_rect.x = x + layout->title_border.left;
|
||||
fgeom->title_rect.y = layout->title_border.top + borders.invisible.top;
|
||||
fgeom->title_rect.y = layout->title_border.top;
|
||||
fgeom->title_rect.width = title_right_edge - fgeom->title_rect.x;
|
||||
fgeom->title_rect.height = borders.visible.top - layout->title_border.top - layout->title_border.bottom;
|
||||
fgeom->title_rect.height = fgeom->top_height - layout->title_border.top - layout->title_border.bottom;
|
||||
|
||||
/* Nuke title if it won't fit */
|
||||
if (fgeom->title_rect.width < 0 ||
|
||||
@@ -963,14 +964,14 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
fgeom->bottom_left_corner_rounded_radius = 0;
|
||||
fgeom->bottom_right_corner_rounded_radius = 0;
|
||||
|
||||
if (borders.visible.top + borders.visible.left >= min_size_for_rounding)
|
||||
if (fgeom->top_height + fgeom->left_width >= min_size_for_rounding)
|
||||
fgeom->top_left_corner_rounded_radius = layout->top_left_corner_rounded_radius;
|
||||
if (borders.visible.top + borders.visible.right >= min_size_for_rounding)
|
||||
if (fgeom->top_height + fgeom->right_width >= min_size_for_rounding)
|
||||
fgeom->top_right_corner_rounded_radius = layout->top_right_corner_rounded_radius;
|
||||
|
||||
if (borders.visible.bottom + borders.visible.left >= min_size_for_rounding)
|
||||
if (fgeom->bottom_height + fgeom->left_width >= min_size_for_rounding)
|
||||
fgeom->bottom_left_corner_rounded_radius = layout->bottom_left_corner_rounded_radius;
|
||||
if (borders.visible.bottom + borders.visible.right >= min_size_for_rounding)
|
||||
if (fgeom->bottom_height + fgeom->right_width >= min_size_for_rounding)
|
||||
fgeom->bottom_right_corner_rounded_radius = layout->bottom_right_corner_rounded_radius;
|
||||
}
|
||||
|
||||
@@ -1195,15 +1196,8 @@ meta_color_spec_new_from_string (const char *str,
|
||||
str[8] == 'o' && str[9] == 'm')
|
||||
{
|
||||
const char *color_name_start, *fallback_str_start, *end;
|
||||
char *color_name;
|
||||
char *color_name, *fallback_str;
|
||||
MetaColorSpec *fallback = NULL;
|
||||
static gboolean debug, debug_set = FALSE;
|
||||
|
||||
if (!debug_set)
|
||||
{
|
||||
debug = g_getenv ("MUTTER_DISABLE_FALLBACK_COLOR") != NULL;
|
||||
debug_set = TRUE;
|
||||
}
|
||||
|
||||
if (str[10] != '(')
|
||||
{
|
||||
@@ -1244,18 +1238,9 @@ meta_color_spec_new_from_string (const char *str,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!debug)
|
||||
{
|
||||
char *fallback_str;
|
||||
fallback_str = g_strndup (fallback_str_start,
|
||||
end - fallback_str_start);
|
||||
fallback = meta_color_spec_new_from_string (fallback_str, err);
|
||||
g_free (fallback_str);
|
||||
}
|
||||
else
|
||||
{
|
||||
fallback = meta_color_spec_new_from_string ("pink", err);
|
||||
}
|
||||
fallback_str = g_strndup (fallback_str_start, end - fallback_str_start);
|
||||
fallback = meta_color_spec_new_from_string (fallback_str, err);
|
||||
g_free (fallback_str);
|
||||
|
||||
if (fallback == NULL)
|
||||
return NULL;
|
||||
@@ -3585,10 +3570,10 @@ fill_env (MetaPositionExprEnv *env,
|
||||
env->object_height = -1;
|
||||
if (info->fgeom)
|
||||
{
|
||||
env->left_width = info->fgeom->borders.visible.left;
|
||||
env->right_width = info->fgeom->borders.visible.right;
|
||||
env->top_height = info->fgeom->borders.visible.top;
|
||||
env->bottom_height = info->fgeom->borders.visible.bottom;
|
||||
env->left_width = info->fgeom->left_width;
|
||||
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;
|
||||
}
|
||||
@@ -4637,7 +4622,6 @@ meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
GdkPixbuf *icon)
|
||||
{
|
||||
int i, j;
|
||||
GdkRectangle visible_rect;
|
||||
GdkRectangle titlebar_rect;
|
||||
GdkRectangle left_titlebar_edge;
|
||||
GdkRectangle right_titlebar_edge;
|
||||
@@ -4646,19 +4630,11 @@ meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
GdkRectangle left_edge, right_edge, bottom_edge;
|
||||
PangoRectangle logical_rect;
|
||||
MetaDrawInfo draw_info;
|
||||
const MetaFrameBorders *borders;
|
||||
|
||||
borders = &fgeom->borders;
|
||||
|
||||
visible_rect.x = borders->invisible.left;
|
||||
visible_rect.y = borders->invisible.top;
|
||||
visible_rect.width = fgeom->width - borders->invisible.left - borders->invisible.right;
|
||||
visible_rect.height = fgeom->height - borders->invisible.top - borders->invisible.bottom;
|
||||
|
||||
titlebar_rect.x = visible_rect.x;
|
||||
titlebar_rect.y = visible_rect.y;
|
||||
titlebar_rect.width = visible_rect.width;
|
||||
titlebar_rect.height = borders->visible.top;
|
||||
|
||||
titlebar_rect.x = 0;
|
||||
titlebar_rect.y = 0;
|
||||
titlebar_rect.width = fgeom->width;
|
||||
titlebar_rect.height = fgeom->top_height;
|
||||
|
||||
left_titlebar_edge.x = titlebar_rect.x;
|
||||
left_titlebar_edge.y = titlebar_rect.y + fgeom->top_titlebar_edge;
|
||||
@@ -4680,20 +4656,20 @@ meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
bottom_titlebar_edge.height = fgeom->bottom_titlebar_edge;
|
||||
bottom_titlebar_edge.y = titlebar_rect.y + titlebar_rect.height - bottom_titlebar_edge.height;
|
||||
|
||||
left_edge.x = visible_rect.x;
|
||||
left_edge.y = visible_rect.y + borders->visible.top;
|
||||
left_edge.width = borders->visible.left;
|
||||
left_edge.height = visible_rect.height - borders->visible.top - borders->visible.bottom;
|
||||
left_edge.x = 0;
|
||||
left_edge.y = fgeom->top_height;
|
||||
left_edge.width = fgeom->left_width;
|
||||
left_edge.height = fgeom->height - fgeom->top_height - fgeom->bottom_height;
|
||||
|
||||
right_edge.x = visible_rect.x + visible_rect.width - borders->visible.right;
|
||||
right_edge.y = visible_rect.y + borders->visible.top;
|
||||
right_edge.width = borders->visible.right;
|
||||
right_edge.height = visible_rect.height - borders->visible.top - borders->visible.bottom;
|
||||
right_edge.x = fgeom->width - fgeom->right_width;
|
||||
right_edge.y = fgeom->top_height;
|
||||
right_edge.width = fgeom->right_width;
|
||||
right_edge.height = fgeom->height - fgeom->top_height - fgeom->bottom_height;
|
||||
|
||||
bottom_edge.x = visible_rect.x;
|
||||
bottom_edge.y = visible_rect.y + visible_rect.height - borders->visible.bottom;
|
||||
bottom_edge.width = visible_rect.width;
|
||||
bottom_edge.height = borders->visible.bottom;
|
||||
bottom_edge.x = 0;
|
||||
bottom_edge.y = fgeom->height - fgeom->bottom_height;
|
||||
bottom_edge.width = fgeom->width;
|
||||
bottom_edge.height = fgeom->bottom_height;
|
||||
|
||||
if (title_layout)
|
||||
pango_layout_get_pixel_extents (title_layout,
|
||||
@@ -4715,7 +4691,10 @@ meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
switch ((MetaFramePiece) i)
|
||||
{
|
||||
case META_FRAME_PIECE_ENTIRE_BACKGROUND:
|
||||
rect = visible_rect;
|
||||
rect.x = 0;
|
||||
rect.y = 0;
|
||||
rect.width = fgeom->width;
|
||||
rect.height = fgeom->height;
|
||||
break;
|
||||
|
||||
case META_FRAME_PIECE_TITLEBAR:
|
||||
@@ -4763,7 +4742,10 @@ meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
break;
|
||||
|
||||
case META_FRAME_PIECE_OVERLAY:
|
||||
rect = visible_rect;
|
||||
rect.x = 0;
|
||||
rect.y = 0;
|
||||
rect.width = fgeom->width;
|
||||
rect.height = fgeom->height;
|
||||
break;
|
||||
|
||||
case META_FRAME_PIECE_LAST:
|
||||
@@ -5603,20 +5585,30 @@ meta_theme_draw_frame_by_name (MetaTheme *theme,
|
||||
}
|
||||
|
||||
void
|
||||
meta_theme_get_frame_borders (MetaTheme *theme,
|
||||
MetaFrameType type,
|
||||
int text_height,
|
||||
MetaFrameFlags flags,
|
||||
MetaFrameBorders *borders)
|
||||
meta_theme_get_frame_borders (MetaTheme *theme,
|
||||
MetaFrameType type,
|
||||
int text_height,
|
||||
MetaFrameFlags flags,
|
||||
int *top_height,
|
||||
int *bottom_height,
|
||||
int *left_width,
|
||||
int *right_width)
|
||||
{
|
||||
MetaFrameStyle *style;
|
||||
|
||||
g_return_if_fail (type < META_FRAME_TYPE_LAST);
|
||||
|
||||
|
||||
if (top_height)
|
||||
*top_height = 0;
|
||||
if (bottom_height)
|
||||
*bottom_height = 0;
|
||||
if (left_width)
|
||||
*left_width = 0;
|
||||
if (right_width)
|
||||
*right_width = 0;
|
||||
|
||||
style = theme_get_style (theme, type, flags);
|
||||
|
||||
meta_frame_borders_clear (borders);
|
||||
|
||||
|
||||
/* Parser is not supposed to allow this currently */
|
||||
if (style == NULL)
|
||||
return;
|
||||
@@ -5624,7 +5616,8 @@ meta_theme_get_frame_borders (MetaTheme *theme,
|
||||
meta_frame_layout_get_borders (style->layout,
|
||||
text_height,
|
||||
flags,
|
||||
borders);
|
||||
top_height, bottom_height,
|
||||
left_width, right_width);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -171,6 +171,7 @@ meta_tile_preview_free (MetaTilePreview *preview)
|
||||
|
||||
void
|
||||
meta_tile_preview_show (MetaTilePreview *preview,
|
||||
MetaDevice *pointer,
|
||||
MetaRectangle *tile_rect)
|
||||
{
|
||||
GdkWindow *window;
|
||||
@@ -187,6 +188,7 @@ meta_tile_preview_show (MetaTilePreview *preview,
|
||||
window = gtk_widget_get_window (preview->preview_window);
|
||||
meta_core_lower_beneath_grab_window (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||
GDK_WINDOW_XID (window),
|
||||
meta_device_get_id (pointer),
|
||||
gtk_get_current_event_time ());
|
||||
|
||||
old_rect.x = old_rect.y = 0;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user