Compare commits
55 Commits
3.5.3
...
wip/cb2eb3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7623b97399 | ||
|
|
8d8e0cb055 | ||
|
|
1620131434 | ||
|
|
873da3405c | ||
|
|
8a062b39ab | ||
|
|
3ab3c8423e | ||
|
|
11e1f687f9 | ||
|
|
25815473e6 | ||
|
|
5053997021 | ||
|
|
b6468a7fa5 | ||
|
|
e2e0ead870 | ||
|
|
f80a5d892f | ||
|
|
5823c5e0f5 | ||
|
|
ecac8c9d09 | ||
|
|
2666303045 | ||
|
|
0a9bc8995a | ||
|
|
143436c37c | ||
|
|
7c11e0b0eb | ||
|
|
beccdd64f5 | ||
|
|
dd0a6d7e08 | ||
|
|
02bb550bd6 | ||
|
|
8f789a8fad | ||
|
|
865b9df9a9 | ||
|
|
1e9268045d | ||
|
|
20acb73024 | ||
|
|
b97ad209c2 | ||
|
|
f2d8e3266b | ||
|
|
11be2fa36a | ||
|
|
302302a116 | ||
|
|
fd13dad0c4 | ||
|
|
2da1ed1ae0 | ||
|
|
58f04c7284 | ||
|
|
a6737ef129 | ||
|
|
52fee4df1c | ||
|
|
8da12ac0e0 | ||
|
|
e43f8db6e8 | ||
|
|
a7cbc9ad9a | ||
|
|
0be3f81841 | ||
|
|
f53e26bc39 | ||
|
|
cc3be6da4d | ||
|
|
fef2a061a8 | ||
|
|
bdb995d758 | ||
|
|
2a729f89aa | ||
|
|
af242b27b2 | ||
|
|
a198ff415a | ||
|
|
981c1c2ab5 | ||
|
|
fb35f9fa49 | ||
|
|
9194a04faa | ||
|
|
a0ed41d8ce | ||
|
|
e3e87727b6 | ||
|
|
2d878f29eb | ||
|
|
307e4c7d0e | ||
|
|
43e7687d89 | ||
|
|
2e4f67f3f9 | ||
|
|
69c11b59c4 |
41
NEWS
41
NEWS
@@ -1,44 +1,3 @@
|
||||
3.5.3
|
||||
=====
|
||||
* Simplify plugin system [Jasper; #676855]
|
||||
* meta-window-actor: Don't unredirect shaped windows [Jasper; #677657]
|
||||
* screen: Add new public meta_screen_get_current_monitor API [Tim; #642591]
|
||||
* frames: Increase the size of resize corners [Jasper; #677669]
|
||||
* window: Make some window methods public [Jasper; #678126]
|
||||
* Fix crash when running mutter stand-alone [Jasper; #678238]
|
||||
* meta-window-actor: Fix potential crash in shaping code [Jasper; #677977]
|
||||
* Misc. fixes [Jasper, Marc-Antoine, Rico]
|
||||
|
||||
Contributors:
|
||||
Tim L, Marc-Antoine Perennou, Jasper St. Pierre, Rico Tzschichholz
|
||||
|
||||
Translations:
|
||||
|
||||
Daniel Mustieles [es], Matej Urbančič [sl], Khaled Hosny [ar],
|
||||
Bruno Brouard [fr], Fran Diéguez [gl]
|
||||
|
||||
3.5.2
|
||||
=====
|
||||
* keybindings: Remove 'toggle-recording' binding [Florian; #674376]
|
||||
* Switch to gtk-doc syntax [Jasper; #673752]
|
||||
* shaped-texture: never slice shape mask texture [Robert; #674731]
|
||||
* Make Mutter stop relying on Cogl including a GL header [Neil; #672711]
|
||||
* Make support for "XFree86" Xinerama mandatory [Owen; #674727]
|
||||
* meta_window_move_frame(): fix crash when frame is NULL [Owen; #675254]
|
||||
* Fix memory leaks [Pavel; #672640]
|
||||
* Code cleanups [Jasper; #671104 #674876 #676052]
|
||||
* Look for themes in XDG user data dir [Jasper; #675316]
|
||||
* Remove frame pixel caching [Jasper; #675111]
|
||||
* stack: Ignore keep-on-top property on maximized windows [Florian; #673581]
|
||||
* Misc. fixes [Javier, Jasper, Owen, Rico]
|
||||
|
||||
Contributors:
|
||||
Robert Bragg, Javier Járdon, Florian Müllner, Neil Roberts, Jasper St. Pierre,
|
||||
Owen Taylor, Rico Tzschichholz, Pavel Vasin
|
||||
|
||||
Translations:
|
||||
Praveen Illa [te], Luca Ferretti [it], Daniel Mustieles [es]
|
||||
|
||||
3.4.1
|
||||
=====
|
||||
* API change: the meta_display_add_keybinding() function added in 3.4
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
AC_PREREQ(2.50)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [5])
|
||||
m4_define([mutter_micro_version], [3])
|
||||
m4_define([mutter_minor_version], [4])
|
||||
m4_define([mutter_micro_version], [1])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
@@ -113,6 +113,9 @@ AC_ARG_ENABLE(shape,
|
||||
[disable mutter's use of the shaped window extension]),,
|
||||
enable_shape=auto)
|
||||
|
||||
## try definining HAVE_BACKTRACE
|
||||
AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])
|
||||
|
||||
AM_GLIB_GNU_GETTEXT
|
||||
|
||||
## here we get the flags we'll actually use
|
||||
|
||||
@@ -259,8 +259,6 @@ Overview of Theme Format Version 1
|
||||
<!-- color obtained by a 0.5 alpha composite of the second color onto the first -->
|
||||
<color value="blend/gtk:bg[SELECTED]/gtk:fg[SELECTED]/0.5"/>
|
||||
</gradient>
|
||||
<!-- image has an optional colorize="#color" attribute to give the
|
||||
image a certain color -->
|
||||
<image filename="foo.png" alpha="0.7"
|
||||
x="10" y="30" width="width / 3" height="height / 4"/>
|
||||
<gtk_arrow state="normal" shadow="in" arrow="up"
|
||||
|
||||
228
po/ar.po
228
po/ar.po
@@ -10,8 +10,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-06-13 20:18+0200\n"
|
||||
"PO-Revision-Date: 2012-06-13 20:20+0200\n"
|
||||
"POT-Creation-Date: 2012-03-30 05:24+0200\n"
|
||||
"PO-Revision-Date: 2012-03-30 05:24+0200\n"
|
||||
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
||||
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
||||
"Language: ar\n"
|
||||
@@ -37,13 +37,13 @@ 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:492
|
||||
#, c-format
|
||||
#, fuzzy, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
msgstr ""
|
||||
msgstr "لا يمكن الحصول على اختيار مدير النوافذ على الشاشة %d العرض \"%s\"\n"
|
||||
|
||||
#: ../src/core/bell.c:320
|
||||
#: ../src/core/bell.c:307
|
||||
msgid "Bell event"
|
||||
msgstr "حدث جرس"
|
||||
|
||||
@@ -75,12 +75,12 @@ msgstr "ا_نتظر"
|
||||
msgid "_Force Quit"
|
||||
msgstr "أ_جبر الإنهاء"
|
||||
|
||||
#: ../src/core/display.c:380
|
||||
#: ../src/core/display.c:387
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "الامتداد %s مفقود، لكنه مطلوب للتركيب"
|
||||
|
||||
#: ../src/core/display.c:446
|
||||
#: ../src/core/display.c:453
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "فشل فتح عرض نظام نوافذ إكس '%s'\n"
|
||||
@@ -92,36 +92,36 @@ msgid ""
|
||||
"binding\n"
|
||||
msgstr "يستعمل برنامج آخر المفتاح %s بالفعل مع المغيرين %x كرابط\n"
|
||||
|
||||
#: ../src/core/main.c:196
|
||||
#: ../src/core/main.c:206
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "عطّل الاتصال بمدير الجلسة"
|
||||
|
||||
#: ../src/core/main.c:202
|
||||
#: ../src/core/main.c:212
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "استبدل بمدير النوافذ الذي يعمل"
|
||||
|
||||
#: ../src/core/main.c:208
|
||||
#: ../src/core/main.c:218
|
||||
msgid "Specify session management ID"
|
||||
msgstr "حدّد رقم هويّة إدارة الجلسة"
|
||||
|
||||
#: ../src/core/main.c:213
|
||||
#: ../src/core/main.c:223
|
||||
msgid "X Display to use"
|
||||
msgstr "معراض س الذي سيستعمل"
|
||||
|
||||
#: ../src/core/main.c:219
|
||||
#: ../src/core/main.c:229
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "ابدأ الجلسة من ملف محفوظ"
|
||||
|
||||
#: ../src/core/main.c:225
|
||||
#: ../src/core/main.c:235
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "اجعل نداءات س متزامنة"
|
||||
|
||||
#: ../src/core/main.c:494
|
||||
#: ../src/core/main.c:504
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "فشلت قراءة دليل السِمات : %s\n"
|
||||
|
||||
#: ../src/core/main.c:510
|
||||
#: ../src/core/main.c:520
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -146,10 +146,10 @@ msgid "Print version"
|
||||
msgstr "اطبع الإصدارة"
|
||||
|
||||
#: ../src/core/mutter.c:60
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "ملحق مَتَر الذي سيُستخدم"
|
||||
msgid "Comma-separated list of compositor plugins"
|
||||
msgstr "قائمة بملحقات المزج مفصولة بفاصلة"
|
||||
|
||||
#: ../src/core/prefs.c:1064
|
||||
#: ../src/core/prefs.c:1077
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -157,12 +157,12 @@ msgstr ""
|
||||
"عطّلت الحلول الجزئيّة للتطبيقات المعطوبة . ربما لن تتصرف بعض التطبيقات "
|
||||
"بسلامة.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1139
|
||||
#: ../src/core/prefs.c:1152
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr "لا يمكن تحليل وصف الخط \"%s\" من مفتاح GSettings %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1205
|
||||
#: ../src/core/prefs.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -170,7 +170,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"\"%s\" الموجود في قاعدة بيانات الإعدادات ليس قيمة سليمة لمغير أزرار الفأرة\n"
|
||||
|
||||
#: ../src/core/prefs.c:1723
|
||||
#: ../src/core/prefs.c:1739
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -179,17 +179,17 @@ msgstr ""
|
||||
"\"%s\" الموجود في قاعدة بيانات الإعدادات ليس قيمة سليمة لارتباط المفتاح \"%s"
|
||||
"\"\n"
|
||||
|
||||
#: ../src/core/prefs.c:1820
|
||||
#: ../src/core/prefs.c:1836
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "مساحة العمل %d"
|
||||
|
||||
#: ../src/core/screen.c:652
|
||||
#: ../src/core/screen.c:730
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "الشاشة %d على العرض '%s' غير صحيحة\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:746
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -198,18 +198,18 @@ msgstr ""
|
||||
"الشاشة %d على العرض \"%s\" لها مدير نوافذ بالفعل، حاول استعمال خيار التبديل "
|
||||
"--replace لتحُلّ محلّ مدير النوافذ الحالي.\n"
|
||||
|
||||
#: ../src/core/screen.c:695
|
||||
#: ../src/core/screen.c:773
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "لا يمكن الحصول على اختيار مدير النوافذ على الشاشة %d العرض \"%s\"\n"
|
||||
|
||||
#: ../src/core/screen.c:750
|
||||
#: ../src/core/screen.c:828
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "الشاشة %d على العرض \"%s\" لها مدير نوافذ بالفعل\n"
|
||||
|
||||
#: ../src/core/screen.c:935
|
||||
#: ../src/core/screen.c:1013
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "لا يمكن ترك الشاشة %d على العرض \"%s\"\n"
|
||||
@@ -269,44 +269,44 @@ msgstr ""
|
||||
"هذه النوافذ لا تدعم "احفظ الضبط الحالي" يجب إعادة تشغيلها يدويا "
|
||||
"عند الولوج المرة القادمة."
|
||||
|
||||
#: ../src/core/util.c:80
|
||||
#: ../src/core/util.c:111
|
||||
#, c-format
|
||||
msgid "Failed to open debug log: %s\n"
|
||||
msgstr "فشل فتح سِجِلّ التنقيح: %s\n"
|
||||
|
||||
#: ../src/core/util.c:90
|
||||
#: ../src/core/util.c:121
|
||||
#, c-format
|
||||
msgid "Failed to fdopen() log file %s: %s\n"
|
||||
msgstr "فشل fdopen() ملف الرسائل %s: %s\n"
|
||||
|
||||
#: ../src/core/util.c:96
|
||||
#: ../src/core/util.c:127
|
||||
#, c-format
|
||||
msgid "Opened log file %s\n"
|
||||
msgstr "فُتِح ملف السِّجِل %s\n"
|
||||
|
||||
#: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
|
||||
#: ../src/core/util.c:146 ../src/tools/mutter-message.c:149
|
||||
#, c-format
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "جُمِّع مَتَر دون دعم للنمط المطنب\n"
|
||||
|
||||
#: ../src/core/util.c:259
|
||||
#: ../src/core/util.c:290
|
||||
msgid "Window manager: "
|
||||
msgstr "مدير النوافذ: "
|
||||
|
||||
#: ../src/core/util.c:407
|
||||
#: ../src/core/util.c:438
|
||||
msgid "Bug in window manager: "
|
||||
msgstr "علّة في مدير النوافذ: "
|
||||
|
||||
#: ../src/core/util.c:438
|
||||
#: ../src/core/util.c:471
|
||||
msgid "Window manager warning: "
|
||||
msgstr "تحذير مدير النوافذ: "
|
||||
|
||||
#: ../src/core/util.c:466
|
||||
#: ../src/core/util.c:499
|
||||
msgid "Window manager error: "
|
||||
msgstr "خطأ مدير النوافذ: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7234
|
||||
#: ../src/core/window.c:7266
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -322,7 +322,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7899
|
||||
#: ../src/core/window.c:7931
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@@ -331,22 +331,22 @@ msgstr ""
|
||||
"ضبطت النافذة %s تلميحة MWM يدل على انه لا يمكن تحجيمها، لكنها تضبط الحجم "
|
||||
"الأدنى %d x %d و الحجم الأقصى %d x %d، هذا ليس له أي معنى.\n"
|
||||
|
||||
#: ../src/core/window-props.c:310
|
||||
#: ../src/core/window-props.c:309
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "ضبط التطبيق رمز NET_WM_PID غير مفهوم %lu\n"
|
||||
|
||||
#: ../src/core/window-props.c:429
|
||||
#: ../src/core/window-props.c:426
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (على %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1484
|
||||
#: ../src/core/window-props.c:1481
|
||||
#, 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:1495
|
||||
#: ../src/core/window-props.c:1492
|
||||
#, fuzzy, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "نافذة WM_TRANSIENT_FOR 0x%lx غير صحيحة ل %s.\n"
|
||||
@@ -406,62 +406,73 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether hidden windows (i.e., minimized windows and windows on "
|
||||
"other workspaces than the current one) should be kept alive."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"If enabled, dropping windows on vertical screen edges maximizes them "
|
||||
"vertically and resizes them horizontally to cover half of the available "
|
||||
"area. Dropping windows on the top screen edge maximizes them completely."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"static number of workspaces (determined by the num-workspaces key in org."
|
||||
"gnome.desktop.wm.preferences)."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
msgid ""
|
||||
"Determines whether workspace switching should happen for windows on all "
|
||||
"monitors or only for windows on the primary monitor."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
msgid "No tab popup"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
msgid ""
|
||||
"Determines whether the use of popup and highlight frame should be disabled "
|
||||
"for window cycling."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
msgid "Draggable border width"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
#, fuzzy
|
||||
msgid "Select window from tab popup"
|
||||
msgstr ""
|
||||
msgstr "احذف من القمّة"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid "Cancel tab popup"
|
||||
msgstr ""
|
||||
|
||||
@@ -669,71 +680,72 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d × %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:253
|
||||
msgid "top"
|
||||
msgstr "أعلى"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "bottom"
|
||||
msgstr "أسفل"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "left"
|
||||
msgstr "يسار"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "right"
|
||||
msgstr "يمين"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:286
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "هندسة الإطار لا تخصص البعد \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:305
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "هندسة الإطار لا تخصص البعد \"%s\" للحد \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:342
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "النسبة الجانبية للزر %g غير معقولة"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:354
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "هندسة الإطار لا تخصص حجم الأزرار"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1067
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "يجب أن يكون للتّدرُّجات لونان على الأقل"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1219
|
||||
#, fuzzy, 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:fg[NORMAL]، NORMAL هنا هو الحالة، لا يمكن تحليل \"%s\""
|
||||
"يحب أن يكون لتخصيص حالة ألوان جتك قوس غلق قائم بعد الحالة/ مثال gtk:fg"
|
||||
"[NORMAL]، NORMAL هنا هو الحالة، لا يمكن تحليل \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1235
|
||||
#, 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:1231
|
||||
#: ../src/ui/theme.c:1249
|
||||
#, fuzzy, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr "تهيئة التظليل هي \"تظليل/اللون_الأساسي/العامل\"، \"%s\" لا يناسب التهيئة"
|
||||
msgstr ""
|
||||
"تهيئة التظليل هي \"تظليل/اللون_الأساسي/العامل\"، \"%s\" لا يناسب التهيئة"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1294
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -742,7 +754,7 @@ msgstr ""
|
||||
"يجب أن تكون حالة تخصيصات ألوان جتك في قوسان قائمان، مثال gtk:fg[NORMAL] "
|
||||
"NORMAL هنا هو الحالة، لا يمكن تحليل \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1308
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -751,149 +763,149 @@ msgstr ""
|
||||
"يحب أن يكون لتخصيص حالة ألوان جتك قوس غلق قائم بعد الحالة/ مثال gtk:fg"
|
||||
"[NORMAL]، NORMAL هنا هو الحالة، لا يمكن تحليل \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1319
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "لم تفهم الحالة \"%s\" في تخصيص الألوان"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1332
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "لم يفهم جزء اللون \"%s\" في تخصيص اللون"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1361
|
||||
#, 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:1354
|
||||
#: ../src/ui/theme.c:1372
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "لا يمكن تحليل قيمة الشفافية \"%s\" في اللون المخلط"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1382
|
||||
#, 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:1411
|
||||
#: ../src/ui/theme.c:1429
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr ""
|
||||
"تهيئة التظليل هي \"تظليل/اللون_الأساسي/العامل\"، \"%s\" لا يناسب التهيئة"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1440
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "لا يمكن تحليل عامل التظليل \"%s\" في اللون المظلل"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1450
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "عامل التظليل \"%s\" في اللون المظلل سلبي"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1479
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "لا يمكن تحليل اللون \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1790
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "تعبير الإحداثيّات يحتوي على الرمز '%s' الممنوع"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1817
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "تعبير الإحداثيّات يحتوي على عدد نقطة متغيرة '%s' تعذّر تحليله"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1831
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "تعبير الإحداثيّات يحتوي على عدد صحيح '%s' تعذّر تحليله"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1953
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr "تعبير الإحداثيّات يحتوي على مقسوم مجهول عند بداية هذا النص: \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:2010
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "تعبير الإحداثيّات فارغ أو لم يفهم"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2121 ../src/ui/theme.c:2131 ../src/ui/theme.c:2165
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "تعبير الإحداثيّات ينتُج عند القسمة على صفر"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2173
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "تعبير الإحداثيّاتيّات يحاول استعمال مقسوم mod على عدد فاصلة متحرّكة"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2229
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "تعبير الإحداثيّات له مقسوم \"%s\" بالرغم من ترقبه قاسم"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2238
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "تعبير الإحداثيّات له قاسم بالرغم من ترقبه لمقسوم"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "انتهى تعبير الإحداثيّات بمقسوم عوضا عن قاسم"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2256
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
"operand in between"
|
||||
msgstr "لتعبير الإحداثيّات مقسوم \"%c\" يتبع القاسم \"%c\" بدون قاسم بينهما"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2407 ../src/ui/theme.c:2452
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "كان لتعبير الإحداثيّات متغير أو ثابت \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2506
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "غمر محلّل تعبير الإحداثيّات مجاله"
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2535
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "كان لتعبير الإحداثيّات قوس غلق بدون قوس فتح"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2599
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "كان لتعبير الإحداثيات قوس فتح بدون قوس غلق"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2610
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "تعبير الإحداثيات لا يملك قاسمات و مقسومات"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2822 ../src/ui/theme.c:2842 ../src/ui/theme.c:2862
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "احتوت السِمة على تعبير ادى الى خطأ: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4533
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -902,25 +914,25 @@ msgstr ""
|
||||
"يجب تخصيص <button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> "
|
||||
"لأسلوب الإطار هذا"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5066 ../src/ui/theme.c:5091
|
||||
#, 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:5082
|
||||
#: ../src/ui/theme.c:5139
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "فشل تحميل السِمة \"%s\": %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5275 ../src/ui/theme.c:5282 ../src/ui/theme.c:5289
|
||||
#: ../src/ui/theme.c:5296 ../src/ui/theme.c:5303
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "لا <%s> ضبط للسِمة \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5311
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -929,14 +941,14 @@ msgstr ""
|
||||
"لا أسلوب إطار مضبوط لنوع النافذة \"%s\" في السِمة \"%s\"، اضف عنصر <window "
|
||||
"type=\"%s\" style_set=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5709 ../src/ui/theme.c:5771 ../src/ui/theme.c:5834
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"الثوابت المعرفة من طرف المستخدم يجب أن تبدأ بحروف كبيرة، \"%s\" لا يبدأ بذلك"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5717 ../src/ui/theme.c:5779 ../src/ui/theme.c:5842
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "عُرِّف الثابت \"%s\" بالفعل"
|
||||
@@ -1305,7 +1317,7 @@ msgstr "لا يُسمح بنص داخل العنصر <%s>"
|
||||
msgid "<%s> specified twice for this theme"
|
||||
msgstr "<%s> محدّد مرتان لهذه السِمة"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4334
|
||||
#: ../src/ui/theme-parser.c:4348
|
||||
#, c-format
|
||||
msgid "Failed to find a valid file for theme %s\n"
|
||||
msgstr "فشل العثو على سِمة صحيحة في %s\n"
|
||||
@@ -1507,9 +1519,6 @@ msgstr "قيمة ص كانت %d، تُرُقَِب %d"
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "حُلِّلت %d تعابير الإحداثيات في %g ثواني (بمعدّل %g ثوان)\n"
|
||||
|
||||
#~ msgid "Comma-separated list of compositor plugins"
|
||||
#~ msgstr "قائمة بملحقات المزج مفصولة بفاصلة"
|
||||
|
||||
#~ msgid "Switch to workspace 1"
|
||||
#~ msgstr "انتقل إلى مساحة العمل 1"
|
||||
|
||||
@@ -1814,3 +1823,6 @@ msgstr "حُلِّلت %d تعابير الإحداثيات في %g ثواني (
|
||||
|
||||
#~ msgid "Error setting clutter plugin list: %s\n"
|
||||
#~ msgstr "خطأ عند تحديد قائمة ملحقات كلتر: %s\n"
|
||||
|
||||
#~ msgid "Clutter Plugins"
|
||||
#~ msgstr "ملحقات كلتر"
|
||||
|
||||
320
po/es.po
320
po/es.po
@@ -14,8 +14,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: 2012-06-05 17:28+0000\n"
|
||||
"PO-Revision-Date: 2012-06-06 13:06+0200\n"
|
||||
"POT-Creation-Date: 2012-03-11 21:56+0000\n"
|
||||
"PO-Revision-Date: 2012-03-12 14:17+0100\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -46,7 +46,7 @@ msgstr ""
|
||||
"Ya existe un gestor de composición ejecutándose en la monitor %i, pantalla «%"
|
||||
"s»."
|
||||
|
||||
#: ../src/core/bell.c:320
|
||||
#: ../src/core/bell.c:307
|
||||
msgid "Bell event"
|
||||
msgstr "Evento de campana"
|
||||
|
||||
@@ -80,12 +80,12 @@ msgstr "_Esperar"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forzar la salida"
|
||||
|
||||
#: ../src/core/display.c:380
|
||||
#: ../src/core/display.c:361
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Falta la extensión %s requerida para la composición"
|
||||
|
||||
#: ../src/core/display.c:446
|
||||
#: ../src/core/display.c:427
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
|
||||
@@ -99,36 +99,36 @@ msgstr ""
|
||||
"Algún otro programa ya está usando la clave %s con el modificador %x como "
|
||||
"una vinculación\n"
|
||||
|
||||
#: ../src/core/main.c:196
|
||||
#: ../src/core/main.c:206
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Desactivar conexión al gestor de sesión"
|
||||
|
||||
#: ../src/core/main.c:202
|
||||
#: ../src/core/main.c:212
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Reemplazar el gestor de ventanas en ejecución"
|
||||
|
||||
#: ../src/core/main.c:208
|
||||
#: ../src/core/main.c:218
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Especificar el ID se gestión de sesión"
|
||||
|
||||
#: ../src/core/main.c:213
|
||||
#: ../src/core/main.c:223
|
||||
msgid "X Display to use"
|
||||
msgstr "Pantalla X que usar"
|
||||
|
||||
#: ../src/core/main.c:219
|
||||
#: ../src/core/main.c:229
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inicializar sesión desde el archivo de salvaguarda"
|
||||
|
||||
#: ../src/core/main.c:225
|
||||
#: ../src/core/main.c:235
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Hacer que las llamadas a las X sean síncronas"
|
||||
|
||||
#: ../src/core/main.c:494
|
||||
#: ../src/core/main.c:504
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Falló al inspeccionar la carpeta de temas: %s\n"
|
||||
|
||||
#: ../src/core/main.c:510
|
||||
#: ../src/core/main.c:520
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -156,11 +156,10 @@ msgid "Print version"
|
||||
msgstr "Imprimir versión"
|
||||
|
||||
#: ../src/core/mutter.c:60
|
||||
#| msgid "Clutter Plugins"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Complemento de mutter que usar"
|
||||
msgid "Comma-separated list of compositor plugins"
|
||||
msgstr "Lista de complementos del compositor separados por comas"
|
||||
|
||||
#: ../src/core/prefs.c:1064
|
||||
#: ../src/core/prefs.c:1077
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -168,14 +167,14 @@ msgstr ""
|
||||
"Los arreglos para aplicaciones rotas se han deshabilitado. Algunas "
|
||||
"aplicaciones podrían no comportarse correctamente.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1139
|
||||
#: ../src/core/prefs.c:1152
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr ""
|
||||
"No se pudo analizar la descripción de la tipografía «%s» de la clave "
|
||||
"GSettings %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1205
|
||||
#: ../src/core/prefs.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -184,7 +183,7 @@ msgstr ""
|
||||
"«%s» encontrado en la base de datos de configuración no es un valor válido "
|
||||
"para el modificador del botón del ratón\n"
|
||||
|
||||
#: ../src/core/prefs.c:1723
|
||||
#: ../src/core/prefs.c:1736
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -193,17 +192,17 @@ msgstr ""
|
||||
"«%s» encontrado en la base de datos de configuración no es un valor válido "
|
||||
"para la combinación de teclas «%s»\n"
|
||||
|
||||
#: ../src/core/prefs.c:1820
|
||||
#: ../src/core/prefs.c:1833
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Área de trabajo %d"
|
||||
|
||||
#: ../src/core/screen.c:652
|
||||
#: ../src/core/screen.c:730
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "La ventana %d en la pantalla «%s» no es válida\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:746
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -212,7 +211,7 @@ msgstr ""
|
||||
"La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas, intente "
|
||||
"usar la opción «--replace» para reemplazar el gestor de ventanas activo.\n"
|
||||
|
||||
#: ../src/core/screen.c:695
|
||||
#: ../src/core/screen.c:773
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
@@ -220,12 +219,12 @@ msgstr ""
|
||||
"No se ha podido obtener la selección del gestor de ventanas en la ventana %d "
|
||||
"en la pantalla «%s»\n"
|
||||
|
||||
#: ../src/core/screen.c:750
|
||||
#: ../src/core/screen.c:828
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas\n"
|
||||
|
||||
#: ../src/core/screen.c:935
|
||||
#: ../src/core/screen.c:1013
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "No se ha podido liberar el monitor %d en la pantalla «%s»\n"
|
||||
@@ -286,45 +285,45 @@ msgstr ""
|
||||
"Estas ventanas no soportan «guardar la configuración actual» y tendrán que "
|
||||
"reiniciarse manualmente la próxima vez que inicie una sesión."
|
||||
|
||||
#: ../src/core/util.c:80
|
||||
#: ../src/core/util.c:111
|
||||
#, c-format
|
||||
msgid "Failed to open debug log: %s\n"
|
||||
msgstr "Ocurrió un error al abrir el registro de errores: %s\n"
|
||||
|
||||
#: ../src/core/util.c:90
|
||||
#: ../src/core/util.c:121
|
||||
#, c-format
|
||||
msgid "Failed to fdopen() log file %s: %s\n"
|
||||
msgstr "Ocurrió un error al hacer fdopen() en el archivo de registro %s: %s\n"
|
||||
|
||||
#: ../src/core/util.c:96
|
||||
#: ../src/core/util.c:127
|
||||
#, c-format
|
||||
msgid "Opened log file %s\n"
|
||||
msgstr "Archivo de registro %s abierto\n"
|
||||
|
||||
#: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
|
||||
#: ../src/core/util.c:146 ../src/tools/mutter-message.c:149
|
||||
#, c-format
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter fue compilado sin soporte para modo prolijo\n"
|
||||
|
||||
#: ../src/core/util.c:259
|
||||
#: ../src/core/util.c:290
|
||||
msgid "Window manager: "
|
||||
msgstr "Administrador de ventanas: "
|
||||
|
||||
# Diferenciar de eRRor en el gestor de ventanas, más abajo
|
||||
#: ../src/core/util.c:407
|
||||
#: ../src/core/util.c:438
|
||||
msgid "Bug in window manager: "
|
||||
msgstr "Error en el gestor de ventanas: "
|
||||
|
||||
#: ../src/core/util.c:438
|
||||
#: ../src/core/util.c:471
|
||||
msgid "Window manager warning: "
|
||||
msgstr "Advertencia del gestor de ventanas: "
|
||||
|
||||
#: ../src/core/util.c:466
|
||||
#: ../src/core/util.c:499
|
||||
msgid "Window manager error: "
|
||||
msgstr "Error del gestor de ventanas: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7234
|
||||
#: ../src/core/window.c:7224
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -340,7 +339,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7899
|
||||
#: ../src/core/window.c:7887
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -350,23 +349,23 @@ msgstr ""
|
||||
"redimensionable, pero configuró el tamaño mínimo a %d x %d y el tamaño "
|
||||
"máximo a %d x %d ; esto no tiene mucho sentido.\n"
|
||||
|
||||
#: ../src/core/window-props.c:310
|
||||
#: ../src/core/window-props.c:309
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "La aplicación establecio un _NET_WM_PID %lu erróneo\n"
|
||||
|
||||
#: ../src/core/window-props.c:429
|
||||
#: ../src/core/window-props.c:426
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (on %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1484
|
||||
#: ../src/core/window-props.c:1481
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr ""
|
||||
"WM_TRANSIENT_FOR no válido para la ventana 0x%lx especificada para %s.\n"
|
||||
"WM_TRANSIENT_FOR inválido para la ventana 0x%lx especificada para %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1495
|
||||
#: ../src/core/window-props.c:1492
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR ventana 0x%lx para %s crearía un bucle.\n"
|
||||
@@ -389,15 +388,15 @@ msgstr ""
|
||||
#: ../src/core/xprops.c:411
|
||||
#, c-format
|
||||
msgid "Property %s on window 0x%lx contained invalid UTF-8\n"
|
||||
msgstr "La propiedad %s en la ventana 0x%lx contiene UTF-8 no válido\n"
|
||||
msgstr "La propiedad %s en la ventana 0x%lx contiene UTF-8 inválido\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 ""
|
||||
"La propiedad %s en la ventana 0x%lx contiene UTF-8 no válido para el "
|
||||
"elemento %d de la lista\n"
|
||||
"La propiedad %s en la ventana 0x%lx contiene UTF-8 inválido para el elemento "
|
||||
"%d de la lista\n"
|
||||
|
||||
#: ../src/mutter.desktop.in.h:1 ../src/mutter-wm.desktop.in.h:1
|
||||
msgid "Mutter"
|
||||
@@ -436,12 +435,24 @@ msgstr ""
|
||||
"y se mueven junto con la ventana padre."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "Ventanas activas ocultas"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether hidden windows (i.e., minimized windows and windows on "
|
||||
"other workspaces than the current one) should be kept alive."
|
||||
msgstr ""
|
||||
"Determina si las ventanas ocultas (e.g., ventanas minimizadas y ventanas en "
|
||||
"otros escritorios distintos del actual) deberían mantenerse activas."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
"Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la "
|
||||
"ventana"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"If enabled, dropping windows on vertical screen edges maximizes them "
|
||||
"vertically and resizes them horizontally to cover half of the available "
|
||||
@@ -452,11 +463,11 @@ msgstr ""
|
||||
"mitad del área disponible. Arrastrar ventanas al borde superior de la "
|
||||
"pantalla las maximiza por completo."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Las áreas de trabajo se gestionan dinámicamente"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"static number of workspaces (determined by the num-workspaces key in org."
|
||||
@@ -466,11 +477,11 @@ msgstr ""
|
||||
"número estático de áreas de trabajo (determinado por la clave «num-"
|
||||
"workspaces» en «org.gnome.desktop.wm.preferences»)."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Áreas de trabajo sólo en el primario"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
msgid ""
|
||||
"Determines whether workspace switching should happen for windows on all "
|
||||
"monitors or only for windows on the primary monitor."
|
||||
@@ -478,11 +489,11 @@ msgstr ""
|
||||
"Determina si el cambio entre áreas de trabajo debería suceder para las "
|
||||
"ventanas en todos los monitores o sólo para ventanas en el monitor primario."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
msgid "No tab popup"
|
||||
msgstr "No hay pestaña emergente"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
msgid ""
|
||||
"Determines whether the use of popup and highlight frame should be disabled "
|
||||
"for window cycling."
|
||||
@@ -490,11 +501,11 @@ msgstr ""
|
||||
"Determina si el uso de ventanas emergentes y marcos resaltados se debe "
|
||||
"desactivar al cambiar entre ventanas."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
msgid "Draggable border width"
|
||||
msgstr "Anchura arrastrable del borde"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
@@ -502,11 +513,11 @@ msgstr ""
|
||||
"La cantidad total de borde arrastrable. Si los bordes visibles del tema no "
|
||||
"son suficientes, se añadirán bordes invisibles para satisfacer este valor."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Seleccionar ventana de la pestaña emergente"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Cancelar pestaña emergente"
|
||||
|
||||
@@ -515,6 +526,50 @@ msgstr "Cancelar pestaña emergente"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Uso: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1158
|
||||
msgid "Close Window"
|
||||
msgstr "Cerrar la ventana"
|
||||
|
||||
#: ../src/ui/frames.c:1161
|
||||
msgid "Window Menu"
|
||||
msgstr "Menú de la ventana"
|
||||
|
||||
#: ../src/ui/frames.c:1164
|
||||
msgid "Minimize Window"
|
||||
msgstr "Minimizar la ventana"
|
||||
|
||||
#: ../src/ui/frames.c:1167
|
||||
msgid "Maximize Window"
|
||||
msgstr "Maximizar la ventana"
|
||||
|
||||
#: ../src/ui/frames.c:1170
|
||||
msgid "Restore Window"
|
||||
msgstr "Restablecer la ventana"
|
||||
|
||||
#: ../src/ui/frames.c:1173
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Enrollar ventana"
|
||||
|
||||
#: ../src/ui/frames.c:1176
|
||||
msgid "Unroll Window"
|
||||
msgstr "Desenrollar ventana"
|
||||
|
||||
#: ../src/ui/frames.c:1179
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Mantener la ventana encima"
|
||||
|
||||
#: ../src/ui/frames.c:1182
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Quitar ventana de encima"
|
||||
|
||||
#: ../src/ui/frames.c:1185
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Siempre en el área de trabajo visible"
|
||||
|
||||
#: ../src/ui/frames.c:1188
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Poner la ventana sólo en un área de trabajo"
|
||||
|
||||
#. Translators: Translate this string the same way as you do in libwnck!
|
||||
#: ../src/ui/menu.c:69
|
||||
msgid "Mi_nimize"
|
||||
@@ -714,49 +769,49 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:253
|
||||
msgid "top"
|
||||
msgstr "superior"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "bottom"
|
||||
msgstr "inferior"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "left"
|
||||
msgstr "izquierda"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "right"
|
||||
msgstr "derecha"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:286
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "La geometría del marco no especifica la dimensión «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:305
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr ""
|
||||
"La geometría del marco no especifica la dimensión «%s» para el borde «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:342
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "La proporción del botón %g no es razonable"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:354
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "La geometría del marco no especifica el tamaño de los botones"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1067
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Los degradados deben tener al menos dos colores"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
@@ -766,7 +821,7 @@ msgstr ""
|
||||
"alternativo entre paréntesis, ejemplo: gtk:custom(foo,bar); no se pudo "
|
||||
"analizar «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1235
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
@@ -775,7 +830,7 @@ msgstr ""
|
||||
"Caracter «%c» no válido en el parámetro «color_name» de «gtk:custom», sólo «A-Za-"
|
||||
"z0-9-_» son válidos"
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1249
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
@@ -784,7 +839,7 @@ msgstr ""
|
||||
"El formato de «gtk:custom» es «gtk:custom(nombre_de_color,"
|
||||
"nombre_alternativo)», «%s» no respeta el formato"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1294
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -794,7 +849,7 @@ msgstr ""
|
||||
"ejemplo. gtk:fg[NORMAL] donde NORMAL es el estado ; no se ha podido "
|
||||
"interpretar «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1308
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -804,18 +859,18 @@ msgstr ""
|
||||
"estado, ejemplo. gtk:fg[NORMAL] donde NORMAL es el estado ; no se ha podido "
|
||||
"interpretar «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1319
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "No se entiende el estado «%s» en la especificación del color"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1332
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr ""
|
||||
"No se entiende el componente de color «%s» en la especificación del color"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1361
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -824,17 +879,17 @@ msgstr ""
|
||||
"El formato de blend es «blend/bg_color/fg_color/alfa», «%s» no cumple con el "
|
||||
"formato"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1372
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "No se ha podido interpretar el valor alfa «%s» en el color mezclado"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1382
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "El valor alfa «%s» en el color mezclado no está entre 0.0 y 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1429
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
@@ -842,31 +897,31 @@ msgstr ""
|
||||
"El formato de sombreado es «shade/base_color/factor», «%s» no coincide con el "
|
||||
"formato"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1440
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr ""
|
||||
"No se ha podido interpretar el factor de sombreado «%s» en el color del "
|
||||
"sombreado"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1450
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "El factor de sombreado «%s» en el color sombreado es negativo"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1479
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "No se ha podido interpretar el color «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1790
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr ""
|
||||
"La expresión de coordenadas contenía un carácter «%s» en cual no está "
|
||||
"permitido"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1817
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@@ -875,32 +930,32 @@ msgstr ""
|
||||
"La expresión de coordenadas contenía un número de coma flotante «%s» en cual "
|
||||
"no pudo ser analizado"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1831
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
"La expresión de coordenadas contenía un entero «%s» que no pudo ser analizado"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1953
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr ""
|
||||
"La expresión de coordenadas contenía un operador no válido al inicio de su "
|
||||
"La expresión de coordenadas contenía un operador inválido al inicio de su "
|
||||
"texto: «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:2010
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "La expresión de coordenadas estaba vacía o no fue entendida"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2121 ../src/ui/theme.c:2131 ../src/ui/theme.c:2165
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "La expresión de coordenadas resultó en un error de división por cero"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2173
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
@@ -908,7 +963,7 @@ msgstr ""
|
||||
"La expresión de coordenadas intentó usar un operador mod con un número de "
|
||||
"coma flotante"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2229
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
@@ -916,19 +971,19 @@ msgstr ""
|
||||
"La expresión de coordenadas tiene un operador «%s» donde se esperaba un "
|
||||
"operando"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2238
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr ""
|
||||
"La expresión de coordenadas tiene un operando donde se esperaba un operador"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr ""
|
||||
"La expresión de coordenadas termina con una operador en vez de un operando"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2256
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -937,42 +992,42 @@ msgstr ""
|
||||
"La expresión de coordenadas tiene el operador «%c» seguido del operador «%c» "
|
||||
"sin un operando entre ellos"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2407 ../src/ui/theme.c:2452
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr ""
|
||||
"La expresión de coordenadas tenía una variable o constante desconocida «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2506
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "El parser de la expresión de coordenadas desbordó su búfer."
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2535
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
"La expresión de coordenadas tenía un paréntesis cerrado sin un paréntesis "
|
||||
"abierto"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2599
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
"La expresión de coordenadas tenía un paréntesis abierto sin un paréntesis "
|
||||
"cerrado"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2610
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "La expresión de coordenadas no parece tener ni operadores ni operandos"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2822 ../src/ui/theme.c:2842 ../src/ui/theme.c:2862
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "El tema contenía una expresión que ha resultado en un error: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4533
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -981,25 +1036,25 @@ msgstr ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> debe ser "
|
||||
"especificado para este estilo de marco"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5066 ../src/ui/theme.c:5091
|
||||
#, 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:5082
|
||||
#: ../src/ui/theme.c:5139
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Ocurrió un error al cargar el tema «%s»: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5275 ../src/ui/theme.c:5282 ../src/ui/theme.c:5289
|
||||
#: ../src/ui/theme.c:5296 ../src/ui/theme.c:5303
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "No se configuró <%s> para el tema «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5311
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1008,7 +1063,7 @@ msgstr ""
|
||||
"No hay un estilo de marco para el tipo de ventana «%s» en el tema «%s», añada "
|
||||
"un elemento <window type=\"%s\" style_set=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5709 ../src/ui/theme.c:5771 ../src/ui/theme.c:5834
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@@ -1016,7 +1071,7 @@ msgstr ""
|
||||
"Las constantes definidas por el usuario deben comenzar con una letra "
|
||||
"mayúscula; «%s» no lo hace"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5717 ../src/ui/theme.c:5779 ../src/ui/theme.c:5842
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "La constante «%s» ya ha sido definida"
|
||||
@@ -1042,7 +1097,7 @@ msgstr "El atributo «%s» se ha repetido dos veces en el mismo elemento <%s>"
|
||||
#: ../src/ui/theme-parser.c:503 ../src/ui/theme-parser.c:552
|
||||
#, c-format
|
||||
msgid "Attribute \"%s\" is invalid on <%s> element in this context"
|
||||
msgstr "El atributo «%s» es no válido en el elemento <%s> en este contexto"
|
||||
msgstr "El atributo «%s» es inválido en el elemento <%s> en este contexto"
|
||||
|
||||
#: ../src/ui/theme-parser.c:594
|
||||
#, c-format
|
||||
@@ -1092,8 +1147,8 @@ msgid ""
|
||||
"Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,"
|
||||
"large,x-large,xx-large)\n"
|
||||
msgstr ""
|
||||
"Escala de título no válida «%s» (debe ser una de xx-small,x-small,small,"
|
||||
"medium,large,x-large,xx-large)\n"
|
||||
"Escala de título inválida «%s» (debe ser una de xx-small,x-small,small,medium,"
|
||||
"large,x-large,xx-large)\n"
|
||||
|
||||
#: ../src/ui/theme-parser.c:1019 ../src/ui/theme-parser.c:1082
|
||||
#: ../src/ui/theme-parser.c:1116 ../src/ui/theme-parser.c:1219
|
||||
@@ -1407,7 +1462,7 @@ msgstr "No se permite texto dentro del elemento <%s>"
|
||||
msgid "<%s> specified twice for this theme"
|
||||
msgstr "<%s> especificado dos veces para este tema"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4334
|
||||
#: ../src/ui/theme-parser.c:4348
|
||||
#, c-format
|
||||
msgid "Failed to find a valid file for theme %s\n"
|
||||
msgstr "Falló al encontrar un archivo válido para el tema%s\n"
|
||||
@@ -1614,52 +1669,6 @@ msgstr ""
|
||||
"%d expresiones de coordenadas interpretadas en %g segundos (%g segundos de "
|
||||
"media)\n"
|
||||
|
||||
#~ msgid "Comma-separated list of compositor plugins"
|
||||
#~ msgstr "Lista de complementos del compositor separados por comas"
|
||||
|
||||
#~ msgid "Live Hidden Windows"
|
||||
#~ msgstr "Ventanas activas ocultas"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Determines whether hidden windows (i.e., minimized windows and windows on "
|
||||
#~ "other workspaces than the current one) should be kept alive."
|
||||
#~ msgstr ""
|
||||
#~ "Determina si las ventanas ocultas (e.g., ventanas minimizadas y ventanas "
|
||||
#~ "en otros escritorios distintos del actual) deberían mantenerse activas."
|
||||
|
||||
#~ msgid "Close Window"
|
||||
#~ msgstr "Cerrar la ventana"
|
||||
|
||||
#~ msgid "Window Menu"
|
||||
#~ msgstr "Menú de la ventana"
|
||||
|
||||
#~ msgid "Minimize Window"
|
||||
#~ msgstr "Minimizar la ventana"
|
||||
|
||||
#~ msgid "Maximize Window"
|
||||
#~ msgstr "Maximizar la ventana"
|
||||
|
||||
#~ msgid "Restore Window"
|
||||
#~ msgstr "Restablecer la ventana"
|
||||
|
||||
#~ msgid "Roll Up Window"
|
||||
#~ msgstr "Enrollar ventana"
|
||||
|
||||
#~ msgid "Unroll Window"
|
||||
#~ msgstr "Desenrollar ventana"
|
||||
|
||||
#~ msgid "Keep Window On Top"
|
||||
#~ msgstr "Mantener la ventana encima"
|
||||
|
||||
#~ msgid "Remove Window From Top"
|
||||
#~ msgstr "Quitar ventana de encima"
|
||||
|
||||
#~ msgid "Always On Visible Workspace"
|
||||
#~ msgstr "Siempre en el área de trabajo visible"
|
||||
|
||||
#~ msgid "Put Window On Only One Workspace"
|
||||
#~ msgstr "Poner la ventana sólo en un área de trabajo"
|
||||
|
||||
#~ msgid "Switch to workspace 1"
|
||||
#~ msgstr "Cambiar al área de trabajo 1"
|
||||
|
||||
@@ -1974,6 +1983,9 @@ msgstr ""
|
||||
#~ msgid "Error setting clutter plugin list: %s\n"
|
||||
#~ msgstr "Error al establecer la lista de complementos de «Clutter»: %s\n"
|
||||
|
||||
#~ msgid "Clutter Plugins"
|
||||
#~ msgstr "Complementos de «Clutter»"
|
||||
|
||||
#~ msgid "Plugins to load for the Clutter-based compositing manager."
|
||||
#~ msgstr ""
|
||||
#~ "Complementos que cargar para la gestión de composición basada en «Clutter»."
|
||||
|
||||
210
po/fr.po
210
po/fr.po
@@ -20,8 +20,8 @@ msgstr ""
|
||||
"org/enter_bug.cgi?product=mutter&component=general\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-06-13 18:21+0000\n"
|
||||
"PO-Revision-Date: 2012-06-15 20:22+0200\n"
|
||||
"POT-Creation-Date: 2012-03-22 03:46+0000\n"
|
||||
"PO-Revision-Date: 2012-03-23 20:30+0100\n"
|
||||
"Last-Translator: Alain Lojewski <allomervan@gmail.com>\n"
|
||||
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -51,7 +51,7 @@ msgstr ""
|
||||
"Un autre gestionnaire de composition est déjà lancé sur l'écran %i de "
|
||||
"l'affichage « %s »."
|
||||
|
||||
#: ../src/core/bell.c:320
|
||||
#: ../src/core/bell.c:307
|
||||
msgid "Bell event"
|
||||
msgstr "Évènement sonore"
|
||||
|
||||
@@ -85,12 +85,12 @@ msgstr "_Attendre"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forcer à quitter"
|
||||
|
||||
#: ../src/core/display.c:380
|
||||
#: ../src/core/display.c:387
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Il manque l'extension %s nécessaire à la composition"
|
||||
|
||||
#: ../src/core/display.c:446
|
||||
#: ../src/core/display.c:453
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Impossible d'ouvrir le visuel « %s » du système X Window\n"
|
||||
@@ -104,36 +104,36 @@ msgstr ""
|
||||
"Un autre programme utilise déjà la clé %s avec les modificateurs %x comme "
|
||||
"liaison\n"
|
||||
|
||||
#: ../src/core/main.c:196
|
||||
#: ../src/core/main.c:206
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Désactiver la connexion au gestionnaire de sessions"
|
||||
|
||||
#: ../src/core/main.c:202
|
||||
#: ../src/core/main.c:212
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Remplacer le gestionnaire de fenêtres en cours de fonctionnement"
|
||||
|
||||
#: ../src/core/main.c:208
|
||||
#: ../src/core/main.c:218
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Indiquer l'ID de gestion de sessions"
|
||||
|
||||
#: ../src/core/main.c:213
|
||||
#: ../src/core/main.c:223
|
||||
msgid "X Display to use"
|
||||
msgstr "Visuel X à utiliser"
|
||||
|
||||
#: ../src/core/main.c:219
|
||||
#: ../src/core/main.c:229
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initialiser la session depuis le fichier de sauvegarde"
|
||||
|
||||
#: ../src/core/main.c:225
|
||||
#: ../src/core/main.c:235
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Rendre synchrones les appels à X"
|
||||
|
||||
#: ../src/core/main.c:494
|
||||
#: ../src/core/main.c:504
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Le parcours du répertoire de thèmes a échoué : %s\n"
|
||||
|
||||
#: ../src/core/main.c:510
|
||||
#: ../src/core/main.c:520
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -162,10 +162,10 @@ msgid "Print version"
|
||||
msgstr "Afficher la version"
|
||||
|
||||
#: ../src/core/mutter.c:60
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Greffon de Mutter à utiliser"
|
||||
msgid "Comma-separated list of compositor plugins"
|
||||
msgstr "Liste de greffons de composition, séparés par des virgules"
|
||||
|
||||
#: ../src/core/prefs.c:1064
|
||||
#: ../src/core/prefs.c:1077
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -173,14 +173,14 @@ msgstr ""
|
||||
"Solutions de rechange désactivées pour les applications endommagées. "
|
||||
"Certaines applications peuvent ne pas se comporter correctement.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1139
|
||||
#: ../src/core/prefs.c:1152
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr ""
|
||||
"Impossible d'analyser la description de police « %s » depuis la clé GSettings "
|
||||
"%s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1205
|
||||
#: ../src/core/prefs.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -189,7 +189,7 @@ msgstr ""
|
||||
"« %s » trouvée dans la base de données de configuration n'est pas une valeur "
|
||||
"correcte pour le bouton de souris\n"
|
||||
|
||||
#: ../src/core/prefs.c:1723
|
||||
#: ../src/core/prefs.c:1739
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -198,17 +198,17 @@ msgstr ""
|
||||
"« %s » trouvé dans la base de données de configuration n'est pas une valeur "
|
||||
"correcte pour la combinaison de touches « %s »\n"
|
||||
|
||||
#: ../src/core/prefs.c:1820
|
||||
#: ../src/core/prefs.c:1836
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Espace de travail %d"
|
||||
|
||||
#: ../src/core/screen.c:652
|
||||
#: ../src/core/screen.c:730
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "L'écran %d sur le visuel « %s » n'est pas valide\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:746
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -218,7 +218,7 @@ msgstr ""
|
||||
"d'utiliser l'option --replace pour remplacer le gestionnaire de fenêtres "
|
||||
"actuel.\n"
|
||||
|
||||
#: ../src/core/screen.c:695
|
||||
#: ../src/core/screen.c:773
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
@@ -226,12 +226,12 @@ msgstr ""
|
||||
"Impossible d'avoir la sélection du gestionnaire de fenêtres sur l'écran %d "
|
||||
"du visuel « %s »\n"
|
||||
|
||||
#: ../src/core/screen.c:750
|
||||
#: ../src/core/screen.c:828
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "L'écran %d sur le visuel « %s » a déjà un gestionnaire de fenêtres\n"
|
||||
|
||||
#: ../src/core/screen.c:935
|
||||
#: ../src/core/screen.c:1013
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Impossible de libérer l'écran %d sur le visuel « %s »\n"
|
||||
@@ -293,45 +293,45 @@ msgstr ""
|
||||
"Ces fenêtres ne prennent pas en charge « l'enregistrement de la configuration "
|
||||
"actuelle » et devront être redémarrées manuellement à la prochaine connexion."
|
||||
|
||||
#: ../src/core/util.c:80
|
||||
#: ../src/core/util.c:111
|
||||
#, c-format
|
||||
msgid "Failed to open debug log: %s\n"
|
||||
msgstr "L'ouverture du journal de débogage a échoué : %s\n"
|
||||
|
||||
#: ../src/core/util.c:90
|
||||
#: ../src/core/util.c:121
|
||||
#, c-format
|
||||
msgid "Failed to fdopen() log file %s: %s\n"
|
||||
msgstr ""
|
||||
"L'exécution de la commande fdopen() sur le fichier journal %s a échoué : %s\n"
|
||||
|
||||
#: ../src/core/util.c:96
|
||||
#: ../src/core/util.c:127
|
||||
#, c-format
|
||||
msgid "Opened log file %s\n"
|
||||
msgstr "Ouverture du fichier journal %s\n"
|
||||
|
||||
#: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
|
||||
#: ../src/core/util.c:146 ../src/tools/mutter-message.c:149
|
||||
#, c-format
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter a été compilé sans la prise en charge du mode bavard\n"
|
||||
|
||||
#: ../src/core/util.c:259
|
||||
#: ../src/core/util.c:290
|
||||
msgid "Window manager: "
|
||||
msgstr "Gestionnaire de fenêtres : "
|
||||
|
||||
#: ../src/core/util.c:407
|
||||
#: ../src/core/util.c:438
|
||||
msgid "Bug in window manager: "
|
||||
msgstr "Anomalie dans le gestionnaire de fenêtres : "
|
||||
|
||||
#: ../src/core/util.c:438
|
||||
#: ../src/core/util.c:471
|
||||
msgid "Window manager warning: "
|
||||
msgstr "Avertissement du gestionnaire de fenêtres : "
|
||||
|
||||
#: ../src/core/util.c:466
|
||||
#: ../src/core/util.c:499
|
||||
msgid "Window manager error: "
|
||||
msgstr "Erreur du gestionnaire de fenêtres : "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7234
|
||||
#: ../src/core/window.c:7266
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -347,7 +347,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7899
|
||||
#: ../src/core/window.c:7931
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -357,22 +357,22 @@ msgstr ""
|
||||
"redimensionnable, mais positionne une taille minimale de %d x %d et une "
|
||||
"taille maximale de %d x %d ; ceci n'a pas beaucoup de sens.\n"
|
||||
|
||||
#: ../src/core/window-props.c:310
|
||||
#: ../src/core/window-props.c:309
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "L'application a défini un _NET_WM_PID %lu erroné\n"
|
||||
|
||||
#: ../src/core/window-props.c:429
|
||||
#: ../src/core/window-props.c:426
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (sur %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1484
|
||||
#: ../src/core/window-props.c:1481
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Fenêtre WM_TRANSIENT_FOR 0x%lx non valide indiquée pour %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1495
|
||||
#: ../src/core/window-props.c:1492
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "Fenêtre WM_TRANSIENT_FOR 0x%lx pour %s créerait une boucle.\n"
|
||||
@@ -442,10 +442,22 @@ msgstr ""
|
||||
"sont déplacées ensembles avec elle."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "Fenêtres masquées vivantes"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether hidden windows (i.e., minimized windows and windows on "
|
||||
"other workspaces than the current one) should be kept alive."
|
||||
msgstr ""
|
||||
"Détermine si les fenêtres masquées (fenêtres réduites ou sur d'autres "
|
||||
"espaces de travail) sont conservées « vivantes »."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr "Activer l'empilage des fenêtres déposées sur les bords de l'écran"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"If enabled, dropping windows on vertical screen edges maximizes them "
|
||||
"vertically and resizes them horizontally to cover half of the available "
|
||||
@@ -456,11 +468,11 @@ msgstr ""
|
||||
"la moitié de la zone disponible. Le dépôt des fenêtres sur le bord supérieur "
|
||||
"de l'écran les maximise complètement."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Les espaces de travail sont gérés de manière dynamique"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"static number of workspaces (determined by the num-workspaces key in org."
|
||||
@@ -470,11 +482,11 @@ msgstr ""
|
||||
"nombre d'espaces de travail est fixe (déterminé par la clé num-workspaces "
|
||||
"dans org.gnome.desktop.wm.preferences)."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Espaces de travail seulement sur l'écran principal"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
msgid ""
|
||||
"Determines whether workspace switching should happen for windows on all "
|
||||
"monitors or only for windows on the primary monitor."
|
||||
@@ -483,11 +495,11 @@ msgstr ""
|
||||
"fenêtres de tous les écrans ou seulement pour les fenêtres de l'écran "
|
||||
"principal."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
msgid "No tab popup"
|
||||
msgstr "Aucune apparition suite à un appui sur la touche tab"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
msgid ""
|
||||
"Determines whether the use of popup and highlight frame should be disabled "
|
||||
"for window cycling."
|
||||
@@ -495,11 +507,11 @@ msgstr ""
|
||||
"Détermine si l'utilisation de fenêtres surgissantes et de mise en valeur "
|
||||
"doit être désactivée pour la consultation des fenêtres."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
msgid "Draggable border width"
|
||||
msgstr "Largeur de bordure ajustable"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
@@ -508,13 +520,13 @@ msgstr ""
|
||||
"visibles du thème ne sont pas suffisantes, des bordures invisibles sont "
|
||||
"ajoutées pour arriver à cette valeur."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Select window from tab popup"
|
||||
msgstr ""
|
||||
"Sélectionner la fenêtre dans la vue qui apparaît suite à un appui sur la "
|
||||
"touche tab"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Fermer la vue qui apparaît suite à un appui sur la touche tab"
|
||||
|
||||
@@ -722,49 +734,49 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:253
|
||||
msgid "top"
|
||||
msgstr "haut"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "bottom"
|
||||
msgstr "bas"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "left"
|
||||
msgstr "gauche"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "right"
|
||||
msgstr "droite"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:286
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "la géométrie du cadre n'indique pas la dimension « %s »"
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:305
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr ""
|
||||
"la géométrie du cadre n'indique pas la dimension « %s » pour la bordure « %s »"
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:342
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "La proportion du bouton %g n'est pas raisonnable"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:354
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "La géométrie du cadre n'indique pas la taille des boutons"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1067
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Les dégradés doivent comporter au moins deux couleurs"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
@@ -774,7 +786,7 @@ msgstr ""
|
||||
"couleur et un substitut entre parenthèses, par ex. gtk:custom(foo,bar) ; "
|
||||
"impossible d'analyser « %s »"
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1235
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
@@ -783,7 +795,7 @@ msgstr ""
|
||||
"Caractère « %c » non valide dans le paramètre color_name de gtk:custom, seuls "
|
||||
"A-Za-z0-9-_ sont acceptés"
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1249
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
@@ -792,7 +804,7 @@ msgstr ""
|
||||
"Le format de gtk:custom est « gtk:custom(nom_couleur,substitut) », « %s » ne "
|
||||
"correspond pas à ce format"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1294
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -801,7 +813,7 @@ msgstr ""
|
||||
"La spécification de couleur GTK doit présenter l'état entre crochets, p. ex. "
|
||||
"gtk:fg[NORMAL] où NORMAL est l'état ; impossible d'analyser « %s »"
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1308
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -811,19 +823,19 @@ msgstr ""
|
||||
"l'état, p. ex. gtk:fg[NORMAL] où NORMAL est l'état ; impossible d'analyser « %"
|
||||
"s »"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1319
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Impossible de comprendre l'état « %s » dans la spécification de couleur"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1332
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr ""
|
||||
"Impossible de comprendre le composant de couleur « %s » dans la spécification "
|
||||
"de couleur"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1361
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -832,18 +844,18 @@ msgstr ""
|
||||
"Le format de mélange est « blend/bg_color/fg_color/alpha », « %s » ne "
|
||||
"correspond pas à ce format ."
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1372
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Impossible d'analyser la valeur alpha « %s » en couleur mélangée"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1382
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr ""
|
||||
"La valeur alpha « %s » en couleur mélangée n'est pas comprise entre 0,0 et 1,0"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1429
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
@@ -851,29 +863,29 @@ msgstr ""
|
||||
"Le format d'ombre est « shade/base_color/factor », « %s » ne correspond pas au "
|
||||
"format"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1440
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Impossible d'analyser le facteur d'ombre « %s » en couleur ombrée"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1450
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Le facteur d'ombre « %s » en couleur ombrée est négatif"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1479
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Impossible d'analyser la couleur « %s »"
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1790
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr ""
|
||||
"L'expression de la coordonnée contient le caractère « %s » qui n'est pas "
|
||||
"autorisé"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1817
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@@ -882,14 +894,14 @@ msgstr ""
|
||||
"L'expression de la coordonnée contient la valeur en virgule flottante « %s » "
|
||||
"qui ne peut pas être analysée"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1831
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
"L'expression de la coordonnée contient l'entier « %s » qui n'a pas pu être "
|
||||
"analysé"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1953
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@@ -898,17 +910,17 @@ msgstr ""
|
||||
"L'expression de la coordonnée contenait un opérateur inconnu au début de ce "
|
||||
"texte : « %s »"
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:2010
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "L'expression de la coordonnée était vide ou incomprise"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2121 ../src/ui/theme.c:2131 ../src/ui/theme.c:2165
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "L'expression de la coordonnée entraîne une division par zéro"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2173
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
@@ -916,7 +928,7 @@ msgstr ""
|
||||
"L'expression de la coordonnée tente d'utiliser l'opérateur mod sur une "
|
||||
"valeur en virgule flottante"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2229
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
@@ -924,20 +936,20 @@ msgstr ""
|
||||
"L'expression de la coordonnée a un opérateur « %s » là où un opérande était "
|
||||
"attendu"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2238
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr ""
|
||||
"L'expression de la coordonnée a un opérande là où un opérateur était attendu"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr ""
|
||||
"L'expression de la coordonnée était terminée par un opérateur au lieu d'un "
|
||||
"opérande"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2256
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -946,46 +958,46 @@ msgstr ""
|
||||
"L'expression de la coordonnée a un opérateur « %c » suivant l'opérateur « %c » "
|
||||
"sans opérande entre eux"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2407 ../src/ui/theme.c:2452
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr ""
|
||||
"L'expression de la coordonnée possède une variable ou constante inconnue « %"
|
||||
"s »"
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2506
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr ""
|
||||
"L'analyseur d'expression de coordonnées a dépassé la capacité de son tampon."
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2535
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
"L'expression de la coordonnée comporte une parenthèse de fermeture, mais pas "
|
||||
"de parenthèse d'ouverture"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2599
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
"L'expression de la coordonnée comporte une parenthèse d'ouverture, mais pas "
|
||||
"de parenthèse de fermeture"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2610
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr ""
|
||||
"L'expression de la coordonnée ne semble pas comprendre d'opérateur ni "
|
||||
"d'opérande"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2822 ../src/ui/theme.c:2842 ../src/ui/theme.c:2862
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Le thème contient une expression qui a entraîné une erreur : %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4533
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -994,25 +1006,25 @@ msgstr ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> doit être "
|
||||
"indiqué pour ce style de cadre"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5066 ../src/ui/theme.c:5091
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> manquant"
|
||||
|
||||
#: ../src/ui/theme.c:5082
|
||||
#: ../src/ui/theme.c:5139
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Impossible de charger le thème « %s » : %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5275 ../src/ui/theme.c:5282 ../src/ui/theme.c:5289
|
||||
#: ../src/ui/theme.c:5296 ../src/ui/theme.c:5303
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Aucun <%s> défini pour le thème « %s »"
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5311
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -1021,7 +1033,7 @@ msgstr ""
|
||||
"Aucun style de cadre défini pour le type de fenêtre « %s » dans le thème « %"
|
||||
"s », ajoutez un élément <window type=\"%s\" style_set=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5709 ../src/ui/theme.c:5771 ../src/ui/theme.c:5834
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@@ -1029,7 +1041,7 @@ msgstr ""
|
||||
"Les constantes définies par l'utilisateur doivent commencer par une "
|
||||
"majuscule ; « %s » commence par une minuscule"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5717 ../src/ui/theme.c:5779 ../src/ui/theme.c:5842
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "La constante « %s » a déjà été définie"
|
||||
@@ -1425,7 +1437,7 @@ msgstr "Aucun texte autorisé dans l'élément <%s>"
|
||||
msgid "<%s> specified twice for this theme"
|
||||
msgstr "<%s> indiqué deux fois pour ce thème"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4334
|
||||
#: ../src/ui/theme-parser.c:4348
|
||||
#, c-format
|
||||
msgid "Failed to find a valid file for theme %s\n"
|
||||
msgstr "Impossible de trouver un fichier valide pour le thème %s\n"
|
||||
|
||||
305
po/gl.po
305
po/gl.po
@@ -14,8 +14,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gl\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-06-25 00:08+0200\n"
|
||||
"PO-Revision-Date: 2012-06-25 00:09+0200\n"
|
||||
"POT-Creation-Date: 2012-03-14 23:08+0100\n"
|
||||
"PO-Revision-Date: 2012-03-14 23:09+0100\n"
|
||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
||||
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
|
||||
"Language: gl\n"
|
||||
@@ -23,7 +23,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
"X-Generator: Gtranslator 2.91.5\n"
|
||||
"X-Generator: Lokalize 1.2\n"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1
|
||||
msgid "Windows"
|
||||
@@ -48,7 +48,7 @@ msgstr ""
|
||||
"Non foi posíbel obter a selección do xestor de xanelas na pantalla %i na "
|
||||
"visualización «%s»"
|
||||
|
||||
#: ../src/core/bell.c:320
|
||||
#: ../src/core/bell.c:307
|
||||
msgid "Bell event"
|
||||
msgstr "Evento de campá"
|
||||
|
||||
@@ -82,12 +82,12 @@ msgstr "Espe_rar"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forzar a saída"
|
||||
|
||||
#: ../src/core/display.c:380
|
||||
#: ../src/core/display.c:387
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Falta a extensión %s que se require para a composición"
|
||||
|
||||
#: ../src/core/display.c:446
|
||||
#: ../src/core/display.c:453
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Produciuse un fallo ao abrir a pantalla do X Window System «%s»\n"
|
||||
@@ -101,36 +101,36 @@ msgstr ""
|
||||
"Algún outro programa xa está usando a tecla %s cos modificadores %x como "
|
||||
"combinación\n"
|
||||
|
||||
#: ../src/core/main.c:196
|
||||
#: ../src/core/main.c:206
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Desactivar a conexión ao xestor de sesión"
|
||||
|
||||
#: ../src/core/main.c:202
|
||||
#: ../src/core/main.c:212
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Substituír o xestor de xanelas en execución"
|
||||
|
||||
#: ../src/core/main.c:208
|
||||
#: ../src/core/main.c:218
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Especificar o ID de xestión de sesión"
|
||||
|
||||
#: ../src/core/main.c:213
|
||||
#: ../src/core/main.c:223
|
||||
msgid "X Display to use"
|
||||
msgstr "Pantalla X que se vai usar"
|
||||
|
||||
#: ../src/core/main.c:219
|
||||
#: ../src/core/main.c:229
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Iniciar sesión desde o ficheiro de salvagarda"
|
||||
|
||||
#: ../src/core/main.c:225
|
||||
#: ../src/core/main.c:235
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Facer que as chamadas a X sexan sincrónicas"
|
||||
|
||||
#: ../src/core/main.c:494
|
||||
#: ../src/core/main.c:504
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Fallou ao dixitalizar o directorio de temas: %s\n"
|
||||
|
||||
#: ../src/core/main.c:510
|
||||
#: ../src/core/main.c:520
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@@ -158,10 +158,10 @@ msgid "Print version"
|
||||
msgstr "Imprimir versión"
|
||||
|
||||
#: ../src/core/mutter.c:60
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Engadido de mutter que usar"
|
||||
msgid "Comma-separated list of compositor plugins"
|
||||
msgstr "Lista de separadas por comas dos complementos do compositor"
|
||||
|
||||
#: ../src/core/prefs.c:1064
|
||||
#: ../src/core/prefs.c:1077
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -169,14 +169,14 @@ msgstr ""
|
||||
"Desactiváronse os arranxos para aplicativos danados. Pode que algúns "
|
||||
"aplicativos non se comporten correctamente.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1139
|
||||
#: ../src/core/prefs.c:1152
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr ""
|
||||
"Non foi posíbel analizar a descrición do tipo de letra «%s» da chave "
|
||||
"GSettings %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1205
|
||||
#: ../src/core/prefs.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -185,7 +185,7 @@ 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:1723
|
||||
#: ../src/core/prefs.c:1739
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -194,17 +194,17 @@ 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:1820
|
||||
#: ../src/core/prefs.c:1836
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Espazo de traballo %d"
|
||||
|
||||
#: ../src/core/screen.c:652
|
||||
#: ../src/core/screen.c:730
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "A pantalla %d na visualización «%s» non é válida\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:746
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@@ -213,7 +213,7 @@ msgstr ""
|
||||
"A visualización %d na pantalla «%s» ten xa un xestor de xanelas, tente usar "
|
||||
"a opción --replace para substituír o xestor de xanelas.\n"
|
||||
|
||||
#: ../src/core/screen.c:695
|
||||
#: ../src/core/screen.c:773
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
@@ -221,12 +221,12 @@ msgstr ""
|
||||
"Non foi posíbel obter a selección do xestor de xanelas na pantalla %d na "
|
||||
"visualización «%s»\n"
|
||||
|
||||
#: ../src/core/screen.c:750
|
||||
#: ../src/core/screen.c:828
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "A visualización %d na pantalla «%s» ten xa un xestor de xanelas\n"
|
||||
|
||||
#: ../src/core/screen.c:935
|
||||
#: ../src/core/screen.c:1013
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Non foi posíbel liberar a visualización %d na pantalla «%s»\n"
|
||||
@@ -286,44 +286,44 @@ msgstr ""
|
||||
"Estas xanelas non soportan "save current setup" e terán que "
|
||||
"reiniciarse manualmente a próxima vez que inicie a sesión."
|
||||
|
||||
#: ../src/core/util.c:80
|
||||
#: ../src/core/util.c:111
|
||||
#, c-format
|
||||
msgid "Failed to open debug log: %s\n"
|
||||
msgstr "Produciuse un fallo ao abrir o rexistro de depuración: %s\n"
|
||||
|
||||
#: ../src/core/util.c:90
|
||||
#: ../src/core/util.c:121
|
||||
#, c-format
|
||||
msgid "Failed to fdopen() log file %s: %s\n"
|
||||
msgstr "Produciuse un fallo ao facer fdopen() no ficheiro de rexistro %s: %s\n"
|
||||
|
||||
#: ../src/core/util.c:96
|
||||
#: ../src/core/util.c:127
|
||||
#, c-format
|
||||
msgid "Opened log file %s\n"
|
||||
msgstr "Ficheiro de rexistro %s aberto\n"
|
||||
|
||||
#: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
|
||||
#: ../src/core/util.c:146 ../src/tools/mutter-message.c:149
|
||||
#, c-format
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter foi compilado sen compatibilidade para o modo detallado\n"
|
||||
|
||||
#: ../src/core/util.c:259
|
||||
#: ../src/core/util.c:290
|
||||
msgid "Window manager: "
|
||||
msgstr "Xestor de xanelas: "
|
||||
|
||||
#: ../src/core/util.c:407
|
||||
#: ../src/core/util.c:438
|
||||
msgid "Bug in window manager: "
|
||||
msgstr "Erro no xestor de xanelas: "
|
||||
|
||||
#: ../src/core/util.c:438
|
||||
#: ../src/core/util.c:471
|
||||
msgid "Window manager warning: "
|
||||
msgstr "Aviso do xestor de xanelas: "
|
||||
|
||||
#: ../src/core/util.c:466
|
||||
#: ../src/core/util.c:499
|
||||
msgid "Window manager error: "
|
||||
msgstr "Erro do xestor de xanelas: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7234
|
||||
#: ../src/core/window.c:7224
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -339,7 +339,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7899
|
||||
#: ../src/core/window.c:7887
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@@ -349,23 +349,23 @@ msgstr ""
|
||||
"mais configurou o tamaño mínimo a %d x %d e o tamaño máximo a %d x %d, isto "
|
||||
"non ten moito sentido.\n"
|
||||
|
||||
#: ../src/core/window-props.c:310
|
||||
#: ../src/core/window-props.c:309
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "O aplicativo configurou un _NET_WM_PID %lu falso\n"
|
||||
|
||||
#: ../src/core/window-props.c:429
|
||||
#: ../src/core/window-props.c:426
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (en %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1484
|
||||
#: ../src/core/window-props.c:1481
|
||||
#, 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:1495
|
||||
#: ../src/core/window-props.c:1492
|
||||
#, 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"
|
||||
@@ -434,10 +434,22 @@ msgstr ""
|
||||
"moveranse de forma conxunta á xanela pai."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "Xanelas agochadas en vivo"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether hidden windows (i.e., minimized windows and windows on "
|
||||
"other workspaces than the current one) should be kept alive."
|
||||
msgstr ""
|
||||
"Determina se as xanelas agochadas (p.ex., xanelas minimizadas ou xanelas "
|
||||
"noutros espazos de traballo) deben manterse activas."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr "Activar o mosaico nos bordos ao arrastrar xanelas aos bordos da xanela"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"If enabled, dropping windows on vertical screen edges maximizes them "
|
||||
"vertically and resizes them horizontally to cover half of the available "
|
||||
@@ -448,11 +460,11 @@ msgstr ""
|
||||
"metade da área dispoñíbel. Arrastrar xanelas ao bordo superior da pantalla "
|
||||
"maximízaas por completo."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Os espazos de traballo xestiónanse dinamicamente"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"static number of workspaces (determined by the num-workspaces key in org."
|
||||
@@ -462,11 +474,11 @@ msgstr ""
|
||||
"número estático de áreas de traballo (determinado pola chave «num-"
|
||||
"workspaces» en «org.gnome.desktop.wm.preferences»)."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Espazos de traballo só no principal"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
msgid ""
|
||||
"Determines whether workspace switching should happen for windows on all "
|
||||
"monitors or only for windows on the primary monitor."
|
||||
@@ -474,11 +486,11 @@ msgstr ""
|
||||
"Determina se o troco de espazo de traballo debe facerse para as xanelas de "
|
||||
"todos os monitores ou só para o monitor principal."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
msgid "No tab popup"
|
||||
msgstr "No hai lapela emerxente"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
msgid ""
|
||||
"Determines whether the use of popup and highlight frame should be disabled "
|
||||
"for window cycling."
|
||||
@@ -486,11 +498,11 @@ msgstr ""
|
||||
"Determina se se debe desactivar o uso de xanelas emerxentes e marcos "
|
||||
"realzados ao cambiar entre xanelas."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
msgid "Draggable border width"
|
||||
msgstr "Anchura arrastrábel do bordo"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
@@ -498,11 +510,11 @@ 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/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Seleccionar xanela da lapela emerxente"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Cancelar lapela emerxente"
|
||||
|
||||
@@ -511,6 +523,50 @@ msgstr "Cancelar lapela emerxente"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Uso: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1158
|
||||
msgid "Close Window"
|
||||
msgstr "Pechar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1161
|
||||
msgid "Window Menu"
|
||||
msgstr "Menú da xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1164
|
||||
msgid "Minimize Window"
|
||||
msgstr "Minimizar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1167
|
||||
msgid "Maximize Window"
|
||||
msgstr "Maximizar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1170
|
||||
msgid "Restore Window"
|
||||
msgstr "Restaurar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1173
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Pregar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1176
|
||||
msgid "Unroll Window"
|
||||
msgstr "Despregar a xanela"
|
||||
|
||||
#: ../src/ui/frames.c:1179
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Manter a xanela na parte superior"
|
||||
|
||||
#: ../src/ui/frames.c:1182
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Quitar a xanela da parte superior"
|
||||
|
||||
#: ../src/ui/frames.c:1185
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Sempre no espazo de traballo visíbel"
|
||||
|
||||
#: ../src/ui/frames.c:1188
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Pór a xanela nun só espazo de traballo"
|
||||
|
||||
#. Translators: Translate this string the same way as you do in libwnck!
|
||||
#: ../src/ui/menu.c:69
|
||||
msgid "Mi_nimize"
|
||||
@@ -710,48 +766,48 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:253
|
||||
msgid "top"
|
||||
msgstr "superior"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "bottom"
|
||||
msgstr "inferior"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "left"
|
||||
msgstr "esquerda"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "right"
|
||||
msgstr "dereita"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:286
|
||||
#, 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:287
|
||||
#: ../src/ui/theme.c:305
|
||||
#, 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:324
|
||||
#: ../src/ui/theme.c:342
|
||||
#, 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:336
|
||||
#: ../src/ui/theme.c:354
|
||||
#, 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:1049
|
||||
#: ../src/ui/theme.c:1067
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Os degradados deben ter polo menos dúas cores"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
@@ -761,7 +817,7 @@ msgstr ""
|
||||
"entre parénteses, por exemplo: gtk:custom(foo,bar); non foi posíbel analizar "
|
||||
"«%s»."
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1235
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
@@ -770,7 +826,7 @@ 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:1231
|
||||
#: ../src/ui/theme.c:1249
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
@@ -779,7 +835,7 @@ msgstr ""
|
||||
"O formato de «gtk:custom» é «gtk:custom(nome_de_cor,nome_alternativo», «%s» "
|
||||
"non respecta o formato"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1294
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -788,7 +844,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:1290
|
||||
#: ../src/ui/theme.c:1308
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -798,17 +854,17 @@ msgstr ""
|
||||
"estado, exemplo. gtk:fg[NORMAL] onde NORMAL é o estado; non foi posíbel "
|
||||
"analizar «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1319
|
||||
#, 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:1314
|
||||
#: ../src/ui/theme.c:1332
|
||||
#, 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:1343
|
||||
#: ../src/ui/theme.c:1361
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -817,17 +873,17 @@ msgstr ""
|
||||
"O formato de blend é «blend/bg_color/fg_color/alpha», «%s»non coincide co "
|
||||
"formato"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1372
|
||||
#, 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:1364
|
||||
#: ../src/ui/theme.c:1382
|
||||
#, 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:1411
|
||||
#: ../src/ui/theme.c:1429
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
@@ -835,28 +891,28 @@ msgstr ""
|
||||
"O formato de sombreado é \"shade/base_color/factor\", «%s» non coincide co "
|
||||
"formato"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1440
|
||||
#, 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:1432
|
||||
#: ../src/ui/theme.c:1450
|
||||
#, 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:1461
|
||||
#: ../src/ui/theme.c:1479
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Non foi posíbel analizar a cor «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1790
|
||||
#, 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:1805
|
||||
#: ../src/ui/theme.c:1817
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@@ -865,14 +921,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:1819
|
||||
#: ../src/ui/theme.c:1831
|
||||
#, 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:1940
|
||||
#: ../src/ui/theme.c:1953
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@@ -881,17 +937,17 @@ msgstr ""
|
||||
"A expresión de coordenadas contén un operador non válido ao inicio do seu "
|
||||
"texto: «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:2010
|
||||
#, 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:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2121 ../src/ui/theme.c:2131 ../src/ui/theme.c:2165
|
||||
#, 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:2162
|
||||
#: ../src/ui/theme.c:2173
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
@@ -899,25 +955,25 @@ msgstr ""
|
||||
"A expresión de coordenadas tentou usar un operador mod cun número de coma "
|
||||
"flotante"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2229
|
||||
#, 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:2227
|
||||
#: ../src/ui/theme.c:2238
|
||||
#, 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:2235
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, 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:2245
|
||||
#: ../src/ui/theme.c:2256
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -926,42 +982,42 @@ msgstr ""
|
||||
"A expresión de coordenadas ten un operador \"%c\" seguido do operador \"%c\" "
|
||||
"sen un operando entre eles"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2407 ../src/ui/theme.c:2452
|
||||
#, 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:2495
|
||||
#: ../src/ui/theme.c:2506
|
||||
#, 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:2524
|
||||
#: ../src/ui/theme.c:2535
|
||||
#, 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:2588
|
||||
#: ../src/ui/theme.c:2599
|
||||
#, 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:2599
|
||||
#: ../src/ui/theme.c:2610
|
||||
#, 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:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2822 ../src/ui/theme.c:2842 ../src/ui/theme.c:2862
|
||||
#, 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:4498
|
||||
#: ../src/ui/theme.c:4533
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -970,24 +1026,24 @@ msgstr ""
|
||||
"<button function=«%s» state=«%s» draw_ops=\"whatever\"/> débese especificar "
|
||||
"para este estilo de marco"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5066 ../src/ui/theme.c:5091
|
||||
#, 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:5082
|
||||
#: ../src/ui/theme.c:5139
|
||||
#, 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:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5275 ../src/ui/theme.c:5282 ../src/ui/theme.c:5289
|
||||
#: ../src/ui/theme.c:5296 ../src/ui/theme.c:5303
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Non se configurou <%s> para o tema «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5311
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -996,7 +1052,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:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5709 ../src/ui/theme.c:5771 ../src/ui/theme.c:5834
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@@ -1004,7 +1060,7 @@ msgstr ""
|
||||
"As constantes definidas polo usuario deben comezar cunha letra maiúscula; "
|
||||
"«%s» non o fai"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5717 ../src/ui/theme.c:5779 ../src/ui/theme.c:5842
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "A constante «%s» xa foi definida"
|
||||
@@ -1391,7 +1447,7 @@ msgstr "Non se permite texto dentro do elemento <%s>"
|
||||
msgid "<%s> specified twice for this theme"
|
||||
msgstr "<%s> especificada dúas veces para este tema"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4334
|
||||
#: ../src/ui/theme-parser.c:4348
|
||||
#, c-format
|
||||
msgid "Failed to find a valid file for theme %s\n"
|
||||
msgstr "Non se atopou ningún ficheiro válido para o tema %s\n"
|
||||
@@ -1598,52 +1654,6 @@ msgstr ""
|
||||
"%d expresións de coordenadas interpretadas en %g segundos (%g segundos de "
|
||||
"media)\n"
|
||||
|
||||
#~ msgid "Comma-separated list of compositor plugins"
|
||||
#~ msgstr "Lista de separadas por comas dos complementos do compositor"
|
||||
|
||||
#~ msgid "Live Hidden Windows"
|
||||
#~ msgstr "Xanelas agochadas en vivo"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Determines whether hidden windows (i.e., minimized windows and windows on "
|
||||
#~ "other workspaces than the current one) should be kept alive."
|
||||
#~ msgstr ""
|
||||
#~ "Determina se as xanelas agochadas (p.ex., xanelas minimizadas ou xanelas "
|
||||
#~ "noutros espazos de traballo) deben manterse activas."
|
||||
|
||||
#~ msgid "Close Window"
|
||||
#~ msgstr "Pechar a xanela"
|
||||
|
||||
#~ msgid "Window Menu"
|
||||
#~ msgstr "Menú da xanela"
|
||||
|
||||
#~ msgid "Minimize Window"
|
||||
#~ msgstr "Minimizar a xanela"
|
||||
|
||||
#~ msgid "Maximize Window"
|
||||
#~ msgstr "Maximizar a xanela"
|
||||
|
||||
#~ msgid "Restore Window"
|
||||
#~ msgstr "Restaurar a xanela"
|
||||
|
||||
#~ msgid "Roll Up Window"
|
||||
#~ msgstr "Pregar a xanela"
|
||||
|
||||
#~ msgid "Unroll Window"
|
||||
#~ msgstr "Despregar a xanela"
|
||||
|
||||
#~ msgid "Keep Window On Top"
|
||||
#~ msgstr "Manter a xanela na parte superior"
|
||||
|
||||
#~ msgid "Remove Window From Top"
|
||||
#~ msgstr "Quitar a xanela da parte superior"
|
||||
|
||||
#~ msgid "Always On Visible Workspace"
|
||||
#~ msgstr "Sempre no espazo de traballo visíbel"
|
||||
|
||||
#~ msgid "Put Window On Only One Workspace"
|
||||
#~ msgstr "Pór a xanela nun só espazo de traballo"
|
||||
|
||||
#~ msgid "Switch to workspace 1"
|
||||
#~ msgstr "Cambiar ao espazo de traballo 1"
|
||||
|
||||
@@ -1954,6 +1964,9 @@ msgstr ""
|
||||
#~ msgid "Error setting clutter plugin list: %s\n"
|
||||
#~ msgstr "Erro ao definir a lista de complementos de clutter: %s\n"
|
||||
|
||||
#~ msgid "Clutter Plugins"
|
||||
#~ msgstr "Complementos de Clutter"
|
||||
|
||||
#~ msgid "Plugins to load for the Clutter-based compositing manager."
|
||||
#~ msgstr ""
|
||||
#~ "Complementos a cargar polo xestor de composición baseado en Clutter."
|
||||
|
||||
370
po/sl.po
370
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: 2012-06-06 11:44+0000\n"
|
||||
"PO-Revision-Date: 2012-06-08 21:23+0100\n"
|
||||
"POT-Creation-Date: 2012-03-12 09:11+0000\n"
|
||||
"PO-Revision-Date: 2012-03-12 12:10+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"
|
||||
@@ -42,7 +42,7 @@ msgstr "Poglej razdelek na desni"
|
||||
msgid "Another compositing manager is already running on screen %i on display \"%s\"."
|
||||
msgstr "Drug upravljalnik sestavljanja je že zagnan na zaslonu %i prikaza \"%s\"."
|
||||
|
||||
#: ../src/core/bell.c:320
|
||||
#: ../src/core/bell.c:307
|
||||
msgid "Bell event"
|
||||
msgstr "Dogodek zvonjenja"
|
||||
|
||||
@@ -72,12 +72,12 @@ msgstr "_Počakaj"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Vsili konec"
|
||||
|
||||
#: ../src/core/display.c:380
|
||||
#: ../src/core/display.c:361
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Manjka razširitev %s, ki je ključna za sestavljanje"
|
||||
|
||||
#: ../src/core/display.c:446
|
||||
#: ../src/core/display.c:427
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Ni mogoče odpreti zaslona '%s' okenskega sistema X\n"
|
||||
@@ -88,36 +88,36 @@ msgstr "Ni mogoče odpreti zaslona '%s' okenskega sistema X\n"
|
||||
msgid "Some other program is already using the key %s with modifiers %x as a binding\n"
|
||||
msgstr "Tipko %s s spremenilnikom %x uporablja že nek drug program\n"
|
||||
|
||||
#: ../src/core/main.c:196
|
||||
#: ../src/core/main.c:206
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Onemogoči povezavo z upravljalnikom sej"
|
||||
|
||||
#: ../src/core/main.c:202
|
||||
#: ../src/core/main.c:212
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Zamenjaj trenutni upravljalnik oken"
|
||||
|
||||
#: ../src/core/main.c:208
|
||||
#: ../src/core/main.c:218
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Navedite ID upravljanja seje"
|
||||
|
||||
#: ../src/core/main.c:213
|
||||
#: ../src/core/main.c:223
|
||||
msgid "X Display to use"
|
||||
msgstr "Zaslon X za uporabo"
|
||||
|
||||
#: ../src/core/main.c:219
|
||||
#: ../src/core/main.c:229
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Začni sejo iz shranjene datoteke"
|
||||
|
||||
#: ../src/core/main.c:225
|
||||
#: ../src/core/main.c:235
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Uskladi klice X"
|
||||
|
||||
#: ../src/core/main.c:494
|
||||
#: ../src/core/main.c:504
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Ni mogoče preiskati mape tem: %s\n"
|
||||
|
||||
#: ../src/core/main.c:510
|
||||
#: ../src/core/main.c:520
|
||||
#, c-format
|
||||
msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
msgstr "Ni mogoče najti teme! Prepričajte se, da %s obstaja in vsebuje običajni zapis teme.\n"
|
||||
@@ -140,55 +140,55 @@ msgid "Print version"
|
||||
msgstr "Izpiši različico"
|
||||
|
||||
#: ../src/core/mutter.c:60
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Vstavek Mutter za uporabo"
|
||||
msgid "Comma-separated list of compositor plugins"
|
||||
msgstr "Z vejico ločen seznam vstavkov sestavljanja"
|
||||
|
||||
#: ../src/core/prefs.c:1064
|
||||
#: ../src/core/prefs.c:1077
|
||||
msgid "Workarounds for broken applications disabled. Some applications may not behave properly.\n"
|
||||
msgstr "Obhodi za pokvarjene programe so onemogočeni. Nekateri programi se morda ne bodo odzivali na pričakovan način.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1139
|
||||
#: ../src/core/prefs.c:1152
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr "Ni mogoče razčleniti opisa pisave \"%s\" iz ključa GSettings %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1205
|
||||
#: ../src/core/prefs.c:1218
|
||||
#, c-format
|
||||
msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
|
||||
msgstr "\"%s\", najden v podatkovni zbirki nastavitev, ni veljaven spremenilnik za miškine gumbe.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1723
|
||||
#: ../src/core/prefs.c:1739
|
||||
#, c-format
|
||||
msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
|
||||
msgstr "\"%s\", najden v podatkovni zbirki nastavitev, ni veljaven ključ za tipkovno bližnjico \"%s\"\n"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/core/prefs.c:1820
|
||||
#: ../src/core/prefs.c:1836
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Delovna površina %d"
|
||||
|
||||
#: ../src/core/screen.c:652
|
||||
#: ../src/core/screen.c:730
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Zaslon %d na prikazu '%s' ni veljaven\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:746
|
||||
#, 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 "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken; poskušajte uporabiti možnost --replace za zamenjavo trenutnega.\n"
|
||||
|
||||
#: ../src/core/screen.c:695
|
||||
#: ../src/core/screen.c:773
|
||||
#, c-format
|
||||
msgid "Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "Ni mogoče dobiti izbire upravljalnika oken na zaslonu %d prikaza \"%s\"\n"
|
||||
|
||||
#: ../src/core/screen.c:750
|
||||
#: ../src/core/screen.c:828
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken\n"
|
||||
|
||||
#: ../src/core/screen.c:935
|
||||
#: ../src/core/screen.c:1013
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Ni mogoče opustiti zaslona %d na prikazu \"%s\"\n"
|
||||
@@ -249,46 +249,46 @@ msgstr "Neznan predmet %s"
|
||||
msgid "These windows do not support "save current setup" and will have to be restarted manually next time you log in."
|
||||
msgstr "Ta okna ne podpirajo možnosti "shranjevanja trenutnih nastavitev", zato jih bo treba ob naslednji prijavi zagnati ročno."
|
||||
|
||||
#: ../src/core/util.c:80
|
||||
#: ../src/core/util.c:111
|
||||
#, c-format
|
||||
msgid "Failed to open debug log: %s\n"
|
||||
msgstr "Napaka med odpiranjem dnevnika razhroščevanja: %s\n"
|
||||
|
||||
#: ../src/core/util.c:90
|
||||
#: ../src/core/util.c:121
|
||||
#, c-format
|
||||
msgid "Failed to fdopen() log file %s: %s\n"
|
||||
msgstr "Napaka ukaza fdopen() dnevniške datoteke %s: %s\n"
|
||||
|
||||
#: ../src/core/util.c:96
|
||||
#: ../src/core/util.c:127
|
||||
#, c-format
|
||||
msgid "Opened log file %s\n"
|
||||
msgstr "Odprta dnevniška datoteka %s\n"
|
||||
|
||||
#: ../src/core/util.c:115
|
||||
#: ../src/core/util.c:146
|
||||
#: ../src/tools/mutter-message.c:149
|
||||
#, c-format
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Program Mutter je kodno preveden brez podpore za podrobni način izpisovanja\n"
|
||||
|
||||
#: ../src/core/util.c:259
|
||||
#: ../src/core/util.c:290
|
||||
msgid "Window manager: "
|
||||
msgstr "Upravljalnik oken: "
|
||||
|
||||
# G:4 K:0 O:0
|
||||
#: ../src/core/util.c:407
|
||||
#: ../src/core/util.c:438
|
||||
msgid "Bug in window manager: "
|
||||
msgstr "Hrošč v upravljalniku oken: "
|
||||
|
||||
#: ../src/core/util.c:438
|
||||
#: ../src/core/util.c:471
|
||||
msgid "Window manager warning: "
|
||||
msgstr "Opozorilo upravljalnika oken: "
|
||||
|
||||
#: ../src/core/util.c:466
|
||||
#: ../src/core/util.c:499
|
||||
msgid "Window manager error: "
|
||||
msgstr "Napaka upravljalnika oken: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7234
|
||||
#: ../src/core/window.c:7224
|
||||
#, 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"
|
||||
@@ -300,27 +300,27 @@ 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:7899
|
||||
#: ../src/core/window.c:7887
|
||||
#, 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"
|
||||
|
||||
#: ../src/core/window-props.c:310
|
||||
#: ../src/core/window-props.c:309
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "Program je nastavil pokvarjen _NET_WM_PID %lu\n"
|
||||
|
||||
#: ../src/core/window-props.c:429
|
||||
#: ../src/core/window-props.c:426
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1484
|
||||
#: ../src/core/window-props.c:1481
|
||||
#, 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:1495
|
||||
#: ../src/core/window-props.c:1492
|
||||
#, 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"
|
||||
@@ -372,50 +372,58 @@ msgid "When true, instead of having independent titlebars, modal dialogs appear
|
||||
msgstr "Izbrana možnost omogoči, da je namesto samostojnih nazivnih vrstic, na to mesto pripeto modalno pogovorno okno, ki se premika z nadrejenim oknom."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
|
||||
msgid "Live Hidden Windows"
|
||||
msgstr "Ohranjena skrita okna"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
|
||||
msgid "Determines whether hidden windows (i.e., minimized windows and windows on other workspaces than the current one) should be kept alive."
|
||||
msgstr "Določa ali naj se skrita okna (skrčena okna in okna na drugih delovnih površinah) ohranjajo odprta."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr "Omogoči prilagajanje velikosti okna ob dotiku robov zaslona"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
msgid "If enabled, dropping windows on vertical screen edges maximizes them vertically and resizes them horizontally to cover half of the available area. Dropping windows on the top screen edge maximizes them completely."
|
||||
msgstr "Izbrana možnost omogoča, da se okna, ki se dotaknejo navpičnih robov zaslona razpeta po navpični osi in razširjena na polovično širino. Dotik vrhnjega roba razpne okno čez cel zaslon."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Število delovnih površin je spremenljivo"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.gnome.desktop.wm.preferences)."
|
||||
msgstr "Možnost določa ali je število delovnih površin spremenljivo ali pa je to število stalno (določenih s ključem števila delovnih površin med možnostmi v org.gnome.desktop.wm.preferences)."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Delovne površine le na prvem zaslonu"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
msgid "Determines whether workspace switching should happen for windows on all monitors or only for windows on the primary monitor."
|
||||
msgstr "Določa ali naj se delovne površine preklapljajo na vseh zaslonih ali le na prvem, glavnem zaslonu."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
msgid "No tab popup"
|
||||
msgstr "Brez pojavnih zavihkov"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
msgid "Determines whether the use of popup and highlight frame should be disabled for window cycling."
|
||||
msgstr "Določa ali naj bo uporaba pojavnih zavihkov in poudarjanja onemogočena med kroženjem oken."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
msgid "Draggable border width"
|
||||
msgstr "Prilagodljiva obroba pravokotnika"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
msgid "The amount of total draggable borders. If the theme's visible borders are not enough, invisible borders will be added to meet this value."
|
||||
msgstr "Delež skupne prilagodljive obrobe. V kolikor vidni robovi teme niso dovolj, so dodane nevidne obrobe, za dodatno prilagajanje."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Izbor okna iz pojavnega zavihka"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Prekliči pojavni zavihek"
|
||||
|
||||
@@ -424,6 +432,54 @@ msgstr "Prekliči pojavni zavihek"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Uporaba: %s\n"
|
||||
|
||||
#: ../src/ui/frames.c:1158
|
||||
msgid "Close Window"
|
||||
msgstr "Zapri okno"
|
||||
|
||||
# G:1 K:1 O:0
|
||||
#: ../src/ui/frames.c:1161
|
||||
msgid "Window Menu"
|
||||
msgstr "Meni okna"
|
||||
|
||||
# G:0 K:1 O:0
|
||||
#: ../src/ui/frames.c:1164
|
||||
msgid "Minimize Window"
|
||||
msgstr "Skrči okno"
|
||||
|
||||
#: ../src/ui/frames.c:1167
|
||||
msgid "Maximize Window"
|
||||
msgstr "Razpni okno"
|
||||
|
||||
#: ../src/ui/frames.c:1170
|
||||
msgid "Restore Window"
|
||||
msgstr "Obnovi okno"
|
||||
|
||||
# G:2 K:0 O:0
|
||||
#: ../src/ui/frames.c:1173
|
||||
msgid "Roll Up Window"
|
||||
msgstr "Zavij okno"
|
||||
|
||||
#: ../src/ui/frames.c:1176
|
||||
msgid "Unroll Window"
|
||||
msgstr "Odvij okno"
|
||||
|
||||
#: ../src/ui/frames.c:1179
|
||||
msgid "Keep Window On Top"
|
||||
msgstr "Ohrani okno na vrhu"
|
||||
|
||||
#: ../src/ui/frames.c:1182
|
||||
msgid "Remove Window From Top"
|
||||
msgstr "Odstrani okno z vrha"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/ui/frames.c:1185
|
||||
msgid "Always On Visible Workspace"
|
||||
msgstr "Vedno na vidni delovni površini"
|
||||
|
||||
#: ../src/ui/frames.c:1188
|
||||
msgid "Put Window On Only One Workspace"
|
||||
msgstr "Postavi okno na samo eno delovno površino"
|
||||
|
||||
#. Translators: Translate this string the same way as you do in libwnck!
|
||||
#: ../src/ui/menu.c:69
|
||||
msgid "Mi_nimize"
|
||||
@@ -642,251 +698,251 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:253
|
||||
msgid "top"
|
||||
msgstr "zgoraj"
|
||||
|
||||
# G:12 K:5 O:0
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:255
|
||||
msgid "bottom"
|
||||
msgstr "spodaj"
|
||||
|
||||
# G:10 K:4 O:0
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:257
|
||||
msgid "left"
|
||||
msgstr "levo"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:259
|
||||
msgid "right"
|
||||
msgstr "desno"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:286
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "geometrija okvirja ne navaja dimenzije \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:305
|
||||
#, 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:324
|
||||
#: ../src/ui/theme.c:342
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Vrednost razmerja gumba %g ni smiselna"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:354
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Geometrija okvirja ne navaja velikosti gumbov"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1067
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Prelivi bi morali imeti vsaj dve barvi"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1219
|
||||
#, 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:1217
|
||||
#: ../src/ui/theme.c:1235
|
||||
#, 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:1231
|
||||
#: ../src/ui/theme.c:1249
|
||||
#, 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:1276
|
||||
#: ../src/ui/theme.c:1294
|
||||
#, 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:1290
|
||||
#: ../src/ui/theme.c:1308
|
||||
#, 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:1301
|
||||
#: ../src/ui/theme.c:1319
|
||||
#, 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:1314
|
||||
#: ../src/ui/theme.c:1332
|
||||
#, 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:1343
|
||||
#: ../src/ui/theme.c:1361
|
||||
#, 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:1354
|
||||
#: ../src/ui/theme.c:1372
|
||||
#, 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:1364
|
||||
#: ../src/ui/theme.c:1382
|
||||
#, 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:1411
|
||||
#: ../src/ui/theme.c:1429
|
||||
#, 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:1422
|
||||
#: ../src/ui/theme.c:1440
|
||||
#, 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:1432
|
||||
#: ../src/ui/theme.c:1450
|
||||
#, 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:1461
|
||||
#: ../src/ui/theme.c:1479
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Ni mogoče razčleniti barve \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1790
|
||||
#, 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:1805
|
||||
#: ../src/ui/theme.c:1817
|
||||
#, 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:1819
|
||||
#: ../src/ui/theme.c:1831
|
||||
#, 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:1940
|
||||
#: ../src/ui/theme.c:1953
|
||||
#, 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:1997
|
||||
#: ../src/ui/theme.c:2010
|
||||
#, 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:2110
|
||||
#: ../src/ui/theme.c:2120
|
||||
#: ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2121
|
||||
#: ../src/ui/theme.c:2131
|
||||
#: ../src/ui/theme.c:2165
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Izraz koordinat povzroči deljenje z vrednostjo nič"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2173
|
||||
#, 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:2218
|
||||
#: ../src/ui/theme.c:2229
|
||||
#, 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:2227
|
||||
#: ../src/ui/theme.c:2238
|
||||
#, 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:2235
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, 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:2245
|
||||
#: ../src/ui/theme.c:2256
|
||||
#, 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:2396
|
||||
#: ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2407
|
||||
#: ../src/ui/theme.c:2452
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Izraz koordinat vsebuje neznano spremenljivko ali konstanto \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2506
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Razčlenjevalnik izrazov koordinat je preplavil medpomnilnik."
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2535
|
||||
#, 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:2588
|
||||
#: ../src/ui/theme.c:2599
|
||||
#, 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:2599
|
||||
#: ../src/ui/theme.c:2610
|
||||
#, 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:2812
|
||||
#: ../src/ui/theme.c:2832
|
||||
#: ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2822
|
||||
#: ../src/ui/theme.c:2842
|
||||
#: ../src/ui/theme.c:2862
|
||||
#, 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:4498
|
||||
#: ../src/ui/theme.c:4533
|
||||
#, 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:5009
|
||||
#: ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5066
|
||||
#: ../src/ui/theme.c:5091
|
||||
#, 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:5082
|
||||
#: ../src/ui/theme.c:5139
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Napaka med nalaganjem teme \"%s\": %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218
|
||||
#: ../src/ui/theme.c:5225
|
||||
#: ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239
|
||||
#: ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5275
|
||||
#: ../src/ui/theme.c:5282
|
||||
#: ../src/ui/theme.c:5289
|
||||
#: ../src/ui/theme.c:5296
|
||||
#: ../src/ui/theme.c:5303
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Ni nastavljena vrednost <%s> za temo \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5311
|
||||
#, 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:5650
|
||||
#: ../src/ui/theme.c:5712
|
||||
#: ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5709
|
||||
#: ../src/ui/theme.c:5771
|
||||
#: ../src/ui/theme.c:5834
|
||||
#, 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:5658
|
||||
#: ../src/ui/theme.c:5720
|
||||
#: ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5717
|
||||
#: ../src/ui/theme.c:5779
|
||||
#: ../src/ui/theme.c:5842
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Konstanta \"%s\" je že določena"
|
||||
@@ -1258,7 +1314,7 @@ msgstr "Znotraj predmeta <%s> besedilo ni dovoljeno"
|
||||
msgid "<%s> specified twice for this theme"
|
||||
msgstr "Vrednost <%s> je za to temo navedena dvakrat"
|
||||
|
||||
#: ../src/ui/theme-parser.c:4334
|
||||
#: ../src/ui/theme-parser.c:4348
|
||||
#, c-format
|
||||
msgid "Failed to find a valid file for theme %s\n"
|
||||
msgstr "Ni mogoče najti veljavne datoteke za temo %s\n"
|
||||
@@ -1455,18 +1511,84 @@ msgstr "vrednost y je %d, pričakovana pa je %d"
|
||||
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 "Comma-separated list of compositor plugins"
|
||||
#~ msgstr "Z vejico ločen seznam vstavkov sestavljanja"
|
||||
#~ msgid "Switch to workspace 1"
|
||||
#~ msgstr "Preklopi na delovno površino 1"
|
||||
|
||||
#~ msgid "Live Hidden Windows"
|
||||
#~ msgstr "Ohranjena skrita okna"
|
||||
#~ msgid "Switch to workspace 2"
|
||||
#~ msgstr "Preklopi na delovno površino 2"
|
||||
|
||||
#~ msgid "Switch to workspace 3"
|
||||
#~ msgstr "Preklopi na delovno površino 3"
|
||||
|
||||
#~ msgid "Switch to workspace 4"
|
||||
#~ msgstr "Preklopi na delovno površino 4"
|
||||
|
||||
#~ msgid "Switch to workspace 5"
|
||||
#~ msgstr "Preklopi na delovno površino 5"
|
||||
|
||||
#~ msgid "Switch to workspace 6"
|
||||
#~ msgstr "Preklopi na delovno površino 6"
|
||||
|
||||
#~ msgid "Switch to workspace 7"
|
||||
#~ msgstr "Preklopi na delovno površino 7"
|
||||
|
||||
#~ msgid "Switch to workspace 8"
|
||||
#~ msgstr "Preklopi na delovno površino 8"
|
||||
|
||||
#~ msgid "Switch to workspace 9"
|
||||
#~ msgstr "Preklopi na delovno površino 9"
|
||||
|
||||
#~ msgid "Switch to workspace 10"
|
||||
#~ msgstr "Preklopi na delovno površino 10"
|
||||
|
||||
#~ msgid "Switch to workspace 11"
|
||||
#~ msgstr "Preklopi na delovno površino 11"
|
||||
|
||||
#~ msgid "Switch to workspace 12"
|
||||
#~ msgstr "Preklopi na delovno površino 12"
|
||||
|
||||
#~ msgid "Switch to workspace on the left of the current workspace"
|
||||
#~ msgstr "Preklopi na delovno površino na levi od trenutne delovne površine"
|
||||
|
||||
#~ msgid "Switch to workspace on the right of the current workspace"
|
||||
#~ msgstr "Preklopi na delovno površino na desni od trenutne delovne površine"
|
||||
|
||||
#~ msgid "Switch to workspace above the current workspace"
|
||||
#~ msgstr "Preklopi na delovno površino nad trenutno delovno površino"
|
||||
|
||||
#~ msgid "Switch to workspace below the current workspace"
|
||||
#~ msgstr "Preklopi na delovno površino pod trenutno delovno površino"
|
||||
|
||||
#~ msgid "Move between windows of an application, using a popup window"
|
||||
#~ msgstr "Premakni med okni programa s pojavnim oknom"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Determines whether hidden windows (i.e., minimized windows and windows on "
|
||||
#~ "other workspaces than the current one) should be kept alive."
|
||||
#~ msgstr ""
|
||||
#~ "Določa ali naj se skrita okna (skrčena okna in okna na drugih delovnih "
|
||||
#~ "površinah) ohranjajo odprta."
|
||||
#~ "Move backward between windows of an application, using a popup window"
|
||||
#~ msgstr "Premakni nazaj med okni programa s pojavnim oknom"
|
||||
|
||||
#~ msgid "Close Window"
|
||||
#~ msgstr "Zapri okno"
|
||||
#~ msgid "Move between windows, using a popup window"
|
||||
#~ msgstr "Premakni med okni s pojavnim oknom"
|
||||
|
||||
#~ msgid "Move backward between windows, using a popup window"
|
||||
#~ msgstr "Premakni nazaj med okni s pojavnim oknom"
|
||||
|
||||
#~ msgid "Move between panels and the desktop, using a popup window"
|
||||
#~ msgstr "Premakni med pulti in namizjem s pojavnim oknom"
|
||||
|
||||
#~ msgid "Move backward between panels and the desktop, using a popup window"
|
||||
#~ msgstr "Premakni nazaj med pulti in namizjem s pojavnim oknom"
|
||||
|
||||
#~ msgid "Move between windows of an application immediately"
|
||||
#~ msgstr "Takoj premakni med okni programa"
|
||||
|
||||
#~ msgid "Move backward between windows of an application immediately"
|
||||
#~ msgstr "Takoj premakni nazaj med okni programa"
|
||||
|
||||
#~ msgid "Move between windows immediately"
|
||||
#~ msgstr "Takoj premakni med okni"
|
||||
|
||||
#~ msgid "Move backward between windows immediately"
|
||||
#~ msgstr "Takoj premakni nazaj med okni"
|
||||
|
||||
#~ msgid "Move between panels and the desktop immediately"
|
||||
#~ msgstr "Takoj premakni med pulti in namizjem"
|
||||
|
||||
@@ -88,8 +88,6 @@ libmutter_la_SOURCES = \
|
||||
core/eventqueue.h \
|
||||
core/frame.c \
|
||||
core/frame.h \
|
||||
ui/gradient.c \
|
||||
meta/gradient.h \
|
||||
core/group-private.h \
|
||||
core/group-props.c \
|
||||
core/group-props.h \
|
||||
@@ -130,8 +128,8 @@ libmutter_la_SOURCES = \
|
||||
core/core.h \
|
||||
ui/ui.h \
|
||||
inlinepixbufs.h \
|
||||
ui/frames.c \
|
||||
ui/frames.h \
|
||||
ui/uiframe.c \
|
||||
ui/uiframe.h \
|
||||
ui/menu.c \
|
||||
ui/menu.h \
|
||||
ui/metaaccellabel.c \
|
||||
@@ -142,13 +140,7 @@ libmutter_la_SOURCES = \
|
||||
ui/tabpopup.h \
|
||||
ui/tile-preview.c \
|
||||
ui/tile-preview.h \
|
||||
ui/theme-parser.c \
|
||||
ui/theme.c \
|
||||
meta/theme.h \
|
||||
ui/theme-private.h \
|
||||
ui/ui.c \
|
||||
meta/preview-widget.h \
|
||||
ui/preview-widget.c \
|
||||
$(mutter_built_sources)
|
||||
|
||||
libmutter_la_LDFLAGS = -no-undefined
|
||||
@@ -163,7 +155,6 @@ libmutterinclude_base_headers = \
|
||||
meta/compositor.h \
|
||||
meta/display.h \
|
||||
meta/errors.h \
|
||||
meta/gradient.h \
|
||||
meta/group.h \
|
||||
meta/keybindings.h \
|
||||
meta/main.h \
|
||||
@@ -174,7 +165,6 @@ libmutterinclude_base_headers = \
|
||||
meta/meta-window-actor.h \
|
||||
meta/prefs.h \
|
||||
meta/screen.h \
|
||||
meta/theme.h \
|
||||
meta/types.h \
|
||||
meta/util.h \
|
||||
meta/window.h \
|
||||
@@ -183,7 +173,6 @@ libmutterinclude_base_headers = \
|
||||
# Excluded from scanning for introspection but installed
|
||||
# atomnames.h: macros cause problems for scanning process
|
||||
libmutterinclude_extra_headers = \
|
||||
meta/preview-widget.h \
|
||||
meta/atomnames.h
|
||||
|
||||
libmutterincludedir = $(includedir)/mutter/meta
|
||||
@@ -192,10 +181,7 @@ libmutterinclude_HEADERS = \
|
||||
$(libmutterinclude_base_headers) \
|
||||
$(libmutterinclude_extra_headers)
|
||||
|
||||
mutter_theme_viewer_SOURCES= \
|
||||
ui/theme-viewer.c
|
||||
|
||||
bin_PROGRAMS=mutter mutter-theme-viewer
|
||||
bin_PROGRAMS=mutter
|
||||
|
||||
mutter_SOURCES = core/mutter.c
|
||||
mutter_LDADD = $(MUTTER_LIBS) libmutter.la
|
||||
@@ -233,16 +219,12 @@ Meta-$(api_version).gir: libmutter.la
|
||||
|
||||
endif
|
||||
|
||||
mutter_theme_viewer_LDADD= $(MUTTER_LIBS) libmutter.la
|
||||
|
||||
testboxes_SOURCES = core/testboxes.c
|
||||
testgradient_SOURCES = ui/testgradient.c
|
||||
testasyncgetprop_SOURCES = core/testasyncgetprop.c
|
||||
|
||||
noinst_PROGRAMS=testboxes testgradient testasyncgetprop
|
||||
noinst_PROGRAMS=testboxes testasyncgetprop
|
||||
|
||||
testboxes_LDADD = $(MUTTER_LIBS) libmutter.la
|
||||
testgradient_LDADD = $(MUTTER_LIBS) libmutter.la
|
||||
testasyncgetprop_LDADD = $(MUTTER_LIBS) libmutter.la
|
||||
|
||||
@INTLTOOL_DESKTOP_RULE@
|
||||
|
||||
@@ -557,7 +557,9 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
|
||||
clutter_actor_hide (info->hidden_group);
|
||||
|
||||
info->plugin_mgr = meta_plugin_manager_new (screen);
|
||||
info->plugin_mgr =
|
||||
meta_plugin_manager_get (screen);
|
||||
meta_plugin_manager_initialize (info->plugin_mgr);
|
||||
|
||||
/*
|
||||
* Delay the creation of the overlay window as long as we can, to avoid
|
||||
|
||||
@@ -35,32 +35,34 @@
|
||||
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
|
||||
static GType plugin_type = G_TYPE_NONE;
|
||||
static GSList *plugin_types;
|
||||
|
||||
/*
|
||||
* We have one "default plugin manager" that acts for the first screen,
|
||||
* but also can be used before we open any screens, and additional
|
||||
* plugin managers for each screen. (This is ugly. Probably we should
|
||||
* have one plugin manager and only make the plugins per-screen.)
|
||||
*/
|
||||
static MetaPluginManager *default_plugin_manager;
|
||||
|
||||
struct MetaPluginManager
|
||||
{
|
||||
MetaScreen *screen;
|
||||
MetaPlugin *plugin;
|
||||
MetaScreen *screen;
|
||||
|
||||
GList /* MetaPlugin */ *plugins; /* TODO -- maybe use hash table */
|
||||
};
|
||||
|
||||
void
|
||||
meta_plugin_manager_set_plugin_type (GType gtype)
|
||||
{
|
||||
if (plugin_type != G_TYPE_NONE)
|
||||
meta_fatal ("Mutter plugin already set: %s", g_type_name (plugin_type));
|
||||
|
||||
plugin_type = gtype;
|
||||
}
|
||||
|
||||
/*
|
||||
* Loads the given plugin.
|
||||
*/
|
||||
void
|
||||
meta_plugin_manager_load (const gchar *plugin_name)
|
||||
meta_plugin_manager_load (MetaPluginManager *plugin_mgr,
|
||||
const gchar *plugin_name)
|
||||
{
|
||||
const gchar *dpath = MUTTER_PLUGIN_DIR "/";
|
||||
gchar *path;
|
||||
MetaModule *module;
|
||||
GType plugin_type;
|
||||
|
||||
if (g_path_is_absolute (plugin_name))
|
||||
path = g_strdup (plugin_name);
|
||||
@@ -79,57 +81,162 @@ meta_plugin_manager_load (const gchar *plugin_name)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
meta_plugin_manager_set_plugin_type (meta_module_get_plugin_type (module));
|
||||
plugin_type = meta_module_get_plugin_type (module);
|
||||
meta_plugin_manager_register (plugin_mgr, plugin_type);
|
||||
|
||||
g_type_module_unuse (G_TYPE_MODULE (module));
|
||||
g_free (path);
|
||||
}
|
||||
|
||||
MetaPluginManager *
|
||||
/*
|
||||
* Registers the given plugin type
|
||||
*/
|
||||
void
|
||||
meta_plugin_manager_register (MetaPluginManager *plugin_mgr,
|
||||
GType plugin_type)
|
||||
{
|
||||
MetaPlugin *plugin;
|
||||
|
||||
plugin_types = g_slist_prepend (plugin_types, GSIZE_TO_POINTER (plugin_type));
|
||||
|
||||
plugin = g_object_new (plugin_type, NULL);
|
||||
plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin);
|
||||
}
|
||||
|
||||
void
|
||||
meta_plugin_manager_initialize (MetaPluginManager *plugin_mgr)
|
||||
{
|
||||
GList *iter;
|
||||
|
||||
if (!plugin_mgr->plugins)
|
||||
{
|
||||
/*
|
||||
* If no plugins are specified, load the default plugin.
|
||||
*/
|
||||
meta_plugin_manager_load (plugin_mgr, "default");
|
||||
}
|
||||
|
||||
for (iter = plugin_mgr->plugins; iter; iter = iter->next)
|
||||
{
|
||||
MetaPlugin *plugin = (MetaPlugin*) iter->data;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
g_object_set (plugin,
|
||||
"screen", plugin_mgr->screen,
|
||||
NULL);
|
||||
|
||||
if (klass->start)
|
||||
klass->start (plugin);
|
||||
}
|
||||
}
|
||||
|
||||
static MetaPluginManager *
|
||||
meta_plugin_manager_new (MetaScreen *screen)
|
||||
{
|
||||
MetaPluginManager *plugin_mgr;
|
||||
MetaPluginClass *klass;
|
||||
MetaPlugin *plugin;
|
||||
|
||||
plugin_mgr = g_new0 (MetaPluginManager, 1);
|
||||
plugin_mgr->screen = screen;
|
||||
plugin_mgr->plugin = plugin = g_object_new (plugin_type, "screen", screen, NULL);
|
||||
|
||||
klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
if (klass->start)
|
||||
klass->start (plugin);
|
||||
if (screen)
|
||||
g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", plugin_mgr);
|
||||
|
||||
return plugin_mgr;
|
||||
}
|
||||
|
||||
MetaPluginManager *
|
||||
meta_plugin_manager_get_default (void)
|
||||
{
|
||||
if (!default_plugin_manager)
|
||||
{
|
||||
default_plugin_manager = meta_plugin_manager_new (NULL);
|
||||
}
|
||||
|
||||
return default_plugin_manager;
|
||||
}
|
||||
|
||||
MetaPluginManager *
|
||||
meta_plugin_manager_get (MetaScreen *screen)
|
||||
{
|
||||
MetaPluginManager *plugin_mgr;
|
||||
|
||||
plugin_mgr = g_object_get_data (G_OBJECT (screen), "meta-plugin-manager");
|
||||
if (plugin_mgr)
|
||||
return plugin_mgr;
|
||||
|
||||
if (!default_plugin_manager)
|
||||
meta_plugin_manager_get_default ();
|
||||
|
||||
if (!default_plugin_manager->screen)
|
||||
{
|
||||
/* The default plugin manager is so far unused, we can recycle it */
|
||||
default_plugin_manager->screen = screen;
|
||||
g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", default_plugin_manager);
|
||||
|
||||
return default_plugin_manager;
|
||||
}
|
||||
else
|
||||
{
|
||||
GSList *iter;
|
||||
GType plugin_type;
|
||||
MetaPlugin *plugin;
|
||||
|
||||
plugin_mgr = meta_plugin_manager_new (screen);
|
||||
|
||||
for (iter = plugin_types; iter; iter = iter->next)
|
||||
{
|
||||
plugin_type = (GType)GPOINTER_TO_SIZE (iter->data);
|
||||
plugin = g_object_new (plugin_type, "screen", screen, NULL);
|
||||
plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin);
|
||||
}
|
||||
|
||||
return plugin_mgr;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_plugin_manager_kill_window_effects (MetaPluginManager *plugin_mgr,
|
||||
MetaWindowActor *actor)
|
||||
{
|
||||
MetaPlugin *plugin = plugin_mgr->plugin;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
GList *l = plugin_mgr->plugins;
|
||||
|
||||
if (klass->kill_window_effects)
|
||||
klass->kill_window_effects (plugin, actor);
|
||||
while (l)
|
||||
{
|
||||
MetaPlugin *plugin = l->data;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
if (!meta_plugin_disabled (plugin)
|
||||
&& klass->kill_window_effects)
|
||||
klass->kill_window_effects (plugin, actor);
|
||||
|
||||
l = l->next;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_plugin_manager_kill_switch_workspace (MetaPluginManager *plugin_mgr)
|
||||
{
|
||||
MetaPlugin *plugin = plugin_mgr->plugin;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
GList *l = plugin_mgr->plugins;
|
||||
|
||||
if (klass->kill_switch_workspace)
|
||||
klass->kill_switch_workspace (plugin);
|
||||
while (l)
|
||||
{
|
||||
MetaPlugin *plugin = l->data;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
if (!meta_plugin_disabled (plugin)
|
||||
&& (meta_plugin_features (plugin) & META_PLUGIN_SWITCH_WORKSPACE)
|
||||
&& klass->kill_switch_workspace)
|
||||
klass->kill_switch_workspace (plugin);
|
||||
|
||||
l = l->next;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Public method that the compositor hooks into for events that require
|
||||
* no additional parameters.
|
||||
*
|
||||
* Returns TRUE if the plugin handled the event type (i.e.,
|
||||
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
|
||||
* if the return value is FALSE, there will be no subsequent call to the
|
||||
* manager completed() callback, and the compositor must ensure that any
|
||||
* appropriate post-effect cleanup is carried out.
|
||||
@@ -139,48 +246,60 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr,
|
||||
MetaWindowActor *actor,
|
||||
unsigned long event)
|
||||
{
|
||||
MetaPlugin *plugin = plugin_mgr->plugin;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
|
||||
GList *l = plugin_mgr->plugins;
|
||||
gboolean retval = FALSE;
|
||||
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
|
||||
|
||||
if (display->display_opening)
|
||||
return FALSE;
|
||||
|
||||
switch (event)
|
||||
while (l)
|
||||
{
|
||||
case META_PLUGIN_MINIMIZE:
|
||||
if (klass->minimize)
|
||||
{
|
||||
retval = TRUE;
|
||||
meta_plugin_manager_kill_window_effects (plugin_mgr,
|
||||
actor);
|
||||
MetaPlugin *plugin = l->data;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->minimize (plugin, actor);
|
||||
}
|
||||
break;
|
||||
case META_PLUGIN_MAP:
|
||||
if (klass->map)
|
||||
if (!meta_plugin_disabled (plugin) &&
|
||||
(meta_plugin_features (plugin) & event))
|
||||
{
|
||||
retval = TRUE;
|
||||
meta_plugin_manager_kill_window_effects (plugin_mgr,
|
||||
actor);
|
||||
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->map (plugin, actor);
|
||||
switch (event)
|
||||
{
|
||||
case META_PLUGIN_MINIMIZE:
|
||||
if (klass->minimize)
|
||||
{
|
||||
meta_plugin_manager_kill_window_effects (
|
||||
plugin_mgr,
|
||||
actor);
|
||||
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->minimize (plugin, actor);
|
||||
}
|
||||
break;
|
||||
case META_PLUGIN_MAP:
|
||||
if (klass->map)
|
||||
{
|
||||
meta_plugin_manager_kill_window_effects (
|
||||
plugin_mgr,
|
||||
actor);
|
||||
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->map (plugin, actor);
|
||||
}
|
||||
break;
|
||||
case META_PLUGIN_DESTROY:
|
||||
if (klass->destroy)
|
||||
{
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->destroy (plugin, actor);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
g_warning ("Incorrect handler called for event %lu", event);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case META_PLUGIN_DESTROY:
|
||||
if (klass->destroy)
|
||||
{
|
||||
retval = TRUE;
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->destroy (plugin, actor);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
g_warning ("Incorrect handler called for event %lu", event);
|
||||
|
||||
l = l->next;
|
||||
}
|
||||
|
||||
return retval;
|
||||
@@ -190,7 +309,7 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr,
|
||||
* The public method that the compositor hooks into for maximize and unmaximize
|
||||
* events.
|
||||
*
|
||||
* Returns TRUE if the plugin handled the event type (i.e.,
|
||||
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
|
||||
* if the return value is FALSE, there will be no subsequent call to the
|
||||
* manager completed() callback, and the compositor must ensure that any
|
||||
* appropriate post-effect cleanup is carried out.
|
||||
@@ -204,44 +323,57 @@ meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr,
|
||||
gint target_width,
|
||||
gint target_height)
|
||||
{
|
||||
MetaPlugin *plugin = plugin_mgr->plugin;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
|
||||
GList *l = plugin_mgr->plugins;
|
||||
gboolean retval = FALSE;
|
||||
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
|
||||
|
||||
if (display->display_opening)
|
||||
return FALSE;
|
||||
|
||||
switch (event)
|
||||
while (l)
|
||||
{
|
||||
case META_PLUGIN_MAXIMIZE:
|
||||
if (klass->maximize)
|
||||
MetaPlugin *plugin = l->data;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
if (!meta_plugin_disabled (plugin) &&
|
||||
(meta_plugin_features (plugin) & event))
|
||||
{
|
||||
retval = TRUE;
|
||||
meta_plugin_manager_kill_window_effects (plugin_mgr,
|
||||
actor);
|
||||
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->maximize (plugin, actor,
|
||||
target_x, target_y,
|
||||
target_width, target_height);
|
||||
}
|
||||
break;
|
||||
case META_PLUGIN_UNMAXIMIZE:
|
||||
if (klass->unmaximize)
|
||||
{
|
||||
retval = TRUE;
|
||||
meta_plugin_manager_kill_window_effects (plugin_mgr,
|
||||
actor);
|
||||
switch (event)
|
||||
{
|
||||
case META_PLUGIN_MAXIMIZE:
|
||||
if (klass->maximize)
|
||||
{
|
||||
meta_plugin_manager_kill_window_effects (
|
||||
plugin_mgr,
|
||||
actor);
|
||||
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->unmaximize (plugin, actor,
|
||||
target_x, target_y,
|
||||
target_width, target_height);
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->maximize (plugin, actor,
|
||||
target_x, target_y,
|
||||
target_width, target_height);
|
||||
}
|
||||
break;
|
||||
case META_PLUGIN_UNMAXIMIZE:
|
||||
if (klass->unmaximize)
|
||||
{
|
||||
meta_plugin_manager_kill_window_effects (
|
||||
plugin_mgr,
|
||||
actor);
|
||||
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->unmaximize (plugin, actor,
|
||||
target_x, target_y,
|
||||
target_width, target_height);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
g_warning ("Incorrect handler called for event %lu", event);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
g_warning ("Incorrect handler called for event %lu", event);
|
||||
|
||||
l = l->next;
|
||||
}
|
||||
|
||||
return retval;
|
||||
@@ -250,7 +382,7 @@ meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr,
|
||||
/*
|
||||
* The public method that the compositor hooks into for desktop switching.
|
||||
*
|
||||
* Returns TRUE if the plugin handled the event type (i.e.,
|
||||
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
|
||||
* if the return value is FALSE, there will be no subsequent call to the
|
||||
* manager completed() callback, and the compositor must ensure that any
|
||||
* appropriate post-effect cleanup is carried out.
|
||||
@@ -261,21 +393,32 @@ meta_plugin_manager_switch_workspace (MetaPluginManager *plugin_mgr,
|
||||
gint to,
|
||||
MetaMotionDirection direction)
|
||||
{
|
||||
MetaPlugin *plugin = plugin_mgr->plugin;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
|
||||
GList *l = plugin_mgr->plugins;
|
||||
gboolean retval = FALSE;
|
||||
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
|
||||
|
||||
if (display->display_opening)
|
||||
return FALSE;
|
||||
|
||||
if (klass->switch_workspace)
|
||||
while (l)
|
||||
{
|
||||
retval = TRUE;
|
||||
meta_plugin_manager_kill_switch_workspace (plugin_mgr);
|
||||
MetaPlugin *plugin = l->data;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->switch_workspace (plugin, from, to, direction);
|
||||
if (!meta_plugin_disabled (plugin) &&
|
||||
(meta_plugin_features (plugin) & META_PLUGIN_SWITCH_WORKSPACE))
|
||||
{
|
||||
if (klass->switch_workspace)
|
||||
{
|
||||
retval = TRUE;
|
||||
meta_plugin_manager_kill_switch_workspace (plugin_mgr);
|
||||
|
||||
_meta_plugin_effect_started (plugin);
|
||||
klass->switch_workspace (plugin, from, to, direction);
|
||||
}
|
||||
}
|
||||
|
||||
l = l->next;
|
||||
}
|
||||
|
||||
return retval;
|
||||
@@ -284,7 +427,7 @@ meta_plugin_manager_switch_workspace (MetaPluginManager *plugin_mgr,
|
||||
/*
|
||||
* The public method that the compositor hooks into for desktop switching.
|
||||
*
|
||||
* Returns TRUE if the plugin handled the event type (i.e.,
|
||||
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
|
||||
* if the return value is FALSE, there will be no subsequent call to the
|
||||
* manager completed() callback, and the compositor must ensure that any
|
||||
* appropriate post-effect cleanup is carried out.
|
||||
@@ -293,20 +436,49 @@ gboolean
|
||||
meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr,
|
||||
XEvent *xev)
|
||||
{
|
||||
MetaPlugin *plugin = plugin_mgr->plugin;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
GList *l;
|
||||
gboolean have_plugin_xevent_func;
|
||||
|
||||
if (!plugin_mgr)
|
||||
return FALSE;
|
||||
|
||||
l = plugin_mgr->plugins;
|
||||
|
||||
/* We need to make sure that clutter gets certain events, like
|
||||
* ConfigureNotify on the stage window. If there is a plugin that
|
||||
* provides an xevent_filter function, then it's the responsibility
|
||||
* of that plugin to pass events to Clutter. Otherwise, we send the
|
||||
* event directly to Clutter ourselves.
|
||||
*
|
||||
* What happens if there are two plugins with xevent_filter functions
|
||||
* is undefined; in general, multiple competing plugins are something
|
||||
* we don't support well or care much about.
|
||||
*
|
||||
* FIXME: Really, we should just always handle sending the event to
|
||||
* clutter if a plugin doesn't report the event as handled by
|
||||
* returning TRUE, but it doesn't seem worth breaking compatibility
|
||||
* of the plugin interface right now to achieve this; the way it is
|
||||
* now works fine in practice.
|
||||
*/
|
||||
if (klass->xevent_filter && klass->xevent_filter (plugin, xev))
|
||||
return TRUE;
|
||||
else
|
||||
have_plugin_xevent_func = FALSE;
|
||||
|
||||
while (l)
|
||||
{
|
||||
MetaPlugin *plugin = l->data;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
if (klass->xevent_filter)
|
||||
{
|
||||
have_plugin_xevent_func = TRUE;
|
||||
if (klass->xevent_filter (plugin, xev) == TRUE)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
l = l->next;
|
||||
}
|
||||
|
||||
if (!have_plugin_xevent_func)
|
||||
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -46,9 +46,14 @@
|
||||
*/
|
||||
typedef struct MetaPluginManager MetaPluginManager;
|
||||
|
||||
MetaPluginManager * meta_plugin_manager_new (MetaScreen *screen);
|
||||
MetaPluginManager * meta_plugin_manager_get (MetaScreen *screen);
|
||||
MetaPluginManager * meta_plugin_manager_get_default (void);
|
||||
|
||||
void meta_plugin_manager_load (const gchar *plugin_name);
|
||||
void meta_plugin_manager_load (MetaPluginManager *mgr,
|
||||
const gchar *plugin_name);
|
||||
void meta_plugin_manager_register (MetaPluginManager *mgr,
|
||||
GType plugin_type);
|
||||
void meta_plugin_manager_initialize (MetaPluginManager *mgr);
|
||||
|
||||
gboolean meta_plugin_manager_event_simple (MetaPluginManager *mgr,
|
||||
MetaWindowActor *actor,
|
||||
|
||||
@@ -44,17 +44,74 @@ enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_SCREEN,
|
||||
PROP_FEATURES,
|
||||
PROP_DISABLED,
|
||||
PROP_DEBUG_MODE,
|
||||
};
|
||||
|
||||
struct _MetaPluginPrivate
|
||||
{
|
||||
MetaScreen *screen;
|
||||
gulong features;
|
||||
|
||||
gint running;
|
||||
|
||||
gboolean disabled : 1;
|
||||
gboolean debug : 1;
|
||||
};
|
||||
|
||||
static void
|
||||
meta_plugin_set_features (MetaPlugin *plugin)
|
||||
{
|
||||
MetaPluginPrivate *priv = plugin->priv;
|
||||
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
|
||||
|
||||
priv->features = 0;
|
||||
|
||||
/*
|
||||
* Feature flags: identify events that the plugin can handle; a plugin can
|
||||
* handle one or more events.
|
||||
*/
|
||||
if (klass->minimize)
|
||||
priv->features |= META_PLUGIN_MINIMIZE;
|
||||
|
||||
if (klass->maximize)
|
||||
priv->features |= META_PLUGIN_MAXIMIZE;
|
||||
|
||||
if (klass->unmaximize)
|
||||
priv->features |= META_PLUGIN_UNMAXIMIZE;
|
||||
|
||||
if (klass->map)
|
||||
priv->features |= META_PLUGIN_MAP;
|
||||
|
||||
if (klass->destroy)
|
||||
priv->features |= META_PLUGIN_DESTROY;
|
||||
|
||||
if (klass->switch_workspace)
|
||||
priv->features |= META_PLUGIN_SWITCH_WORKSPACE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_plugin_constructed (GObject *object)
|
||||
{
|
||||
meta_plugin_set_features (META_PLUGIN (object));
|
||||
|
||||
if (G_OBJECT_CLASS (meta_plugin_parent_class)->constructed)
|
||||
G_OBJECT_CLASS (meta_plugin_parent_class)->constructed (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_plugin_dispose (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (meta_plugin_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_plugin_finalize (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (meta_plugin_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_plugin_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
@@ -68,6 +125,9 @@ meta_plugin_set_property (GObject *object,
|
||||
case PROP_SCREEN:
|
||||
priv->screen = g_value_get_object (value);
|
||||
break;
|
||||
case PROP_DISABLED:
|
||||
priv->disabled = g_value_get_boolean (value);
|
||||
break;
|
||||
case PROP_DEBUG_MODE:
|
||||
priv->debug = g_value_get_boolean (value);
|
||||
break;
|
||||
@@ -90,9 +150,15 @@ meta_plugin_get_property (GObject *object,
|
||||
case PROP_SCREEN:
|
||||
g_value_set_object (value, priv->screen);
|
||||
break;
|
||||
case PROP_DISABLED:
|
||||
g_value_set_boolean (value, priv->disabled);
|
||||
break;
|
||||
case PROP_DEBUG_MODE:
|
||||
g_value_set_boolean (value, priv->debug);
|
||||
break;
|
||||
case PROP_FEATURES:
|
||||
g_value_set_ulong (value, priv->features);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -105,6 +171,9 @@ meta_plugin_class_init (MetaPluginClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
gobject_class->constructed = meta_plugin_constructed;
|
||||
gobject_class->finalize = meta_plugin_finalize;
|
||||
gobject_class->dispose = meta_plugin_dispose;
|
||||
gobject_class->set_property = meta_plugin_set_property;
|
||||
gobject_class->get_property = meta_plugin_get_property;
|
||||
|
||||
@@ -116,6 +185,22 @@ meta_plugin_class_init (MetaPluginClass *klass)
|
||||
META_TYPE_SCREEN,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_FEATURES,
|
||||
g_param_spec_ulong ("features",
|
||||
"Features",
|
||||
"Plugin Features",
|
||||
0 , G_MAXULONG, 0,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_DISABLED,
|
||||
g_param_spec_boolean ("disabled",
|
||||
"Plugin disabled",
|
||||
"Plugin disabled",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_DEBUG_MODE,
|
||||
g_param_spec_boolean ("debug-mode",
|
||||
@@ -135,6 +220,22 @@ meta_plugin_init (MetaPlugin *self)
|
||||
self->priv = priv = META_PLUGIN_GET_PRIVATE (self);
|
||||
}
|
||||
|
||||
gulong
|
||||
meta_plugin_features (MetaPlugin *plugin)
|
||||
{
|
||||
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
|
||||
|
||||
return priv->features;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_plugin_disabled (MetaPlugin *plugin)
|
||||
{
|
||||
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
|
||||
|
||||
return priv->disabled;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_plugin_running (MetaPlugin *plugin)
|
||||
{
|
||||
@@ -331,3 +432,19 @@ meta_plugin_get_screen (MetaPlugin *plugin)
|
||||
|
||||
return priv->screen;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_plugin_type_register:
|
||||
* @plugin_type: a #MetaPlugin type
|
||||
*
|
||||
* Register @plugin_type as a compositor plugin type to be used.
|
||||
* You must call this before calling meta_init().
|
||||
*/
|
||||
void
|
||||
meta_plugin_type_register (GType plugin_type)
|
||||
{
|
||||
MetaPluginManager *plugin_manager;
|
||||
|
||||
plugin_manager = meta_plugin_manager_get_default ();
|
||||
meta_plugin_manager_register (plugin_manager, plugin_type);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
/*
|
||||
* shaped texture
|
||||
*
|
||||
* An actor to draw a masked texture.
|
||||
* An actor to draw a texture clipped to a list of rectangles
|
||||
*
|
||||
* Authored By Neil Roberts <neil@linux.intel.com>
|
||||
* and Jasper St. Pierre <jstpierre@mecheye.net>
|
||||
*
|
||||
* Copyright (C) 2008 Intel Corporation
|
||||
* Copyright (C) 2012 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -135,7 +133,6 @@ meta_shaped_texture_dispose (GObject *object)
|
||||
priv->texture = COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
meta_shaped_texture_set_mask_texture (self, COGL_INVALID_HANDLE);
|
||||
meta_shaped_texture_set_clip_region (self, NULL);
|
||||
|
||||
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
|
||||
|
||||
@@ -652,15 +652,14 @@ meta_window_actor_paint (ClutterActor *actor)
|
||||
/* The frame bounds are already subtracted from priv->shadow_clip
|
||||
* if that exists.
|
||||
*/
|
||||
if (!clip && clip_shadow_under_window (self))
|
||||
if (!clip && clip_shadow_under_window (self) && priv->shape_region != NULL)
|
||||
{
|
||||
cairo_region_t *frame_bounds = meta_window_get_frame_bounds (priv->window);
|
||||
cairo_rectangle_int_t bounds;
|
||||
|
||||
meta_window_actor_get_shadow_bounds (self, appears_focused, &bounds);
|
||||
clip = cairo_region_create_rectangle (&bounds);
|
||||
|
||||
cairo_region_subtract (clip, frame_bounds);
|
||||
cairo_region_subtract (clip, priv->shape_region);
|
||||
}
|
||||
|
||||
meta_shadow_paint (shadow,
|
||||
@@ -1188,36 +1187,31 @@ meta_window_actor_should_unredirect (MetaWindowActor *self)
|
||||
MetaWindow *metaWindow = meta_window_actor_get_meta_window (self);
|
||||
MetaScreen *screen = meta_window_get_screen (metaWindow);
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
int screen_width, screen_height;
|
||||
MetaRectangle window_rect, monitor_rect;
|
||||
int num_monitors = meta_screen_get_n_monitors (screen);
|
||||
int i;
|
||||
|
||||
if (!meta_window_is_override_redirect (metaWindow))
|
||||
return FALSE;
|
||||
|
||||
if (priv->opacity != 0xff)
|
||||
return FALSE;
|
||||
|
||||
if (priv->argb32)
|
||||
return FALSE;
|
||||
|
||||
if (metaWindow->has_shape)
|
||||
return FALSE;
|
||||
|
||||
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;
|
||||
|
||||
for (i = 0; i < num_monitors; i++)
|
||||
if (meta_window_is_override_redirect (metaWindow) && priv->opacity == 0xff && !priv->argb32)
|
||||
{
|
||||
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;
|
||||
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;
|
||||
@@ -1643,7 +1637,6 @@ meta_window_actor_update_shape_region (MetaWindowActor *self,
|
||||
|
||||
/* region must be non-null */
|
||||
priv->shape_region = region;
|
||||
cairo_region_reference (region);
|
||||
|
||||
/* Our "shape_region" is called the "bounding region" in the X Shape
|
||||
* Extension Documentation.
|
||||
@@ -1771,11 +1764,8 @@ meta_window_actor_set_visible_region_beneath (MetaWindowActor *self,
|
||||
meta_window_actor_clear_shadow_clip (self);
|
||||
priv->shadow_clip = cairo_region_copy (beneath_region);
|
||||
|
||||
if (clip_shadow_under_window (self))
|
||||
{
|
||||
cairo_region_t *frame_bounds = meta_window_get_frame_bounds (priv->window);
|
||||
cairo_region_subtract (priv->shadow_clip, frame_bounds);
|
||||
}
|
||||
if (clip_shadow_under_window (self) && priv->shape_region != NULL)
|
||||
cairo_region_subtract (priv->shadow_clip, priv->shape_region);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2017,73 +2007,6 @@ meta_window_actor_sync_visibility (MetaWindowActor *self)
|
||||
}
|
||||
}
|
||||
|
||||
#define TAU (2*M_PI)
|
||||
|
||||
static void
|
||||
install_corners (MetaWindow *window,
|
||||
MetaFrameBorders *borders,
|
||||
cairo_t *cr)
|
||||
{
|
||||
float top_left, top_right, bottom_left, bottom_right;
|
||||
int x, y;
|
||||
MetaRectangle outer;
|
||||
|
||||
meta_frame_get_corner_radiuses (window->frame,
|
||||
&top_left,
|
||||
&top_right,
|
||||
&bottom_left,
|
||||
&bottom_right);
|
||||
|
||||
meta_window_get_outer_rect (window, &outer);
|
||||
|
||||
/* top left */
|
||||
x = borders->invisible.left;
|
||||
y = borders->invisible.top;
|
||||
|
||||
cairo_arc (cr,
|
||||
x + top_left,
|
||||
y + top_left,
|
||||
top_left,
|
||||
2 * TAU / 4,
|
||||
3 * TAU / 4);
|
||||
|
||||
/* top right */
|
||||
x = borders->invisible.left + outer.width - top_right;
|
||||
y = borders->invisible.top;
|
||||
|
||||
cairo_arc (cr,
|
||||
x,
|
||||
y + top_right,
|
||||
top_right,
|
||||
3 * TAU / 4,
|
||||
4 * TAU / 4);
|
||||
|
||||
/* bottom right */
|
||||
x = borders->invisible.left + outer.width - bottom_right;
|
||||
y = borders->invisible.top + outer.height - bottom_right;
|
||||
|
||||
cairo_arc (cr,
|
||||
x,
|
||||
y,
|
||||
bottom_right,
|
||||
0 * TAU / 4,
|
||||
1 * TAU / 4);
|
||||
|
||||
/* bottom left */
|
||||
x = borders->invisible.left;
|
||||
y = borders->invisible.top + outer.height - bottom_left;
|
||||
|
||||
cairo_arc (cr,
|
||||
x + bottom_left,
|
||||
y,
|
||||
bottom_left,
|
||||
1 * TAU / 4,
|
||||
2 * TAU / 4);
|
||||
|
||||
cairo_set_source_rgba (cr, 1, 1, 1, 1);
|
||||
cairo_fill (cr);
|
||||
}
|
||||
|
||||
static cairo_region_t *
|
||||
scan_visible_region (guchar *mask_data,
|
||||
int stride,
|
||||
@@ -2123,7 +2046,6 @@ scan_visible_region (guchar *mask_data,
|
||||
|
||||
static void
|
||||
build_and_scan_frame_mask (MetaWindowActor *self,
|
||||
MetaFrameBorders *borders,
|
||||
cairo_rectangle_int_t *client_area,
|
||||
cairo_region_t *shape_region)
|
||||
{
|
||||
@@ -2169,7 +2091,15 @@ build_and_scan_frame_mask (MetaWindowActor *self,
|
||||
gdk_cairo_region (cr, frame_paint_region);
|
||||
cairo_clip (cr);
|
||||
|
||||
install_corners (priv->window, borders, cr);
|
||||
/* XXX: work around cairo bug. remove when released
|
||||
* http://cgit.freedesktop.org/cairo/commit/?id=ec400daf9ec3bbd8403324db7fcdaf175e185e7b
|
||||
*/
|
||||
cairo_push_group (cr);
|
||||
|
||||
meta_frame_render_background (priv->window->frame, cr);
|
||||
|
||||
cairo_pop_group_to_source (cr);
|
||||
cairo_paint (cr);
|
||||
|
||||
cairo_surface_flush (surface);
|
||||
scanned_region = scan_visible_region (mask_data, stride, frame_paint_region);
|
||||
@@ -2216,7 +2146,7 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
MetaScreen *screen = priv->screen;
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
MetaFrameBorders borders;
|
||||
cairo_region_t *region = NULL;
|
||||
cairo_region_t *region;
|
||||
cairo_rectangle_int_t client_area;
|
||||
|
||||
if (!priv->needs_reshape)
|
||||
@@ -2239,6 +2169,7 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
* get from the X server to a cairo_region. */
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
XRectangle *rects;
|
||||
cairo_rectangle_int_t *cairo_rects = NULL;
|
||||
int n_rects, ordering;
|
||||
|
||||
meta_error_trap_push (display);
|
||||
@@ -2251,25 +2182,23 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
|
||||
if (rects)
|
||||
{
|
||||
cairo_rects = g_new (cairo_rectangle_int_t, n_rects);
|
||||
int i;
|
||||
cairo_rectangle_int_t *cairo_rects = g_new (cairo_rectangle_int_t, n_rects);
|
||||
|
||||
for (i = 0; i < n_rects; i ++)
|
||||
{
|
||||
cairo_rects[i].x = rects[i].x + client_area.x;
|
||||
cairo_rects[i].y = rects[i].y + client_area.y;
|
||||
cairo_rects[i].x = client_area.x + rects[i].x;
|
||||
cairo_rects[i].y = client_area.y + rects[i].y;
|
||||
cairo_rects[i].width = rects[i].width;
|
||||
cairo_rects[i].height = rects[i].height;
|
||||
}
|
||||
|
||||
XFree (rects);
|
||||
region = cairo_region_create_rectangles (cairo_rects, n_rects);
|
||||
g_free (cairo_rects);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (region == NULL)
|
||||
region = cairo_region_create_rectangles (cairo_rects, n_rects);
|
||||
g_free (cairo_rects);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
/* If we don't have a shape on the server, that means that
|
||||
* we have an implicit shape of one rectangle covering the
|
||||
@@ -2281,11 +2210,9 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
* and scans the mask looking for all opaque pixels,
|
||||
* adding it to region.
|
||||
*/
|
||||
build_and_scan_frame_mask (self, &borders, &client_area, region);
|
||||
build_and_scan_frame_mask (self, &client_area, region);
|
||||
meta_window_actor_update_shape_region (self, region);
|
||||
|
||||
cairo_region_destroy (region);
|
||||
|
||||
priv->needs_reshape = FALSE;
|
||||
meta_window_actor_invalidate_shadow (self);
|
||||
}
|
||||
|
||||
@@ -43,12 +43,14 @@
|
||||
/* Optimium performance seems to be with MAX_CHUNK_RECTANGLES=4; 8 is about 10% slower.
|
||||
* But using 8 may be more robust to systems with slow malloc(). */
|
||||
#define MAX_CHUNK_RECTANGLES 8
|
||||
/* XXX: keep in sync with region-utils.h */
|
||||
#define MAX_LEVELS 16
|
||||
|
||||
void
|
||||
meta_region_builder_init (MetaRegionBuilder *builder)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < META_REGION_BUILDER_MAX_LEVELS; i++)
|
||||
for (i = 0; i < MAX_LEVELS; i++)
|
||||
builder->levels[i] = NULL;
|
||||
builder->n_levels = 1;
|
||||
}
|
||||
@@ -78,7 +80,7 @@ meta_region_builder_add_rectangle (MetaRegionBuilder *builder,
|
||||
{
|
||||
if (builder->levels[i] == NULL)
|
||||
{
|
||||
if (i < META_REGION_BUILDER_MAX_LEVELS)
|
||||
if (i < MAX_LEVELS)
|
||||
{
|
||||
builder->levels[i] = builder->levels[i - 1];
|
||||
builder->levels[i - 1] = NULL;
|
||||
|
||||
@@ -65,7 +65,8 @@ struct _MetaRegionIterator {
|
||||
|
||||
typedef struct _MetaRegionBuilder MetaRegionBuilder;
|
||||
|
||||
#define META_REGION_BUILDER_MAX_LEVELS 16
|
||||
/* XXX: keep in sync with region-utils.c */
|
||||
#define MAX_LEVELS 16
|
||||
struct _MetaRegionBuilder {
|
||||
/* To merge regions in binary tree order, we need to keep track of
|
||||
* the regions that we've already merged together at different
|
||||
@@ -77,9 +78,10 @@ struct _MetaRegionBuilder {
|
||||
* |d |c |ab |
|
||||
* |e | | |abcd|
|
||||
*/
|
||||
cairo_region_t *levels[META_REGION_BUILDER_MAX_LEVELS];
|
||||
cairo_region_t *levels[MAX_LEVELS];
|
||||
int n_levels;
|
||||
};
|
||||
#undef MAX_LEVELS
|
||||
|
||||
void meta_region_builder_init (MetaRegionBuilder *builder);
|
||||
void meta_region_builder_add_rectangle (MetaRegionBuilder *builder,
|
||||
|
||||
@@ -408,7 +408,6 @@ const char* meta_event_mode_to_string (int m);
|
||||
const char* meta_event_detail_to_string (int d);
|
||||
|
||||
void meta_display_queue_retheme_all_windows (MetaDisplay *display);
|
||||
void meta_display_retheme_all (void);
|
||||
|
||||
void meta_display_set_cursor_theme (const char *theme,
|
||||
int size);
|
||||
|
||||
@@ -2571,9 +2571,6 @@ event_callback (XEvent *event,
|
||||
else if (event->xclient.message_type ==
|
||||
display->atom__MUTTER_RELOAD_THEME_MESSAGE)
|
||||
{
|
||||
meta_verbose ("Received reload theme request\n");
|
||||
meta_ui_set_current_theme (meta_prefs_get_theme (),
|
||||
TRUE);
|
||||
meta_display_retheme_all ();
|
||||
}
|
||||
else if (event->xclient.message_type ==
|
||||
@@ -4385,10 +4382,9 @@ process_request_frame_extents (MetaDisplay *display,
|
||||
}
|
||||
|
||||
/* Return estimated frame extents for a normal window. */
|
||||
meta_ui_theme_get_frame_borders (screen->ui,
|
||||
META_FRAME_TYPE_NORMAL,
|
||||
0,
|
||||
&borders);
|
||||
meta_ui_get_frame_borders (screen->ui,
|
||||
xwindow,
|
||||
&borders);
|
||||
data[0] = borders.visible.left;
|
||||
data[1] = borders.visible.right;
|
||||
data[2] = borders.visible.top;
|
||||
@@ -5332,6 +5328,7 @@ timestamp_too_old (MetaDisplay *display,
|
||||
meta_warning ("Got a request to focus %s with a timestamp of 0. This "
|
||||
"shouldn't happen!\n",
|
||||
window ? window->desc : "the no_focus_window");
|
||||
meta_print_backtrace ();
|
||||
*timestamp = meta_display_get_current_time_roundtrip (display);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -113,9 +113,18 @@ meta_window_ensure_frame (MetaWindow *window)
|
||||
attrs.event_mask = EVENT_MASK;
|
||||
XChangeWindowAttributes (window->display->xdisplay,
|
||||
frame->xwindow, CWEventMask, &attrs);
|
||||
/* stick frame to the window */
|
||||
window->frame = frame;
|
||||
|
||||
meta_display_register_x_window (window->display, &frame->xwindow, window);
|
||||
|
||||
meta_ui_realize_frame_window (window->screen->ui, frame->xwindow);
|
||||
|
||||
if (window->title)
|
||||
meta_ui_set_frame_title (window->screen->ui,
|
||||
window->frame->xwindow,
|
||||
window->title);
|
||||
|
||||
/* Reparent the client window; it may be destroyed,
|
||||
* thus the error trap. We'll get a destroy notify later
|
||||
* and free everything. Comment in FVWM source code says
|
||||
@@ -148,20 +157,6 @@ meta_window_ensure_frame (MetaWindow *window)
|
||||
window->rect.y);
|
||||
/* FIXME handle this error */
|
||||
meta_error_trap_pop (window->display);
|
||||
|
||||
/* stick frame to the window */
|
||||
window->frame = frame;
|
||||
|
||||
/* Now that frame->xwindow is registered with window, we can set its
|
||||
* style and background.
|
||||
*/
|
||||
meta_ui_update_frame_style (window->screen->ui, frame->xwindow);
|
||||
meta_ui_reset_frame_bg (window->screen->ui, frame->xwindow);
|
||||
|
||||
if (window->title)
|
||||
meta_ui_set_frame_title (window->screen->ui,
|
||||
window->frame->xwindow,
|
||||
window->title);
|
||||
|
||||
/* Move keybindings to frame instead of window */
|
||||
meta_window_grab_keys (window);
|
||||
@@ -220,11 +215,6 @@ meta_window_destroy_frame (MetaWindow *window)
|
||||
frame->xwindow);
|
||||
|
||||
window->frame = NULL;
|
||||
if (window->frame_bounds)
|
||||
{
|
||||
cairo_region_destroy (window->frame_bounds);
|
||||
window->frame_bounds = NULL;
|
||||
}
|
||||
|
||||
/* Move keybindings to window instead of frame */
|
||||
meta_window_grab_keys (window);
|
||||
@@ -333,16 +323,12 @@ meta_frame_calc_borders (MetaFrame *frame,
|
||||
}
|
||||
|
||||
void
|
||||
meta_frame_get_corner_radiuses (MetaFrame *frame,
|
||||
float *top_left,
|
||||
float *top_right,
|
||||
float *bottom_left,
|
||||
float *bottom_right)
|
||||
meta_frame_render_background (MetaFrame *frame,
|
||||
cairo_t *cr)
|
||||
{
|
||||
meta_ui_get_corner_radiuses (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
top_left, top_right,
|
||||
bottom_left, bottom_right);
|
||||
meta_ui_render_background (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
cr);
|
||||
}
|
||||
|
||||
gboolean
|
||||
@@ -358,15 +344,6 @@ meta_frame_sync_to_window (MetaFrame *frame,
|
||||
frame->rect.x + frame->rect.width,
|
||||
frame->rect.y + frame->rect.height);
|
||||
|
||||
/* set bg to none to avoid flicker */
|
||||
if (need_resize)
|
||||
{
|
||||
meta_ui_unflicker_frame_bg (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
frame->rect.width,
|
||||
frame->rect.height);
|
||||
}
|
||||
|
||||
meta_ui_move_resize_frame (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
frame->rect.x,
|
||||
@@ -376,30 +353,18 @@ meta_frame_sync_to_window (MetaFrame *frame,
|
||||
|
||||
if (need_resize)
|
||||
{
|
||||
meta_ui_reset_frame_bg (frame->window->screen->ui,
|
||||
frame->xwindow);
|
||||
|
||||
/* 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)
|
||||
meta_ui_repaint_frame (frame->window->screen->ui,
|
||||
frame->xwindow);
|
||||
meta_ui_queue_frame_draw (frame->window->screen->ui,
|
||||
frame->xwindow);
|
||||
}
|
||||
|
||||
return need_resize;
|
||||
}
|
||||
|
||||
cairo_region_t *
|
||||
meta_frame_get_frame_bounds (MetaFrame *frame)
|
||||
{
|
||||
return meta_ui_get_frame_bounds (frame->window->screen->ui,
|
||||
frame->xwindow,
|
||||
frame->rect.width,
|
||||
frame->rect.height);
|
||||
}
|
||||
|
||||
void
|
||||
meta_frame_queue_draw (MetaFrame *frame)
|
||||
{
|
||||
|
||||
@@ -63,19 +63,14 @@ Window meta_frame_get_xwindow (MetaFrame *frame);
|
||||
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_render_background (MetaFrame *frame,
|
||||
cairo_t *cr);
|
||||
|
||||
gboolean meta_frame_sync_to_window (MetaFrame *frame,
|
||||
int gravity,
|
||||
gboolean need_move,
|
||||
gboolean need_resize);
|
||||
|
||||
cairo_region_t *meta_frame_get_frame_bounds (MetaFrame *frame);
|
||||
|
||||
void meta_frame_set_screen_cursor (MetaFrame *frame,
|
||||
MetaCursor cursor);
|
||||
|
||||
|
||||
@@ -110,6 +110,7 @@ log_handler (const gchar *log_domain,
|
||||
gpointer user_data)
|
||||
{
|
||||
meta_warning ("Log level %d: %s\n", log_level, message);
|
||||
meta_print_backtrace ();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -197,7 +198,7 @@ static GOptionEntry meta_options[] = {
|
||||
NULL
|
||||
},
|
||||
{
|
||||
"replace", 'r', 0, G_OPTION_ARG_NONE,
|
||||
"replace", 0, 0, G_OPTION_ARG_NONE,
|
||||
&opt_replace_wm,
|
||||
N_("Replace the running window manager"),
|
||||
NULL
|
||||
@@ -373,7 +374,7 @@ on_sigterm (void)
|
||||
* meta_init: (skip)
|
||||
*
|
||||
* Initialize mutter. Call this after meta_get_option_context() and
|
||||
* meta_plugin_manager_set_plugin_type(), and before meta_run().
|
||||
* meta_plugin_type_register(), and before meta_run().
|
||||
*/
|
||||
void
|
||||
meta_init (void)
|
||||
@@ -381,6 +382,8 @@ meta_init (void)
|
||||
struct sigaction act;
|
||||
sigset_t empty_mask;
|
||||
GIOChannel *channel;
|
||||
|
||||
g_type_init ();
|
||||
|
||||
sigemptyset (&empty_mask);
|
||||
act.sa_handler = SIG_IGN;
|
||||
@@ -474,42 +477,6 @@ meta_run (void)
|
||||
if (g_getenv ("MUTTER_G_FATAL_WARNINGS") != NULL)
|
||||
g_log_set_always_fatal (G_LOG_LEVEL_MASK);
|
||||
|
||||
meta_ui_set_current_theme (meta_prefs_get_theme (), FALSE);
|
||||
|
||||
/* Try to find some theme that'll work if the theme preference
|
||||
* doesn't exist. First try Simple (the default theme) then just
|
||||
* try anything in the themes directory.
|
||||
*/
|
||||
if (!meta_ui_have_a_theme ())
|
||||
meta_ui_set_current_theme ("Simple", FALSE);
|
||||
|
||||
if (!meta_ui_have_a_theme ())
|
||||
{
|
||||
const char *dir_entry = NULL;
|
||||
GError *err = NULL;
|
||||
GDir *themes_dir = NULL;
|
||||
|
||||
if (!(themes_dir = g_dir_open (MUTTER_DATADIR"/themes", 0, &err)))
|
||||
{
|
||||
meta_fatal (_("Failed to scan themes directory: %s\n"), err->message);
|
||||
g_error_free (err);
|
||||
}
|
||||
else
|
||||
{
|
||||
while (((dir_entry = g_dir_read_name (themes_dir)) != NULL) &&
|
||||
(!meta_ui_have_a_theme ()))
|
||||
{
|
||||
meta_ui_set_current_theme (dir_entry, FALSE);
|
||||
}
|
||||
|
||||
g_dir_close (themes_dir);
|
||||
}
|
||||
}
|
||||
|
||||
if (!meta_ui_have_a_theme ())
|
||||
meta_fatal (_("Could not find a theme! Be sure %s exists and contains the usual themes.\n"),
|
||||
MUTTER_DATADIR"/themes");
|
||||
|
||||
/* Connect to SM as late as possible - but before managing display,
|
||||
* or we might try to manage a window before we have the session
|
||||
* info
|
||||
@@ -585,9 +552,7 @@ 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;
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ print_version (const gchar *option_name,
|
||||
exit (0);
|
||||
}
|
||||
|
||||
static gchar *plugin = "default";
|
||||
static gchar *mutter_plugins;
|
||||
|
||||
GOptionEntry mutter_options[] = {
|
||||
{
|
||||
@@ -55,10 +55,10 @@ GOptionEntry mutter_options[] = {
|
||||
NULL
|
||||
},
|
||||
{
|
||||
"mutter-plugin", 0, 0, G_OPTION_ARG_STRING,
|
||||
&plugin,
|
||||
N_("Mutter plugin to use"),
|
||||
"PLUGIN",
|
||||
"mutter-plugins", 0, 0, G_OPTION_ARG_STRING,
|
||||
&mutter_plugins,
|
||||
N_("Comma-separated list of compositor plugins"),
|
||||
"PLUGINS"
|
||||
},
|
||||
{ NULL }
|
||||
};
|
||||
@@ -69,8 +69,6 @@ main (int argc, char **argv)
|
||||
GOptionContext *ctx;
|
||||
GError *error = NULL;
|
||||
|
||||
g_type_init ();
|
||||
|
||||
ctx = meta_get_option_context ();
|
||||
g_option_context_add_main_entries (ctx, mutter_options, GETTEXT_PACKAGE);
|
||||
if (!g_option_context_parse (ctx, &argc, &argv, &error))
|
||||
@@ -79,8 +77,20 @@ main (int argc, char **argv)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (plugin)
|
||||
meta_plugin_manager_load (plugin);
|
||||
if (mutter_plugins)
|
||||
{
|
||||
MetaPluginManager *mgr;
|
||||
char **plugins = g_strsplit (mutter_plugins, ",", -1);
|
||||
char **plugin;
|
||||
|
||||
mgr = meta_plugin_manager_get_default ();
|
||||
for (plugin = plugins; *plugin; plugin++)
|
||||
{
|
||||
g_strstrip (*plugin);
|
||||
meta_plugin_manager_load (mgr, *plugin);
|
||||
}
|
||||
g_strfreev (plugins);
|
||||
}
|
||||
|
||||
meta_init ();
|
||||
return meta_run ();
|
||||
|
||||
@@ -105,7 +105,7 @@ find_next_cascade (MetaWindow *window,
|
||||
int window_width, window_height;
|
||||
int cascade_stage;
|
||||
MetaRectangle work_area;
|
||||
int current;
|
||||
const MetaMonitorInfo* current;
|
||||
|
||||
sorted = g_list_copy (windows);
|
||||
sorted = g_list_sort (sorted, northwestcmp);
|
||||
@@ -137,7 +137,7 @@ find_next_cascade (MetaWindow *window,
|
||||
*/
|
||||
|
||||
current = meta_screen_get_current_monitor (window->screen);
|
||||
meta_window_get_work_area_for_monitor (window, current, &work_area);
|
||||
meta_window_get_work_area_for_monitor (window, current->number, &work_area);
|
||||
|
||||
cascade_x = MAX (0, work_area.x);
|
||||
cascade_y = MAX (0, work_area.y);
|
||||
@@ -815,7 +815,7 @@ meta_window_place (MetaWindow *window,
|
||||
int w, h;
|
||||
|
||||
/* Warning, this function is a round trip! */
|
||||
xi = meta_screen_get_current_monitor_info (window->screen);
|
||||
xi = meta_screen_get_current_monitor (window->screen);
|
||||
|
||||
w = xi->rect.width;
|
||||
h = xi->rect.height;
|
||||
@@ -860,7 +860,7 @@ meta_window_place (MetaWindow *window,
|
||||
}
|
||||
|
||||
/* Warning, this is a round trip! */
|
||||
xi = meta_screen_get_current_monitor_info (window->screen);
|
||||
xi = meta_screen_get_current_monitor (window->screen);
|
||||
|
||||
/* "Origin" placement algorithm */
|
||||
x = xi->rect.x;
|
||||
|
||||
114
src/core/prefs.c
114
src/core/prefs.c
@@ -42,7 +42,6 @@
|
||||
* not given a name here, because the purpose of the unified handlers
|
||||
* is that keys should be referred to exactly once.
|
||||
*/
|
||||
#define KEY_TITLEBAR_FONT "titlebar-font"
|
||||
#define KEY_NUM_WORKSPACES "num-workspaces"
|
||||
#define KEY_WORKSPACE_NAMES "workspace-names"
|
||||
|
||||
@@ -69,14 +68,11 @@ static guint changed_idle;
|
||||
static GList *listeners = NULL;
|
||||
static GHashTable *settings_schemas;
|
||||
|
||||
static gboolean use_system_font = FALSE;
|
||||
static PangoFontDescription *titlebar_font = NULL;
|
||||
static MetaVirtualModifier mouse_button_mods = Mod1Mask;
|
||||
static GDesktopFocusMode focus_mode = G_DESKTOP_FOCUS_MODE_CLICK;
|
||||
static GDesktopFocusNewWindows focus_new_windows = G_DESKTOP_FOCUS_NEW_WINDOWS_SMART;
|
||||
static gboolean raise_on_click = TRUE;
|
||||
static gboolean attach_modal_dialogs = FALSE;
|
||||
static char* current_theme = NULL;
|
||||
static int num_workspaces = 4;
|
||||
static GDesktopTitlebarAction action_double_click_titlebar = G_DESKTOP_TITLEBAR_ACTION_TOGGLE_MAXIMIZE;
|
||||
static GDesktopTitlebarAction action_middle_click_titlebar = G_DESKTOP_TITLEBAR_ACTION_LOWER;
|
||||
@@ -127,8 +123,6 @@ static void queue_changed (MetaPreference pref);
|
||||
|
||||
static void maybe_give_disable_workarounds_warning (void);
|
||||
|
||||
static gboolean titlebar_handler (GVariant*, gpointer*, gpointer);
|
||||
static gboolean theme_name_handler (GVariant*, gpointer*, gpointer);
|
||||
static gboolean mouse_button_mods_handler (GVariant*, gpointer*, gpointer);
|
||||
static gboolean button_layout_handler (GVariant*, gpointer*, gpointer);
|
||||
|
||||
@@ -266,13 +260,6 @@ static MetaBoolPreference preferences_bool[] =
|
||||
},
|
||||
&raise_on_click,
|
||||
},
|
||||
{
|
||||
{ "titlebar-uses-system-font",
|
||||
SCHEMA_GENERAL,
|
||||
META_PREF_TITLEBAR_FONT, /* note! shares a pref */
|
||||
},
|
||||
&use_system_font,
|
||||
},
|
||||
{
|
||||
{ "dynamic-workspaces",
|
||||
SCHEMA_MUTTER,
|
||||
@@ -370,22 +357,6 @@ static MetaStringPreference preferences_string[] =
|
||||
mouse_button_mods_handler,
|
||||
NULL,
|
||||
},
|
||||
{
|
||||
{ "theme",
|
||||
SCHEMA_GENERAL,
|
||||
META_PREF_THEME,
|
||||
},
|
||||
theme_name_handler,
|
||||
NULL,
|
||||
},
|
||||
{
|
||||
{ KEY_TITLEBAR_FONT,
|
||||
SCHEMA_GENERAL,
|
||||
META_PREF_TITLEBAR_FONT,
|
||||
},
|
||||
titlebar_handler,
|
||||
NULL,
|
||||
},
|
||||
{
|
||||
{ "button-layout",
|
||||
SCHEMA_GENERAL,
|
||||
@@ -1099,12 +1070,6 @@ meta_prefs_get_raise_on_click (void)
|
||||
return raise_on_click || focus_mode == G_DESKTOP_FOCUS_MODE_CLICK;
|
||||
}
|
||||
|
||||
const char*
|
||||
meta_prefs_get_theme (void)
|
||||
{
|
||||
return current_theme;
|
||||
}
|
||||
|
||||
const char*
|
||||
meta_prefs_get_cursor_theme (void)
|
||||
{
|
||||
@@ -1122,70 +1087,6 @@ meta_prefs_get_cursor_size (void)
|
||||
/* Handlers for string preferences. */
|
||||
/****************************************************************************/
|
||||
|
||||
static gboolean
|
||||
titlebar_handler (GVariant *value,
|
||||
gpointer *result,
|
||||
gpointer data)
|
||||
{
|
||||
PangoFontDescription *desc;
|
||||
const gchar *string_value;
|
||||
|
||||
*result = NULL; /* ignored */
|
||||
string_value = g_variant_get_string (value, NULL);
|
||||
desc = pango_font_description_from_string (string_value);
|
||||
|
||||
if (desc == NULL)
|
||||
{
|
||||
meta_warning (_("Could not parse font description "
|
||||
"\"%s\" from GSettings key %s\n"),
|
||||
string_value ? string_value : "(null)",
|
||||
KEY_TITLEBAR_FONT);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Is the new description the same as the old? */
|
||||
if (titlebar_font &&
|
||||
pango_font_description_equal (desc, titlebar_font))
|
||||
{
|
||||
pango_font_description_free (desc);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (titlebar_font)
|
||||
pango_font_description_free (titlebar_font);
|
||||
|
||||
titlebar_font = desc;
|
||||
queue_changed (META_PREF_TITLEBAR_FONT);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
theme_name_handler (GVariant *value,
|
||||
gpointer *result,
|
||||
gpointer data)
|
||||
{
|
||||
const gchar *string_value;
|
||||
|
||||
*result = NULL; /* ignored */
|
||||
string_value = g_variant_get_string (value, NULL);
|
||||
|
||||
if (!string_value || !*string_value)
|
||||
return FALSE;
|
||||
|
||||
if (g_strcmp0 (current_theme, string_value) != 0)
|
||||
{
|
||||
if (current_theme)
|
||||
g_free (current_theme);
|
||||
|
||||
current_theme = g_strdup (string_value);
|
||||
queue_changed (META_PREF_THEME);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
mouse_button_mods_handler (GVariant *value,
|
||||
gpointer *result,
|
||||
@@ -1478,15 +1379,6 @@ button_layout_handler (GVariant *value,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const PangoFontDescription*
|
||||
meta_prefs_get_titlebar_font (void)
|
||||
{
|
||||
if (use_system_font)
|
||||
return NULL;
|
||||
else
|
||||
return titlebar_font;
|
||||
}
|
||||
|
||||
int
|
||||
meta_prefs_get_num_workspaces (void)
|
||||
{
|
||||
@@ -1534,12 +1426,6 @@ meta_preference_to_string (MetaPreference pref)
|
||||
|
||||
case META_PREF_RAISE_ON_CLICK:
|
||||
return "RAISE_ON_CLICK";
|
||||
|
||||
case META_PREF_THEME:
|
||||
return "THEME";
|
||||
|
||||
case META_PREF_TITLEBAR_FONT:
|
||||
return "TITLEBAR_FONT";
|
||||
|
||||
case META_PREF_NUM_WORKSPACES:
|
||||
return "NUM_WORKSPACES";
|
||||
|
||||
@@ -156,6 +156,8 @@ void meta_screen_manage_all_windows (MetaScreen *scree
|
||||
void meta_screen_foreach_window (MetaScreen *screen,
|
||||
MetaScreenWindowFunc func,
|
||||
gpointer data);
|
||||
void meta_screen_queue_frame_redraws (MetaScreen *screen);
|
||||
void meta_screen_queue_window_resizes (MetaScreen *screen);
|
||||
|
||||
void meta_screen_set_cursor (MetaScreen *screen,
|
||||
MetaCursor cursor);
|
||||
@@ -184,7 +186,7 @@ void meta_screen_tile_preview_hide (MetaScreen *screen);
|
||||
MetaWindow* meta_screen_get_mouse_window (MetaScreen *screen,
|
||||
MetaWindow *not_this_one);
|
||||
|
||||
const MetaMonitorInfo* meta_screen_get_current_monitor_info (MetaScreen *screen);
|
||||
const MetaMonitorInfo* meta_screen_get_current_monitor (MetaScreen *screen);
|
||||
const MetaMonitorInfo* meta_screen_get_monitor_for_rect (MetaScreen *screen,
|
||||
MetaRectangle *rect);
|
||||
const MetaMonitorInfo* meta_screen_get_monitor_for_window (MetaScreen *screen,
|
||||
|
||||
@@ -1216,6 +1216,31 @@ meta_screen_foreach_window (MetaScreen *screen,
|
||||
g_slist_free (winlist);
|
||||
}
|
||||
|
||||
static void
|
||||
queue_draw (MetaScreen *screen, MetaWindow *window, gpointer data)
|
||||
{
|
||||
if (window->frame)
|
||||
meta_frame_queue_draw (window->frame);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_queue_frame_redraws (MetaScreen *screen)
|
||||
{
|
||||
meta_screen_foreach_window (screen, queue_draw, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
queue_resize (MetaScreen *screen, MetaWindow *window, gpointer data)
|
||||
{
|
||||
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_queue_window_resizes (MetaScreen *screen)
|
||||
{
|
||||
meta_screen_foreach_window (screen, queue_resize, NULL);
|
||||
}
|
||||
|
||||
int
|
||||
meta_screen_get_n_workspaces (MetaScreen *screen)
|
||||
{
|
||||
@@ -2054,7 +2079,7 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
|
||||
visited[i] = FALSE;
|
||||
}
|
||||
|
||||
current = meta_screen_get_current_monitor_info (screen);
|
||||
current = meta_screen_get_current_monitor (screen);
|
||||
monitor_queue = g_queue_new ();
|
||||
g_queue_push_tail (monitor_queue, (gpointer) current);
|
||||
visited[current->number] = TRUE;
|
||||
@@ -2121,26 +2146,10 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
|
||||
}
|
||||
|
||||
const MetaMonitorInfo*
|
||||
meta_screen_get_current_monitor_info (MetaScreen *screen)
|
||||
{
|
||||
int monitor_index;
|
||||
monitor_index = meta_screen_get_current_monitor (screen);
|
||||
return &screen->monitor_infos[monitor_index];
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_screen_get_current_monitor:
|
||||
* @screen: a #MetaScreen
|
||||
*
|
||||
* Gets the index of the monitor that currently has the mouse pointer.
|
||||
*
|
||||
* Return value: a monitor index
|
||||
*/
|
||||
int
|
||||
meta_screen_get_current_monitor (MetaScreen *screen)
|
||||
{
|
||||
if (screen->n_monitor_infos == 1)
|
||||
return 0;
|
||||
return &screen->monitor_infos[0];
|
||||
|
||||
/* Sadly, we have to do it this way. Yuck.
|
||||
*/
|
||||
@@ -2182,7 +2191,7 @@ meta_screen_get_current_monitor (MetaScreen *screen)
|
||||
screen->last_monitor_index);
|
||||
}
|
||||
|
||||
return screen->last_monitor_index;
|
||||
return &screen->monitor_infos[screen->last_monitor_index];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -341,7 +341,7 @@ get_standalone_layer (MetaWindow *window)
|
||||
windows_on_different_monitor (window,
|
||||
window->display->expected_focus_window))))
|
||||
layer = META_LAYER_FULLSCREEN;
|
||||
else if (window->wm_state_above && !META_WINDOW_MAXIMIZED (window))
|
||||
else if (window->wm_state_above)
|
||||
layer = META_LAYER_TOP;
|
||||
else
|
||||
layer = META_LAYER_NORMAL;
|
||||
|
||||
@@ -47,6 +47,37 @@ meta_topic_real_valist (MetaDebugTopic topic,
|
||||
va_list args);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_BACKTRACE
|
||||
#include <execinfo.h>
|
||||
void
|
||||
meta_print_backtrace (void)
|
||||
{
|
||||
void *bt[500];
|
||||
int bt_size;
|
||||
int i;
|
||||
char **syms;
|
||||
|
||||
bt_size = backtrace (bt, 500);
|
||||
|
||||
syms = backtrace_symbols (bt, bt_size);
|
||||
|
||||
i = 0;
|
||||
while (i < bt_size)
|
||||
{
|
||||
meta_verbose (" %s\n", syms[i]);
|
||||
++i;
|
||||
}
|
||||
|
||||
free (syms);
|
||||
}
|
||||
#else
|
||||
void
|
||||
meta_print_backtrace (void)
|
||||
{
|
||||
meta_verbose ("Not compiled with backtrace support\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
static gint verbose_topics = 0;
|
||||
static gboolean is_debugging = FALSE;
|
||||
static gboolean replace_current = FALSE;
|
||||
@@ -410,6 +441,8 @@ meta_bug (const char *format, ...)
|
||||
fflush (out);
|
||||
|
||||
g_free (str);
|
||||
|
||||
meta_print_backtrace ();
|
||||
|
||||
/* stop us in a debugger */
|
||||
abort ();
|
||||
@@ -893,5 +926,43 @@ meta_later_remove (guint later_id)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_frame_type_to_string:
|
||||
*
|
||||
* Converts a frame type enum value to the name string that would
|
||||
* appear in the theme definition file.
|
||||
*
|
||||
* Return value: the string value
|
||||
*/
|
||||
const char*
|
||||
meta_frame_type_to_string (MetaFrameType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case META_FRAME_TYPE_NORMAL:
|
||||
return "normal";
|
||||
case META_FRAME_TYPE_DIALOG:
|
||||
return "dialog";
|
||||
case META_FRAME_TYPE_MODAL_DIALOG:
|
||||
return "modal_dialog";
|
||||
case META_FRAME_TYPE_UTILITY:
|
||||
return "utility";
|
||||
case META_FRAME_TYPE_MENU:
|
||||
return "menu";
|
||||
case META_FRAME_TYPE_BORDER:
|
||||
return "border";
|
||||
case META_FRAME_TYPE_ATTACHED:
|
||||
return "attached";
|
||||
#if 0
|
||||
case META_FRAME_TYPE_TOOLBAR:
|
||||
return "toolbar";
|
||||
#endif
|
||||
case META_FRAME_TYPE_LAST:
|
||||
break;
|
||||
}
|
||||
|
||||
return "<unknown>";
|
||||
}
|
||||
|
||||
/* eof util.c */
|
||||
|
||||
|
||||
@@ -333,9 +333,6 @@ struct _MetaWindow
|
||||
/* if TRUE, window is attached to its parent */
|
||||
guint attached : 1;
|
||||
|
||||
/* if non-NULL, the bounds of the window frame */
|
||||
cairo_region_t *frame_bounds;
|
||||
|
||||
/* Note: can be NULL */
|
||||
GSList *struts;
|
||||
|
||||
@@ -472,8 +469,20 @@ void meta_window_unmaximize_with_gravity (MetaWindow *window,
|
||||
int new_width,
|
||||
int new_height,
|
||||
int gravity);
|
||||
void meta_window_make_above (MetaWindow *window);
|
||||
void meta_window_unmake_above (MetaWindow *window);
|
||||
void meta_window_shade (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
void meta_window_unshade (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
void meta_window_change_workspace (MetaWindow *window,
|
||||
MetaWorkspace *workspace);
|
||||
void meta_window_stick (MetaWindow *window);
|
||||
void meta_window_unstick (MetaWindow *window);
|
||||
|
||||
void meta_window_make_fullscreen_internal (MetaWindow *window);
|
||||
void meta_window_make_fullscreen (MetaWindow *window);
|
||||
void meta_window_unmake_fullscreen (MetaWindow *window);
|
||||
void meta_window_update_fullscreen_monitors (MetaWindow *window,
|
||||
unsigned long top,
|
||||
unsigned long bottom,
|
||||
@@ -500,8 +509,7 @@ void meta_window_resize_with_gravity (MetaWindow *window,
|
||||
int w,
|
||||
int h,
|
||||
int gravity);
|
||||
void meta_window_change_workspace (MetaWindow *window,
|
||||
MetaWorkspace *workspace);
|
||||
|
||||
|
||||
/* Return whether the window should be currently mapped */
|
||||
gboolean meta_window_should_be_showing (MetaWindow *window);
|
||||
@@ -540,6 +548,10 @@ void meta_window_get_geometry (MetaWindow *window,
|
||||
int *width,
|
||||
int *height);
|
||||
|
||||
void meta_window_kill (MetaWindow *window);
|
||||
void meta_window_focus (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_window_update_unfocused_button_grabs (MetaWindow *window);
|
||||
|
||||
/* Sends a client message */
|
||||
@@ -617,6 +629,11 @@ void meta_window_refresh_resize_popup (MetaWindow *window);
|
||||
void meta_window_free_delete_dialog (MetaWindow *window);
|
||||
|
||||
|
||||
void meta_window_begin_grab_op (MetaWindow *window,
|
||||
MetaGrabOp op,
|
||||
gboolean frame_action,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_window_update_keyboard_resize (MetaWindow *window,
|
||||
gboolean update_cursor);
|
||||
void meta_window_update_keyboard_move (MetaWindow *window);
|
||||
|
||||
@@ -1588,7 +1588,7 @@ reload_gtk_theme_variant (MetaWindow *window,
|
||||
window->gtk_theme_variant = g_strdup (requested_variant);
|
||||
|
||||
if (window->frame)
|
||||
meta_ui_update_frame_style (window->screen->ui, window->frame->xwindow);
|
||||
meta_ui_queue_frame_draw (window->screen->ui, window->frame->xwindow);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1616,7 +1616,7 @@ reload_gtk_hide_titlebar_when_maximized (MetaWindow *window,
|
||||
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
|
||||
|
||||
if (window->frame)
|
||||
meta_ui_update_frame_style (window->screen->ui, window->frame->xwindow);
|
||||
meta_ui_queue_frame_draw (window->screen->ui, window->frame->xwindow);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -217,9 +217,6 @@ meta_window_finalize (GObject *object)
|
||||
if (window->mini_icon)
|
||||
g_object_unref (G_OBJECT (window->mini_icon));
|
||||
|
||||
if (window->frame_bounds)
|
||||
cairo_region_destroy (window->frame_bounds);
|
||||
|
||||
meta_icon_cache_free (&window->icon_cache);
|
||||
|
||||
g_free (window->sm_client_id);
|
||||
@@ -3674,7 +3671,7 @@ meta_window_can_tile_maximized (MetaWindow *window)
|
||||
gboolean
|
||||
meta_window_can_tile_side_by_side (MetaWindow *window)
|
||||
{
|
||||
int monitor;
|
||||
const MetaMonitorInfo *monitor;
|
||||
MetaRectangle tile_area;
|
||||
MetaFrameBorders borders;
|
||||
|
||||
@@ -3682,7 +3679,7 @@ meta_window_can_tile_side_by_side (MetaWindow *window)
|
||||
return FALSE;
|
||||
|
||||
monitor = meta_screen_get_current_monitor (window->screen);
|
||||
meta_window_get_work_area_for_monitor (window, monitor, &tile_area);
|
||||
meta_window_get_work_area_for_monitor (window, monitor->number, &tile_area);
|
||||
|
||||
/* Do not allow tiling in portrait orientation */
|
||||
if (tile_area.height > tile_area.width)
|
||||
@@ -4581,7 +4578,6 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
gboolean need_resize_frame = FALSE;
|
||||
int size_dx;
|
||||
int size_dy;
|
||||
gboolean frame_shape_changed = FALSE;
|
||||
gboolean is_configure_request;
|
||||
gboolean do_gravity_adjust;
|
||||
gboolean is_user_action;
|
||||
@@ -4880,9 +4876,9 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
meta_window_set_gravity (window, StaticGravity);
|
||||
|
||||
if (configure_frame_first && window->frame)
|
||||
frame_shape_changed = meta_frame_sync_to_window (window->frame,
|
||||
gravity,
|
||||
need_move_frame, need_resize_frame);
|
||||
meta_frame_sync_to_window (window->frame,
|
||||
gravity,
|
||||
need_move_frame, need_resize_frame);
|
||||
|
||||
values.border_width = 0;
|
||||
values.x = client_move_x;
|
||||
@@ -4937,9 +4933,9 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
}
|
||||
|
||||
if (!configure_frame_first && window->frame)
|
||||
frame_shape_changed = meta_frame_sync_to_window (window->frame,
|
||||
gravity,
|
||||
need_move_frame, need_resize_frame);
|
||||
meta_frame_sync_to_window (window->frame,
|
||||
gravity,
|
||||
need_move_frame, need_resize_frame);
|
||||
|
||||
/* Put gravity back to be nice to lesser window managers */
|
||||
if (use_static_gravity)
|
||||
@@ -4982,12 +4978,6 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
* b) all constraints are obeyed by window->rect and frame->rect
|
||||
*/
|
||||
|
||||
if (frame_shape_changed && window->frame_bounds)
|
||||
{
|
||||
cairo_region_destroy (window->frame_bounds);
|
||||
window->frame_bounds = NULL;
|
||||
}
|
||||
|
||||
meta_window_foreach_transient (window, maybe_move_attached_dialog, NULL);
|
||||
|
||||
meta_stack_update_window_tile_matches (window->screen->stack,
|
||||
@@ -8326,8 +8316,7 @@ meta_window_show_menu (MetaWindow *window,
|
||||
|
||||
if ((window->type == META_WINDOW_DESKTOP) ||
|
||||
(window->type == META_WINDOW_DOCK) ||
|
||||
(window->type == META_WINDOW_SPLASHSCREEN ||
|
||||
META_WINDOW_MAXIMIZED (window)))
|
||||
(window->type == META_WINDOW_SPLASHSCREEN))
|
||||
insensitive |= META_MENU_OP_ABOVE | META_MENU_OP_UNABOVE;
|
||||
|
||||
/* If all operations are disabled, just quit without showing the menu.
|
||||
@@ -8338,6 +8327,8 @@ meta_window_show_menu (MetaWindow *window,
|
||||
|
||||
menu =
|
||||
meta_ui_window_menu_new (window->screen->ui,
|
||||
window->display->xdisplay,
|
||||
window->screen->number,
|
||||
window->xwindow,
|
||||
ops,
|
||||
insensitive,
|
||||
@@ -8620,7 +8611,7 @@ update_move (MetaWindow *window,
|
||||
* refers to the monitor which contains the largest part of the window,
|
||||
* the latter to the one where the pointer is located.
|
||||
*/
|
||||
monitor = meta_screen_get_current_monitor_info (window->screen);
|
||||
monitor = meta_screen_get_current_monitor (window->screen);
|
||||
meta_window_get_work_area_for_monitor (window,
|
||||
monitor->number,
|
||||
&work_area);
|
||||
@@ -10650,27 +10641,6 @@ meta_window_get_frame_type (MetaWindow *window)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_get_frame_bounds:
|
||||
*
|
||||
* Gets a region representing the outer bounds of the window's frame.
|
||||
*
|
||||
* Return value: (transfer none) (allow-none): a #cairo_region_t
|
||||
* holding the outer bounds of the window, or %NULL if the window
|
||||
* doesn't have a frame.
|
||||
*/
|
||||
cairo_region_t *
|
||||
meta_window_get_frame_bounds (MetaWindow *window)
|
||||
{
|
||||
if (!window->frame_bounds)
|
||||
{
|
||||
if (window->frame)
|
||||
window->frame_bounds = meta_frame_get_frame_bounds (window->frame);
|
||||
}
|
||||
|
||||
return window->frame_bounds;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_is_attached_dialog:
|
||||
* @window: a #MetaWindow
|
||||
|
||||
@@ -1056,13 +1056,6 @@ meta_workspace_get_work_area_for_monitor (MetaWorkspace *workspace,
|
||||
*area = workspace->work_area_monitor[which_monitor];
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_workspace_get_work_area_all_monitors:
|
||||
* @workspace: a #MetaWorkspace
|
||||
* @area: (out): location to store the work area
|
||||
*
|
||||
* Stores the work area in @area.
|
||||
*/
|
||||
void
|
||||
meta_workspace_get_work_area_all_monitors (MetaWorkspace *workspace,
|
||||
MetaRectangle *area)
|
||||
|
||||
@@ -175,4 +175,6 @@ void meta_display_unmanage_screen (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_display_retheme_all (void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Mutter gradient rendering */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington, 99% copied from wrlib in
|
||||
* WindowMaker, Copyright (C) 1997-2000 Dan Pascu and Alfredo Kojima
|
||||
*
|
||||
* 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_GRADIENT_H
|
||||
#define META_GRADIENT_H
|
||||
|
||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
#include <gdk/gdk.h>
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_GRADIENT_VERTICAL,
|
||||
META_GRADIENT_HORIZONTAL,
|
||||
META_GRADIENT_DIAGONAL,
|
||||
META_GRADIENT_LAST
|
||||
} MetaGradientType;
|
||||
|
||||
GdkPixbuf* meta_gradient_create_simple (int width,
|
||||
int height,
|
||||
const GdkRGBA *from,
|
||||
const GdkRGBA *to,
|
||||
MetaGradientType style);
|
||||
GdkPixbuf* meta_gradient_create_multi (int width,
|
||||
int height,
|
||||
const GdkRGBA *colors,
|
||||
int n_colors,
|
||||
MetaGradientType style);
|
||||
GdkPixbuf* meta_gradient_create_interwoven (int width,
|
||||
int height,
|
||||
const GdkRGBA colors1[2],
|
||||
int thickness1,
|
||||
const GdkRGBA colors2[2],
|
||||
int thickness2);
|
||||
|
||||
|
||||
/* Generate an alpha gradient and multiply it with the existing alpha
|
||||
* channel of the given pixbuf
|
||||
*/
|
||||
void meta_gradient_add_alpha (GdkPixbuf *pixbuf,
|
||||
const guchar *alphas,
|
||||
int n_alphas,
|
||||
MetaGradientType type);
|
||||
|
||||
|
||||
#endif
|
||||
@@ -123,6 +123,8 @@ struct _MetaPluginInfo
|
||||
|
||||
GType meta_plugin_get_type (void);
|
||||
|
||||
gulong meta_plugin_features (MetaPlugin *plugin);
|
||||
gboolean meta_plugin_disabled (MetaPlugin *plugin);
|
||||
gboolean meta_plugin_running (MetaPlugin *plugin);
|
||||
gboolean meta_plugin_debug_mode (MetaPlugin *plugin);
|
||||
|
||||
@@ -218,6 +220,9 @@ struct _MetaPluginVersion
|
||||
return object_name##_register_type (type_module); \
|
||||
} \
|
||||
|
||||
void
|
||||
meta_plugin_type_register (GType plugin_type);
|
||||
|
||||
void
|
||||
meta_plugin_switch_workspace_completed (MetaPlugin *plugin);
|
||||
|
||||
@@ -271,7 +276,4 @@ MetaScreen *meta_plugin_get_screen (MetaPlugin *plugin);
|
||||
void
|
||||
_meta_plugin_effect_started (MetaPlugin *plugin);
|
||||
|
||||
/* XXX: Putting this in here so it's in the public header. */
|
||||
void meta_plugin_manager_set_plugin_type (GType gtype);
|
||||
|
||||
#endif /* META_PLUGIN_H_ */
|
||||
|
||||
@@ -45,8 +45,6 @@ typedef enum
|
||||
META_PREF_ACTION_RIGHT_CLICK_TITLEBAR,
|
||||
META_PREF_AUTO_RAISE,
|
||||
META_PREF_AUTO_RAISE_DELAY,
|
||||
META_PREF_THEME,
|
||||
META_PREF_TITLEBAR_FONT,
|
||||
META_PREF_NUM_WORKSPACES,
|
||||
META_PREF_DYNAMIC_WORKSPACES,
|
||||
META_PREF_APPLICATION_BASED,
|
||||
@@ -91,7 +89,6 @@ GDesktopFocusMode meta_prefs_get_focus_mode (void);
|
||||
GDesktopFocusNewWindows meta_prefs_get_focus_new_windows (void);
|
||||
gboolean meta_prefs_get_attach_modal_dialogs (void);
|
||||
gboolean meta_prefs_get_raise_on_click (void);
|
||||
const char* meta_prefs_get_theme (void);
|
||||
/* returns NULL if GTK default should be used */
|
||||
const PangoFontDescription* meta_prefs_get_titlebar_font (void);
|
||||
int meta_prefs_get_num_workspaces (void);
|
||||
@@ -104,6 +101,12 @@ gboolean meta_prefs_get_gnome_accessibility (void);
|
||||
gboolean meta_prefs_get_gnome_animations (void);
|
||||
gboolean meta_prefs_get_edge_tiling (void);
|
||||
|
||||
const char* meta_prefs_get_screenshot_command (void);
|
||||
|
||||
const char* meta_prefs_get_window_screenshot_command (void);
|
||||
|
||||
const char* meta_prefs_get_terminal_command (void);
|
||||
|
||||
void meta_prefs_get_button_layout (MetaButtonLayout *button_layout);
|
||||
|
||||
/* Double, right, middle click can be configured to any titlebar meta-action */
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity theme preview widget */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2002 Havoc Pennington
|
||||
*
|
||||
* 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/common.h>
|
||||
#include <meta/theme.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#ifndef META_PREVIEW_WIDGET_H
|
||||
#define META_PREVIEW_WIDGET_H
|
||||
|
||||
#define META_TYPE_PREVIEW (meta_preview_get_type ())
|
||||
#define META_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_PREVIEW, MetaPreview))
|
||||
#define META_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_PREVIEW, MetaPreviewClass))
|
||||
#define META_IS_PREVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_PREVIEW))
|
||||
#define META_IS_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_PREVIEW))
|
||||
#define META_PREVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_PREVIEW, MetaPreviewClass))
|
||||
|
||||
typedef struct _MetaPreview MetaPreview;
|
||||
typedef struct _MetaPreviewClass MetaPreviewClass;
|
||||
|
||||
struct _MetaPreview
|
||||
{
|
||||
GtkBin bin;
|
||||
|
||||
MetaTheme *theme;
|
||||
char *title;
|
||||
MetaFrameType type;
|
||||
MetaFrameFlags flags;
|
||||
|
||||
PangoLayout *layout;
|
||||
int text_height;
|
||||
|
||||
MetaFrameBorders borders;
|
||||
guint borders_cached : 1;
|
||||
|
||||
MetaButtonLayout button_layout;
|
||||
};
|
||||
|
||||
struct _MetaPreviewClass
|
||||
{
|
||||
GtkBinClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GType meta_preview_get_type (void) G_GNUC_CONST;
|
||||
GtkWidget* meta_preview_new (void);
|
||||
|
||||
void meta_preview_set_theme (MetaPreview *preview,
|
||||
MetaTheme *theme);
|
||||
void meta_preview_set_title (MetaPreview *preview,
|
||||
const char *title);
|
||||
void meta_preview_set_frame_type (MetaPreview *preview,
|
||||
MetaFrameType type);
|
||||
void meta_preview_set_frame_flags (MetaPreview *preview,
|
||||
MetaFrameFlags flags);
|
||||
void meta_preview_set_button_layout (MetaPreview *preview,
|
||||
const MetaButtonLayout *button_layout);
|
||||
|
||||
GdkPixbuf* meta_preview_get_icon (void);
|
||||
GdkPixbuf* meta_preview_get_mini_icon (void);
|
||||
|
||||
#endif
|
||||
@@ -77,7 +77,6 @@ MetaWorkspace * meta_screen_get_active_workspace (MetaScreen *screen);
|
||||
|
||||
int meta_screen_get_n_monitors (MetaScreen *screen);
|
||||
int meta_screen_get_primary_monitor (MetaScreen *screen);
|
||||
int meta_screen_get_current_monitor (MetaScreen *screen);
|
||||
void meta_screen_get_monitor_geometry (MetaScreen *screen,
|
||||
int monitor,
|
||||
MetaRectangle *geometry);
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity Theme Rendering */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
*
|
||||
* 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_THEME_H
|
||||
#define META_THEME_H
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
/**
|
||||
* MetaTheme:
|
||||
*
|
||||
*/
|
||||
typedef struct _MetaTheme MetaTheme;
|
||||
|
||||
MetaTheme* meta_theme_get_current (void);
|
||||
void meta_theme_set_current (const char *name,
|
||||
gboolean force_reload);
|
||||
|
||||
MetaTheme* meta_theme_new (void);
|
||||
void meta_theme_free (MetaTheme *theme);
|
||||
gboolean meta_theme_validate (MetaTheme *theme,
|
||||
GError **error);
|
||||
|
||||
MetaTheme* meta_theme_load (const char *theme_name,
|
||||
GError **err);
|
||||
|
||||
#endif
|
||||
@@ -90,6 +90,8 @@ gint meta_unsigned_long_equal (gconstpointer v1,
|
||||
gconstpointer v2);
|
||||
guint meta_unsigned_long_hash (gconstpointer v);
|
||||
|
||||
void meta_print_backtrace (void);
|
||||
|
||||
const char* meta_frame_type_to_string (MetaFrameType type);
|
||||
const char* meta_gravity_to_string (int gravity);
|
||||
|
||||
|
||||
@@ -167,28 +167,6 @@ const char *meta_window_get_mutter_hints (MetaWindow *window);
|
||||
|
||||
MetaFrameType meta_window_get_frame_type (MetaWindow *window);
|
||||
|
||||
cairo_region_t *meta_window_get_frame_bounds (MetaWindow *window);
|
||||
|
||||
MetaWindow *meta_window_get_tile_match (MetaWindow *window);
|
||||
|
||||
void meta_window_make_fullscreen (MetaWindow *window);
|
||||
void meta_window_unmake_fullscreen (MetaWindow *window);
|
||||
void meta_window_make_above (MetaWindow *window);
|
||||
void meta_window_unmake_above (MetaWindow *window);
|
||||
void meta_window_shade (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
void meta_window_unshade (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
void meta_window_stick (MetaWindow *window);
|
||||
void meta_window_unstick (MetaWindow *window);
|
||||
|
||||
void meta_window_kill (MetaWindow *window);
|
||||
void meta_window_focus (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_window_begin_grab_op (MetaWindow *window,
|
||||
MetaGrabOp op,
|
||||
gboolean frame_action,
|
||||
guint32 timestamp);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
*/
|
||||
|
||||
#include "draw-workspace.h"
|
||||
#include "theme-private.h"
|
||||
|
||||
|
||||
static void
|
||||
@@ -75,11 +74,8 @@ draw_window (GtkWidget *widget,
|
||||
{
|
||||
GdkPixbuf *icon;
|
||||
int icon_x, icon_y, icon_w, icon_h;
|
||||
gboolean is_active;
|
||||
GdkRGBA color;
|
||||
GtkStyleContext *style;
|
||||
|
||||
is_active = win->is_active;
|
||||
|
||||
cairo_save (cr);
|
||||
|
||||
@@ -87,10 +83,7 @@ draw_window (GtkWidget *widget,
|
||||
cairo_clip (cr);
|
||||
|
||||
style = gtk_widget_get_style_context (widget);
|
||||
if (is_active)
|
||||
meta_gtk_style_get_light_color (style, state, &color);
|
||||
else
|
||||
gtk_style_context_get_background_color (style, state, &color);
|
||||
gtk_style_context_get_background_color (style, state, &color);
|
||||
gdk_cairo_set_source_rgba (cr, &color);
|
||||
|
||||
cairo_rectangle (cr,
|
||||
@@ -197,7 +190,7 @@ wnck_draw_workspace (GtkWidget *widget,
|
||||
{
|
||||
GdkRGBA color;
|
||||
|
||||
meta_gtk_style_get_dark_color (style,state, &color);
|
||||
gtk_style_context_get_background_color (style, state, &color);
|
||||
gdk_cairo_set_source_rgba (cr, &color);
|
||||
cairo_rectangle (cr, x, y, width, height);
|
||||
cairo_fill (cr);
|
||||
|
||||
2340
src/ui/frames.c
2340
src/ui/frames.c
File diff suppressed because it is too large
Load Diff
163
src/ui/frames.h
163
src/ui/frames.h
@@ -1,163 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity window frame manager widget */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
*
|
||||
* 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_FRAMES_H
|
||||
#define META_FRAMES_H
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <meta/common.h>
|
||||
#include "theme-private.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_FRAME_CONTROL_NONE,
|
||||
META_FRAME_CONTROL_TITLE,
|
||||
META_FRAME_CONTROL_DELETE,
|
||||
META_FRAME_CONTROL_MENU,
|
||||
META_FRAME_CONTROL_MINIMIZE,
|
||||
META_FRAME_CONTROL_MAXIMIZE,
|
||||
META_FRAME_CONTROL_UNMAXIMIZE,
|
||||
META_FRAME_CONTROL_SHADE,
|
||||
META_FRAME_CONTROL_UNSHADE,
|
||||
META_FRAME_CONTROL_ABOVE,
|
||||
META_FRAME_CONTROL_UNABOVE,
|
||||
META_FRAME_CONTROL_STICK,
|
||||
META_FRAME_CONTROL_UNSTICK,
|
||||
META_FRAME_CONTROL_RESIZE_SE,
|
||||
META_FRAME_CONTROL_RESIZE_S,
|
||||
META_FRAME_CONTROL_RESIZE_SW,
|
||||
META_FRAME_CONTROL_RESIZE_N,
|
||||
META_FRAME_CONTROL_RESIZE_NE,
|
||||
META_FRAME_CONTROL_RESIZE_NW,
|
||||
META_FRAME_CONTROL_RESIZE_W,
|
||||
META_FRAME_CONTROL_RESIZE_E,
|
||||
META_FRAME_CONTROL_CLIENT_AREA
|
||||
} MetaFrameControl;
|
||||
|
||||
/* This is one widget that manages all the window frames
|
||||
* as subwindows.
|
||||
*/
|
||||
|
||||
#define META_TYPE_FRAMES (meta_frames_get_type ())
|
||||
#define META_FRAMES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_FRAMES, MetaFrames))
|
||||
#define META_FRAMES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_FRAMES, MetaFramesClass))
|
||||
#define META_IS_FRAMES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_FRAMES))
|
||||
#define META_IS_FRAMES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_FRAMES))
|
||||
#define META_FRAMES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_FRAMES, MetaFramesClass))
|
||||
|
||||
typedef struct _MetaFrames MetaFrames;
|
||||
typedef struct _MetaFramesClass MetaFramesClass;
|
||||
|
||||
typedef struct _MetaUIFrame MetaUIFrame;
|
||||
|
||||
struct _MetaUIFrame
|
||||
{
|
||||
Window xwindow;
|
||||
GdkWindow *window;
|
||||
GtkStyleContext *style;
|
||||
MetaFrameStyle *cache_style;
|
||||
PangoLayout *layout;
|
||||
int text_height;
|
||||
char *title; /* NULL once we have a layout */
|
||||
guint shape_applied : 1;
|
||||
|
||||
/* FIXME get rid of this, it can just be in the MetaFrames struct */
|
||||
MetaFrameControl prelit_control;
|
||||
};
|
||||
|
||||
struct _MetaFrames
|
||||
{
|
||||
GtkWindow parent_instance;
|
||||
|
||||
GHashTable *text_heights;
|
||||
|
||||
GHashTable *frames;
|
||||
MetaUIFrame *last_motion_frame;
|
||||
|
||||
GtkStyleContext *normal_style;
|
||||
GHashTable *style_variants;
|
||||
};
|
||||
|
||||
struct _MetaFramesClass
|
||||
{
|
||||
GtkWindowClass parent_class;
|
||||
|
||||
};
|
||||
|
||||
GType meta_frames_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MetaFrames *meta_frames_new (int screen_number);
|
||||
|
||||
void meta_frames_manage_window (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
GdkWindow *window);
|
||||
void meta_frames_unmanage_window (MetaFrames *frames,
|
||||
Window xwindow);
|
||||
void meta_frames_set_title (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
const char *title);
|
||||
|
||||
void meta_frames_update_frame_style (MetaFrames *frames,
|
||||
Window xwindow);
|
||||
|
||||
void meta_frames_repaint_frame (MetaFrames *frames,
|
||||
Window xwindow);
|
||||
|
||||
void meta_frames_get_borders (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
MetaFrameBorders *borders);
|
||||
|
||||
void meta_frames_reset_bg (MetaFrames *frames,
|
||||
Window xwindow);
|
||||
void meta_frames_unflicker_bg (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
int target_width,
|
||||
int target_height);
|
||||
|
||||
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,
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
void meta_frames_queue_draw (MetaFrames *frames,
|
||||
Window xwindow);
|
||||
|
||||
void meta_frames_notify_menu_hide (MetaFrames *frames);
|
||||
|
||||
Window meta_frames_get_moving_frame (MetaFrames *frames);
|
||||
|
||||
#endif
|
||||
@@ -1,865 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity gradient rendering */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington, 99% copied from wrlib in
|
||||
* WindowMaker, Copyright (C) 1997-2000 Dan Pascu and Alfredo Kojima
|
||||
* Copyright (C) 2005 Elijah Newren
|
||||
*
|
||||
* 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 <meta/gradient.h>
|
||||
#include <meta/util.h>
|
||||
#include <string.h>
|
||||
|
||||
/* This is all Alfredo's and Dan's usual very nice WindowMaker code,
|
||||
* slightly GTK-ized
|
||||
*/
|
||||
static GdkPixbuf* meta_gradient_create_horizontal (int width,
|
||||
int height,
|
||||
const GdkRGBA *from,
|
||||
const GdkRGBA *to);
|
||||
static GdkPixbuf* meta_gradient_create_vertical (int width,
|
||||
int height,
|
||||
const GdkRGBA *from,
|
||||
const GdkRGBA *to);
|
||||
static GdkPixbuf* meta_gradient_create_diagonal (int width,
|
||||
int height,
|
||||
const GdkRGBA *from,
|
||||
const GdkRGBA *to);
|
||||
static GdkPixbuf* meta_gradient_create_multi_horizontal (int width,
|
||||
int height,
|
||||
const GdkRGBA *colors,
|
||||
int count);
|
||||
static GdkPixbuf* meta_gradient_create_multi_vertical (int width,
|
||||
int height,
|
||||
const GdkRGBA *colors,
|
||||
int count);
|
||||
static GdkPixbuf* meta_gradient_create_multi_diagonal (int width,
|
||||
int height,
|
||||
const GdkRGBA *colors,
|
||||
int count);
|
||||
|
||||
|
||||
/* Used as the destroy notification function for gdk_pixbuf_new() */
|
||||
static void
|
||||
free_buffer (guchar *pixels, gpointer data)
|
||||
{
|
||||
g_free (pixels);
|
||||
}
|
||||
|
||||
static GdkPixbuf*
|
||||
blank_pixbuf (int width, int height, gboolean no_padding)
|
||||
{
|
||||
guchar *buf;
|
||||
int rowstride;
|
||||
|
||||
g_return_val_if_fail (width > 0, NULL);
|
||||
g_return_val_if_fail (height > 0, NULL);
|
||||
|
||||
if (no_padding)
|
||||
rowstride = width * 3;
|
||||
else
|
||||
/* Always align rows to 32-bit boundaries */
|
||||
rowstride = 4 * ((3 * width + 3) / 4);
|
||||
|
||||
buf = g_try_malloc (height * rowstride);
|
||||
if (!buf)
|
||||
return NULL;
|
||||
|
||||
return gdk_pixbuf_new_from_data (buf, GDK_COLORSPACE_RGB,
|
||||
FALSE, 8,
|
||||
width, height, rowstride,
|
||||
free_buffer, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_gradient_create_simple:
|
||||
* @width: Width in pixels
|
||||
* @height: Height in pixels
|
||||
* @from: Starting color
|
||||
* @to: Ending color
|
||||
* @style: Gradient style
|
||||
*
|
||||
* Returns: (transfer full): A new linear gradient
|
||||
*/
|
||||
GdkPixbuf*
|
||||
meta_gradient_create_simple (int width,
|
||||
int height,
|
||||
const GdkRGBA *from,
|
||||
const GdkRGBA *to,
|
||||
MetaGradientType style)
|
||||
{
|
||||
switch (style)
|
||||
{
|
||||
case META_GRADIENT_HORIZONTAL:
|
||||
return meta_gradient_create_horizontal (width, height,
|
||||
from, to);
|
||||
case META_GRADIENT_VERTICAL:
|
||||
return meta_gradient_create_vertical (width, height,
|
||||
from, to);
|
||||
|
||||
case META_GRADIENT_DIAGONAL:
|
||||
return meta_gradient_create_diagonal (width, height,
|
||||
from, to);
|
||||
case META_GRADIENT_LAST:
|
||||
break;
|
||||
}
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_gradient_create_multi:
|
||||
* @width: Width in pixels
|
||||
* @height: Height in pixels
|
||||
* @colors: (array length=n_colors): Array of colors
|
||||
* @n_colors: Number of colors
|
||||
* @style: Gradient style
|
||||
*
|
||||
* Returns: (transfer full): A new multi-step linear gradient
|
||||
*/
|
||||
GdkPixbuf*
|
||||
meta_gradient_create_multi (int width,
|
||||
int height,
|
||||
const GdkRGBA *colors,
|
||||
int n_colors,
|
||||
MetaGradientType style)
|
||||
{
|
||||
|
||||
if (n_colors > 2)
|
||||
{
|
||||
switch (style)
|
||||
{
|
||||
case META_GRADIENT_HORIZONTAL:
|
||||
return meta_gradient_create_multi_horizontal (width, height, colors, n_colors);
|
||||
case META_GRADIENT_VERTICAL:
|
||||
return meta_gradient_create_multi_vertical (width, height, colors, n_colors);
|
||||
case META_GRADIENT_DIAGONAL:
|
||||
return meta_gradient_create_multi_diagonal (width, height, colors, n_colors);
|
||||
case META_GRADIENT_LAST:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (n_colors > 1)
|
||||
{
|
||||
return meta_gradient_create_simple (width, height, &colors[0], &colors[1],
|
||||
style);
|
||||
}
|
||||
else if (n_colors > 0)
|
||||
{
|
||||
return meta_gradient_create_simple (width, height, &colors[0], &colors[0],
|
||||
style);
|
||||
}
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_gradient_create_interwoven: (skip)
|
||||
*
|
||||
* Interwoven essentially means we have two vertical gradients,
|
||||
* cut into horizontal strips of the given thickness, and then the strips
|
||||
* are alternated. I'm not sure what it's good for, just copied since
|
||||
* WindowMaker had it.
|
||||
*/
|
||||
GdkPixbuf*
|
||||
meta_gradient_create_interwoven (int width,
|
||||
int height,
|
||||
const GdkRGBA colors1[2],
|
||||
int thickness1,
|
||||
const GdkRGBA colors2[2],
|
||||
int thickness2)
|
||||
{
|
||||
|
||||
int i, j, k, l, ll;
|
||||
long r1, g1, b1, dr1, dg1, db1;
|
||||
long r2, g2, b2, dr2, dg2, db2;
|
||||
GdkPixbuf *pixbuf;
|
||||
unsigned char *ptr;
|
||||
unsigned char *pixels;
|
||||
int rowstride;
|
||||
|
||||
pixbuf = blank_pixbuf (width, height, FALSE);
|
||||
if (pixbuf == NULL)
|
||||
return NULL;
|
||||
|
||||
pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
|
||||
r1 = (long)(colors1[0].red*0xffffff);
|
||||
g1 = (long)(colors1[0].green*0xffffff);
|
||||
b1 = (long)(colors1[0].blue*0xffffff);
|
||||
|
||||
r2 = (long)(colors2[0].red*0xffffff);
|
||||
g2 = (long)(colors2[0].green*0xffffff);
|
||||
b2 = (long)(colors2[0].blue*0xffffff);
|
||||
|
||||
dr1 = ((colors1[1].red-colors1[0].red)*0xffffff)/(int)height;
|
||||
dg1 = ((colors1[1].green-colors1[0].green)*0xffffff)/(int)height;
|
||||
db1 = ((colors1[1].blue-colors1[0].blue)*0xffffff)/(int)height;
|
||||
|
||||
dr2 = ((colors2[1].red-colors2[0].red)*0xffffff)/(int)height;
|
||||
dg2 = ((colors2[1].green-colors2[0].green)*0xffffff)/(int)height;
|
||||
db2 = ((colors2[1].blue-colors2[0].blue)*0xffffff)/(int)height;
|
||||
|
||||
for (i=0,k=0,l=0,ll=thickness1; i<height; i++)
|
||||
{
|
||||
ptr = pixels + i * rowstride;
|
||||
|
||||
if (k == 0)
|
||||
{
|
||||
ptr[0] = (unsigned char) (r1>>16);
|
||||
ptr[1] = (unsigned char) (g1>>16);
|
||||
ptr[2] = (unsigned char) (b1>>16);
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr[0] = (unsigned char) (r2>>16);
|
||||
ptr[1] = (unsigned char) (g2>>16);
|
||||
ptr[2] = (unsigned char) (b2>>16);
|
||||
}
|
||||
|
||||
for (j=1; j <= width/2; j *= 2)
|
||||
memcpy (&(ptr[j*3]), ptr, j*3);
|
||||
memcpy (&(ptr[j*3]), ptr, (width - j)*3);
|
||||
|
||||
if (++l == ll)
|
||||
{
|
||||
if (k == 0)
|
||||
{
|
||||
k = 1;
|
||||
ll = thickness2;
|
||||
}
|
||||
else
|
||||
{
|
||||
k = 0;
|
||||
ll = thickness1;
|
||||
}
|
||||
l = 0;
|
||||
}
|
||||
r1+=dr1;
|
||||
g1+=dg1;
|
||||
b1+=db1;
|
||||
|
||||
r2+=dr2;
|
||||
g2+=dg2;
|
||||
b2+=db2;
|
||||
}
|
||||
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
* meta_gradient_create_horizontal--
|
||||
* Renders a horizontal linear gradient of the specified size in the
|
||||
* GdkPixbuf format with a border of the specified type.
|
||||
*
|
||||
* Returns:
|
||||
* A 24bit GdkPixbuf with the gradient (no alpha channel).
|
||||
*
|
||||
* Side effects:
|
||||
* None
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
static GdkPixbuf*
|
||||
meta_gradient_create_horizontal (int width, int height,
|
||||
const GdkRGBA *from,
|
||||
const GdkRGBA *to)
|
||||
{
|
||||
int i;
|
||||
long r, g, b, dr, dg, db;
|
||||
GdkPixbuf *pixbuf;
|
||||
unsigned char *ptr;
|
||||
unsigned char *pixels;
|
||||
int r0, g0, b0;
|
||||
int rf, gf, bf;
|
||||
int rowstride;
|
||||
|
||||
pixbuf = blank_pixbuf (width, height, FALSE);
|
||||
if (pixbuf == NULL)
|
||||
return NULL;
|
||||
|
||||
pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
ptr = pixels;
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
|
||||
r0 = (guchar) (from->red * 0xff);
|
||||
g0 = (guchar) (from->green * 0xff);
|
||||
b0 = (guchar) (from->blue * 0xff);
|
||||
rf = (guchar) (to->red * 0xff);
|
||||
gf = (guchar) (to->green * 0xff);
|
||||
bf = (guchar) (to->blue * 0xff);
|
||||
|
||||
r = r0 << 16;
|
||||
g = g0 << 16;
|
||||
b = b0 << 16;
|
||||
|
||||
dr = ((rf-r0)<<16)/(int)width;
|
||||
dg = ((gf-g0)<<16)/(int)width;
|
||||
db = ((bf-b0)<<16)/(int)width;
|
||||
/* render the first line */
|
||||
for (i=0; i<width; i++)
|
||||
{
|
||||
*(ptr++) = (unsigned char)(r>>16);
|
||||
*(ptr++) = (unsigned char)(g>>16);
|
||||
*(ptr++) = (unsigned char)(b>>16);
|
||||
r += dr;
|
||||
g += dg;
|
||||
b += db;
|
||||
}
|
||||
|
||||
/* copy the first line to the other lines */
|
||||
for (i=1; i<height; i++)
|
||||
{
|
||||
memcpy (&(pixels[i*rowstride]), pixels, rowstride);
|
||||
}
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
* meta_gradient_create_vertical--
|
||||
* Renders a vertical linear gradient of the specified size in the
|
||||
* GdkPixbuf format with a border of the specified type.
|
||||
*
|
||||
* Returns:
|
||||
* A 24bit GdkPixbuf with the gradient (no alpha channel).
|
||||
*
|
||||
* Side effects:
|
||||
* None
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
static GdkPixbuf*
|
||||
meta_gradient_create_vertical (int width, int height,
|
||||
const GdkRGBA *from,
|
||||
const GdkRGBA *to)
|
||||
{
|
||||
int i, j;
|
||||
long r, g, b, dr, dg, db;
|
||||
GdkPixbuf *pixbuf;
|
||||
unsigned char *ptr;
|
||||
int r0, g0, b0;
|
||||
int rf, gf, bf;
|
||||
int rowstride;
|
||||
unsigned char *pixels;
|
||||
|
||||
pixbuf = blank_pixbuf (width, height, FALSE);
|
||||
if (pixbuf == NULL)
|
||||
return NULL;
|
||||
|
||||
pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
|
||||
r0 = (guchar) (from->red * 0xff);
|
||||
g0 = (guchar) (from->green * 0xff);
|
||||
b0 = (guchar) (from->blue * 0xff);
|
||||
rf = (guchar) (to->red * 0xff);
|
||||
gf = (guchar) (to->green * 0xff);
|
||||
bf = (guchar) (to->blue * 0xff);
|
||||
|
||||
r = r0<<16;
|
||||
g = g0<<16;
|
||||
b = b0<<16;
|
||||
|
||||
dr = ((rf-r0)<<16)/(int)height;
|
||||
dg = ((gf-g0)<<16)/(int)height;
|
||||
db = ((bf-b0)<<16)/(int)height;
|
||||
|
||||
for (i=0; i<height; i++)
|
||||
{
|
||||
ptr = pixels + i * rowstride;
|
||||
|
||||
ptr[0] = (unsigned char)(r>>16);
|
||||
ptr[1] = (unsigned char)(g>>16);
|
||||
ptr[2] = (unsigned char)(b>>16);
|
||||
|
||||
for (j=1; j <= width/2; j *= 2)
|
||||
memcpy (&(ptr[j*3]), ptr, j*3);
|
||||
memcpy (&(ptr[j*3]), ptr, (width - j)*3);
|
||||
|
||||
r+=dr;
|
||||
g+=dg;
|
||||
b+=db;
|
||||
}
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
* meta_gradient_create_diagonal--
|
||||
* Renders a diagonal linear gradient of the specified size in the
|
||||
* GdkPixbuf format with a border of the specified type.
|
||||
*
|
||||
* Returns:
|
||||
* A 24bit GdkPixbuf with the gradient (no alpha channel).
|
||||
*
|
||||
* Side effects:
|
||||
* None
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
static GdkPixbuf*
|
||||
meta_gradient_create_diagonal (int width, int height,
|
||||
const GdkRGBA *from,
|
||||
const GdkRGBA *to)
|
||||
{
|
||||
GdkPixbuf *pixbuf, *tmp;
|
||||
int j;
|
||||
float a, offset;
|
||||
unsigned char *ptr;
|
||||
unsigned char *pixels;
|
||||
int rowstride;
|
||||
|
||||
if (width == 1)
|
||||
return meta_gradient_create_vertical (width, height, from, to);
|
||||
else if (height == 1)
|
||||
return meta_gradient_create_horizontal (width, height, from, to);
|
||||
|
||||
pixbuf = blank_pixbuf (width, height, FALSE);
|
||||
if (pixbuf == NULL)
|
||||
return NULL;
|
||||
|
||||
pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
|
||||
tmp = meta_gradient_create_horizontal (2*width-1, 1, from, to);
|
||||
if (!tmp)
|
||||
{
|
||||
g_object_unref (G_OBJECT (pixbuf));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ptr = gdk_pixbuf_get_pixels (tmp);
|
||||
|
||||
a = ((float)(width - 1))/((float)(height - 1));
|
||||
width = width * 3;
|
||||
|
||||
/* copy the first line to the other lines with corresponding offset */
|
||||
for (j=0, offset=0.0; j<rowstride*height; j += rowstride)
|
||||
{
|
||||
memcpy (&(pixels[j]), &ptr[3*(int)offset], width);
|
||||
offset += a;
|
||||
}
|
||||
|
||||
g_object_unref (G_OBJECT (tmp));
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
|
||||
static GdkPixbuf*
|
||||
meta_gradient_create_multi_horizontal (int width, int height,
|
||||
const GdkRGBA *colors,
|
||||
int count)
|
||||
{
|
||||
int i, j, k;
|
||||
long r, g, b, dr, dg, db;
|
||||
GdkPixbuf *pixbuf;
|
||||
unsigned char *ptr;
|
||||
unsigned char *pixels;
|
||||
int width2;
|
||||
int rowstride;
|
||||
|
||||
g_return_val_if_fail (count > 2, NULL);
|
||||
|
||||
pixbuf = blank_pixbuf (width, height, FALSE);
|
||||
if (pixbuf == NULL)
|
||||
return NULL;
|
||||
|
||||
pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
ptr = pixels;
|
||||
|
||||
if (count > width)
|
||||
count = width;
|
||||
|
||||
if (count > 1)
|
||||
width2 = width/(count-1);
|
||||
else
|
||||
width2 = width;
|
||||
|
||||
k = 0;
|
||||
|
||||
r = (long)(colors[0].red * 0xffffff);
|
||||
g = (long)(colors[0].green * 0xffffff);
|
||||
b = (long)(colors[0].blue * 0xffffff);
|
||||
|
||||
/* render the first line */
|
||||
for (i=1; i<count; i++)
|
||||
{
|
||||
dr = (int)((colors[i].red - colors[i-1].red) *0xffffff)/(int)width2;
|
||||
dg = (int)((colors[i].green - colors[i-1].green)*0xffffff)/(int)width2;
|
||||
db = (int)((colors[i].blue - colors[i-1].blue) *0xffffff)/(int)width2;
|
||||
for (j=0; j<width2; j++)
|
||||
{
|
||||
*ptr++ = (unsigned char)(r>>16);
|
||||
*ptr++ = (unsigned char)(g>>16);
|
||||
*ptr++ = (unsigned char)(b>>16);
|
||||
r += dr;
|
||||
g += dg;
|
||||
b += db;
|
||||
k++;
|
||||
}
|
||||
r = (long)(colors[i].red * 0xffffff);
|
||||
g = (long)(colors[i].green * 0xffffff);
|
||||
b = (long)(colors[i].blue * 0xffffff);
|
||||
}
|
||||
for (j=k; j<width; j++)
|
||||
{
|
||||
*ptr++ = (unsigned char)(r>>16);
|
||||
*ptr++ = (unsigned char)(g>>16);
|
||||
*ptr++ = (unsigned char)(b>>16);
|
||||
}
|
||||
|
||||
/* copy the first line to the other lines */
|
||||
for (i=1; i<height; i++)
|
||||
{
|
||||
memcpy (&(pixels[i*rowstride]), pixels, rowstride);
|
||||
}
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
static GdkPixbuf*
|
||||
meta_gradient_create_multi_vertical (int width, int height,
|
||||
const GdkRGBA *colors,
|
||||
int count)
|
||||
{
|
||||
int i, j, k;
|
||||
long r, g, b, dr, dg, db;
|
||||
GdkPixbuf *pixbuf;
|
||||
unsigned char *ptr, *tmp, *pixels;
|
||||
int height2;
|
||||
int x;
|
||||
int rowstride;
|
||||
|
||||
g_return_val_if_fail (count > 2, NULL);
|
||||
|
||||
pixbuf = blank_pixbuf (width, height, FALSE);
|
||||
if (pixbuf == NULL)
|
||||
return NULL;
|
||||
|
||||
pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
ptr = pixels;
|
||||
|
||||
if (count > height)
|
||||
count = height;
|
||||
|
||||
if (count > 1)
|
||||
height2 = height/(count-1);
|
||||
else
|
||||
height2 = height;
|
||||
|
||||
k = 0;
|
||||
|
||||
r = (long)(colors[0].red * 0xffffff);
|
||||
g = (long)(colors[0].green * 0xffffff);
|
||||
b = (long)(colors[0].blue * 0xffffff);
|
||||
|
||||
for (i=1; i<count; i++)
|
||||
{
|
||||
dr = (int)((colors[i].red - colors[i-1].red) *0xffffff)/(int)height2;
|
||||
dg = (int)((colors[i].green - colors[i-1].green)*0xffffff)/(int)height2;
|
||||
db = (int)((colors[i].blue - colors[i-1].blue) *0xffffff)/(int)height2;
|
||||
|
||||
for (j=0; j<height2; j++)
|
||||
{
|
||||
ptr[0] = (unsigned char)(r>>16);
|
||||
ptr[1] = (unsigned char)(g>>16);
|
||||
ptr[2] = (unsigned char)(b>>16);
|
||||
|
||||
for (x=1; x <= width/2; x *= 2)
|
||||
memcpy (&(ptr[x*3]), ptr, x*3);
|
||||
memcpy (&(ptr[x*3]), ptr, (width - x)*3);
|
||||
|
||||
ptr += rowstride;
|
||||
|
||||
r += dr;
|
||||
g += dg;
|
||||
b += db;
|
||||
k++;
|
||||
}
|
||||
r = (long)(colors[i].red * 0xffffff);
|
||||
g = (long)(colors[i].green * 0xffffff);
|
||||
b = (long)(colors[i].blue * 0xffffff);
|
||||
}
|
||||
|
||||
if (k<height)
|
||||
{
|
||||
tmp = ptr;
|
||||
|
||||
ptr[0] = (unsigned char) (r>>16);
|
||||
ptr[1] = (unsigned char) (g>>16);
|
||||
ptr[2] = (unsigned char) (b>>16);
|
||||
|
||||
for (x=1; x <= width/2; x *= 2)
|
||||
memcpy (&(ptr[x*3]), ptr, x*3);
|
||||
memcpy (&(ptr[x*3]), ptr, (width - x)*3);
|
||||
|
||||
ptr += rowstride;
|
||||
|
||||
for (j=k+1; j<height; j++)
|
||||
{
|
||||
memcpy (ptr, tmp, rowstride);
|
||||
ptr += rowstride;
|
||||
}
|
||||
}
|
||||
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
|
||||
static GdkPixbuf*
|
||||
meta_gradient_create_multi_diagonal (int width, int height,
|
||||
const GdkRGBA *colors,
|
||||
int count)
|
||||
{
|
||||
GdkPixbuf *pixbuf, *tmp;
|
||||
float a, offset;
|
||||
int j;
|
||||
unsigned char *ptr;
|
||||
unsigned char *pixels;
|
||||
int rowstride;
|
||||
|
||||
g_return_val_if_fail (count > 2, NULL);
|
||||
|
||||
if (width == 1)
|
||||
return meta_gradient_create_multi_vertical (width, height, colors, count);
|
||||
else if (height == 1)
|
||||
return meta_gradient_create_multi_horizontal (width, height, colors, count);
|
||||
|
||||
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
|
||||
width, height);
|
||||
if (pixbuf == NULL)
|
||||
return NULL;
|
||||
|
||||
pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
|
||||
if (count > width)
|
||||
count = width;
|
||||
if (count > height)
|
||||
count = height;
|
||||
|
||||
if (count > 2)
|
||||
tmp = meta_gradient_create_multi_horizontal (2*width-1, 1, colors, count);
|
||||
else
|
||||
/* wrlib multiplies these colors by 256 before passing them in, but
|
||||
* I think it's a bug in wrlib, so changed here. I could be wrong
|
||||
* though, if we notice two-color multi diagonals not working.
|
||||
*/
|
||||
tmp = meta_gradient_create_horizontal (2*width-1, 1,
|
||||
&colors[0], &colors[1]);
|
||||
|
||||
if (!tmp)
|
||||
{
|
||||
g_object_unref (G_OBJECT (pixbuf));
|
||||
return NULL;
|
||||
}
|
||||
ptr = gdk_pixbuf_get_pixels (tmp);
|
||||
|
||||
a = ((float)(width - 1))/((float)(height - 1));
|
||||
width = width * 3;
|
||||
|
||||
/* copy the first line to the other lines with corresponding offset */
|
||||
for (j=0, offset=0; j<rowstride*height; j += rowstride)
|
||||
{
|
||||
memcpy (&(pixels[j]), &ptr[3*(int)offset], width);
|
||||
offset += a;
|
||||
}
|
||||
|
||||
g_object_unref (G_OBJECT (tmp));
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
static void
|
||||
simple_multiply_alpha (GdkPixbuf *pixbuf,
|
||||
guchar alpha)
|
||||
{
|
||||
guchar *pixels;
|
||||
int rowstride;
|
||||
int height;
|
||||
int row;
|
||||
|
||||
g_return_if_fail (GDK_IS_PIXBUF (pixbuf));
|
||||
|
||||
if (alpha == 255)
|
||||
return;
|
||||
|
||||
g_assert (gdk_pixbuf_get_has_alpha (pixbuf));
|
||||
|
||||
pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
height = gdk_pixbuf_get_height (pixbuf);
|
||||
|
||||
row = 0;
|
||||
while (row < height)
|
||||
{
|
||||
guchar *p;
|
||||
guchar *end;
|
||||
|
||||
p = pixels + row * rowstride;
|
||||
end = p + rowstride;
|
||||
|
||||
while (p != end)
|
||||
{
|
||||
p += 3; /* skip RGB */
|
||||
|
||||
/* multiply the two alpha channels. not sure this is right.
|
||||
* but some end cases are that if the pixbuf contains 255,
|
||||
* then it should be modified to contain "alpha"; if the
|
||||
* pixbuf contains 0, it should remain 0.
|
||||
*/
|
||||
/* ((*p / 255.0) * (alpha / 255.0)) * 255; */
|
||||
*p = (guchar) (((int) *p * (int) alpha) / (int) 255);
|
||||
|
||||
++p; /* skip A */
|
||||
}
|
||||
|
||||
++row;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_gradient_add_alpha_horizontal (GdkPixbuf *pixbuf,
|
||||
const unsigned char *alphas,
|
||||
int n_alphas)
|
||||
{
|
||||
int i, j;
|
||||
long a, da;
|
||||
unsigned char *p;
|
||||
unsigned char *pixels;
|
||||
int width2;
|
||||
int rowstride;
|
||||
int width, height;
|
||||
unsigned char *gradient;
|
||||
unsigned char *gradient_p;
|
||||
unsigned char *gradient_end;
|
||||
|
||||
g_return_if_fail (n_alphas > 0);
|
||||
|
||||
if (n_alphas == 1)
|
||||
{
|
||||
/* Optimize this */
|
||||
simple_multiply_alpha (pixbuf, alphas[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
width = gdk_pixbuf_get_width (pixbuf);
|
||||
height = gdk_pixbuf_get_height (pixbuf);
|
||||
|
||||
gradient = g_new (unsigned char, width);
|
||||
gradient_end = gradient + width;
|
||||
|
||||
if (n_alphas > width)
|
||||
n_alphas = width;
|
||||
|
||||
if (n_alphas > 1)
|
||||
width2 = width / (n_alphas - 1);
|
||||
else
|
||||
width2 = width;
|
||||
|
||||
a = alphas[0] << 8;
|
||||
gradient_p = gradient;
|
||||
|
||||
/* render the gradient into an array */
|
||||
for (i = 1; i < n_alphas; i++)
|
||||
{
|
||||
da = (((int)(alphas[i] - (int) alphas[i-1])) << 8) / (int) width2;
|
||||
|
||||
for (j = 0; j < width2; j++)
|
||||
{
|
||||
*gradient_p++ = (a >> 8);
|
||||
|
||||
a += da;
|
||||
}
|
||||
|
||||
a = alphas[i] << 8;
|
||||
}
|
||||
|
||||
/* get leftover pixels */
|
||||
while (gradient_p != gradient_end)
|
||||
{
|
||||
*gradient_p++ = a >> 8;
|
||||
}
|
||||
|
||||
/* Now for each line of the pixbuf, fill in with the gradient */
|
||||
pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
|
||||
p = pixels;
|
||||
i = 0;
|
||||
while (i < height)
|
||||
{
|
||||
unsigned char *row_end = p + rowstride;
|
||||
gradient_p = gradient;
|
||||
|
||||
p += 3;
|
||||
while (gradient_p != gradient_end)
|
||||
{
|
||||
/* multiply the two alpha channels. not sure this is right.
|
||||
* but some end cases are that if the pixbuf contains 255,
|
||||
* then it should be modified to contain "alpha"; if the
|
||||
* pixbuf contains 0, it should remain 0.
|
||||
*/
|
||||
/* ((*p / 255.0) * (alpha / 255.0)) * 255; */
|
||||
*p = (guchar) (((int) *p * (int) *gradient_p) / (int) 255);
|
||||
|
||||
p += 4;
|
||||
++gradient_p;
|
||||
}
|
||||
|
||||
p = row_end;
|
||||
++i;
|
||||
}
|
||||
|
||||
g_free (gradient);
|
||||
}
|
||||
|
||||
void
|
||||
meta_gradient_add_alpha (GdkPixbuf *pixbuf,
|
||||
const guchar *alphas,
|
||||
int n_alphas,
|
||||
MetaGradientType type)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_PIXBUF (pixbuf));
|
||||
g_return_if_fail (gdk_pixbuf_get_has_alpha (pixbuf));
|
||||
g_return_if_fail (n_alphas > 0);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case META_GRADIENT_HORIZONTAL:
|
||||
meta_gradient_add_alpha_horizontal (pixbuf, alphas, n_alphas);
|
||||
break;
|
||||
|
||||
case META_GRADIENT_VERTICAL:
|
||||
g_printerr ("metacity: vertical alpha channel gradient not implemented yet\n");
|
||||
break;
|
||||
|
||||
case META_GRADIENT_DIAGONAL:
|
||||
g_printerr ("metacity: diagonal alpha channel gradient not implemented yet\n");
|
||||
break;
|
||||
|
||||
case META_GRADIENT_LAST:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -137,7 +137,7 @@ menu_closed (GtkMenu *widget,
|
||||
|
||||
menu = data;
|
||||
|
||||
meta_frames_notify_menu_hide (menu->frames);
|
||||
meta_ui_notify_menu_hide (menu->ui);
|
||||
(* 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_ui_notify_menu_hide (md->menu->ui);
|
||||
(* md->menu->func) (md->menu,
|
||||
GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||
md->menu->client_xwindow,
|
||||
@@ -321,7 +321,9 @@ menu_item_new (MenuItem *menuitem, int workspace_id)
|
||||
}
|
||||
|
||||
MetaWindowMenu*
|
||||
meta_window_menu_new (MetaFrames *frames,
|
||||
meta_window_menu_new (MetaUI *ui,
|
||||
Display *display,
|
||||
gint screen_no,
|
||||
MetaMenuOp ops,
|
||||
MetaMenuOp insensitive,
|
||||
Window client_xwindow,
|
||||
@@ -332,6 +334,8 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
{
|
||||
int i;
|
||||
MetaWindowMenu *menu;
|
||||
GdkDisplay *gdkdisplay = gdk_x11_lookup_xdisplay (display);
|
||||
GdkScreen *screen = gdk_display_get_screen (gdkdisplay, screen_no);
|
||||
|
||||
/* FIXME: Modifications to 'ops' should happen in meta_window_show_menu */
|
||||
if (n_workspaces < 2)
|
||||
@@ -341,7 +345,7 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
ops &= ~(META_MENU_OP_WORKSPACES);
|
||||
|
||||
menu = g_new (MetaWindowMenu, 1);
|
||||
menu->frames = frames;
|
||||
menu->ui = ui;
|
||||
menu->client_xwindow = client_xwindow;
|
||||
menu->func = func;
|
||||
menu->data = data;
|
||||
@@ -350,8 +354,7 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
|
||||
menu->menu = gtk_menu_new ();
|
||||
|
||||
gtk_menu_set_screen (GTK_MENU (menu->menu),
|
||||
gtk_widget_get_screen (GTK_WIDGET (frames)));
|
||||
gtk_menu_set_screen (GTK_MENU (menu->menu), screen);
|
||||
|
||||
for (i = 0; i < (int) G_N_ELEMENTS (menuitems); i++)
|
||||
{
|
||||
@@ -384,10 +387,7 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
{
|
||||
if (ops & META_MENU_OP_WORKSPACES)
|
||||
{
|
||||
Display *display;
|
||||
Window xroot;
|
||||
GdkScreen *screen;
|
||||
GdkWindow *window;
|
||||
GtkWidget *submenu;
|
||||
int j;
|
||||
|
||||
@@ -400,10 +400,6 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
meta_verbose ("Creating %d-workspace menu current space %lu\n",
|
||||
n_workspaces, active_workspace);
|
||||
|
||||
window = gtk_widget_get_window (GTK_WIDGET (frames));
|
||||
display = GDK_WINDOW_XDISPLAY (window);
|
||||
|
||||
screen = gdk_window_get_screen (window);
|
||||
xroot = GDK_WINDOW_XID (gdk_screen_get_root_window (screen));
|
||||
|
||||
submenu = gtk_menu_new ();
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#define META_MENU_H
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include "frames.h"
|
||||
#include "ui.h"
|
||||
|
||||
/* Stock icons */
|
||||
#define METACITY_STOCK_DELETE "metacity-delete"
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
struct _MetaWindowMenu
|
||||
{
|
||||
MetaFrames *frames;
|
||||
MetaUI *ui;
|
||||
Window client_xwindow;
|
||||
GtkWidget *menu;
|
||||
MetaWindowMenuFunc func;
|
||||
@@ -43,7 +43,9 @@ struct _MetaWindowMenu
|
||||
MetaMenuOp insensitive;
|
||||
};
|
||||
|
||||
MetaWindowMenu* meta_window_menu_new (MetaFrames *frames,
|
||||
MetaWindowMenu* meta_window_menu_new (MetaUI *ui,
|
||||
Display *display,
|
||||
gint screen_no,
|
||||
MetaMenuOp ops,
|
||||
MetaMenuOp insensitive,
|
||||
Window client_xwindow,
|
||||
|
||||
@@ -1,467 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity theme preview widget */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2002 Havoc Pennington
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#define _XOPEN_SOURCE 600 /* for the maths routines over floats */
|
||||
|
||||
#include <math.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <meta/preview-widget.h>
|
||||
#include "theme-private.h"
|
||||
|
||||
static void meta_preview_get_preferred_width (GtkWidget *widget,
|
||||
gint *minimum,
|
||||
gint *natural);
|
||||
static void meta_preview_get_preferred_height (GtkWidget *widget,
|
||||
gint *minimum,
|
||||
gint *natural);
|
||||
static void meta_preview_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation);
|
||||
static gboolean meta_preview_draw (GtkWidget *widget,
|
||||
cairo_t *cr);
|
||||
static void meta_preview_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (MetaPreview, meta_preview, GTK_TYPE_BIN);
|
||||
|
||||
static void
|
||||
meta_preview_class_init (MetaPreviewClass *class)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
|
||||
GtkWidgetClass *widget_class;
|
||||
|
||||
widget_class = (GtkWidgetClass*) class;
|
||||
|
||||
gobject_class->finalize = meta_preview_finalize;
|
||||
|
||||
widget_class->draw = meta_preview_draw;
|
||||
widget_class->get_preferred_width = meta_preview_get_preferred_width;
|
||||
widget_class->get_preferred_height = meta_preview_get_preferred_height;
|
||||
widget_class->size_allocate = meta_preview_size_allocate;
|
||||
|
||||
gtk_container_class_handle_border_width (GTK_CONTAINER_CLASS (class));
|
||||
}
|
||||
|
||||
static void
|
||||
meta_preview_init (MetaPreview *preview)
|
||||
{
|
||||
int i;
|
||||
|
||||
gtk_widget_set_has_window (GTK_WIDGET (preview), FALSE);
|
||||
|
||||
i = 0;
|
||||
while (i < MAX_BUTTONS_PER_CORNER)
|
||||
{
|
||||
preview->button_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
preview->button_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
++i;
|
||||
}
|
||||
|
||||
preview->button_layout.left_buttons[0] = META_BUTTON_FUNCTION_MENU;
|
||||
|
||||
preview->button_layout.right_buttons[0] = META_BUTTON_FUNCTION_MINIMIZE;
|
||||
preview->button_layout.right_buttons[1] = META_BUTTON_FUNCTION_MAXIMIZE;
|
||||
preview->button_layout.right_buttons[2] = META_BUTTON_FUNCTION_CLOSE;
|
||||
|
||||
preview->type = META_FRAME_TYPE_NORMAL;
|
||||
preview->flags =
|
||||
META_FRAME_ALLOWS_DELETE |
|
||||
META_FRAME_ALLOWS_MENU |
|
||||
META_FRAME_ALLOWS_MINIMIZE |
|
||||
META_FRAME_ALLOWS_MAXIMIZE |
|
||||
META_FRAME_ALLOWS_VERTICAL_RESIZE |
|
||||
META_FRAME_ALLOWS_HORIZONTAL_RESIZE |
|
||||
META_FRAME_HAS_FOCUS |
|
||||
META_FRAME_ALLOWS_SHADE |
|
||||
META_FRAME_ALLOWS_MOVE;
|
||||
|
||||
preview->borders_cached = FALSE;
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
meta_preview_new (void)
|
||||
{
|
||||
MetaPreview *preview;
|
||||
|
||||
preview = g_object_new (META_TYPE_PREVIEW, NULL);
|
||||
|
||||
return GTK_WIDGET (preview);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_preview_finalize (GObject *object)
|
||||
{
|
||||
MetaPreview *preview;
|
||||
|
||||
preview = META_PREVIEW (object);
|
||||
|
||||
g_free (preview->title);
|
||||
preview->title = NULL;
|
||||
|
||||
G_OBJECT_CLASS (meta_preview_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
ensure_info (MetaPreview *preview)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = GTK_WIDGET (preview);
|
||||
|
||||
if (preview->layout == NULL)
|
||||
{
|
||||
PangoFontDescription *font_desc;
|
||||
double scale;
|
||||
PangoAttrList *attrs;
|
||||
PangoAttribute *attr;
|
||||
|
||||
if (preview->theme)
|
||||
scale = meta_theme_get_title_scale (preview->theme,
|
||||
preview->type,
|
||||
preview->flags);
|
||||
else
|
||||
scale = 1.0;
|
||||
|
||||
preview->layout = gtk_widget_create_pango_layout (widget,
|
||||
preview->title);
|
||||
|
||||
font_desc = meta_gtk_widget_get_font_desc (widget, scale, NULL);
|
||||
|
||||
preview->text_height =
|
||||
meta_pango_font_desc_get_text_height (font_desc,
|
||||
gtk_widget_get_pango_context (widget));
|
||||
|
||||
attrs = pango_attr_list_new ();
|
||||
|
||||
attr = pango_attr_size_new (pango_font_description_get_size (font_desc));
|
||||
attr->start_index = 0;
|
||||
attr->end_index = G_MAXINT;
|
||||
|
||||
pango_attr_list_insert (attrs, attr);
|
||||
|
||||
pango_layout_set_attributes (preview->layout, attrs);
|
||||
|
||||
pango_attr_list_unref (attrs);
|
||||
|
||||
pango_font_description_free (font_desc);
|
||||
}
|
||||
|
||||
if (!preview->borders_cached)
|
||||
{
|
||||
if (preview->theme)
|
||||
meta_theme_get_frame_borders (preview->theme,
|
||||
preview->type,
|
||||
preview->text_height,
|
||||
preview->flags,
|
||||
&preview->borders);
|
||||
else
|
||||
meta_frame_borders_clear (&preview->borders);
|
||||
preview->borders_cached = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_preview_draw (GtkWidget *widget,
|
||||
cairo_t *cr)
|
||||
{
|
||||
MetaPreview *preview = META_PREVIEW (widget);
|
||||
GtkAllocation allocation;
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
if (preview->theme)
|
||||
{
|
||||
int client_width;
|
||||
int client_height;
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST] =
|
||||
{
|
||||
META_BUTTON_STATE_NORMAL,
|
||||
META_BUTTON_STATE_NORMAL,
|
||||
META_BUTTON_STATE_NORMAL,
|
||||
META_BUTTON_STATE_NORMAL
|
||||
};
|
||||
|
||||
ensure_info (preview);
|
||||
cairo_save (cr);
|
||||
|
||||
client_width = allocation.width - preview->borders.total.left - preview->borders.total.right;
|
||||
client_height = allocation.height - preview->borders.total.top - preview->borders.total.bottom;
|
||||
|
||||
if (client_width < 0)
|
||||
client_width = 1;
|
||||
if (client_height < 0)
|
||||
client_height = 1;
|
||||
|
||||
meta_theme_draw_frame (preview->theme,
|
||||
widget,
|
||||
cr,
|
||||
preview->type,
|
||||
preview->flags,
|
||||
client_width, client_height,
|
||||
preview->layout,
|
||||
preview->text_height,
|
||||
&preview->button_layout,
|
||||
button_states,
|
||||
meta_preview_get_mini_icon (),
|
||||
meta_preview_get_icon ());
|
||||
|
||||
cairo_restore (cr);
|
||||
}
|
||||
|
||||
/* draw child */
|
||||
return GTK_WIDGET_CLASS (meta_preview_parent_class)->draw (widget, cr);
|
||||
}
|
||||
|
||||
#define NO_CHILD_WIDTH 80
|
||||
#define NO_CHILD_HEIGHT 20
|
||||
|
||||
static void
|
||||
meta_preview_get_preferred_width (GtkWidget *widget,
|
||||
gint *minimum,
|
||||
gint *natural)
|
||||
{
|
||||
MetaPreview *preview;
|
||||
GtkWidget *child;
|
||||
|
||||
preview = META_PREVIEW (widget);
|
||||
|
||||
ensure_info (preview);
|
||||
|
||||
*minimum = *natural = preview->borders.total.left + preview->borders.total.right;
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (preview));
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
{
|
||||
gint child_min, child_nat;
|
||||
|
||||
gtk_widget_get_preferred_width (child, &child_min, &child_nat);
|
||||
|
||||
*minimum += child_min;
|
||||
*natural += child_nat;
|
||||
}
|
||||
else
|
||||
{
|
||||
*minimum += NO_CHILD_WIDTH;
|
||||
*natural += NO_CHILD_WIDTH;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_preview_get_preferred_height (GtkWidget *widget,
|
||||
gint *minimum,
|
||||
gint *natural)
|
||||
{
|
||||
MetaPreview *preview;
|
||||
GtkWidget *child;
|
||||
|
||||
preview = META_PREVIEW (widget);
|
||||
|
||||
ensure_info (preview);
|
||||
|
||||
*minimum = *natural = preview->borders.total.top + preview->borders.total.bottom;
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (preview));
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
{
|
||||
gint child_min, child_nat;
|
||||
|
||||
gtk_widget_get_preferred_height (child, &child_min, &child_nat);
|
||||
|
||||
*minimum += child_min;
|
||||
*natural += child_nat;
|
||||
}
|
||||
else
|
||||
{
|
||||
*minimum += NO_CHILD_HEIGHT;
|
||||
*natural += NO_CHILD_HEIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_preview_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation)
|
||||
{
|
||||
MetaPreview *preview;
|
||||
GtkAllocation widget_allocation, child_allocation;
|
||||
GtkWidget *child;
|
||||
|
||||
preview = META_PREVIEW (widget);
|
||||
|
||||
ensure_info (preview);
|
||||
|
||||
gtk_widget_set_allocation (widget, allocation);
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (widget));
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
{
|
||||
gtk_widget_get_allocation (widget, &widget_allocation);
|
||||
child_allocation.x = widget_allocation.x + preview->borders.total.left;
|
||||
child_allocation.y = widget_allocation.y + preview->borders.total.top;
|
||||
|
||||
child_allocation.width = MAX (1, widget_allocation.width - preview->borders.total.left - preview->borders.total.right);
|
||||
child_allocation.height = MAX (1, widget_allocation.height - preview->borders.total.top - preview->borders.total.bottom);
|
||||
|
||||
gtk_widget_size_allocate (child, &child_allocation);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
clear_cache (MetaPreview *preview)
|
||||
{
|
||||
if (preview->layout)
|
||||
{
|
||||
g_object_unref (G_OBJECT (preview->layout));
|
||||
preview->layout = NULL;
|
||||
}
|
||||
|
||||
preview->borders_cached = FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
meta_preview_set_theme (MetaPreview *preview,
|
||||
MetaTheme *theme)
|
||||
{
|
||||
g_return_if_fail (META_IS_PREVIEW (preview));
|
||||
|
||||
preview->theme = theme;
|
||||
|
||||
clear_cache (preview);
|
||||
|
||||
gtk_widget_queue_resize (GTK_WIDGET (preview));
|
||||
}
|
||||
|
||||
void
|
||||
meta_preview_set_title (MetaPreview *preview,
|
||||
const char *title)
|
||||
{
|
||||
g_return_if_fail (META_IS_PREVIEW (preview));
|
||||
|
||||
g_free (preview->title);
|
||||
preview->title = g_strdup (title);
|
||||
|
||||
clear_cache (preview);
|
||||
|
||||
gtk_widget_queue_resize (GTK_WIDGET (preview));
|
||||
}
|
||||
|
||||
void
|
||||
meta_preview_set_frame_type (MetaPreview *preview,
|
||||
MetaFrameType type)
|
||||
{
|
||||
g_return_if_fail (META_IS_PREVIEW (preview));
|
||||
|
||||
preview->type = type;
|
||||
|
||||
clear_cache (preview);
|
||||
|
||||
gtk_widget_queue_resize (GTK_WIDGET (preview));
|
||||
}
|
||||
|
||||
void
|
||||
meta_preview_set_frame_flags (MetaPreview *preview,
|
||||
MetaFrameFlags flags)
|
||||
{
|
||||
g_return_if_fail (META_IS_PREVIEW (preview));
|
||||
|
||||
preview->flags = flags;
|
||||
|
||||
clear_cache (preview);
|
||||
|
||||
gtk_widget_queue_resize (GTK_WIDGET (preview));
|
||||
}
|
||||
|
||||
void
|
||||
meta_preview_set_button_layout (MetaPreview *preview,
|
||||
const MetaButtonLayout *button_layout)
|
||||
{
|
||||
g_return_if_fail (META_IS_PREVIEW (preview));
|
||||
|
||||
preview->button_layout = *button_layout;
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (preview));
|
||||
}
|
||||
|
||||
GdkPixbuf*
|
||||
meta_preview_get_icon (void)
|
||||
{
|
||||
static GdkPixbuf *default_icon = NULL;
|
||||
|
||||
if (default_icon == NULL)
|
||||
{
|
||||
GtkIconTheme *theme;
|
||||
gboolean icon_exists;
|
||||
|
||||
theme = gtk_icon_theme_get_default ();
|
||||
|
||||
icon_exists = gtk_icon_theme_has_icon (theme, META_DEFAULT_ICON_NAME);
|
||||
|
||||
if (icon_exists)
|
||||
default_icon = gtk_icon_theme_load_icon (theme,
|
||||
META_DEFAULT_ICON_NAME,
|
||||
META_ICON_WIDTH,
|
||||
0,
|
||||
NULL);
|
||||
else
|
||||
default_icon = gtk_icon_theme_load_icon (theme,
|
||||
"gtk-missing-image",
|
||||
META_ICON_WIDTH,
|
||||
0,
|
||||
NULL);
|
||||
|
||||
g_assert (default_icon);
|
||||
}
|
||||
|
||||
return default_icon;
|
||||
}
|
||||
|
||||
GdkPixbuf*
|
||||
meta_preview_get_mini_icon (void)
|
||||
{
|
||||
static GdkPixbuf *default_icon = NULL;
|
||||
|
||||
if (default_icon == NULL)
|
||||
{
|
||||
GtkIconTheme *theme;
|
||||
gboolean icon_exists;
|
||||
|
||||
theme = gtk_icon_theme_get_default ();
|
||||
|
||||
icon_exists = gtk_icon_theme_has_icon (theme, META_DEFAULT_ICON_NAME);
|
||||
|
||||
if (icon_exists)
|
||||
default_icon = gtk_icon_theme_load_icon (theme,
|
||||
META_DEFAULT_ICON_NAME,
|
||||
META_MINI_ICON_WIDTH,
|
||||
0,
|
||||
NULL);
|
||||
else
|
||||
default_icon = gtk_icon_theme_load_icon (theme,
|
||||
"gtk-missing-image",
|
||||
META_MINI_ICON_WIDTH,
|
||||
0,
|
||||
NULL);
|
||||
|
||||
g_assert (default_icon);
|
||||
}
|
||||
|
||||
return default_icon;
|
||||
}
|
||||
@@ -1,317 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Mutter gradient test program */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2002 Havoc Pennington
|
||||
*
|
||||
* 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 <meta/gradient.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
typedef void (* RenderGradientFunc) (cairo_t *cr,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
static void
|
||||
draw_checkerboard (cairo_t *cr,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
gint i, j, xcount, ycount;
|
||||
GdkRGBA color1, color2;
|
||||
|
||||
#define CHECK_SIZE 10
|
||||
#define SPACING 2
|
||||
|
||||
color1.red = 30000. / 65535.;
|
||||
color1.green = 30000. / 65535.;
|
||||
color1.blue = 30000. / 65535.;
|
||||
color1.alpha = 1.0;
|
||||
|
||||
color2.red = 50000. / 65535.;
|
||||
color2.green = 50000. / 65535.;
|
||||
color2.blue = 50000. / 65535.;
|
||||
color2.alpha = 1.0;
|
||||
|
||||
xcount = 0;
|
||||
i = SPACING;
|
||||
while (i < width)
|
||||
{
|
||||
j = SPACING;
|
||||
ycount = xcount % 2; /* start with even/odd depending on row */
|
||||
while (j < height)
|
||||
{
|
||||
if (ycount % 2)
|
||||
gdk_cairo_set_source_rgba (cr, &color1);
|
||||
else
|
||||
gdk_cairo_set_source_rgba (cr, &color2);
|
||||
|
||||
/* If we're outside event->area, this will do nothing.
|
||||
* It might be mildly more efficient if we handled
|
||||
* the clipping ourselves, but again we're feeling lazy.
|
||||
*/
|
||||
cairo_rectangle (cr, i, j, CHECK_SIZE, CHECK_SIZE);
|
||||
cairo_fill (cr);
|
||||
|
||||
j += CHECK_SIZE + SPACING;
|
||||
++ycount;
|
||||
}
|
||||
|
||||
i += CHECK_SIZE + SPACING;
|
||||
++xcount;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
render_simple (cairo_t *cr,
|
||||
int width, int height,
|
||||
MetaGradientType type,
|
||||
gboolean with_alpha)
|
||||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
GdkRGBA from, to;
|
||||
|
||||
gdk_rgba_parse (&from, "blue");
|
||||
gdk_rgba_parse (&to, "green");
|
||||
|
||||
pixbuf = meta_gradient_create_simple (width, height,
|
||||
&from, &to,
|
||||
type);
|
||||
|
||||
if (with_alpha)
|
||||
{
|
||||
const unsigned char alphas[] = { 0xff, 0xaa, 0x2f, 0x0, 0xcc, 0xff, 0xff };
|
||||
|
||||
if (!gdk_pixbuf_get_has_alpha (pixbuf))
|
||||
{
|
||||
GdkPixbuf *new_pixbuf;
|
||||
|
||||
new_pixbuf = gdk_pixbuf_add_alpha (pixbuf, FALSE, 0, 0, 0);
|
||||
g_object_unref (G_OBJECT (pixbuf));
|
||||
pixbuf = new_pixbuf;
|
||||
}
|
||||
|
||||
meta_gradient_add_alpha (pixbuf,
|
||||
alphas, G_N_ELEMENTS (alphas),
|
||||
META_GRADIENT_HORIZONTAL);
|
||||
|
||||
draw_checkerboard (cr , width, height);
|
||||
}
|
||||
|
||||
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
|
||||
cairo_rectangle (cr, 0, 0, width, height);
|
||||
cairo_fill (cr);
|
||||
|
||||
g_object_unref (G_OBJECT (pixbuf));
|
||||
}
|
||||
|
||||
static void
|
||||
render_vertical_func (cairo_t *cr,
|
||||
int width, int height)
|
||||
{
|
||||
render_simple (cr, width, height, META_GRADIENT_VERTICAL, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
render_horizontal_func (cairo_t *cr,
|
||||
int width, int height)
|
||||
{
|
||||
render_simple (cr, width, height, META_GRADIENT_HORIZONTAL, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
render_diagonal_func (cairo_t *cr,
|
||||
int width, int height)
|
||||
{
|
||||
render_simple (cr, width, height, META_GRADIENT_DIAGONAL, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
render_diagonal_alpha_func (cairo_t *cr,
|
||||
int width, int height)
|
||||
{
|
||||
render_simple (cr, width, height, META_GRADIENT_DIAGONAL, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
render_multi (cairo_t *cr,
|
||||
int width, int height,
|
||||
MetaGradientType type)
|
||||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
#define N_COLORS 5
|
||||
GdkRGBA colors[N_COLORS];
|
||||
|
||||
gdk_rgba_parse (&colors[0], "red");
|
||||
gdk_rgba_parse (&colors[1], "blue");
|
||||
gdk_rgba_parse (&colors[2], "orange");
|
||||
gdk_rgba_parse (&colors[3], "pink");
|
||||
gdk_rgba_parse (&colors[4], "green");
|
||||
|
||||
pixbuf = meta_gradient_create_multi (width, height,
|
||||
colors, N_COLORS,
|
||||
type);
|
||||
|
||||
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
|
||||
cairo_rectangle (cr, 0, 0, width, height);
|
||||
cairo_fill (cr);
|
||||
|
||||
g_object_unref (G_OBJECT (pixbuf));
|
||||
#undef N_COLORS
|
||||
}
|
||||
|
||||
static void
|
||||
render_vertical_multi_func (cairo_t *cr,
|
||||
int width, int height)
|
||||
{
|
||||
render_multi (cr, width, height, META_GRADIENT_VERTICAL);
|
||||
}
|
||||
|
||||
static void
|
||||
render_horizontal_multi_func (cairo_t *cr,
|
||||
int width, int height)
|
||||
{
|
||||
render_multi (cr, width, height, META_GRADIENT_HORIZONTAL);
|
||||
}
|
||||
|
||||
static void
|
||||
render_diagonal_multi_func (cairo_t *cr,
|
||||
int width, int height)
|
||||
{
|
||||
render_multi (cr, width, height, META_GRADIENT_DIAGONAL);
|
||||
}
|
||||
|
||||
static void
|
||||
render_interwoven_func (cairo_t *cr,
|
||||
int width, int height)
|
||||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
#define N_COLORS 4
|
||||
GdkRGBA colors[N_COLORS];
|
||||
|
||||
gdk_rgba_parse (&colors[0], "red");
|
||||
gdk_rgba_parse (&colors[1], "blue");
|
||||
gdk_rgba_parse (&colors[2], "pink");
|
||||
gdk_rgba_parse (&colors[3], "green");
|
||||
|
||||
pixbuf = meta_gradient_create_interwoven (width, height,
|
||||
colors, height / 10,
|
||||
colors + 2, height / 14);
|
||||
|
||||
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
|
||||
cairo_rectangle (cr, 0, 0, width, height);
|
||||
cairo_fill (cr);
|
||||
|
||||
g_object_unref (G_OBJECT (pixbuf));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
draw_callback (GtkWidget *widget,
|
||||
cairo_t *cr,
|
||||
gpointer data)
|
||||
{
|
||||
RenderGradientFunc func = data;
|
||||
GtkStyleContext *style;
|
||||
GdkRGBA color;
|
||||
|
||||
style = gtk_widget_get_style_context (widget);
|
||||
|
||||
gtk_style_context_save (style);
|
||||
gtk_style_context_set_state (style, gtk_widget_get_state_flags (widget));
|
||||
gtk_style_context_lookup_color (style, "foreground-color", &color);
|
||||
gtk_style_context_restore (style);
|
||||
|
||||
gdk_cairo_set_source_rgba (cr, &color);
|
||||
|
||||
(* func) (cr,
|
||||
gtk_widget_get_allocated_width (widget),
|
||||
gtk_widget_get_allocated_height (widget));
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static GtkWidget*
|
||||
create_gradient_window (const char *title,
|
||||
RenderGradientFunc func)
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *drawing_area;
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (window), title);
|
||||
|
||||
drawing_area = gtk_drawing_area_new ();
|
||||
|
||||
gtk_widget_set_size_request (drawing_area, 1, 1);
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 175, 175);
|
||||
|
||||
g_signal_connect (G_OBJECT (drawing_area),
|
||||
"draw",
|
||||
G_CALLBACK (draw_callback),
|
||||
func);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (window), drawing_area);
|
||||
|
||||
gtk_widget_show_all (window);
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_gradient_test (void)
|
||||
{
|
||||
create_gradient_window ("Simple vertical",
|
||||
render_vertical_func);
|
||||
|
||||
create_gradient_window ("Simple horizontal",
|
||||
render_horizontal_func);
|
||||
|
||||
create_gradient_window ("Simple diagonal",
|
||||
render_diagonal_func);
|
||||
|
||||
create_gradient_window ("Multi vertical",
|
||||
render_vertical_multi_func);
|
||||
|
||||
create_gradient_window ("Multi horizontal",
|
||||
render_horizontal_multi_func);
|
||||
|
||||
create_gradient_window ("Multi diagonal",
|
||||
render_diagonal_multi_func);
|
||||
|
||||
create_gradient_window ("Interwoven",
|
||||
render_interwoven_func);
|
||||
|
||||
create_gradient_window ("Simple diagonal with horizontal multi alpha",
|
||||
render_diagonal_alpha_func);
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
meta_gradient_test ();
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
6963
src/ui/theme.c
6963
src/ui/theme.c
File diff suppressed because it is too large
Load Diff
303
src/ui/ui.c
303
src/ui/ui.c
@@ -25,11 +25,10 @@
|
||||
#include <config.h>
|
||||
#include <meta/prefs.h>
|
||||
#include "ui.h"
|
||||
#include "frames.h"
|
||||
#include "uiframe.h"
|
||||
#include <meta/util.h>
|
||||
#include "menu.h"
|
||||
#include "core.h"
|
||||
#include "theme-private.h"
|
||||
|
||||
#include "inlinepixbufs.h"
|
||||
|
||||
@@ -47,7 +46,7 @@ struct _MetaUI
|
||||
{
|
||||
Display *xdisplay;
|
||||
Screen *xscreen;
|
||||
MetaFrames *frames;
|
||||
GHashTable *frames;
|
||||
|
||||
/* For double-click tracking */
|
||||
guint button_click_number;
|
||||
@@ -82,7 +81,7 @@ meta_ui_get_display (void)
|
||||
return GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
}
|
||||
|
||||
/* We do some of our event handling in frames.c, which expects
|
||||
/* We do some of our event handling in uiframe.c, which expects
|
||||
* GDK events delivered by GTK+. However, since the transition to
|
||||
* client side windows, we can't let GDK see button events, since the
|
||||
* client-side tracking of implicit and explicit grabs it does will
|
||||
@@ -93,7 +92,7 @@ meta_ui_get_display (void)
|
||||
* through the normal GDK event handling.
|
||||
*
|
||||
* To reduce the amount of code, the only events fields filled out
|
||||
* below are the ones that frames.c uses. If frames.c is modified to
|
||||
* below are the ones that uiframe.c uses. If uiframe.c is modified to
|
||||
* use more fields, more fields need to be filled out below.
|
||||
*/
|
||||
|
||||
@@ -270,6 +269,60 @@ meta_ui_remove_event_func (Display *xdisplay,
|
||||
ef = NULL;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
queue_draw_func (gpointer key, gpointer value, gpointer data)
|
||||
{
|
||||
gtk_widget_queue_draw (GTK_WIDGET (value));
|
||||
}
|
||||
|
||||
static void
|
||||
button_layout_changed (MetaUI *ui)
|
||||
{
|
||||
g_hash_table_foreach (ui->frames, queue_draw_func, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
prefs_changed_callback (MetaPreference pref,
|
||||
void *data)
|
||||
{
|
||||
switch (pref)
|
||||
{
|
||||
case META_PREF_BUTTON_LAYOUT:
|
||||
button_layout_changed ((MetaUI *) data);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static gint
|
||||
unsigned_long_equal (gconstpointer v1,
|
||||
gconstpointer v2)
|
||||
{
|
||||
return *((const gulong*) v1) == *((const gulong*) v2);
|
||||
}
|
||||
|
||||
static guint
|
||||
unsigned_long_hash (gconstpointer v)
|
||||
{
|
||||
gulong val = * (const gulong *) v;
|
||||
|
||||
/* I'm not sure this works so well. */
|
||||
#if GLIB_SIZEOF_LONG > 4
|
||||
return (guint) (val ^ (val >> 32));
|
||||
#else
|
||||
return val;
|
||||
#endif
|
||||
}
|
||||
|
||||
static MetaUIFrame*
|
||||
meta_ui_lookup_window (MetaUI *ui,
|
||||
Window xwindow)
|
||||
{
|
||||
return g_hash_table_lookup (ui->frames, &xwindow);
|
||||
}
|
||||
|
||||
MetaUI*
|
||||
meta_ui_new (Display *xdisplay,
|
||||
Screen *screen)
|
||||
@@ -284,11 +337,9 @@ meta_ui_new (Display *xdisplay,
|
||||
gdisplay = gdk_x11_lookup_xdisplay (xdisplay);
|
||||
g_assert (gdisplay == gdk_display_get_default ());
|
||||
|
||||
ui->frames = meta_frames_new (XScreenNumberOfScreen (screen));
|
||||
/* This does not actually show any widget. MetaFrames has been hacked so
|
||||
* that showing it doesn't actually do anything. But we need the flags
|
||||
* set for GTK to deliver events properly. */
|
||||
gtk_widget_show (GTK_WIDGET (ui->frames));
|
||||
ui->frames = g_hash_table_new_full (unsigned_long_hash, unsigned_long_equal,
|
||||
NULL, (GDestroyNotify) gtk_widget_destroy);
|
||||
meta_prefs_add_listener (prefs_changed_callback, ui);
|
||||
|
||||
g_object_set_data (G_OBJECT (gdisplay), "meta-ui", ui);
|
||||
|
||||
@@ -300,7 +351,9 @@ meta_ui_free (MetaUI *ui)
|
||||
{
|
||||
GdkDisplay *gdisplay;
|
||||
|
||||
gtk_widget_destroy (GTK_WIDGET (ui->frames));
|
||||
g_assert (g_hash_table_size (ui->frames) == 0);
|
||||
meta_prefs_remove_listener (prefs_changed_callback, ui);
|
||||
g_hash_table_unref (ui->frames);
|
||||
|
||||
gdisplay = gdk_x11_lookup_xdisplay (ui->xdisplay);
|
||||
g_object_set_data (G_OBJECT (gdisplay), "meta-ui", NULL);
|
||||
@@ -310,24 +363,24 @@ meta_ui_free (MetaUI *ui)
|
||||
|
||||
void
|
||||
meta_ui_get_frame_borders (MetaUI *ui,
|
||||
Window frame_xwindow,
|
||||
Window xwindow,
|
||||
MetaFrameBorders *borders)
|
||||
{
|
||||
meta_frames_get_borders (ui->frames, frame_xwindow,
|
||||
borders);
|
||||
MetaUIFrame *frame = meta_ui_lookup_window (ui, xwindow);
|
||||
|
||||
if (frame == NULL)
|
||||
meta_bug ("No such frame 0x%lx\n", xwindow);
|
||||
|
||||
meta_uiframe_get_frame_borders (frame, borders);
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_get_corner_radiuses (MetaUI *ui,
|
||||
Window xwindow,
|
||||
float *top_left,
|
||||
float *top_right,
|
||||
float *bottom_left,
|
||||
float *bottom_right)
|
||||
meta_ui_render_background (MetaUI *ui,
|
||||
Window xwindow,
|
||||
cairo_t *cr)
|
||||
{
|
||||
meta_frames_get_corner_radiuses (ui->frames, xwindow,
|
||||
top_left, top_right,
|
||||
bottom_left, bottom_right);
|
||||
MetaUIFrame *frame = meta_ui_lookup_window (ui, xwindow);
|
||||
meta_uiframe_paint (frame, cr);
|
||||
}
|
||||
|
||||
Window
|
||||
@@ -347,6 +400,7 @@ meta_ui_create_frame_window (MetaUI *ui,
|
||||
gint attributes_mask;
|
||||
GdkWindow *window;
|
||||
GdkVisual *visual;
|
||||
MetaUIFrame *frame;
|
||||
|
||||
/* Default depth/visual handles clients with weird visuals; they can
|
||||
* always be children of the root depth/visual obviously, but
|
||||
@@ -396,28 +450,84 @@ meta_ui_create_frame_window (MetaUI *ui,
|
||||
&attrs, attributes_mask);
|
||||
|
||||
gdk_window_resize (window, width, height);
|
||||
|
||||
meta_frames_manage_window (ui->frames, GDK_WINDOW_XID (window), window);
|
||||
|
||||
return GDK_WINDOW_XID (window);
|
||||
frame = g_object_new (META_TYPE_UIFRAME,
|
||||
"type", GTK_WINDOW_POPUP,
|
||||
"app-paintable", TRUE,
|
||||
NULL);
|
||||
|
||||
/* This fakes out the widget so it won't actually
|
||||
* get realized as a server-side window. */
|
||||
|
||||
/* XXX: the gtk_widget_set_parent_window call unsets is_toplevel,
|
||||
* leading to the widget not being realized, which triggers all sorts
|
||||
* of assertions. Company suggested the below hack until we have
|
||||
* something better. */
|
||||
|
||||
/* gtk_widget_set_parent_window (GTK_WIDGET (frame), window); */
|
||||
g_object_set_data (G_OBJECT (frame), "gtk-parent-window", g_object_ref (window));
|
||||
|
||||
gdk_window_set_user_data (window, frame);
|
||||
|
||||
/* Don't set event mask here, it's in frame.c */
|
||||
frame->window = g_object_ref (window);
|
||||
frame->xwindow = GDK_WINDOW_XID (window);
|
||||
frame->prelit_control = META_FRAME_CONTROL_NONE;
|
||||
|
||||
/* Don't set the window background yet; we need frame->xwindow to be
|
||||
* registered with its MetaWindow, which happens after this function
|
||||
* and meta_ui_create_frame_window() return to meta_window_ensure_frame().
|
||||
*/
|
||||
meta_core_grab_buttons (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow);
|
||||
|
||||
g_hash_table_replace (ui->frames, &frame->xwindow, frame);
|
||||
|
||||
return frame->xwindow;
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_realize_frame_window (MetaUI *ui,
|
||||
Window xwindow)
|
||||
{
|
||||
MetaUIFrame *frame = meta_ui_lookup_window (ui, xwindow);
|
||||
gtk_widget_show (GTK_WIDGET (frame));
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_destroy_frame_window (MetaUI *ui,
|
||||
Window xwindow)
|
||||
{
|
||||
meta_frames_unmanage_window (ui->frames, xwindow);
|
||||
MetaUIFrame *frame;
|
||||
|
||||
frame = g_hash_table_lookup (ui->frames, &xwindow);
|
||||
|
||||
if (frame)
|
||||
{
|
||||
/* restore the cursor */
|
||||
meta_core_set_screen_cursor (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||
frame->xwindow,
|
||||
META_CURSOR_DEFAULT);
|
||||
|
||||
gdk_window_set_user_data (frame->window, NULL);
|
||||
|
||||
g_hash_table_remove (ui->frames, &frame->xwindow);
|
||||
}
|
||||
else
|
||||
meta_warning ("Frame 0x%lx not managed, can't unmanage\n", xwindow);
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_move_resize_frame (MetaUI *ui,
|
||||
Window frame,
|
||||
Window xwindow,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
meta_frames_move_resize_frame (ui->frames, frame, x, y, width, height);
|
||||
MetaUIFrame *frame = meta_ui_lookup_window (ui, xwindow);
|
||||
|
||||
gdk_window_move_resize (frame->window, x, y, width, height);
|
||||
gtk_widget_set_size_request (GTK_WIDGET (frame), width, height);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -448,52 +558,15 @@ meta_ui_unmap_frame (MetaUI *ui,
|
||||
gdk_window_hide (window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_unflicker_frame_bg (MetaUI *ui,
|
||||
Window xwindow,
|
||||
int target_width,
|
||||
int target_height)
|
||||
{
|
||||
meta_frames_unflicker_bg (ui->frames, xwindow,
|
||||
target_width, target_height);
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_update_frame_style (MetaUI *ui,
|
||||
Window xwindow)
|
||||
{
|
||||
meta_frames_update_frame_style (ui->frames, xwindow);
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_repaint_frame (MetaUI *ui,
|
||||
Window xwindow)
|
||||
{
|
||||
meta_frames_repaint_frame (ui->frames, xwindow);
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_reset_frame_bg (MetaUI *ui,
|
||||
Window xwindow)
|
||||
{
|
||||
meta_frames_reset_bg (ui->frames, xwindow);
|
||||
}
|
||||
|
||||
cairo_region_t *
|
||||
meta_ui_get_frame_bounds (MetaUI *ui,
|
||||
Window xwindow,
|
||||
int window_width,
|
||||
int window_height)
|
||||
{
|
||||
return meta_frames_get_frame_bounds (ui->frames, xwindow,
|
||||
window_width, window_height);
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_queue_frame_draw (MetaUI *ui,
|
||||
Window xwindow)
|
||||
{
|
||||
meta_frames_queue_draw (ui->frames, xwindow);
|
||||
MetaUIFrame *frame = meta_ui_lookup_window (ui, xwindow);
|
||||
GtkWidget *widget = GTK_WIDGET (frame);
|
||||
/* Force a style update. */
|
||||
gtk_style_context_invalidate (gtk_widget_get_style_context (widget));
|
||||
gtk_widget_queue_draw (widget);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -501,11 +574,14 @@ meta_ui_set_frame_title (MetaUI *ui,
|
||||
Window xwindow,
|
||||
const char *title)
|
||||
{
|
||||
meta_frames_set_title (ui->frames, xwindow, title);
|
||||
MetaUIFrame *frame = meta_ui_lookup_window (ui, xwindow);
|
||||
meta_uiframe_set_title (frame, title);
|
||||
}
|
||||
|
||||
MetaWindowMenu*
|
||||
meta_ui_window_menu_new (MetaUI *ui,
|
||||
Display *display,
|
||||
gint screen_no,
|
||||
Window client_xwindow,
|
||||
MetaMenuOp ops,
|
||||
MetaMenuOp insensitive,
|
||||
@@ -514,7 +590,7 @@ meta_ui_window_menu_new (MetaUI *ui,
|
||||
MetaWindowMenuFunc func,
|
||||
gpointer data)
|
||||
{
|
||||
return meta_window_menu_new (ui->frames,
|
||||
return meta_window_menu_new (ui, display, screen_no,
|
||||
ops, insensitive,
|
||||
client_xwindow,
|
||||
active_workspace,
|
||||
@@ -709,57 +785,6 @@ meta_text_property_to_utf8 (Display *xdisplay,
|
||||
return retval;
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_theme_get_frame_borders (MetaUI *ui,
|
||||
MetaFrameType type,
|
||||
MetaFrameFlags flags,
|
||||
MetaFrameBorders *borders)
|
||||
{
|
||||
int text_height;
|
||||
GtkStyleContext *style = NULL;
|
||||
PangoContext *context;
|
||||
const PangoFontDescription *font_desc;
|
||||
|
||||
if (meta_ui_have_a_theme ())
|
||||
{
|
||||
context = gtk_widget_get_pango_context (GTK_WIDGET (ui->frames));
|
||||
font_desc = meta_prefs_get_titlebar_font ();
|
||||
|
||||
if (!font_desc)
|
||||
{
|
||||
style = gtk_style_context_new ();
|
||||
font_desc = gtk_style_context_get_font (style, 0);
|
||||
}
|
||||
|
||||
text_height = meta_pango_font_desc_get_text_height (font_desc, context);
|
||||
|
||||
meta_theme_get_frame_borders (meta_theme_get_current (),
|
||||
type, text_height, flags,
|
||||
borders);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_frame_borders_clear (borders);
|
||||
}
|
||||
|
||||
if (style != NULL)
|
||||
g_object_unref (style);
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_set_current_theme (const char *name,
|
||||
gboolean force_reload)
|
||||
{
|
||||
meta_theme_set_current (name, force_reload);
|
||||
meta_invalidate_default_icons ();
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_ui_have_a_theme (void)
|
||||
{
|
||||
return meta_theme_get_current () != NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_ui_accelerator_parse (const char *accel,
|
||||
guint *keysym,
|
||||
@@ -964,7 +989,7 @@ meta_ui_window_is_widget (MetaUI *ui,
|
||||
{
|
||||
void *user_data = NULL;
|
||||
gdk_window_get_user_data (window, &user_data);
|
||||
return user_data != NULL && user_data != ui->frames;
|
||||
return user_data != NULL && !META_IS_UIFRAME (user_data);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
@@ -1018,7 +1043,7 @@ meta_ui_get_drag_threshold (MetaUI *ui)
|
||||
GtkSettings *settings;
|
||||
int threshold;
|
||||
|
||||
settings = gtk_widget_get_settings (GTK_WIDGET (ui->frames));
|
||||
settings = gtk_settings_get_default ();
|
||||
|
||||
threshold = 8;
|
||||
g_object_get (G_OBJECT (settings), "gtk-dnd-drag-threshold", &threshold, NULL);
|
||||
@@ -1035,3 +1060,29 @@ meta_ui_get_direction (void)
|
||||
return META_UI_DIRECTION_LTR;
|
||||
}
|
||||
|
||||
void
|
||||
meta_ui_notify_menu_hide (MetaUI *ui)
|
||||
{
|
||||
Display *display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
if (meta_core_get_grab_op (display) ==
|
||||
META_GRAB_OP_CLICKING_MENU)
|
||||
{
|
||||
Window grab_frame;
|
||||
|
||||
grab_frame = meta_core_get_grab_frame (display);
|
||||
|
||||
if (grab_frame != None)
|
||||
{
|
||||
MetaUIFrame *frame;
|
||||
frame = meta_ui_lookup_window (ui, grab_frame);
|
||||
|
||||
if (frame)
|
||||
{
|
||||
/* XXX: will redo redraw_control with GTK+ widgets
|
||||
* soon enough */
|
||||
/* redraw_control (frame, META_FRAME_CONTROL_MENU); */
|
||||
meta_core_end_grab_op (display, CurrentTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
41
src/ui/ui.h
41
src/ui/ui.h
@@ -57,10 +57,6 @@ MetaUI* meta_ui_new (Display *xdisplay,
|
||||
Screen *screen);
|
||||
void meta_ui_free (MetaUI *ui);
|
||||
|
||||
void meta_ui_theme_get_frame_borders (MetaUI *ui,
|
||||
MetaFrameType type,
|
||||
MetaFrameFlags flags,
|
||||
MetaFrameBorders *borders);
|
||||
void meta_ui_get_frame_borders (MetaUI *ui,
|
||||
Window frame_xwindow,
|
||||
MetaFrameBorders *borders);
|
||||
@@ -73,6 +69,8 @@ Window meta_ui_create_frame_window (MetaUI *ui,
|
||||
gint height,
|
||||
gint screen_no,
|
||||
gulong *create_serial);
|
||||
void meta_ui_realize_frame_window (MetaUI *ui,
|
||||
Window xwindow);
|
||||
void meta_ui_destroy_frame_window (MetaUI *ui,
|
||||
Window xwindow);
|
||||
void meta_ui_move_resize_frame (MetaUI *ui,
|
||||
@@ -88,24 +86,9 @@ void meta_ui_map_frame (MetaUI *ui,
|
||||
void meta_ui_unmap_frame (MetaUI *ui,
|
||||
Window xwindow);
|
||||
|
||||
void meta_ui_unflicker_frame_bg (MetaUI *ui,
|
||||
Window xwindow,
|
||||
int target_width,
|
||||
int target_height);
|
||||
void meta_ui_reset_frame_bg (MetaUI *ui,
|
||||
Window xwindow);
|
||||
|
||||
cairo_region_t *meta_ui_get_frame_bounds (MetaUI *ui,
|
||||
Window xwindow,
|
||||
int window_width,
|
||||
int window_height);
|
||||
|
||||
void meta_ui_get_corner_radiuses (MetaUI *ui,
|
||||
Window xwindow,
|
||||
float *top_left,
|
||||
float *top_right,
|
||||
float *bottom_left,
|
||||
float *bottom_right);
|
||||
void meta_ui_render_background (MetaUI *ui,
|
||||
Window xwindow,
|
||||
cairo_t *cr);
|
||||
|
||||
void meta_ui_queue_frame_draw (MetaUI *ui,
|
||||
Window xwindow);
|
||||
@@ -114,13 +97,9 @@ void meta_ui_set_frame_title (MetaUI *ui,
|
||||
Window xwindow,
|
||||
const char *title);
|
||||
|
||||
void meta_ui_update_frame_style (MetaUI *ui,
|
||||
Window window);
|
||||
|
||||
void meta_ui_repaint_frame (MetaUI *ui,
|
||||
Window xwindow);
|
||||
|
||||
MetaWindowMenu* meta_ui_window_menu_new (MetaUI *ui,
|
||||
Display *display,
|
||||
gint screen_no,
|
||||
Window client_xwindow,
|
||||
MetaMenuOp ops,
|
||||
MetaMenuOp insensitive,
|
||||
@@ -152,10 +131,6 @@ gboolean meta_ui_window_should_not_cause_focus (Display *xdisplay,
|
||||
char* meta_text_property_to_utf8 (Display *xdisplay,
|
||||
const XTextProperty *prop);
|
||||
|
||||
void meta_ui_set_current_theme (const char *name,
|
||||
gboolean force_reload);
|
||||
gboolean meta_ui_have_a_theme (void);
|
||||
|
||||
/* Not a real key symbol but means "key above the tab key"; this is
|
||||
* used as the default keybinding for cycle_group.
|
||||
* 0x2xxxxxxx is a range not used by GDK or X. the remaining digits are
|
||||
@@ -179,6 +154,8 @@ int meta_ui_get_drag_threshold (MetaUI *ui);
|
||||
|
||||
MetaUIDirection meta_ui_get_direction (void);
|
||||
|
||||
void meta_ui_notify_menu_hide (MetaUI *ui);
|
||||
|
||||
#include "tabpopup.h"
|
||||
#include "tile-preview.h"
|
||||
|
||||
|
||||
940
src/ui/uiframe.c
Normal file
940
src/ui/uiframe.c
Normal file
@@ -0,0 +1,940 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity window frame manager widget */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2003 Red Hat, Inc.
|
||||
* Copyright (C) 2005, 2006 Elijah Newren
|
||||
*
|
||||
* 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 <math.h>
|
||||
#include <string.h>
|
||||
#include <meta/boxes.h>
|
||||
#include "uiframe.h"
|
||||
#include <meta/util.h>
|
||||
#include "core.h"
|
||||
#include "menu.h"
|
||||
#include <meta/prefs.h>
|
||||
#include "ui.h"
|
||||
|
||||
#ifdef HAVE_SHAPE
|
||||
#include <X11/extensions/shape.h>
|
||||
#endif
|
||||
|
||||
static MetaFrameControl get_control (MetaUIFrame *frame,
|
||||
int x,
|
||||
int y);
|
||||
|
||||
G_DEFINE_TYPE (MetaUIFrame, meta_uiframe, GTK_TYPE_WINDOW);
|
||||
|
||||
|
||||
static void
|
||||
initialize_style_context (MetaUIFrame *frame)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
GtkCssProvider *provider;
|
||||
GdkScreen *screen;
|
||||
char *theme_name, *variant;
|
||||
|
||||
if (G_LIKELY (frame->style_context_initialized))
|
||||
return;
|
||||
|
||||
widget = GTK_WIDGET (frame);
|
||||
|
||||
screen = gtk_widget_get_screen (widget);
|
||||
g_object_get (gtk_settings_get_for_screen (screen),
|
||||
"gtk-theme-name", &theme_name,
|
||||
NULL);
|
||||
|
||||
meta_core_get (GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (frame))),
|
||||
frame->xwindow,
|
||||
META_CORE_GET_THEME_VARIANT, &variant,
|
||||
META_CORE_GET_END);
|
||||
|
||||
provider = gtk_css_provider_get_named (theme_name, variant);
|
||||
gtk_style_context_add_provider (gtk_widget_get_style_context (widget),
|
||||
GTK_STYLE_PROVIDER (provider),
|
||||
GTK_STYLE_PROVIDER_PRIORITY_THEME);
|
||||
|
||||
g_free (theme_name);
|
||||
|
||||
frame->style_context_initialized = TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
sync_state_flags (MetaUIFrame *frame)
|
||||
{
|
||||
MetaFrameFlags flags;
|
||||
GtkStateFlags gtk_flags;
|
||||
|
||||
initialize_style_context (frame);
|
||||
|
||||
meta_core_get (GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (frame))),
|
||||
frame->xwindow,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
META_CORE_GET_END);
|
||||
|
||||
gtk_flags = GTK_STATE_FLAG_NORMAL;
|
||||
|
||||
if ((flags & META_FRAME_HAS_FOCUS) == 0)
|
||||
gtk_flags |= GTK_STATE_FLAG_BACKDROP;
|
||||
|
||||
gtk_widget_set_state_flags (GTK_WIDGET (frame), gtk_flags, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
meta_uiframe_get_frame_borders (MetaUIFrame *frame,
|
||||
MetaFrameBorders *borders)
|
||||
{
|
||||
GtkWidget *widget = GTK_WIDGET (frame);
|
||||
GtkBorder padding;
|
||||
GtkStyleContext *style_context;
|
||||
MetaFrameType type;
|
||||
MetaFrameFlags flags;
|
||||
int draggable_borders;
|
||||
|
||||
meta_core_get (GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (frame))),
|
||||
frame->xwindow,
|
||||
META_CORE_GET_FRAME_TYPE, &type,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
META_CORE_GET_END);
|
||||
|
||||
/* For a full-screen window, we don't have any borders, visible or not. */
|
||||
if (flags & META_FRAME_FULLSCREEN)
|
||||
return;
|
||||
|
||||
sync_state_flags (frame);
|
||||
|
||||
meta_frame_borders_clear (borders);
|
||||
|
||||
style_context = gtk_widget_get_style_context (widget);
|
||||
|
||||
gtk_style_context_get_border (style_context,
|
||||
gtk_widget_get_state_flags (widget),
|
||||
&borders->visible);
|
||||
|
||||
gtk_style_context_get_padding (style_context,
|
||||
gtk_widget_get_state_flags (widget),
|
||||
&padding);
|
||||
|
||||
borders->visible.left += padding.left;
|
||||
borders->visible.right += padding.right;
|
||||
borders->visible.top += padding.top;
|
||||
borders->visible.bottom += padding.bottom;
|
||||
|
||||
draggable_borders = meta_prefs_get_draggable_border_width ();
|
||||
|
||||
if (flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE)
|
||||
{
|
||||
borders->invisible.left = MAX (0, draggable_borders - borders->visible.left);
|
||||
borders->invisible.right = MAX (0, draggable_borders - borders->visible.right);
|
||||
}
|
||||
|
||||
if (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE)
|
||||
{
|
||||
borders->invisible.bottom = MAX (0, draggable_borders - borders->visible.bottom);
|
||||
|
||||
/* borders.visible.top 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. */
|
||||
if (type != META_FRAME_TYPE_ATTACHED)
|
||||
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 void
|
||||
meta_uiframe_finalize (GObject *obj)
|
||||
{
|
||||
MetaUIFrame *frame = META_UIFRAME (obj);
|
||||
|
||||
if (frame->window)
|
||||
g_object_unref (frame->window);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_uiframe_init (MetaUIFrame *frame)
|
||||
{
|
||||
GtkWidget *container, *label;
|
||||
|
||||
frame->container = container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
frame->label = label = gtk_label_new ("");
|
||||
frame->style_context_initialized = FALSE;
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (frame), container);
|
||||
gtk_container_add (GTK_CONTAINER (container), frame->label);
|
||||
|
||||
gtk_widget_set_hexpand (container, TRUE);
|
||||
gtk_widget_set_hexpand (label, TRUE);
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_START);
|
||||
|
||||
gtk_widget_show_all (GTK_WIDGET (container));
|
||||
}
|
||||
|
||||
/* The client rectangle surrounds client window; it subtracts both
|
||||
* the visible and invisible borders from the frame window's size.
|
||||
*/
|
||||
static void
|
||||
get_client_rect (MetaFrameBorders *borders,
|
||||
int window_width,
|
||||
int window_height,
|
||||
cairo_rectangle_int_t *rect)
|
||||
{
|
||||
rect->x = borders->total.left;
|
||||
rect->y = borders->total.top;
|
||||
rect->width = window_width - borders->total.right - rect->x;
|
||||
rect->height = window_height - borders->total.bottom - rect->y;
|
||||
}
|
||||
|
||||
void
|
||||
meta_uiframe_set_title (MetaUIFrame *frame,
|
||||
const char *title)
|
||||
{
|
||||
gtk_label_set_text (GTK_LABEL (frame->label), title);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_frame_titlebar_event (MetaUIFrame *frame,
|
||||
GdkEventButton *event,
|
||||
int action)
|
||||
{
|
||||
MetaFrameFlags flags;
|
||||
Display *display;
|
||||
|
||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case G_DESKTOP_TITLEBAR_ACTION_TOGGLE_SHADE:
|
||||
{
|
||||
meta_core_get (display, frame->xwindow,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
META_CORE_GET_END);
|
||||
|
||||
if (flags & META_FRAME_ALLOWS_SHADE)
|
||||
{
|
||||
if (flags & META_FRAME_SHADED)
|
||||
meta_core_unshade (display,
|
||||
frame->xwindow,
|
||||
event->time);
|
||||
else
|
||||
meta_core_shade (display,
|
||||
frame->xwindow,
|
||||
event->time);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case G_DESKTOP_TITLEBAR_ACTION_TOGGLE_MAXIMIZE:
|
||||
{
|
||||
meta_core_get (display, frame->xwindow,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
META_CORE_GET_END);
|
||||
|
||||
if (flags & META_FRAME_ALLOWS_MAXIMIZE)
|
||||
{
|
||||
meta_core_toggle_maximize (display, frame->xwindow);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case G_DESKTOP_TITLEBAR_ACTION_TOGGLE_MAXIMIZE_HORIZONTALLY:
|
||||
{
|
||||
meta_core_get (display, frame->xwindow,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
META_CORE_GET_END);
|
||||
|
||||
if (flags & META_FRAME_ALLOWS_MAXIMIZE)
|
||||
{
|
||||
meta_core_toggle_maximize_horizontally (display, frame->xwindow);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case G_DESKTOP_TITLEBAR_ACTION_TOGGLE_MAXIMIZE_VERTICALLY:
|
||||
{
|
||||
meta_core_get (display, frame->xwindow,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
META_CORE_GET_END);
|
||||
|
||||
if (flags & META_FRAME_ALLOWS_MAXIMIZE)
|
||||
{
|
||||
meta_core_toggle_maximize_vertically (display, frame->xwindow);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case G_DESKTOP_TITLEBAR_ACTION_MINIMIZE:
|
||||
{
|
||||
meta_core_get (display, frame->xwindow,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
META_CORE_GET_END);
|
||||
|
||||
if (flags & META_FRAME_ALLOWS_MINIMIZE)
|
||||
{
|
||||
meta_core_minimize (display, frame->xwindow);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case G_DESKTOP_TITLEBAR_ACTION_NONE:
|
||||
/* Yaay, a sane user that doesn't use that other weird crap! */
|
||||
break;
|
||||
|
||||
case G_DESKTOP_TITLEBAR_ACTION_LOWER:
|
||||
meta_core_user_lower_and_unfocus (display,
|
||||
frame->xwindow,
|
||||
event->time);
|
||||
break;
|
||||
|
||||
case G_DESKTOP_TITLEBAR_ACTION_MENU:
|
||||
meta_core_show_window_menu (display,
|
||||
frame->xwindow,
|
||||
event->x_root,
|
||||
event->y_root,
|
||||
event->button,
|
||||
event->time);
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_frame_double_click_event (MetaUIFrame *frame,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
int action = meta_prefs_get_action_double_click_titlebar ();
|
||||
|
||||
return meta_frame_titlebar_event (frame, event, action);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_frame_middle_click_event (MetaUIFrame *frame,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
int action = meta_prefs_get_action_middle_click_titlebar();
|
||||
|
||||
return meta_frame_titlebar_event (frame, event, action);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_frame_right_click_event(MetaUIFrame *frame,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
int action = meta_prefs_get_action_right_click_titlebar();
|
||||
|
||||
return meta_frame_titlebar_event (frame, event, action);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_uiframe_button_press_event (GtkWidget *widget,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
MetaUIFrame *frame;
|
||||
MetaFrameControl control;
|
||||
Display *display;
|
||||
|
||||
frame = META_UIFRAME (widget);
|
||||
|
||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
|
||||
/* Remember that the display may have already done something with this event.
|
||||
* If so there's probably a GrabOp in effect.
|
||||
*/
|
||||
control = get_control (frame, event->x, event->y);
|
||||
|
||||
/* focus on click, even if click was on client area */
|
||||
if (event->button == 1 &&
|
||||
!(control == META_FRAME_CONTROL_MINIMIZE ||
|
||||
control == META_FRAME_CONTROL_DELETE ||
|
||||
control == META_FRAME_CONTROL_MAXIMIZE))
|
||||
{
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Focusing window with frame 0x%lx due to button 1 press\n",
|
||||
frame->xwindow);
|
||||
meta_core_user_focus (display,
|
||||
frame->xwindow,
|
||||
event->time);
|
||||
}
|
||||
|
||||
/* don't do the rest of this if on client area */
|
||||
if (control == META_FRAME_CONTROL_CLIENT_AREA)
|
||||
return FALSE; /* not on the frame, just passed through from client */
|
||||
|
||||
/* We want to shade even if we have a GrabOp, since we'll have a move grab
|
||||
* if we double click the titlebar.
|
||||
*/
|
||||
if (control == META_FRAME_CONTROL_TITLE &&
|
||||
event->button == 1 &&
|
||||
event->type == GDK_2BUTTON_PRESS)
|
||||
{
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
return meta_frame_double_click_event (frame, event);
|
||||
}
|
||||
|
||||
if (meta_core_get_grab_op (display) !=
|
||||
META_GRAB_OP_NONE)
|
||||
return FALSE; /* already up to something */
|
||||
|
||||
if (event->button == 1 &&
|
||||
(control == META_FRAME_CONTROL_MAXIMIZE ||
|
||||
control == META_FRAME_CONTROL_UNMAXIMIZE ||
|
||||
control == META_FRAME_CONTROL_MINIMIZE ||
|
||||
control == META_FRAME_CONTROL_DELETE ||
|
||||
control == META_FRAME_CONTROL_SHADE ||
|
||||
control == META_FRAME_CONTROL_UNSHADE ||
|
||||
control == META_FRAME_CONTROL_ABOVE ||
|
||||
control == META_FRAME_CONTROL_UNABOVE ||
|
||||
control == META_FRAME_CONTROL_STICK ||
|
||||
control == META_FRAME_CONTROL_UNSTICK ||
|
||||
control == META_FRAME_CONTROL_MENU))
|
||||
{
|
||||
MetaGrabOp op = META_GRAB_OP_NONE;
|
||||
|
||||
switch (control)
|
||||
{
|
||||
case META_FRAME_CONTROL_MINIMIZE:
|
||||
op = META_GRAB_OP_CLICKING_MINIMIZE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_MAXIMIZE:
|
||||
op = META_GRAB_OP_CLICKING_MAXIMIZE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_UNMAXIMIZE:
|
||||
op = META_GRAB_OP_CLICKING_UNMAXIMIZE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_DELETE:
|
||||
op = META_GRAB_OP_CLICKING_DELETE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_MENU:
|
||||
op = META_GRAB_OP_CLICKING_MENU;
|
||||
break;
|
||||
case META_FRAME_CONTROL_SHADE:
|
||||
op = META_GRAB_OP_CLICKING_SHADE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_UNSHADE:
|
||||
op = META_GRAB_OP_CLICKING_UNSHADE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_ABOVE:
|
||||
op = META_GRAB_OP_CLICKING_ABOVE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_UNABOVE:
|
||||
op = META_GRAB_OP_CLICKING_UNABOVE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_STICK:
|
||||
op = META_GRAB_OP_CLICKING_STICK;
|
||||
break;
|
||||
case META_FRAME_CONTROL_UNSTICK:
|
||||
op = META_GRAB_OP_CLICKING_UNSTICK;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
meta_core_begin_grab_op (display,
|
||||
frame->xwindow,
|
||||
op,
|
||||
TRUE,
|
||||
TRUE,
|
||||
event->button,
|
||||
0,
|
||||
event->time,
|
||||
event->x_root,
|
||||
event->y_root);
|
||||
}
|
||||
else if (event->button == 1 &&
|
||||
(control == META_FRAME_CONTROL_RESIZE_SE ||
|
||||
control == META_FRAME_CONTROL_RESIZE_S ||
|
||||
control == META_FRAME_CONTROL_RESIZE_SW ||
|
||||
control == META_FRAME_CONTROL_RESIZE_NE ||
|
||||
control == META_FRAME_CONTROL_RESIZE_N ||
|
||||
control == META_FRAME_CONTROL_RESIZE_NW ||
|
||||
control == META_FRAME_CONTROL_RESIZE_E ||
|
||||
control == META_FRAME_CONTROL_RESIZE_W))
|
||||
{
|
||||
MetaGrabOp op;
|
||||
|
||||
op = META_GRAB_OP_NONE;
|
||||
|
||||
switch (control)
|
||||
{
|
||||
case META_FRAME_CONTROL_RESIZE_SE:
|
||||
op = META_GRAB_OP_RESIZING_SE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_RESIZE_S:
|
||||
op = META_GRAB_OP_RESIZING_S;
|
||||
break;
|
||||
case META_FRAME_CONTROL_RESIZE_SW:
|
||||
op = META_GRAB_OP_RESIZING_SW;
|
||||
break;
|
||||
case META_FRAME_CONTROL_RESIZE_NE:
|
||||
op = META_GRAB_OP_RESIZING_NE;
|
||||
break;
|
||||
case META_FRAME_CONTROL_RESIZE_N:
|
||||
op = META_GRAB_OP_RESIZING_N;
|
||||
break;
|
||||
case META_FRAME_CONTROL_RESIZE_NW:
|
||||
op = META_GRAB_OP_RESIZING_NW;
|
||||
break;
|
||||
case META_FRAME_CONTROL_RESIZE_E:
|
||||
op = META_GRAB_OP_RESIZING_E;
|
||||
break;
|
||||
case META_FRAME_CONTROL_RESIZE_W:
|
||||
op = META_GRAB_OP_RESIZING_W;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
meta_core_begin_grab_op (display,
|
||||
frame->xwindow,
|
||||
op,
|
||||
TRUE,
|
||||
TRUE,
|
||||
event->button,
|
||||
0,
|
||||
event->time,
|
||||
event->x_root,
|
||||
event->y_root);
|
||||
}
|
||||
else if (control == META_FRAME_CONTROL_TITLE &&
|
||||
event->button == 1)
|
||||
{
|
||||
MetaFrameFlags flags;
|
||||
|
||||
meta_core_get (display, frame->xwindow,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
META_CORE_GET_END);
|
||||
|
||||
if (flags & META_FRAME_ALLOWS_MOVE)
|
||||
{
|
||||
meta_core_begin_grab_op (display,
|
||||
frame->xwindow,
|
||||
META_GRAB_OP_MOVING,
|
||||
TRUE,
|
||||
TRUE,
|
||||
event->button,
|
||||
0,
|
||||
event->time,
|
||||
event->x_root,
|
||||
event->y_root);
|
||||
}
|
||||
}
|
||||
else if (event->button == 2)
|
||||
{
|
||||
return meta_frame_middle_click_event (frame, event);
|
||||
}
|
||||
else if (event->button == 3)
|
||||
{
|
||||
return meta_frame_right_click_event (frame, event);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_uiframe_button_release_event (GtkWidget *widget,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
MetaUIFrame *frame;
|
||||
MetaGrabOp op;
|
||||
Display *display;
|
||||
|
||||
frame = META_UIFRAME (widget);
|
||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
|
||||
op = meta_core_get_grab_op (display);
|
||||
|
||||
if (op == META_GRAB_OP_NONE)
|
||||
return FALSE;
|
||||
|
||||
/* We only handle the releases we handled the presses for (things
|
||||
* involving frame controls). Window ops that don't require a
|
||||
* frame are handled in the Xlib part of the code, display.c/window.c
|
||||
*/
|
||||
if (frame->xwindow == meta_core_get_grab_frame (display) &&
|
||||
((int) event->button) == meta_core_get_grab_button (display))
|
||||
{
|
||||
MetaFrameControl control;
|
||||
|
||||
control = get_control (frame, event->x, event->y);
|
||||
|
||||
switch (op)
|
||||
{
|
||||
case META_GRAB_OP_CLICKING_MINIMIZE:
|
||||
if (control == META_FRAME_CONTROL_MINIMIZE)
|
||||
meta_core_minimize (display, frame->xwindow);
|
||||
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_MAXIMIZE:
|
||||
if (control == META_FRAME_CONTROL_MAXIMIZE)
|
||||
{
|
||||
/* Focus the window on the maximize */
|
||||
meta_core_user_focus (display,
|
||||
frame->xwindow,
|
||||
event->time);
|
||||
meta_core_maximize (display, frame->xwindow);
|
||||
}
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_UNMAXIMIZE:
|
||||
if (control == META_FRAME_CONTROL_UNMAXIMIZE)
|
||||
meta_core_unmaximize (display, frame->xwindow);
|
||||
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_DELETE:
|
||||
if (control == META_FRAME_CONTROL_DELETE)
|
||||
meta_core_delete (display, frame->xwindow, event->time);
|
||||
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_MENU:
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_SHADE:
|
||||
if (control == META_FRAME_CONTROL_SHADE)
|
||||
meta_core_shade (display, frame->xwindow, event->time);
|
||||
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_UNSHADE:
|
||||
if (control == META_FRAME_CONTROL_UNSHADE)
|
||||
meta_core_unshade (display, frame->xwindow, event->time);
|
||||
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_ABOVE:
|
||||
if (control == META_FRAME_CONTROL_ABOVE)
|
||||
meta_core_make_above (display, frame->xwindow);
|
||||
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_UNABOVE:
|
||||
if (control == META_FRAME_CONTROL_UNABOVE)
|
||||
meta_core_unmake_above (display, frame->xwindow);
|
||||
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_STICK:
|
||||
if (control == META_FRAME_CONTROL_STICK)
|
||||
meta_core_stick (display, frame->xwindow);
|
||||
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
case META_GRAB_OP_CLICKING_UNSTICK:
|
||||
if (control == META_FRAME_CONTROL_UNSTICK)
|
||||
meta_core_unstick (display, frame->xwindow);
|
||||
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
clip_to_screen (cairo_region_t *region,
|
||||
MetaUIFrame *frame)
|
||||
{
|
||||
cairo_rectangle_int_t frame_area;
|
||||
cairo_rectangle_int_t screen_area = { 0, 0, 0, 0 };
|
||||
cairo_region_t *tmp_region;
|
||||
|
||||
/* Chop off stuff outside the screen; this optimization
|
||||
* is crucial to handle huge client windows,
|
||||
* like "xterm -geometry 1000x1000"
|
||||
*/
|
||||
meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||
frame->xwindow,
|
||||
META_CORE_GET_FRAME_X, &frame_area.x,
|
||||
META_CORE_GET_FRAME_Y, &frame_area.y,
|
||||
META_CORE_GET_FRAME_WIDTH, &frame_area.width,
|
||||
META_CORE_GET_FRAME_HEIGHT, &frame_area.height,
|
||||
META_CORE_GET_SCREEN_WIDTH, &screen_area.width,
|
||||
META_CORE_GET_SCREEN_HEIGHT, &screen_area.height,
|
||||
META_CORE_GET_END);
|
||||
|
||||
cairo_region_translate (region, frame_area.x, frame_area.y);
|
||||
|
||||
tmp_region = cairo_region_create_rectangle (&frame_area);
|
||||
cairo_region_intersect (region, tmp_region);
|
||||
cairo_region_destroy (tmp_region);
|
||||
|
||||
tmp_region = cairo_region_create_rectangle (&screen_area);
|
||||
cairo_region_intersect (region, tmp_region);
|
||||
cairo_region_destroy (tmp_region);
|
||||
|
||||
cairo_region_translate (region, - frame_area.x, - frame_area.y);
|
||||
}
|
||||
|
||||
static void
|
||||
subtract_client_area (cairo_region_t *region,
|
||||
MetaUIFrame *frame)
|
||||
{
|
||||
cairo_rectangle_int_t area;
|
||||
MetaFrameBorders borders;
|
||||
cairo_region_t *tmp_region;
|
||||
Display *display;
|
||||
|
||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
|
||||
meta_core_get (display, frame->xwindow,
|
||||
META_CORE_GET_CLIENT_WIDTH, &area.width,
|
||||
META_CORE_GET_CLIENT_HEIGHT, &area.height,
|
||||
META_CORE_GET_END);
|
||||
|
||||
meta_uiframe_get_frame_borders (frame, &borders);
|
||||
|
||||
area.x = borders.total.left;
|
||||
area.y = borders.total.top;
|
||||
|
||||
tmp_region = cairo_region_create_rectangle (&area);
|
||||
cairo_region_subtract (region, tmp_region);
|
||||
cairo_region_destroy (tmp_region);
|
||||
}
|
||||
|
||||
void
|
||||
meta_uiframe_paint (MetaUIFrame *frame,
|
||||
cairo_t *cr)
|
||||
{
|
||||
GtkWidget *widget = GTK_WIDGET (frame);
|
||||
GtkStyleContext *style_gtk = gtk_widget_get_style_context (widget);
|
||||
GdkRectangle visible_rect;
|
||||
MetaFrameBorders borders;
|
||||
|
||||
meta_uiframe_get_frame_borders (frame, &borders);
|
||||
gtk_widget_get_allocation (widget, &visible_rect);
|
||||
|
||||
visible_rect.x += borders.invisible.left;
|
||||
visible_rect.y += borders.invisible.top;
|
||||
visible_rect.width -= borders.invisible.left + borders.invisible.right;
|
||||
visible_rect.height -= borders.invisible.top - borders.invisible.bottom;
|
||||
|
||||
sync_state_flags (frame);
|
||||
|
||||
gtk_render_background (style_gtk, cr,
|
||||
visible_rect.x,
|
||||
visible_rect.y,
|
||||
visible_rect.width,
|
||||
visible_rect.height);
|
||||
|
||||
gtk_render_frame (style_gtk, cr,
|
||||
visible_rect.x,
|
||||
visible_rect.y,
|
||||
visible_rect.width,
|
||||
visible_rect.height);
|
||||
|
||||
/* We chain up to paint the contents here so that the mask
|
||||
* we paint with meta_frame_render_background can be accurate
|
||||
* with children. */
|
||||
GTK_WIDGET_CLASS (meta_uiframe_parent_class)->draw (widget, cr);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_uiframe_draw (GtkWidget *widget,
|
||||
cairo_t *cr)
|
||||
{
|
||||
MetaUIFrame *frame;
|
||||
cairo_region_t *region;
|
||||
cairo_rectangle_int_t clip;
|
||||
|
||||
frame = META_UIFRAME (widget);
|
||||
gdk_cairo_get_clip_rectangle (cr, &clip);
|
||||
|
||||
region = cairo_region_create_rectangle (&clip);
|
||||
|
||||
clip_to_screen (region, frame);
|
||||
subtract_client_area (region, frame);
|
||||
|
||||
if (cairo_region_num_rectangles (region) == 0)
|
||||
goto out;
|
||||
|
||||
gdk_cairo_region (cr, region);
|
||||
cairo_clip (cr);
|
||||
|
||||
cairo_save (cr);
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
|
||||
cairo_set_source_rgba (cr, 1, 1, 1, 1);
|
||||
cairo_paint (cr);
|
||||
cairo_restore (cr);
|
||||
|
||||
meta_uiframe_paint (frame, cr);
|
||||
|
||||
out:
|
||||
cairo_region_destroy (region);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_uiframe_style_updated (GtkWidget *widget)
|
||||
{
|
||||
MetaUIFrame *frame = META_UIFRAME (widget);
|
||||
GtkWidget *container = frame->container;
|
||||
MetaFrameBorders borders;
|
||||
|
||||
meta_uiframe_get_frame_borders (frame, &borders);
|
||||
|
||||
gtk_widget_set_margin_left (container, borders.total.left);
|
||||
gtk_widget_set_margin_right (container, borders.total.right);
|
||||
gtk_widget_set_margin_top (container, borders.invisible.top);
|
||||
gtk_widget_set_size_request (container, -1, borders.visible.top);
|
||||
}
|
||||
|
||||
static MetaFrameControl
|
||||
get_control (MetaUIFrame *frame,
|
||||
int x, int y)
|
||||
{
|
||||
MetaFrameBorders borders;
|
||||
MetaFrameFlags flags;
|
||||
MetaFrameType type;
|
||||
gboolean has_vert, has_horiz;
|
||||
gboolean has_north_resize;
|
||||
cairo_rectangle_int_t client;
|
||||
int width, height;
|
||||
|
||||
meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||
frame->xwindow,
|
||||
META_CORE_GET_FRAME_FLAGS, &flags,
|
||||
META_CORE_GET_CLIENT_WIDTH, &width,
|
||||
META_CORE_GET_CLIENT_HEIGHT, &height,
|
||||
META_CORE_GET_FRAME_TYPE, &type,
|
||||
META_CORE_GET_END);
|
||||
|
||||
meta_uiframe_get_frame_borders (frame, &borders);
|
||||
get_client_rect (&borders, width, height, &client);
|
||||
|
||||
if (POINT_IN_RECT (x, y, client))
|
||||
return META_FRAME_CONTROL_CLIENT_AREA;
|
||||
|
||||
has_north_resize = (type != META_FRAME_TYPE_ATTACHED);
|
||||
has_vert = (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE) != 0;
|
||||
has_horiz = (flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE) != 0;
|
||||
|
||||
/* South resize always has priority over north resize,
|
||||
* in case of overlap.
|
||||
*/
|
||||
|
||||
if (y >= (height - borders.total.bottom) &&
|
||||
x >= (width - borders.total.right))
|
||||
{
|
||||
if (has_vert && has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_SE;
|
||||
else if (has_vert)
|
||||
return META_FRAME_CONTROL_RESIZE_S;
|
||||
else if (has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_E;
|
||||
}
|
||||
else if (y >= (height - borders.total.bottom) &&
|
||||
x <= borders.total.left)
|
||||
{
|
||||
if (has_vert && has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_SW;
|
||||
else if (has_vert)
|
||||
return META_FRAME_CONTROL_RESIZE_S;
|
||||
else if (has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_W;
|
||||
}
|
||||
else if (y < (borders.invisible.top) &&
|
||||
x <= borders.total.left && has_north_resize)
|
||||
{
|
||||
if (has_vert && has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_NW;
|
||||
else if (has_vert)
|
||||
return META_FRAME_CONTROL_RESIZE_N;
|
||||
else if (has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_W;
|
||||
}
|
||||
else if (y < (borders.invisible.top) &&
|
||||
x >= width - borders.total.right && has_north_resize)
|
||||
{
|
||||
if (has_vert && has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_NE;
|
||||
else if (has_vert)
|
||||
return META_FRAME_CONTROL_RESIZE_N;
|
||||
else if (has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_E;
|
||||
}
|
||||
else if (y < borders.invisible.top)
|
||||
{
|
||||
if (has_vert && has_north_resize)
|
||||
return META_FRAME_CONTROL_RESIZE_N;
|
||||
}
|
||||
else if (y >= (height - borders.total.bottom))
|
||||
{
|
||||
if (has_vert)
|
||||
return META_FRAME_CONTROL_RESIZE_S;
|
||||
}
|
||||
else if (x <= borders.total.left)
|
||||
{
|
||||
if (has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_W;
|
||||
}
|
||||
else if (x >= (width - borders.total.right))
|
||||
{
|
||||
if (has_horiz)
|
||||
return META_FRAME_CONTROL_RESIZE_E;
|
||||
}
|
||||
|
||||
if (y >= borders.total.top)
|
||||
return META_FRAME_CONTROL_NONE;
|
||||
else
|
||||
return META_FRAME_CONTROL_TITLE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_uiframe_class_init (MetaUIFrameClass *class)
|
||||
{
|
||||
GObjectClass *gobject_class;
|
||||
GtkWidgetClass *widget_class;
|
||||
|
||||
gobject_class = G_OBJECT_CLASS (class);
|
||||
widget_class = GTK_WIDGET_CLASS (class);
|
||||
|
||||
gobject_class->finalize = meta_uiframe_finalize;
|
||||
|
||||
widget_class->draw = meta_uiframe_draw;
|
||||
widget_class->style_updated = meta_uiframe_style_updated;
|
||||
widget_class->button_press_event = meta_uiframe_button_press_event;
|
||||
widget_class->button_release_event = meta_uiframe_button_release_event;
|
||||
}
|
||||
101
src/ui/uiframe.h
Normal file
101
src/ui/uiframe.h
Normal file
@@ -0,0 +1,101 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity window frame manager widget */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
*
|
||||
* 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_UIFRAME_H
|
||||
#define META_UIFRAME_H
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <meta/common.h>
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_FRAME_CONTROL_NONE,
|
||||
META_FRAME_CONTROL_TITLE,
|
||||
META_FRAME_CONTROL_DELETE,
|
||||
META_FRAME_CONTROL_MENU,
|
||||
META_FRAME_CONTROL_MINIMIZE,
|
||||
META_FRAME_CONTROL_MAXIMIZE,
|
||||
META_FRAME_CONTROL_UNMAXIMIZE,
|
||||
META_FRAME_CONTROL_SHADE,
|
||||
META_FRAME_CONTROL_UNSHADE,
|
||||
META_FRAME_CONTROL_ABOVE,
|
||||
META_FRAME_CONTROL_UNABOVE,
|
||||
META_FRAME_CONTROL_STICK,
|
||||
META_FRAME_CONTROL_UNSTICK,
|
||||
META_FRAME_CONTROL_RESIZE_SE,
|
||||
META_FRAME_CONTROL_RESIZE_S,
|
||||
META_FRAME_CONTROL_RESIZE_SW,
|
||||
META_FRAME_CONTROL_RESIZE_N,
|
||||
META_FRAME_CONTROL_RESIZE_NE,
|
||||
META_FRAME_CONTROL_RESIZE_NW,
|
||||
META_FRAME_CONTROL_RESIZE_W,
|
||||
META_FRAME_CONTROL_RESIZE_E,
|
||||
META_FRAME_CONTROL_CLIENT_AREA
|
||||
} MetaFrameControl;
|
||||
|
||||
/* This is one widget that manages all the window frames
|
||||
* as subwindows.
|
||||
*/
|
||||
|
||||
#define META_TYPE_UIFRAME (meta_uiframe_get_type ())
|
||||
#define META_UIFRAME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_UIFRAME, MetaUIFrame))
|
||||
#define META_UIFRAME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_UIFRAME, MetaUIFrameClass))
|
||||
#define META_IS_UIFRAME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_UIFRAME))
|
||||
#define META_IS_UIFRAME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_UIFRAME))
|
||||
#define META_UIFRAME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_UIFRAME, MetaUIFrameClass))
|
||||
|
||||
typedef struct _MetaUIFrame MetaUIFrame;
|
||||
typedef struct _MetaUIFrameClass MetaUIFrameClass;
|
||||
|
||||
struct _MetaUIFrame
|
||||
{
|
||||
GtkWindow parent_instance;
|
||||
|
||||
Window xwindow;
|
||||
GdkWindow *window;
|
||||
MetaFrameControl prelit_control;
|
||||
|
||||
GtkWidget *label;
|
||||
GtkWidget *container;
|
||||
|
||||
gboolean style_context_initialized;
|
||||
};
|
||||
|
||||
struct _MetaUIFrameClass
|
||||
{
|
||||
GtkWindowClass parent_class;
|
||||
};
|
||||
|
||||
GType meta_uiframe_get_type (void) G_GNUC_CONST;
|
||||
|
||||
void meta_uiframe_set_title (MetaUIFrame *frame,
|
||||
const char *title);
|
||||
|
||||
void meta_uiframe_paint (MetaUIFrame *frame,
|
||||
cairo_t *cr);
|
||||
|
||||
void meta_uiframe_get_frame_borders (MetaUIFrame *frame,
|
||||
MetaFrameBorders *borders);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user