Compare commits
27 Commits
METACITY_2
...
METACITY_2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
63744a3dd7 | ||
![]() |
e5db44ca90 | ||
![]() |
032cbe0dd5 | ||
![]() |
7d34a10e4a | ||
![]() |
62f1fc62a7 | ||
![]() |
c26cb4d2be | ||
![]() |
a203fb1037 | ||
![]() |
adeec009e7 | ||
![]() |
8e6c0bec78 | ||
![]() |
69ae9e4a9d | ||
![]() |
1381f6d5f2 | ||
![]() |
a6c951352f | ||
![]() |
0a172cc053 | ||
![]() |
f5fa4a3866 | ||
![]() |
8cbcbb0655 | ||
![]() |
35d9d2864f | ||
![]() |
bb5c0d0c34 | ||
![]() |
226cdc9645 | ||
![]() |
1b35154e2b | ||
![]() |
7c69ab987a | ||
![]() |
ba03230e72 | ||
![]() |
77cb0db9c2 | ||
![]() |
ad080410a3 | ||
![]() |
dab72c3efa | ||
![]() |
32f882093b | ||
![]() |
57dec338ba | ||
![]() |
9ecc00a33b |
102
ChangeLog
102
ChangeLog
@@ -1,3 +1,105 @@
|
||||
2009-02-01 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* NEWS: 2.25.144 release.
|
||||
|
||||
2009-02-01 Matt Kraai <kraai@ftbfs.org>
|
||||
|
||||
Set prop_hooks_table to NULL after freeing it.
|
||||
|
||||
* src/core/window-props.c:
|
||||
|
||||
2009-01-29 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
Window properties are looked up in a hash table rather than
|
||||
by iteration over an array. Saves ~44us per window, but
|
||||
also makes the code cleaner.
|
||||
|
||||
* src/core/display-private.h:
|
||||
* src/core/window-props.c:
|
||||
|
||||
2009-01-27 Matthias Claesen <mclasen@redhat.com>
|
||||
|
||||
* src/core/edge-resistance.c: some lists failed to keep track
|
||||
of their contents and therefore didn't free correctly.
|
||||
Closes #552303.
|
||||
|
||||
2009-01-27 Matthias Claesen <mclasen@redhat.com>
|
||||
|
||||
* src/core/prefs.c: Free name of old theme when new theme
|
||||
is loaded. Closes #552973.
|
||||
|
||||
2009-01-27 Matthias Claesen <mclasen@redhat.com>
|
||||
|
||||
* src/ui/ui.c: free the result of gdk_text_property_to_utf8_list()
|
||||
even when it returns no data.
|
||||
|
||||
2009-01-27 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
GtkStyle is specific to a particular colormap. Metacity
|
||||
uses different colormaps for windows with different
|
||||
visuals, so it must specialize the GtkStyle.
|
||||
|
||||
Closes #568365 and #513944.
|
||||
|
||||
* src/ui/frames.[ch]: Keep a GtkStyle for each MetaUIFrame, which is
|
||||
obtained by calling gtk_style_attach() on the style for the
|
||||
MetaFrames. When the style of the MetaFrames changes, reattach
|
||||
everything. When we call gtk_style_set_background() pass in the
|
||||
right style.
|
||||
|
||||
* src/ui/themes.[ch]: Create a _with_style() variant of functions that
|
||||
previously took the style from widget->style passed in, so we
|
||||
can draw with the right style for the colormap.
|
||||
|
||||
2009-01-27 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
Added a gconf key to swap the meanings of the right and
|
||||
middle buttons when the modifier key is held down.
|
||||
Closes #437910. Thanks to Matt Kraai for looking over
|
||||
the patch.
|
||||
|
||||
* src/core/display.c:
|
||||
* src/core/prefs.c:
|
||||
* src/include/prefs.h:
|
||||
* src/metacity.schemas.in.in:
|
||||
|
||||
2009-01-27 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
All the window properties are now handled using simple
|
||||
window property handlers. Closes #549886.
|
||||
|
||||
* src/core/window-private.h:
|
||||
* src/core/window-props.c:
|
||||
* src/core/window.c:
|
||||
|
||||
2009-01-26 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
More of the window properties are checked using simple
|
||||
window property handlers. The ones which remain don't
|
||||
actually look up the new value in the ordinary way, and
|
||||
so are a little trickier to merge. Added an "initial"
|
||||
flag to be on the safe side that the behaviour is the
|
||||
same as before (so we don't do things when a window's
|
||||
first mapped that we only used to do when a property
|
||||
changed). Partial fix for bug #549886.
|
||||
|
||||
* src/core/window-props.c:
|
||||
* src/core/window-props.h:
|
||||
* src/core/window.c:
|
||||
|
||||
2009-01-25 Elijah Newren <newren gmail com>
|
||||
|
||||
* src/core/window.c: add support for _NET_WM_MOVERESIZE_CANCEL.
|
||||
|
||||
2009-01-10 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* src/ui/theme.[ch]: add meta_theme_draw_frame_by_name, which
|
||||
is needed for the theme editor.
|
||||
|
||||
2008-12-26 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* configure.in: Post-release bump to 2.25.144.
|
||||
|
||||
2008-12-26 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* NEWS: 2.25.89 release.
|
||||
|
20
NEWS
20
NEWS
@@ -1,3 +1,23 @@
|
||||
2.25.144
|
||||
========
|
||||
|
||||
Thanks to Matthias Claesen, Matt Kraai, Elijah Newren, Owen Taylor, and Thomas
|
||||
Thurman for improvements in this version.
|
||||
|
||||
- Optimise window property lookup (Thomas) (#549886)
|
||||
- Fix slip in the above (Matt)
|
||||
- Several memory leaks fixed (Matthias) (#552303, #552973, #552307)
|
||||
- Fix longstanding crasher about colourmaps (Owen) (#568365)
|
||||
- Alt+middle/right buttons can be switched (Thomas) (#437910)
|
||||
- Support _NET_WM_MOVERESIZE_CANCEL (Elijah)
|
||||
- minor fix paving the way for a theme editor (Thomas)
|
||||
|
||||
Translations
|
||||
David Planella (ca), Jorge González (es), Mattias Põldaru (et), saudat
|
||||
mohammed (ha), Yuval Tanny\n (he), Gabor Kelemen (hu), Onye, Sylvester (ig),
|
||||
Changwoo Ryu (ko), Raivis Dejus (lv), Kjartan Maraas (nb), Daniel Nylander (sv),
|
||||
Fajuyitan, Sunday Ayo (yo), 甘露 (Gan Lu) (zh_CN)
|
||||
|
||||
2.25.89
|
||||
=======
|
||||
|
||||
|
@@ -4,7 +4,7 @@ m4_define([metacity_major_version], [2])
|
||||
m4_define([metacity_minor_version], [25])
|
||||
# Fibonacci sequence for micro version numbering:
|
||||
# 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987
|
||||
m4_define([metacity_micro_version], [89])
|
||||
m4_define([metacity_micro_version], [144])
|
||||
|
||||
m4_define([metacity_version],
|
||||
[metacity_major_version.metacity_minor_version.metacity_micro_version])
|
||||
|
51
po/ChangeLog
51
po/ChangeLog
@@ -1,3 +1,54 @@
|
||||
2009-02-01 Gil Forcada <gforcada@gnome.org>
|
||||
|
||||
* ca.po: Updated Catalan translation by David Planella.
|
||||
|
||||
2009-01-31 Jorge Gonzalez <jorgegonz@svn.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation
|
||||
|
||||
2009-01-31 Daniel Nylander <po@danielnylander.se>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2009-01-29 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
|
||||
2009-01-29 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2009-01-24 Raivis DEjus <orvils@gmail.com>
|
||||
|
||||
* lv.po: Updated Latvian translation.
|
||||
|
||||
2009-01-22 Yair Hershkovitz <yairhr@gmail.com>
|
||||
|
||||
* he.po: Updated Hebrew translation.
|
||||
|
||||
2009-01-17 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* ig.po: Added Igbo translation by Sylvester Onye.
|
||||
* yo.po Added Yoruba translation by Sunday Ayo Fajuyitan.
|
||||
* ha.po: Added Hausa translation by Saudat Mohammed.
|
||||
* LINGUAS: added Igbo, Yoruba and Hausa.
|
||||
|
||||
2009-01-17 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Translation updated.
|
||||
|
||||
2009-01-09 Daniel Nylander <po@danielnylander.se>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2009-01-03 甘露(Gan Lu) <rhythm.gan@gmail.com>
|
||||
|
||||
* zh_CN.po: Updated Chinese Simplified translation
|
||||
|
||||
2009-01-03 Priit Laes <plaes at svn dot gnome dot org>
|
||||
|
||||
* et.po: Translation updated by Mattias Põldaru
|
||||
|
||||
2008-12-26 Jorge Gonzalez <jorgegonz@svn.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
@@ -30,12 +30,14 @@ fr
|
||||
ga
|
||||
gl
|
||||
gu
|
||||
ha
|
||||
he
|
||||
hi
|
||||
hr
|
||||
hu
|
||||
hy
|
||||
id
|
||||
ig
|
||||
is
|
||||
it
|
||||
ja
|
||||
@@ -80,6 +82,7 @@ uk
|
||||
vi
|
||||
wa
|
||||
xh
|
||||
yo
|
||||
zh_CN
|
||||
zh_HK
|
||||
zh_TW
|
||||
|
125
po/es.po
125
po/es.po
@@ -6,14 +6,14 @@
|
||||
# Héctor García Álvarez <hector@scouts-es.org>, 2001.
|
||||
# Pablo Gonzalo del Campo <pablodc@bigfoot.com>,2002,2003.
|
||||
# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006.
|
||||
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008.
|
||||
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 200, 2009.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=metacity&component=general\n"
|
||||
"POT-Creation-Date: 2008-12-25 16:53+0000\n"
|
||||
"PO-Revision-Date: 2008-12-26 12:44+0100\n"
|
||||
"product=metacity&component=general\n"
|
||||
"POT-Creation-Date: 2009-01-27 21:05+0000\n"
|
||||
"PO-Revision-Date: 2009-01-31 20:10+0100\n"
|
||||
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -211,25 +211,25 @@ msgstr "No se pudo reiniciar: %s\n"
|
||||
#. * (Empty comment follows so the translators don't see this.)
|
||||
#.
|
||||
#.
|
||||
#: ../src/core/prefs.c:499 ../src/core/prefs.c:654
|
||||
#: ../src/core/prefs.c:505 ../src/core/prefs.c:660
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "La clave GConf «%s» está configurada con un valor inválido\n"
|
||||
|
||||
#: ../src/core/prefs.c:580 ../src/core/prefs.c:823
|
||||
#: ../src/core/prefs.c:586 ../src/core/prefs.c:829
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range %d to %d\n"
|
||||
msgstr ""
|
||||
"%d almacenado en la clave de GConf %s está fuera de rango %d hasta %d\n"
|
||||
|
||||
#: ../src/core/prefs.c:624 ../src/core/prefs.c:701 ../src/core/prefs.c:749
|
||||
#: ../src/core/prefs.c:813 ../src/core/prefs.c:1106 ../src/core/prefs.c:1122
|
||||
#: ../src/core/prefs.c:1139 ../src/core/prefs.c:1155
|
||||
#: ../src/core/prefs.c:630 ../src/core/prefs.c:707 ../src/core/prefs.c:755
|
||||
#: ../src/core/prefs.c:819 ../src/core/prefs.c:1112 ../src/core/prefs.c:1128
|
||||
#: ../src/core/prefs.c:1145 ../src/core/prefs.c:1161
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "La clave GConf «%s» está configurada con un tipo inválido\n"
|
||||
|
||||
#: ../src/core/prefs.c:1225
|
||||
#: ../src/core/prefs.c:1231
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -237,14 +237,14 @@ msgstr ""
|
||||
"Los arreglos para aplicaciones rotas se han deshabilitado. Algunas "
|
||||
"aplicaciones podrían no comportarse correctamente.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1296
|
||||
#: ../src/core/prefs.c:1302
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr ""
|
||||
"No se ha podido interpretar la descripción de la tipografía «%s» de la clave "
|
||||
"GConf %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1356
|
||||
#: ../src/core/prefs.c:1362
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -253,18 +253,18 @@ msgstr ""
|
||||
"«%s» encontrado en la base de datos de configuración no es un valor válido "
|
||||
"para el modificador del botón del ratón\n"
|
||||
|
||||
#: ../src/core/prefs.c:1771
|
||||
#: ../src/core/prefs.c:1780
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr ""
|
||||
"Ocurrió un error configurando la número de espacios de trabajo para %d: %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1960 ../src/core/prefs.c:2463
|
||||
#: ../src/core/prefs.c:1969 ../src/core/prefs.c:2472
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Área de trabajo %d"
|
||||
|
||||
#: ../src/core/prefs.c:1990 ../src/core/prefs.c:2168
|
||||
#: ../src/core/prefs.c:1999 ../src/core/prefs.c:2177
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -273,14 +273,14 @@ 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:2544
|
||||
#: ../src/core/prefs.c:2553
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr ""
|
||||
"Ocurrió un error al establecer el nombre del área de trabajo %d como «%s»: %"
|
||||
"s \n"
|
||||
|
||||
#: ../src/core/prefs.c:2730
|
||||
#: ../src/core/prefs.c:2751
|
||||
#, c-format
|
||||
msgid "Error setting compositor status: %s\n"
|
||||
msgstr "Error al establecer el estado del compositor: %s\n"
|
||||
@@ -468,7 +468,7 @@ msgid "Metacity"
|
||||
msgstr "Metacity"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:5743
|
||||
#: ../src/core/window.c:5626
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -484,7 +484,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:6308
|
||||
#: ../src/core/window.c:6191
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -494,17 +494,17 @@ 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:206
|
||||
#: ../src/core/window-props.c:276
|
||||
#, 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:338
|
||||
#: ../src/core/window-props.c:411
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (on %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1422
|
||||
#: ../src/core/window-props.c:1523
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr ""
|
||||
@@ -907,16 +907,24 @@ msgid "Automatically raises the focused window"
|
||||
msgstr "Elevar automáticamente la ventana que tiene el foco"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:9
|
||||
#| msgid ""
|
||||
#| "Clicking a window while holding down this modifier key will move the "
|
||||
#| "window (left click), resize the window (middle click), or show the window "
|
||||
#| "menu (right click). Modifier is expressed as \"<Alt>\" or \"<"
|
||||
#| "Super>\" for example."
|
||||
msgid ""
|
||||
"Clicking a window while holding down this modifier key will move the window "
|
||||
"(left click), resize the window (middle click), or show the window menu "
|
||||
"(right click). Modifier is expressed as \"<Alt>\" or \"<Super>\" "
|
||||
"for example."
|
||||
"(right click). The left and right operations may be swapped using the "
|
||||
"\"mouse_button_resize\" key. Modifier is expressed as \"<Alt>\" or "
|
||||
"\"<Super>\" for example."
|
||||
msgstr ""
|
||||
"Al pulsar sobre una ventana manteniendo presionada esta tecla modificadora "
|
||||
"se moverá la ventana (botón izquierdo), se redimensionará la ventana (botón "
|
||||
"central), o se mostrará el menú de la ventana (botón derecho). El "
|
||||
"modificador se expresa por ejemplo como «<Alt>» o «<Super>»."
|
||||
"del medio) o se mostrará el menú de la ventana (botón derecho). Las "
|
||||
"operaciones izquierda y derecha se pueden intercambiar usando la tecla "
|
||||
"modificadora \"mouse_button_resize\". El modificador se expresa por ejemplo "
|
||||
"como «<Alt>» o «<Super>»."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:10
|
||||
msgid "Commands to run in response to keybindings"
|
||||
@@ -1051,6 +1059,17 @@ msgstr "Ejecuta un comando definido"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:29
|
||||
msgid ""
|
||||
"Set this to true to resize with the right button and show a menu with the "
|
||||
"middle button while holding down the key given in \"mouse_button_modifier\"; "
|
||||
"set it to false to make it work the opposite way around."
|
||||
msgstr ""
|
||||
"Establezca esto a «verdadero» para redimensionar con el botón derecho y "
|
||||
"mostrar un menú con el botón del medio mientras se mantiene pulsada la tecla "
|
||||
"dada en \"mouse_button_modifier\"; establézcalo a «falso» para hacer que se "
|
||||
"comporte de forma contraria."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:30
|
||||
msgid ""
|
||||
"Setting this option to false can lead to buggy behavior, so users are "
|
||||
"strongly discouraged from changing it from the default of true. Many actions "
|
||||
"(e.g. clicking in the client area, moving or resizing the window) normally "
|
||||
@@ -1091,7 +1110,7 @@ msgstr ""
|
||||
"dígale que es _su_ problema (de él) por romper el gestor de ventanas y que "
|
||||
"deben cambiar la opción a «true» o vivir con el error que han solicitado."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:30
|
||||
#: ../src/metacity.schemas.in.in.h:31
|
||||
msgid ""
|
||||
"Some applications disregard specifications in ways that result in window "
|
||||
"manager misfeatures. This option puts Metacity in a rigorously correct mode, "
|
||||
@@ -1104,11 +1123,11 @@ msgstr ""
|
||||
"usuario más consistente, supuesto que uno no necesita ejecutar ninguna "
|
||||
"aplicación que se comporte mal."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:31
|
||||
#: ../src/metacity.schemas.in.in.h:32
|
||||
msgid "System Bell is Audible"
|
||||
msgstr "La campana del sistema es audible"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:32
|
||||
#: ../src/metacity.schemas.in.in.h:33
|
||||
msgid ""
|
||||
"Tells Metacity how to implement the visual indication that the system bell "
|
||||
"or another application 'bell' indicator has been rung. Currently there are "
|
||||
@@ -1127,7 +1146,7 @@ msgstr ""
|
||||
"usualmente el caso para el «bip del sistema» predeterminado), la barra de "
|
||||
"títulos de la ventana actual que tenga el foco parpadeará."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:33
|
||||
#: ../src/metacity.schemas.in.in.h:34
|
||||
msgid ""
|
||||
"The /apps/metacity/global_keybindings/run_command_N keys define keybindings "
|
||||
"that correspond to these commands. Pressing the keybinding for run_command_N "
|
||||
@@ -1137,7 +1156,7 @@ msgstr ""
|
||||
"combinaciones de teclas que corresponden a esos comandos. Al presionar la "
|
||||
"combinación de teclas para «run_command_N» se ejecutará el «command_N»."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:34
|
||||
#: ../src/metacity.schemas.in.in.h:35
|
||||
msgid ""
|
||||
"The /apps/metacity/global_keybindings/run_command_screenshot key defines a "
|
||||
"keybinding which causes the command specified by this setting to be invoked."
|
||||
@@ -1146,7 +1165,7 @@ msgstr ""
|
||||
"combinación de teclas que hace que el comando especificado por esta "
|
||||
"configuración se invoque."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:35
|
||||
#: ../src/metacity.schemas.in.in.h:36
|
||||
msgid ""
|
||||
"The /apps/metacity/global_keybindings/run_command_window_screenshot key "
|
||||
"defines a keybinding which causes the command specified by this setting to "
|
||||
@@ -1156,7 +1175,7 @@ msgstr ""
|
||||
"define una combinación de teclas que hace que el comando especificado por "
|
||||
"esta configuración se invoque."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:36
|
||||
#: ../src/metacity.schemas.in.in.h:37
|
||||
msgid ""
|
||||
"The keybinding that runs the correspondingly-numbered command in /apps/"
|
||||
"metacity/keybinding_commands The format looks like \"<Control>a\" or "
|
||||
@@ -1172,15 +1191,15 @@ msgstr ""
|
||||
"Ctl>» y «<Ctrl>». Si configura esta opción con la cadena especial "
|
||||
"«disabled» entonces no habrá combinación de teclas para esa acción."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:37
|
||||
#: ../src/metacity.schemas.in.in.h:38
|
||||
msgid "The name of a workspace."
|
||||
msgstr "El nombre de un área de trabajo."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:38
|
||||
#: ../src/metacity.schemas.in.in.h:39
|
||||
msgid "The screenshot command"
|
||||
msgstr "El comando de captura de pantalla"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:39
|
||||
#: ../src/metacity.schemas.in.in.h:40
|
||||
msgid ""
|
||||
"The theme determines the appearance of window borders, titlebar, and so "
|
||||
"forth."
|
||||
@@ -1188,7 +1207,7 @@ msgstr ""
|
||||
"El tema determina la apariencia de los bordes de la ventana, el título y "
|
||||
"demás."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:40
|
||||
#: ../src/metacity.schemas.in.in.h:41
|
||||
msgid ""
|
||||
"The time delay before raising a window if auto_raise is set to true. The "
|
||||
"delay is given in thousandths of a second."
|
||||
@@ -1196,7 +1215,7 @@ msgstr ""
|
||||
"El retardo antes de desplegar una ventana si «auto_rise» está configurado "
|
||||
"como verdadero. El retardo está especificado en milésimas de segundo."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:41
|
||||
#: ../src/metacity.schemas.in.in.h:42
|
||||
msgid ""
|
||||
"The window focus mode indicates how windows are activated. It has three "
|
||||
"possible values; \"click\" means windows must be clicked in order to focus "
|
||||
@@ -1211,11 +1230,11 @@ msgstr ""
|
||||
"foco cuando el ratón entra en la ventana y lo pierden cuando el ratón sale "
|
||||
"de la ventana."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:42
|
||||
#: ../src/metacity.schemas.in.in.h:43
|
||||
msgid "The window screenshot command"
|
||||
msgstr "El comando de captura de una ventana"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:43
|
||||
#: ../src/metacity.schemas.in.in.h:44
|
||||
msgid ""
|
||||
"This option determines the effects of double-clicking on the title bar. "
|
||||
"Current valid options are 'toggle_shade', which will shade/unshade the "
|
||||
@@ -1235,7 +1254,7 @@ msgstr ""
|
||||
"muestra la ventana de menú, «lower» que pone la ventana detrás de todas las "
|
||||
"demás y «none» que no hará nada."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:44
|
||||
#: ../src/metacity.schemas.in.in.h:45
|
||||
msgid ""
|
||||
"This option determines the effects of middle-clicking on the title bar. "
|
||||
"Current valid options are 'toggle_shade', which will shade/unshade the "
|
||||
@@ -1255,7 +1274,7 @@ msgstr ""
|
||||
"muestra la ventana de menú, «lower» que pone la ventana detrás de todas las "
|
||||
"demás y «none» que no hará nada."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:45
|
||||
#: ../src/metacity.schemas.in.in.h:46
|
||||
msgid ""
|
||||
"This option determines the effects of right-clicking on the title bar. "
|
||||
"Current valid options are 'toggle_shade', which will shade/unshade the "
|
||||
@@ -1275,7 +1294,7 @@ msgstr ""
|
||||
"muestra la ventana de menú, «lower» que pone la ventana detrás de todas las "
|
||||
"demás y «none» que no hará nada."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:46
|
||||
#: ../src/metacity.schemas.in.in.h:47
|
||||
msgid ""
|
||||
"This option provides additional control over how newly created windows get "
|
||||
"focus. It has two possible values; \"smart\" applies the user's normal focus "
|
||||
@@ -1287,7 +1306,7 @@ msgstr ""
|
||||
"aplica el modo de foco normal del usuario, y «strict» hace que las ventanas "
|
||||
"iniciadas desde un terminal no se les dé el foco."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:47
|
||||
#: ../src/metacity.schemas.in.in.h:48
|
||||
msgid ""
|
||||
"Turns on a visual indication when an application or the system issues a "
|
||||
"'bell' or 'beep'; useful for the hard-of-hearing and for use in noisy "
|
||||
@@ -1297,25 +1316,29 @@ msgstr ""
|
||||
"«campanada» o un «bip» ; es muy útil para los ambientes ruidosos y para las "
|
||||
"personas con dificultades auditivas."
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:48
|
||||
#: ../src/metacity.schemas.in.in.h:49
|
||||
msgid "Use standard system font in window titles"
|
||||
msgstr "Usar tipografía estándar del sistema en los títulos de la ventana"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:49
|
||||
#: ../src/metacity.schemas.in.in.h:50
|
||||
msgid "Visual Bell Type"
|
||||
msgstr "Tipo de campana visual"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:50
|
||||
#: ../src/metacity.schemas.in.in.h:51
|
||||
msgid "Whether raising should be a side-effect of other user interactions"
|
||||
msgstr ""
|
||||
"Indica si elevar debe ser un efecto lateral de otras interacciones del "
|
||||
"usuario"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:51
|
||||
#: ../src/metacity.schemas.in.in.h:52
|
||||
msgid "Whether to resize with the right button"
|
||||
msgstr "Indica si se debe redimensionar con el botón derecho"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:53
|
||||
msgid "Window focus mode"
|
||||
msgstr "Modo de foco de la ventana"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:52
|
||||
#: ../src/metacity.schemas.in.in.h:54
|
||||
msgid "Window title font"
|
||||
msgstr "Tipografía del título de la ventana"
|
||||
|
||||
@@ -1879,7 +1902,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:5237 ../src/ui/theme.c:5299 ../src/ui/theme.c:5362
|
||||
#: ../src/ui/theme.c:5295 ../src/ui/theme.c:5357 ../src/ui/theme.c:5420
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@@ -1887,7 +1910,7 @@ msgstr ""
|
||||
"Las constantes definidas por el usuario deben comenzar con una letra "
|
||||
"mayúscula; «%s» no lo hace"
|
||||
|
||||
#: ../src/ui/theme.c:5245 ../src/ui/theme.c:5307 ../src/ui/theme.c:5370
|
||||
#: ../src/ui/theme.c:5303 ../src/ui/theme.c:5365 ../src/ui/theme.c:5428
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "La constante «%s» ya ha sido definida"
|
||||
|
4373
po/zh_CN.po
4373
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
@@ -51,7 +51,6 @@ typedef struct _MetaStack MetaStack;
|
||||
typedef struct _MetaUISlave MetaUISlave;
|
||||
typedef struct _MetaWorkspace MetaWorkspace;
|
||||
|
||||
typedef struct _MetaWindowPropHooks MetaWindowPropHooks;
|
||||
typedef struct _MetaGroupPropHooks MetaGroupPropHooks;
|
||||
|
||||
typedef struct MetaEdgeResistanceData MetaEdgeResistanceData;
|
||||
@@ -232,7 +231,8 @@ struct _MetaDisplay
|
||||
MetaWindow *window_with_menu;
|
||||
|
||||
/* Managed by window-props.c */
|
||||
MetaWindowPropHooks *prop_hooks;
|
||||
gpointer *prop_hooks_table;
|
||||
GHashTable *prop_hooks;
|
||||
|
||||
/* Managed by group-props.c */
|
||||
MetaGroupPropHooks *group_prop_hooks;
|
||||
|
@@ -1669,7 +1669,7 @@ event_callback (XEvent *event,
|
||||
if (!unmodified)
|
||||
begin_move = TRUE;
|
||||
}
|
||||
else if (!unmodified && event->xbutton.button == 2)
|
||||
else if (!unmodified && event->xbutton.button == meta_prefs_get_mouse_button_resize())
|
||||
{
|
||||
if (window->has_resize_func)
|
||||
{
|
||||
@@ -1718,7 +1718,7 @@ event_callback (XEvent *event,
|
||||
event->xbutton.y_root);
|
||||
}
|
||||
}
|
||||
else if (event->xbutton.button == 3)
|
||||
else if (event->xbutton.button == meta_prefs_get_mouse_button_menu())
|
||||
{
|
||||
if (meta_prefs_get_raise_on_click ())
|
||||
meta_window_raise (window);
|
||||
|
@@ -985,8 +985,8 @@ meta_display_compute_resistance_and_snapping_edges (MetaDisplay *display)
|
||||
cur_window_iter = cur_window_iter->next;
|
||||
}
|
||||
/* Put 'em in bottom to top order */
|
||||
rem_windows = g_slist_reverse (obscuring_windows);
|
||||
rem_win_stacking = g_slist_reverse (window_stacking);
|
||||
rem_windows = obscuring_windows = g_slist_reverse (obscuring_windows);
|
||||
rem_win_stacking = window_stacking = g_slist_reverse (window_stacking);
|
||||
|
||||
/*
|
||||
* 3rd: loop over the windows again, this time getting the edges from
|
||||
|
@@ -94,6 +94,7 @@ static gboolean gnome_animations = TRUE;
|
||||
static char *cursor_theme = NULL;
|
||||
static int cursor_size = 24;
|
||||
static gboolean compositing_manager = FALSE;
|
||||
static gboolean resize_with_right_button = FALSE;
|
||||
|
||||
static MetaVisualBellType visual_bell_type = META_VISUAL_BELL_FULLSCREEN_FLASH;
|
||||
static MetaButtonLayout button_layout;
|
||||
@@ -403,6 +404,11 @@ static MetaBoolPreference preferences_bool[] =
|
||||
&compositing_manager,
|
||||
FALSE,
|
||||
},
|
||||
{ "/apps/metacity/general/resize_with_right_button",
|
||||
META_PREF_RESIZE_WITH_RIGHT_BUTTON,
|
||||
&resize_with_right_button,
|
||||
FALSE,
|
||||
},
|
||||
{ NULL, 0, NULL, FALSE },
|
||||
};
|
||||
|
||||
@@ -1327,6 +1333,8 @@ theme_name_handler (MetaPreference pref,
|
||||
const gchar *string_value,
|
||||
gboolean *inform_listeners)
|
||||
{
|
||||
g_free (current_theme);
|
||||
|
||||
/* Fallback crackrock */
|
||||
if (string_value == NULL)
|
||||
current_theme = g_strdup ("Atlanta");
|
||||
@@ -1740,6 +1748,9 @@ meta_preference_to_string (MetaPreference pref)
|
||||
|
||||
case META_PREF_COMPOSITING_MANAGER:
|
||||
return "COMPOSITING_MANAGER";
|
||||
|
||||
case META_PREF_RESIZE_WITH_RIGHT_BUTTON:
|
||||
return "RESIZE_WITH_RIGHT_BUTTON";
|
||||
}
|
||||
|
||||
return "(unknown)";
|
||||
@@ -2714,6 +2725,18 @@ meta_prefs_get_compositing_manager (void)
|
||||
return compositing_manager;
|
||||
}
|
||||
|
||||
guint
|
||||
meta_prefs_get_mouse_button_resize (void)
|
||||
{
|
||||
return resize_with_right_button ? 3: 2;
|
||||
}
|
||||
|
||||
guint
|
||||
meta_prefs_get_mouse_button_menu (void)
|
||||
{
|
||||
return resize_with_right_button ? 2: 3;
|
||||
}
|
||||
|
||||
void
|
||||
meta_prefs_set_compositing_manager (gboolean whether)
|
||||
{
|
||||
|
@@ -629,4 +629,7 @@ void meta_window_unset_demands_attention (MetaWindow *window);
|
||||
|
||||
void meta_window_update_icon_now (MetaWindow *window);
|
||||
|
||||
void meta_window_update_role (MetaWindow *window);
|
||||
void meta_window_update_net_wm_type (MetaWindow *window);
|
||||
|
||||
#endif
|
||||
|
@@ -9,13 +9,15 @@
|
||||
* Note that all the meta_window_reload_propert* functions require a
|
||||
* round trip to the server.
|
||||
*
|
||||
* \bug Not all the properties have moved over from their original
|
||||
* handler in window.c yet.
|
||||
* The guts of this system are in meta_display_init_window_prop_hooks().
|
||||
* Reading this function will give you insight into how this all fits
|
||||
* together.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001, 2002, 2003 Red Hat, Inc.
|
||||
* Copyright (C) 2004, 2005 Elijah Newren
|
||||
* Copyright (C) 2009 Thomas Thurman
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -50,59 +52,64 @@
|
||||
#define HOST_NAME_MAX 255
|
||||
#endif
|
||||
|
||||
typedef void (* InitValueFunc) (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value);
|
||||
typedef void (* ReloadValueFunc) (MetaWindow *window,
|
||||
MetaPropValue *value);
|
||||
MetaPropValue *value,
|
||||
gboolean initial);
|
||||
|
||||
struct _MetaWindowPropHooks
|
||||
typedef struct MetaWindowPropHooks
|
||||
{
|
||||
Atom property;
|
||||
InitValueFunc init_func;
|
||||
ReloadValueFunc reload_func;
|
||||
};
|
||||
Atom property;
|
||||
MetaPropValueType type;
|
||||
ReloadValueFunc reload_func;
|
||||
} MetaWindowPropHooks;
|
||||
|
||||
static void init_prop_value (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value);
|
||||
static void reload_prop_value (MetaWindow *window,
|
||||
MetaPropValue *value);
|
||||
MetaPropValue *value,
|
||||
gboolean initial);
|
||||
static MetaWindowPropHooks* find_hooks (MetaDisplay *display,
|
||||
Atom property);
|
||||
|
||||
|
||||
void
|
||||
meta_window_reload_property (MetaWindow *window,
|
||||
Atom property)
|
||||
Atom property,
|
||||
gboolean initial)
|
||||
{
|
||||
meta_window_reload_properties (window, &property, 1);
|
||||
meta_window_reload_properties (window, &property, 1, initial);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_reload_properties (MetaWindow *window,
|
||||
const Atom *properties,
|
||||
int n_properties)
|
||||
int n_properties,
|
||||
gboolean initial)
|
||||
{
|
||||
meta_window_reload_properties_from_xwindow (window,
|
||||
window->xwindow,
|
||||
properties,
|
||||
n_properties);
|
||||
n_properties,
|
||||
initial);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_reload_property_from_xwindow (MetaWindow *window,
|
||||
Window xwindow,
|
||||
Atom property)
|
||||
Atom property,
|
||||
gboolean initial)
|
||||
{
|
||||
meta_window_reload_properties_from_xwindow (window, xwindow, &property, 1);
|
||||
meta_window_reload_properties_from_xwindow (window, xwindow, &property, 1,
|
||||
initial);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_reload_properties_from_xwindow (MetaWindow *window,
|
||||
Window xwindow,
|
||||
const Atom *properties,
|
||||
int n_properties)
|
||||
int n_properties,
|
||||
gboolean initial)
|
||||
{
|
||||
int i;
|
||||
MetaPropValue *values;
|
||||
@@ -125,7 +132,7 @@ meta_window_reload_properties_from_xwindow (MetaWindow *window,
|
||||
i = 0;
|
||||
while (i < n_properties)
|
||||
{
|
||||
reload_prop_value (window, &values[i]);
|
||||
reload_prop_value (window, &values[i], initial);
|
||||
|
||||
++i;
|
||||
}
|
||||
@@ -141,39 +148,35 @@ init_prop_value (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
MetaWindowPropHooks *hooks;
|
||||
|
||||
value->type = META_PROP_VALUE_INVALID;
|
||||
value->atom = None;
|
||||
|
||||
hooks = find_hooks (display, property);
|
||||
if (hooks && hooks->init_func != NULL)
|
||||
(* hooks->init_func) (display, property, value);
|
||||
MetaWindowPropHooks *hooks = find_hooks (display, property);
|
||||
|
||||
if (!hooks || hooks->type == META_PROP_VALUE_INVALID)
|
||||
{
|
||||
value->type = META_PROP_VALUE_INVALID;
|
||||
value->atom = None;
|
||||
}
|
||||
else
|
||||
{
|
||||
value->type = hooks->type;
|
||||
value->atom = property;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reload_prop_value (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
MetaWindowPropHooks *hooks;
|
||||
|
||||
hooks = find_hooks (window->display, value->atom);
|
||||
if (hooks && hooks->reload_func != NULL)
|
||||
(* hooks->reload_func) (window, value);
|
||||
}
|
||||
MetaWindowPropHooks *hooks = find_hooks (window->display, value->atom);
|
||||
|
||||
static void
|
||||
init_wm_client_machine (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_STRING;
|
||||
value->atom = display->atom_WM_CLIENT_MACHINE;
|
||||
if (hooks && hooks->reload_func != NULL)
|
||||
(* hooks->reload_func) (window, value, initial);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_wm_client_machine (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
g_free (window->wm_client_machine);
|
||||
window->wm_client_machine = NULL;
|
||||
@@ -186,17 +189,68 @@ reload_wm_client_machine (MetaWindow *window,
|
||||
}
|
||||
|
||||
static void
|
||||
init_net_wm_pid (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
complain_about_broken_client (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
value->type = META_PROP_VALUE_CARDINAL;
|
||||
value->atom = display->atom__NET_WM_PID;
|
||||
meta_warning ("Broken client! Window %s changed client leader window or SM client ID\n",
|
||||
window->desc);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_wm_window_type (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
meta_window_update_net_wm_type (window);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_icon (MetaWindow *window,
|
||||
Atom atom)
|
||||
{
|
||||
meta_icon_cache_property_changed (&window->icon_cache,
|
||||
window->display,
|
||||
atom);
|
||||
meta_window_queue(window, META_QUEUE_UPDATE_ICON);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_wm_icon (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
reload_icon (window, window->display->atom__NET_WM_ICON);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_kwm_win_icon (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
reload_icon (window, window->display->atom__KWM_WIN_ICON);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_struts (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
meta_window_update_struts (window);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_wm_window_role (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
meta_window_update_role (window);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_wm_pid (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
@@ -214,18 +268,10 @@ reload_net_wm_pid (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
init_net_wm_user_time (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_CARDINAL;
|
||||
value->atom = display->atom__NET_WM_USER_TIME;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_wm_user_time (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
@@ -234,18 +280,10 @@ reload_net_wm_user_time (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
init_net_wm_user_time_window (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_WINDOW;
|
||||
value->atom = display->atom__NET_WM_USER_TIME_WINDOW;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_wm_user_time_window (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
@@ -293,7 +331,8 @@ reload_net_wm_user_time_window (MetaWindow *window,
|
||||
meta_window_reload_property_from_xwindow (
|
||||
window,
|
||||
window->user_time_window,
|
||||
window->display->atom__NET_WM_USER_TIME);
|
||||
window->display->atom__NET_WM_USER_TIME,
|
||||
initial);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -386,18 +425,10 @@ set_window_title (MetaWindow *window,
|
||||
window->title);
|
||||
}
|
||||
|
||||
static void
|
||||
init_net_wm_name (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_UTF8;
|
||||
value->atom = display->atom__NET_WM_NAME;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_wm_name (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
@@ -411,22 +442,15 @@ reload_net_wm_name (MetaWindow *window,
|
||||
{
|
||||
set_window_title (window, NULL);
|
||||
window->using_net_wm_name = FALSE;
|
||||
if (!initial)
|
||||
meta_window_reload_property (window, XA_WM_NAME, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
init_wm_name (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_TEXT_PROPERTY;
|
||||
value->atom = XA_WM_NAME;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_wm_name (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (window->using_net_wm_name)
|
||||
{
|
||||
@@ -461,18 +485,10 @@ set_icon_title (MetaWindow *window,
|
||||
window->using_net_wm_visible_icon_name = modified;
|
||||
}
|
||||
|
||||
static void
|
||||
init_net_wm_icon_name (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_UTF8;
|
||||
value->atom = display->atom__NET_WM_ICON_NAME;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_wm_icon_name (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
@@ -486,22 +502,15 @@ reload_net_wm_icon_name (MetaWindow *window,
|
||||
{
|
||||
set_icon_title (window, NULL);
|
||||
window->using_net_wm_icon_name = FALSE;
|
||||
if (!initial)
|
||||
meta_window_reload_property (window, XA_WM_ICON_NAME, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
init_wm_icon_name (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_TEXT_PROPERTY;
|
||||
value->atom = XA_WM_ICON_NAME;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_wm_icon_name (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (window->using_net_wm_icon_name)
|
||||
{
|
||||
@@ -523,18 +532,10 @@ reload_wm_icon_name (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
init_net_wm_state (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_ATOM_LIST;
|
||||
value->atom = display->atom__NET_WM_STATE;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_wm_state (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -542,6 +543,13 @@ reload_net_wm_state (MetaWindow *window,
|
||||
* clients don't change the property.
|
||||
*/
|
||||
|
||||
if (!initial) {
|
||||
/* no, they DON'T change the property */
|
||||
meta_verbose ("Ignoring _NET_WM_STATE: we should be the one who set "
|
||||
"the property in the first place\n");
|
||||
return;
|
||||
}
|
||||
|
||||
window->shaded = FALSE;
|
||||
window->maximized_horizontally = FALSE;
|
||||
window->maximized_vertically = FALSE;
|
||||
@@ -592,18 +600,10 @@ reload_net_wm_state (MetaWindow *window,
|
||||
meta_window_recalc_window_type (window);
|
||||
}
|
||||
|
||||
static void
|
||||
init_mwm_hints (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_MOTIF_HINTS;
|
||||
value->atom = display->atom__MOTIF_WM_HINTS;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_mwm_hints (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
MotifWmHints *hints;
|
||||
|
||||
@@ -725,18 +725,10 @@ reload_mwm_hints (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
init_wm_class (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_CLASS_HINT;
|
||||
value->atom = XA_WM_CLASS;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_wm_class (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (window->res_class)
|
||||
g_free (window->res_class);
|
||||
@@ -761,18 +753,10 @@ reload_wm_class (MetaWindow *window,
|
||||
window->res_name ? window->res_name : "none");
|
||||
}
|
||||
|
||||
static void
|
||||
init_net_wm_desktop (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_CARDINAL;
|
||||
value->atom = display->atom__NET_WM_DESKTOP;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_wm_desktop (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
@@ -784,18 +768,10 @@ reload_net_wm_desktop (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
init_net_startup_id (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_UTF8;
|
||||
value->atom = display->atom__NET_STARTUP_ID;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_net_startup_id (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
guint32 timestamp = window->net_wm_user_time;
|
||||
MetaWorkspace *workspace = NULL;
|
||||
@@ -830,18 +806,10 @@ reload_net_startup_id (MetaWindow *window,
|
||||
window->desc);
|
||||
}
|
||||
|
||||
static void
|
||||
init_update_counter (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_SYNC_COUNTER;
|
||||
value->atom = display->atom__NET_WM_SYNC_REQUEST_COUNTER;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_update_counter (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
@@ -855,17 +823,6 @@ reload_update_counter (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
init_normal_hints (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_SIZE_HINTS;
|
||||
value->atom = XA_WM_NORMAL_HINTS;
|
||||
}
|
||||
|
||||
|
||||
#define FLAG_TOGGLED_ON(old,new,flag) \
|
||||
(((old)->flags & (flag)) == 0 && \
|
||||
((new)->flags & (flag)) != 0)
|
||||
@@ -1270,7 +1227,8 @@ meta_set_normal_hints (MetaWindow *window,
|
||||
|
||||
static void
|
||||
reload_normal_hints (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
@@ -1285,22 +1243,16 @@ reload_normal_hints (MetaWindow *window,
|
||||
spew_size_hints_differences (&old_hints, &window->size_hints);
|
||||
|
||||
meta_window_recalc_features (window);
|
||||
|
||||
if (!initial)
|
||||
meta_window_queue(window, META_QUEUE_MOVE_RESIZE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
init_wm_protocols (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_ATOM_LIST;
|
||||
value->atom = display->atom_WM_PROTOCOLS;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_wm_protocols (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -1331,18 +1283,10 @@ reload_wm_protocols (MetaWindow *window,
|
||||
window->desc);
|
||||
}
|
||||
|
||||
static void
|
||||
init_wm_hints (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_WM_HINTS;
|
||||
value->atom = XA_WM_HINTS;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_wm_hints (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
Window old_group_leader;
|
||||
|
||||
@@ -1396,18 +1340,10 @@ reload_wm_hints (MetaWindow *window,
|
||||
meta_window_queue (window, META_QUEUE_UPDATE_ICON | META_QUEUE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
static void
|
||||
init_transient_for (MetaDisplay *display,
|
||||
Atom property,
|
||||
MetaPropValue *value)
|
||||
{
|
||||
value->type = META_PROP_VALUE_WINDOW;
|
||||
value->atom = XA_WM_TRANSIENT_FOR;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_transient_for (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
window->xtransient_for = None;
|
||||
|
||||
@@ -1453,184 +1389,90 @@ reload_transient_for (MetaWindow *window,
|
||||
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
#define N_HOOKS 26
|
||||
|
||||
/**
|
||||
* Initialises the property hooks system. Each row in the table named "hooks"
|
||||
* represents an action to take when a property is found on a newly-created
|
||||
* window, or when a property changes its value.
|
||||
*
|
||||
* The first column shows which atom the row concerns.
|
||||
* The second gives the type of the property data. The property will be
|
||||
* queried for its new value, unless the type is given as
|
||||
* META_PROP_VALUE_INVALID, in which case nothing will be queried.
|
||||
* The third column gives the name of a callback which gets called with the
|
||||
* new value. (If the new value was not retrieved because the second column
|
||||
* was META_PROP_VALUE_INVALID, the callback still gets called anyway.)
|
||||
* This value may be NULL, in which case no callback will be called.
|
||||
*/
|
||||
void
|
||||
meta_display_init_window_prop_hooks (MetaDisplay *display)
|
||||
{
|
||||
int i;
|
||||
MetaWindowPropHooks *hooks;
|
||||
|
||||
MetaWindowPropHooks hooks[] = {
|
||||
{ display->atom_WM_STATE, META_PROP_VALUE_INVALID, NULL },
|
||||
{ display->atom_WM_CLIENT_MACHINE, META_PROP_VALUE_STRING, reload_wm_client_machine },
|
||||
{ display->atom__NET_WM_PID, META_PROP_VALUE_CARDINAL, reload_net_wm_pid },
|
||||
{ display->atom__NET_WM_USER_TIME, META_PROP_VALUE_CARDINAL, reload_net_wm_user_time },
|
||||
{ display->atom__NET_WM_NAME, META_PROP_VALUE_UTF8, reload_net_wm_name },
|
||||
{ XA_WM_NAME, META_PROP_VALUE_TEXT_PROPERTY, reload_wm_name },
|
||||
{ display->atom__NET_WM_ICON, META_PROP_VALUE_INVALID, reload_net_wm_icon },
|
||||
{ display->atom__KWM_WIN_ICON, META_PROP_VALUE_INVALID, reload_kwm_win_icon },
|
||||
{ display->atom__NET_WM_ICON_NAME, META_PROP_VALUE_UTF8, reload_net_wm_icon_name },
|
||||
{ XA_WM_ICON_NAME, META_PROP_VALUE_TEXT_PROPERTY, reload_wm_icon_name },
|
||||
{ display->atom__NET_WM_STATE, META_PROP_VALUE_ATOM_LIST, reload_net_wm_state },
|
||||
{ display->atom__MOTIF_WM_HINTS, META_PROP_VALUE_MOTIF_HINTS, reload_mwm_hints },
|
||||
{ display->atom__NET_WM_ICON_GEOMETRY, META_PROP_VALUE_INVALID, NULL },
|
||||
{ XA_WM_CLASS, META_PROP_VALUE_CLASS_HINT, reload_wm_class },
|
||||
{ display->atom_WM_CLIENT_LEADER, META_PROP_VALUE_INVALID, complain_about_broken_client },
|
||||
{ display->atom_SM_CLIENT_ID, META_PROP_VALUE_INVALID, complain_about_broken_client },
|
||||
{ display->atom_WM_WINDOW_ROLE, META_PROP_VALUE_INVALID, reload_wm_window_role },
|
||||
{ display->atom__NET_WM_WINDOW_TYPE, META_PROP_VALUE_INVALID, reload_net_wm_window_type },
|
||||
{ display->atom__NET_WM_DESKTOP, META_PROP_VALUE_CARDINAL, reload_net_wm_desktop },
|
||||
{ display->atom__NET_WM_STRUT, META_PROP_VALUE_INVALID, reload_struts },
|
||||
{ display->atom__NET_WM_STRUT_PARTIAL, META_PROP_VALUE_INVALID, reload_struts },
|
||||
{ display->atom__NET_STARTUP_ID, META_PROP_VALUE_UTF8, reload_net_startup_id },
|
||||
{ display->atom__NET_WM_SYNC_REQUEST_COUNTER, META_PROP_VALUE_SYNC_COUNTER, reload_update_counter },
|
||||
{ XA_WM_NORMAL_HINTS, META_PROP_VALUE_SIZE_HINTS, reload_normal_hints },
|
||||
{ display->atom_WM_PROTOCOLS, META_PROP_VALUE_ATOM_LIST, reload_wm_protocols },
|
||||
{ XA_WM_HINTS, META_PROP_VALUE_WM_HINTS, reload_wm_hints },
|
||||
{ XA_WM_TRANSIENT_FOR, META_PROP_VALUE_WINDOW, reload_transient_for },
|
||||
{ display->atom__NET_WM_USER_TIME_WINDOW, META_PROP_VALUE_WINDOW, reload_net_wm_user_time_window },
|
||||
{ 0 },
|
||||
};
|
||||
|
||||
MetaWindowPropHooks *table = g_memdup (hooks, sizeof (hooks)),
|
||||
*cursor = table;
|
||||
|
||||
g_assert (display->prop_hooks == NULL);
|
||||
|
||||
display->prop_hooks = g_new0 (MetaWindowPropHooks, N_HOOKS);
|
||||
hooks = display->prop_hooks;
|
||||
|
||||
i = 0;
|
||||
display->prop_hooks_table = (gpointer) table;
|
||||
display->prop_hooks = g_hash_table_new (NULL, NULL);
|
||||
|
||||
hooks[i].property = display->atom_WM_STATE;
|
||||
hooks[i].init_func = NULL;
|
||||
hooks[i].reload_func = NULL;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom_WM_CLIENT_MACHINE;
|
||||
hooks[i].init_func = init_wm_client_machine;
|
||||
hooks[i].reload_func = reload_wm_client_machine;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_PID;
|
||||
hooks[i].init_func = init_net_wm_pid;
|
||||
hooks[i].reload_func = reload_net_wm_pid;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_USER_TIME;
|
||||
hooks[i].init_func = init_net_wm_user_time;
|
||||
hooks[i].reload_func = reload_net_wm_user_time;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_NAME;
|
||||
hooks[i].init_func = init_net_wm_name;
|
||||
hooks[i].reload_func = reload_net_wm_name;
|
||||
++i;
|
||||
|
||||
hooks[i].property = XA_WM_NAME;
|
||||
hooks[i].init_func = init_wm_name;
|
||||
hooks[i].reload_func = reload_wm_name;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_ICON_NAME;
|
||||
hooks[i].init_func = init_net_wm_icon_name;
|
||||
hooks[i].reload_func = reload_net_wm_icon_name;
|
||||
++i;
|
||||
|
||||
hooks[i].property = XA_WM_ICON_NAME;
|
||||
hooks[i].init_func = init_wm_icon_name;
|
||||
hooks[i].reload_func = reload_wm_icon_name;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_STATE;
|
||||
hooks[i].init_func = init_net_wm_state;
|
||||
hooks[i].reload_func = reload_net_wm_state;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__MOTIF_WM_HINTS;
|
||||
hooks[i].init_func = init_mwm_hints;
|
||||
hooks[i].reload_func = reload_mwm_hints;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_ICON_GEOMETRY;
|
||||
hooks[i].init_func = NULL;
|
||||
hooks[i].reload_func = NULL;
|
||||
++i;
|
||||
|
||||
hooks[i].property = XA_WM_CLASS;
|
||||
hooks[i].init_func = init_wm_class;
|
||||
hooks[i].reload_func = reload_wm_class;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom_WM_CLIENT_LEADER;
|
||||
hooks[i].init_func = NULL;
|
||||
hooks[i].reload_func = NULL;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom_SM_CLIENT_ID;
|
||||
hooks[i].init_func = NULL;
|
||||
hooks[i].reload_func = NULL;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom_WM_WINDOW_ROLE;
|
||||
hooks[i].init_func = NULL;
|
||||
hooks[i].reload_func = NULL;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_WINDOW_TYPE;
|
||||
hooks[i].init_func = NULL;
|
||||
hooks[i].reload_func = NULL;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_DESKTOP;
|
||||
hooks[i].init_func = init_net_wm_desktop;
|
||||
hooks[i].reload_func = reload_net_wm_desktop;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_STRUT;
|
||||
hooks[i].init_func = NULL;
|
||||
hooks[i].reload_func = NULL;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_STRUT_PARTIAL;
|
||||
hooks[i].init_func = NULL;
|
||||
hooks[i].reload_func = NULL;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_STARTUP_ID;
|
||||
hooks[i].init_func = init_net_startup_id;
|
||||
hooks[i].reload_func = reload_net_startup_id;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_SYNC_REQUEST_COUNTER;
|
||||
hooks[i].init_func = init_update_counter;
|
||||
hooks[i].reload_func = reload_update_counter;
|
||||
++i;
|
||||
|
||||
hooks[i].property = XA_WM_NORMAL_HINTS;
|
||||
hooks[i].init_func = init_normal_hints;
|
||||
hooks[i].reload_func = reload_normal_hints;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom_WM_PROTOCOLS;
|
||||
hooks[i].init_func = init_wm_protocols;
|
||||
hooks[i].reload_func = reload_wm_protocols;
|
||||
++i;
|
||||
|
||||
hooks[i].property = XA_WM_HINTS;
|
||||
hooks[i].init_func = init_wm_hints;
|
||||
hooks[i].reload_func = reload_wm_hints;
|
||||
++i;
|
||||
|
||||
hooks[i].property = XA_WM_TRANSIENT_FOR;
|
||||
hooks[i].init_func = init_transient_for;
|
||||
hooks[i].reload_func = reload_transient_for;
|
||||
++i;
|
||||
|
||||
hooks[i].property = display->atom__NET_WM_USER_TIME_WINDOW;
|
||||
hooks[i].init_func = init_net_wm_user_time_window;
|
||||
hooks[i].reload_func = reload_net_wm_user_time_window;
|
||||
++i;
|
||||
|
||||
if (i != N_HOOKS)
|
||||
while (cursor->property)
|
||||
{
|
||||
g_error ("Initialized %d hooks should have been %d\n", i, N_HOOKS);
|
||||
/* Atoms are safe to use with GINT_TO_POINTER because it's safe with
|
||||
* anything 32 bits or less, and atoms are 32 bits with the top three
|
||||
* bits clear. (Scheifler & Gettys, 2e, p372)
|
||||
*/
|
||||
g_hash_table_insert (display->prop_hooks,
|
||||
GINT_TO_POINTER (cursor->property),
|
||||
cursor);
|
||||
cursor++;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_free_window_prop_hooks (MetaDisplay *display)
|
||||
{
|
||||
g_assert (display->prop_hooks != NULL);
|
||||
|
||||
g_free (display->prop_hooks);
|
||||
g_hash_table_unref (display->prop_hooks);
|
||||
display->prop_hooks = NULL;
|
||||
|
||||
g_free (display->prop_hooks_table);
|
||||
display->prop_hooks_table = NULL;
|
||||
}
|
||||
|
||||
static MetaWindowPropHooks*
|
||||
find_hooks (MetaDisplay *display,
|
||||
Atom property)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* FIXME we could sort the array and do binary search or
|
||||
* something
|
||||
*/
|
||||
|
||||
i = 0;
|
||||
while (i < N_HOOKS)
|
||||
{
|
||||
if (display->prop_hooks[i].property == property)
|
||||
return &display->prop_hooks[i];
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return g_hash_table_lookup (display->prop_hooks,
|
||||
GINT_TO_POINTER (property));
|
||||
}
|
||||
|
@@ -43,7 +43,8 @@
|
||||
* \param property A single X atom.
|
||||
*/
|
||||
void meta_window_reload_property (MetaWindow *window,
|
||||
Atom property);
|
||||
Atom property,
|
||||
gboolean initial);
|
||||
|
||||
|
||||
/**
|
||||
@@ -57,7 +58,8 @@ void meta_window_reload_property (MetaWindow *window,
|
||||
*/
|
||||
void meta_window_reload_properties (MetaWindow *window,
|
||||
const Atom *properties,
|
||||
int n_properties);
|
||||
int n_properties,
|
||||
gboolean initial);
|
||||
|
||||
/**
|
||||
* Requests the current values of a single property for a given
|
||||
@@ -72,7 +74,8 @@ void meta_window_reload_properties (MetaWindow *window,
|
||||
void meta_window_reload_property_from_xwindow
|
||||
(MetaWindow *window,
|
||||
Window xwindow,
|
||||
Atom property);
|
||||
Atom property,
|
||||
gboolean initial);
|
||||
|
||||
/**
|
||||
* Requests the current values of a set of properties for a given
|
||||
@@ -89,7 +92,8 @@ void meta_window_reload_properties_from_xwindow
|
||||
(MetaWindow *window,
|
||||
Window xwindow,
|
||||
const Atom *properties,
|
||||
int n_properties);
|
||||
int n_properties,
|
||||
gboolean initial);
|
||||
|
||||
/**
|
||||
* Initialises the hooks used for the reload_propert* functions
|
||||
|
@@ -57,8 +57,6 @@ static int destroying_windows_disallowed = 0;
|
||||
|
||||
|
||||
static void update_sm_hints (MetaWindow *window);
|
||||
static void update_role (MetaWindow *window);
|
||||
static void update_net_wm_type (MetaWindow *window);
|
||||
static void update_net_frame_extents (MetaWindow *window);
|
||||
static void recalc_window_type (MetaWindow *window);
|
||||
static void recalc_window_features (MetaWindow *window);
|
||||
@@ -595,11 +593,11 @@ meta_window_new_with_attrs (MetaDisplay *display,
|
||||
initial_props[i++] = display->atom__NET_WM_FULLSCREEN_MONITORS;
|
||||
g_assert (N_INITIAL_PROPS == i);
|
||||
|
||||
meta_window_reload_properties (window, initial_props, N_INITIAL_PROPS);
|
||||
meta_window_reload_properties (window, initial_props, N_INITIAL_PROPS, TRUE);
|
||||
|
||||
update_sm_hints (window); /* must come after transient_for */
|
||||
update_role (window);
|
||||
update_net_wm_type (window);
|
||||
meta_window_update_role (window);
|
||||
meta_window_update_net_wm_type (window);
|
||||
meta_window_update_icon_now (window);
|
||||
|
||||
if (window->initially_iconic)
|
||||
@@ -4762,6 +4760,7 @@ meta_window_property_notify (MetaWindow *window,
|
||||
#define _NET_WM_MOVERESIZE_MOVE 8
|
||||
#define _NET_WM_MOVERESIZE_SIZE_KEYBOARD 9
|
||||
#define _NET_WM_MOVERESIZE_MOVE_KEYBOARD 10
|
||||
#define _NET_WM_MOVERESIZE_CANCEL 11
|
||||
|
||||
gboolean
|
||||
meta_window_client_message (MetaWindow *window,
|
||||
@@ -5094,11 +5093,18 @@ meta_window_client_message (MetaWindow *window,
|
||||
case _NET_WM_MOVERESIZE_MOVE_KEYBOARD:
|
||||
op = META_GRAB_OP_KEYBOARD_MOVING;
|
||||
break;
|
||||
case _NET_WM_MOVERESIZE_CANCEL:
|
||||
/* handled below */
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (op != META_GRAB_OP_NONE &&
|
||||
if (action == _NET_WM_MOVERESIZE_CANCEL)
|
||||
{
|
||||
meta_display_end_grab_op (window->display, timestamp);
|
||||
}
|
||||
else if (op != META_GRAB_OP_NONE &&
|
||||
((window->has_move_func && op == META_GRAB_OP_KEYBOARD_MOVING) ||
|
||||
(window->has_resize_func && op == META_GRAB_OP_KEYBOARD_RESIZING_UNKNOWN)))
|
||||
{
|
||||
@@ -5423,21 +5429,7 @@ static gboolean
|
||||
process_property_notify (MetaWindow *window,
|
||||
XPropertyEvent *event)
|
||||
{
|
||||
/* First, property notifies to ignore because we shouldn't honor
|
||||
* new values
|
||||
*/
|
||||
if (event->atom == window->display->atom__NET_WM_STATE)
|
||||
{
|
||||
meta_verbose ("Property notify on %s for _NET_WM_STATE, ignoring (we should be the one who set the property in the first place)\n",
|
||||
window->desc);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Second, property notifies we want to use.
|
||||
* FIXME once we move entirely to the window-props.h framework, we
|
||||
* can just call reload on the property in the event and get rid of
|
||||
* this if-else chain.
|
||||
*/
|
||||
Window xid = window->xwindow;
|
||||
|
||||
if (meta_is_verbose ()) /* avoid looking up the name if we don't have to */
|
||||
{
|
||||
@@ -5449,122 +5441,13 @@ process_property_notify (MetaWindow *window,
|
||||
XFree (property_name);
|
||||
}
|
||||
|
||||
if (event->atom == XA_WM_NAME)
|
||||
if (event->atom == window->display->atom__NET_WM_USER_TIME &&
|
||||
window->user_time_window)
|
||||
{
|
||||
/* don't bother reloading WM_NAME if using _NET_WM_NAME already */
|
||||
if (!window->using_net_wm_name)
|
||||
meta_window_reload_property (window, XA_WM_NAME);
|
||||
xid = window->user_time_window;
|
||||
}
|
||||
else if (event->atom == window->display->atom__NET_WM_NAME)
|
||||
{
|
||||
meta_window_reload_property (window, window->display->atom__NET_WM_NAME);
|
||||
|
||||
/* if _NET_WM_NAME was unset, reload WM_NAME */
|
||||
if (!window->using_net_wm_name)
|
||||
meta_window_reload_property (window, XA_WM_NAME);
|
||||
}
|
||||
else if (event->atom == XA_WM_ICON_NAME)
|
||||
{
|
||||
/* don't bother reloading WM_ICON_NAME if using _NET_WM_ICON_NAME already */
|
||||
if (!window->using_net_wm_icon_name)
|
||||
meta_window_reload_property (window, XA_WM_ICON_NAME);
|
||||
}
|
||||
else if (event->atom == window->display->atom__NET_WM_ICON_NAME)
|
||||
{
|
||||
meta_window_reload_property (window, window->display->atom__NET_WM_ICON_NAME);
|
||||
|
||||
/* if _NET_WM_ICON_NAME was unset, reload WM_ICON_NAME */
|
||||
if (!window->using_net_wm_icon_name)
|
||||
meta_window_reload_property (window, XA_WM_ICON_NAME);
|
||||
}
|
||||
else if (event->atom == XA_WM_NORMAL_HINTS)
|
||||
{
|
||||
meta_window_reload_property (window, XA_WM_NORMAL_HINTS);
|
||||
|
||||
/* See if we need to constrain current size */
|
||||
meta_window_queue(window, META_QUEUE_MOVE_RESIZE);
|
||||
}
|
||||
else if (event->atom == window->display->atom_WM_PROTOCOLS)
|
||||
{
|
||||
meta_window_reload_property (window, window->display->atom_WM_PROTOCOLS);
|
||||
}
|
||||
else if (event->atom == XA_WM_HINTS)
|
||||
{
|
||||
meta_window_reload_property (window, XA_WM_HINTS);
|
||||
}
|
||||
else if (event->atom == window->display->atom__MOTIF_WM_HINTS)
|
||||
{
|
||||
meta_window_reload_property (window,
|
||||
window->display->atom__MOTIF_WM_HINTS);
|
||||
}
|
||||
else if (event->atom == XA_WM_CLASS)
|
||||
{
|
||||
meta_window_reload_property (window, XA_WM_CLASS);
|
||||
}
|
||||
else if (event->atom == XA_WM_TRANSIENT_FOR)
|
||||
{
|
||||
meta_window_reload_property (window, XA_WM_TRANSIENT_FOR);
|
||||
}
|
||||
else if (event->atom ==
|
||||
window->display->atom_WM_WINDOW_ROLE)
|
||||
{
|
||||
update_role (window);
|
||||
}
|
||||
else if (event->atom ==
|
||||
window->display->atom_WM_CLIENT_LEADER ||
|
||||
event->atom ==
|
||||
window->display->atom_SM_CLIENT_ID)
|
||||
{
|
||||
meta_warning ("Broken client! Window %s changed client leader window or SM client ID\n", window->desc);
|
||||
}
|
||||
else if (event->atom ==
|
||||
window->display->atom__NET_WM_WINDOW_TYPE)
|
||||
{
|
||||
update_net_wm_type (window);
|
||||
}
|
||||
else if (event->atom == window->display->atom__NET_WM_ICON)
|
||||
{
|
||||
meta_icon_cache_property_changed (&window->icon_cache,
|
||||
window->display,
|
||||
event->atom);
|
||||
meta_window_queue(window, META_QUEUE_UPDATE_ICON);
|
||||
}
|
||||
else if (event->atom == window->display->atom__KWM_WIN_ICON)
|
||||
{
|
||||
meta_icon_cache_property_changed (&window->icon_cache,
|
||||
window->display,
|
||||
event->atom);
|
||||
meta_window_queue(window, META_QUEUE_UPDATE_ICON);
|
||||
}
|
||||
else if ((event->atom == window->display->atom__NET_WM_STRUT) ||
|
||||
(event->atom == window->display->atom__NET_WM_STRUT_PARTIAL))
|
||||
{
|
||||
meta_window_update_struts (window);
|
||||
}
|
||||
else if (event->atom == window->display->atom__NET_STARTUP_ID)
|
||||
{
|
||||
meta_window_reload_property (window,
|
||||
window->display->atom__NET_STARTUP_ID);
|
||||
}
|
||||
else if (event->atom == window->display->atom__NET_WM_SYNC_REQUEST_COUNTER)
|
||||
{
|
||||
meta_window_reload_property (window,
|
||||
window->display->atom__NET_WM_SYNC_REQUEST_COUNTER);
|
||||
}
|
||||
else if (event->atom == window->display->atom__NET_WM_USER_TIME)
|
||||
{
|
||||
Window xid;
|
||||
Atom atom__NET_WM_USER_TIME;
|
||||
|
||||
atom__NET_WM_USER_TIME = window->display->atom__NET_WM_USER_TIME;
|
||||
if (window->user_time_window)
|
||||
xid = window->user_time_window;
|
||||
else
|
||||
xid = window->xwindow;
|
||||
meta_window_reload_property_from_xwindow (window,
|
||||
xid,
|
||||
atom__NET_WM_USER_TIME);
|
||||
}
|
||||
meta_window_reload_property (window, event->atom, FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -5754,8 +5637,8 @@ update_sm_hints (MetaWindow *window)
|
||||
window->sm_client_id ? window->sm_client_id : "none");
|
||||
}
|
||||
|
||||
static void
|
||||
update_role (MetaWindow *window)
|
||||
void
|
||||
meta_window_update_role (MetaWindow *window)
|
||||
{
|
||||
char *str;
|
||||
|
||||
@@ -5775,8 +5658,8 @@ update_role (MetaWindow *window)
|
||||
window->desc, window->role ? window->role : "null");
|
||||
}
|
||||
|
||||
static void
|
||||
update_net_wm_type (MetaWindow *window)
|
||||
void
|
||||
meta_window_update_net_wm_type (MetaWindow *window)
|
||||
{
|
||||
int n_atoms;
|
||||
Atom *atoms;
|
||||
@@ -5833,7 +5716,7 @@ update_net_wm_type (MetaWindow *window)
|
||||
meta_XFree (str);
|
||||
}
|
||||
|
||||
recalc_window_type (window);
|
||||
meta_window_recalc_window_type (window);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -58,7 +58,8 @@ typedef enum
|
||||
META_PREF_GNOME_ANIMATIONS,
|
||||
META_PREF_CURSOR_THEME,
|
||||
META_PREF_CURSOR_SIZE,
|
||||
META_PREF_COMPOSITING_MANAGER
|
||||
META_PREF_COMPOSITING_MANAGER,
|
||||
META_PREF_RESIZE_WITH_RIGHT_BUTTON
|
||||
} MetaPreference;
|
||||
|
||||
typedef void (* MetaPrefsChangedFunc) (MetaPreference pref,
|
||||
@@ -73,6 +74,8 @@ void meta_prefs_init (void);
|
||||
const char* meta_preference_to_string (MetaPreference pref);
|
||||
|
||||
MetaVirtualModifier meta_prefs_get_mouse_button_mods (void);
|
||||
guint meta_prefs_get_mouse_button_resize (void);
|
||||
guint meta_prefs_get_mouse_button_menu (void);
|
||||
MetaFocusMode meta_prefs_get_focus_mode (void);
|
||||
MetaFocusNewWindows meta_prefs_get_focus_new_windows (void);
|
||||
gboolean meta_prefs_get_raise_on_click (void);
|
||||
|
@@ -15,12 +15,31 @@
|
||||
Clicking a window while holding down this modifier key
|
||||
will move the window (left click), resize the window
|
||||
(middle click), or show the window menu (right click).
|
||||
The left and right operations may be swapped
|
||||
using the "mouse_button_resize" key.
|
||||
Modifier is expressed as "<Alt>" or "<Super>"
|
||||
for example.
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/apps/metacity/general/resize_with_right_button</key>
|
||||
<applyto>/apps/metacity/general/resize_with_right_button</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>bool</type>
|
||||
<default>false</default>
|
||||
<locale name="C">
|
||||
<short>Whether to resize with the right button</short>
|
||||
<long>
|
||||
Set this to true to resize with the right button and show a menu
|
||||
with the middle button while holding down the key given in
|
||||
"mouse_button_modifier"; set it to false to make it work the
|
||||
opposite way around.
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/apps/metacity/general/button_layout</key>
|
||||
<applyto>/apps/metacity/general/button_layout</applyto>
|
||||
|
@@ -68,6 +68,9 @@ static gboolean meta_frames_enter_notify_event (GtkWidget *widget,
|
||||
static gboolean meta_frames_leave_notify_event (GtkWidget *widget,
|
||||
GdkEventCrossing *event);
|
||||
|
||||
static void meta_frames_attach_style (MetaFrames *frames,
|
||||
MetaUIFrame *frame);
|
||||
|
||||
static void meta_frames_paint_to_drawable (MetaFrames *frames,
|
||||
MetaUIFrame *frame,
|
||||
GdkDrawable *drawable,
|
||||
@@ -420,6 +423,18 @@ meta_frames_button_layout_changed (MetaFrames *frames)
|
||||
queue_draw_func, frames);
|
||||
}
|
||||
|
||||
static void
|
||||
reattach_style_func (gpointer key, gpointer value, gpointer data)
|
||||
{
|
||||
MetaUIFrame *frame;
|
||||
MetaFrames *frames;
|
||||
|
||||
frames = META_FRAMES (data);
|
||||
frame = value;
|
||||
|
||||
meta_frames_attach_style (frames, frame);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_frames_style_set (GtkWidget *widget,
|
||||
GtkStyle *prev_style)
|
||||
@@ -430,6 +445,9 @@ meta_frames_style_set (GtkWidget *widget,
|
||||
|
||||
meta_frames_font_changed (frames);
|
||||
|
||||
g_hash_table_foreach (frames->frames,
|
||||
reattach_style_func, frames);
|
||||
|
||||
GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style);
|
||||
}
|
||||
|
||||
@@ -561,6 +579,24 @@ meta_frames_new (int screen_number)
|
||||
NULL);
|
||||
}
|
||||
|
||||
/* In order to use a style with a window it has to be attached to that
|
||||
* window. Actually, the colormaps just have to match, but since GTK+
|
||||
* already takes care of making sure that its cheap to attach a style
|
||||
* to multiple windows with the same colormap, we can just go ahead
|
||||
* and attach separately for each window.
|
||||
*/
|
||||
static void
|
||||
meta_frames_attach_style (MetaFrames *frames,
|
||||
MetaUIFrame *frame)
|
||||
{
|
||||
if (frame->style != NULL)
|
||||
gtk_style_detach (frame->style);
|
||||
|
||||
/* Weirdly, gtk_style_attach() steals a reference count from the style passed in */
|
||||
gtk_style_ref (GTK_WIDGET (frames)->style);
|
||||
frame->style = gtk_style_attach (GTK_WIDGET (frames)->style, frame->window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_frames_manage_window (MetaFrames *frames,
|
||||
Window xwindow,
|
||||
@@ -576,6 +612,9 @@ meta_frames_manage_window (MetaFrames *frames,
|
||||
|
||||
gdk_window_set_user_data (frame->window, frames);
|
||||
|
||||
frame->style = NULL;
|
||||
meta_frames_attach_style (frames, frame);
|
||||
|
||||
/* Don't set event mask here, it's in frame.c */
|
||||
|
||||
frame->xwindow = xwindow;
|
||||
@@ -626,6 +665,8 @@ meta_frames_unmanage_window (MetaFrames *frames,
|
||||
|
||||
g_hash_table_remove (frames->frames, &frame->xwindow);
|
||||
|
||||
gtk_style_detach (frame->style);
|
||||
|
||||
gdk_window_destroy (frame->window);
|
||||
|
||||
if (frame->layout)
|
||||
@@ -2435,7 +2476,8 @@ meta_frames_paint_to_drawable (MetaFrames *frames,
|
||||
|
||||
gdk_window_begin_paint_rect (drawable, &areas[i]);
|
||||
|
||||
meta_theme_draw_frame (meta_theme_get_current (),
|
||||
meta_theme_draw_frame_with_style (meta_theme_get_current (),
|
||||
frame->style,
|
||||
widget,
|
||||
drawable,
|
||||
NULL, /* &areas[i], */
|
||||
@@ -2460,19 +2502,20 @@ meta_frames_paint_to_drawable (MetaFrames *frames,
|
||||
{
|
||||
/* Not a window; happens about 1/3 of the time */
|
||||
|
||||
meta_theme_draw_frame (meta_theme_get_current (),
|
||||
widget,
|
||||
drawable,
|
||||
NULL,
|
||||
x_offset, y_offset,
|
||||
type,
|
||||
flags,
|
||||
w, h,
|
||||
frame->layout,
|
||||
frame->text_height,
|
||||
&button_layout,
|
||||
button_states,
|
||||
mini_icon, icon);
|
||||
meta_theme_draw_frame_with_style (meta_theme_get_current (),
|
||||
frame->style,
|
||||
widget,
|
||||
drawable,
|
||||
NULL,
|
||||
x_offset, y_offset,
|
||||
type,
|
||||
flags,
|
||||
w, h,
|
||||
frame->layout,
|
||||
frame->text_height,
|
||||
&button_layout,
|
||||
button_states,
|
||||
mini_icon, icon);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2525,7 +2568,7 @@ meta_frames_set_window_background (MetaFrames *frames,
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_style_set_background (GTK_WIDGET (frames)->style,
|
||||
gtk_style_set_background (frame->style,
|
||||
frame->window, GTK_STATE_NORMAL);
|
||||
}
|
||||
}
|
||||
|
@@ -75,6 +75,7 @@ struct _MetaUIFrame
|
||||
{
|
||||
Window xwindow;
|
||||
GdkWindow *window;
|
||||
GtkStyle *style;
|
||||
MetaFrameStyle *cache_style;
|
||||
PangoLayout *layout;
|
||||
int text_height;
|
||||
|
252
src/ui/theme.c
252
src/ui/theme.c
@@ -3457,6 +3457,7 @@ fill_env (MetaPositionExprEnv *env,
|
||||
|
||||
static void
|
||||
meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
@@ -3649,7 +3650,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
rwidth = parse_size_unchecked (op->data.gtk_arrow.width, env);
|
||||
rheight = parse_size_unchecked (op->data.gtk_arrow.height, env);
|
||||
|
||||
gtk_paint_arrow (widget->style,
|
||||
gtk_paint_arrow (style_gtk,
|
||||
drawable,
|
||||
op->data.gtk_arrow.state,
|
||||
op->data.gtk_arrow.shadow,
|
||||
@@ -3671,7 +3672,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
rwidth = parse_size_unchecked (op->data.gtk_box.width, env);
|
||||
rheight = parse_size_unchecked (op->data.gtk_box.height, env);
|
||||
|
||||
gtk_paint_box (widget->style,
|
||||
gtk_paint_box (style_gtk,
|
||||
drawable,
|
||||
op->data.gtk_box.state,
|
||||
op->data.gtk_box.shadow,
|
||||
@@ -3690,7 +3691,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
ry1 = parse_y_position_unchecked (op->data.gtk_vline.y1, env);
|
||||
ry2 = parse_y_position_unchecked (op->data.gtk_vline.y2, env);
|
||||
|
||||
gtk_paint_vline (widget->style,
|
||||
gtk_paint_vline (style_gtk,
|
||||
drawable,
|
||||
op->data.gtk_vline.state,
|
||||
(GdkRectangle*) clip,
|
||||
@@ -3752,9 +3753,9 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
d_rect.width = parse_size_unchecked (op->data.op_list.width, env);
|
||||
d_rect.height = parse_size_unchecked (op->data.op_list.height, env);
|
||||
|
||||
meta_draw_op_list_draw (op->data.op_list.op_list,
|
||||
widget, drawable, clip, info,
|
||||
d_rect);
|
||||
meta_draw_op_list_draw_with_style (op->data.op_list.op_list,
|
||||
style_gtk, widget, drawable, clip, info,
|
||||
d_rect);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -3794,9 +3795,9 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
tile.y = ry - tile_yoffset;
|
||||
while (tile.y < (ry + rheight))
|
||||
{
|
||||
meta_draw_op_list_draw (op->data.tile.op_list,
|
||||
widget, drawable, &new_clip, info,
|
||||
tile);
|
||||
meta_draw_op_list_draw_with_style (op->data.tile.op_list,
|
||||
style_gtk, widget, drawable, &new_clip, info,
|
||||
tile);
|
||||
|
||||
tile.y += tile.height;
|
||||
}
|
||||
@@ -3809,6 +3810,27 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_draw_op_draw_with_style (const MetaDrawOp *op,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
const MetaDrawInfo *info,
|
||||
MetaRectangle logical_region)
|
||||
{
|
||||
MetaPositionExprEnv env;
|
||||
|
||||
g_return_if_fail (style_gtk->colormap == gdk_drawable_get_colormap (drawable));
|
||||
|
||||
fill_env (&env, info, logical_region);
|
||||
|
||||
meta_draw_op_draw_with_env (op, style_gtk, widget, drawable, clip,
|
||||
info, logical_region,
|
||||
&env);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
meta_draw_op_draw (const MetaDrawOp *op,
|
||||
GtkWidget *widget,
|
||||
@@ -3817,14 +3839,8 @@ meta_draw_op_draw (const MetaDrawOp *op,
|
||||
const MetaDrawInfo *info,
|
||||
MetaRectangle logical_region)
|
||||
{
|
||||
MetaPositionExprEnv env;
|
||||
|
||||
fill_env (&env, info, logical_region);
|
||||
|
||||
meta_draw_op_draw_with_env (op, widget, drawable, clip,
|
||||
info, logical_region,
|
||||
&env);
|
||||
|
||||
meta_draw_op_draw_with_style (op, widget->style, widget,
|
||||
drawable, clip, info, logical_region);
|
||||
}
|
||||
|
||||
MetaDrawOpList*
|
||||
@@ -3875,18 +3891,21 @@ meta_draw_op_list_unref (MetaDrawOpList *op_list)
|
||||
}
|
||||
|
||||
void
|
||||
meta_draw_op_list_draw (const MetaDrawOpList *op_list,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
const MetaDrawInfo *info,
|
||||
MetaRectangle rect)
|
||||
meta_draw_op_list_draw_with_style (const MetaDrawOpList *op_list,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
const MetaDrawInfo *info,
|
||||
MetaRectangle rect)
|
||||
{
|
||||
int i;
|
||||
GdkRectangle active_clip;
|
||||
GdkRectangle orig_clip;
|
||||
MetaPositionExprEnv env;
|
||||
|
||||
g_return_if_fail (style_gtk->colormap == gdk_drawable_get_colormap (drawable));
|
||||
|
||||
if (op_list->n_ops == 0)
|
||||
return;
|
||||
|
||||
@@ -3934,13 +3953,26 @@ meta_draw_op_list_draw (const MetaDrawOpList *op_list,
|
||||
active_clip.height > 0)
|
||||
{
|
||||
meta_draw_op_draw_with_env (op,
|
||||
widget, drawable, &active_clip, info,
|
||||
style_gtk, widget, drawable, &active_clip, info,
|
||||
rect,
|
||||
&env);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_draw_op_list_draw (const MetaDrawOpList *op_list,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
const MetaDrawInfo *info,
|
||||
MetaRectangle rect)
|
||||
|
||||
{
|
||||
meta_draw_op_list_draw_with_style (op_list, widget->style, widget,
|
||||
drawable, clip, info, rect);
|
||||
}
|
||||
|
||||
void
|
||||
meta_draw_op_list_append (MetaDrawOpList *op_list,
|
||||
MetaDrawOp *op)
|
||||
@@ -4243,20 +4275,21 @@ button_rect (MetaButtonType type,
|
||||
}
|
||||
|
||||
void
|
||||
meta_frame_style_draw (MetaFrameStyle *style,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
int x_offset,
|
||||
int y_offset,
|
||||
const GdkRectangle *clip,
|
||||
const MetaFrameGeometry *fgeom,
|
||||
int client_width,
|
||||
int client_height,
|
||||
PangoLayout *title_layout,
|
||||
int text_height,
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST],
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon)
|
||||
meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
int x_offset,
|
||||
int y_offset,
|
||||
const GdkRectangle *clip,
|
||||
const MetaFrameGeometry *fgeom,
|
||||
int client_width,
|
||||
int client_height,
|
||||
PangoLayout *title_layout,
|
||||
int text_height,
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST],
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon)
|
||||
{
|
||||
int i, j;
|
||||
GdkRectangle titlebar_rect;
|
||||
@@ -4268,6 +4301,8 @@ meta_frame_style_draw (MetaFrameStyle *style,
|
||||
PangoRectangle extents;
|
||||
MetaDrawInfo draw_info;
|
||||
|
||||
g_return_if_fail (style_gtk->colormap == gdk_drawable_get_colormap (drawable));
|
||||
|
||||
titlebar_rect.x = 0;
|
||||
titlebar_rect.y = 0;
|
||||
titlebar_rect.width = fgeom->width;
|
||||
@@ -4418,12 +4453,13 @@ meta_frame_style_draw (MetaFrameStyle *style,
|
||||
{
|
||||
MetaRectangle m_rect;
|
||||
m_rect = meta_rect (rect.x, rect.y, rect.width, rect.height);
|
||||
meta_draw_op_list_draw (op_list,
|
||||
widget,
|
||||
drawable,
|
||||
&combined_clip,
|
||||
&draw_info,
|
||||
m_rect);
|
||||
meta_draw_op_list_draw_with_style (op_list,
|
||||
style_gtk,
|
||||
widget,
|
||||
drawable,
|
||||
&combined_clip,
|
||||
&draw_info,
|
||||
m_rect);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4460,12 +4496,13 @@ meta_frame_style_draw (MetaFrameStyle *style,
|
||||
MetaRectangle m_rect;
|
||||
m_rect = meta_rect (rect.x, rect.y,
|
||||
rect.width, rect.height);
|
||||
meta_draw_op_list_draw (op_list,
|
||||
widget,
|
||||
drawable,
|
||||
&combined_clip,
|
||||
&draw_info,
|
||||
m_rect);
|
||||
meta_draw_op_list_draw_with_style (op_list,
|
||||
style_gtk,
|
||||
widget,
|
||||
drawable,
|
||||
&combined_clip,
|
||||
&draw_info,
|
||||
m_rect);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4488,6 +4525,29 @@ meta_frame_style_draw (MetaFrameStyle *style,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_frame_style_draw (MetaFrameStyle *style,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
int x_offset,
|
||||
int y_offset,
|
||||
const GdkRectangle *clip,
|
||||
const MetaFrameGeometry *fgeom,
|
||||
int client_width,
|
||||
int client_height,
|
||||
PangoLayout *title_layout,
|
||||
int text_height,
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST],
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon)
|
||||
{
|
||||
meta_frame_style_draw_with_style (style, widget->style, widget,
|
||||
drawable, x_offset, y_offset,
|
||||
clip, fgeom, client_width, client_height,
|
||||
title_layout, text_height,
|
||||
button_states, mini_icon, icon);
|
||||
}
|
||||
|
||||
MetaFrameStyleSet*
|
||||
meta_frame_style_set_new (MetaFrameStyleSet *parent)
|
||||
{
|
||||
@@ -5034,6 +5094,58 @@ meta_theme_get_title_scale (MetaTheme *theme,
|
||||
return style->layout->title_scale;
|
||||
}
|
||||
|
||||
void
|
||||
meta_theme_draw_frame_with_style (MetaTheme *theme,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
int x_offset,
|
||||
int y_offset,
|
||||
MetaFrameType type,
|
||||
MetaFrameFlags flags,
|
||||
int client_width,
|
||||
int client_height,
|
||||
PangoLayout *title_layout,
|
||||
int text_height,
|
||||
const MetaButtonLayout *button_layout,
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST],
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon)
|
||||
{
|
||||
MetaFrameGeometry fgeom;
|
||||
MetaFrameStyle *style;
|
||||
|
||||
g_return_if_fail (type < META_FRAME_TYPE_LAST);
|
||||
|
||||
style = theme_get_style (theme, type, flags);
|
||||
|
||||
/* Parser is not supposed to allow this currently */
|
||||
if (style == NULL)
|
||||
return;
|
||||
|
||||
meta_frame_layout_calc_geometry (style->layout,
|
||||
text_height,
|
||||
flags,
|
||||
client_width, client_height,
|
||||
button_layout,
|
||||
&fgeom,
|
||||
theme);
|
||||
|
||||
meta_frame_style_draw_with_style (style,
|
||||
style_gtk,
|
||||
widget,
|
||||
drawable,
|
||||
x_offset, y_offset,
|
||||
clip,
|
||||
&fgeom,
|
||||
client_width, client_height,
|
||||
title_layout,
|
||||
text_height,
|
||||
button_states,
|
||||
mini_icon, icon);
|
||||
}
|
||||
|
||||
void
|
||||
meta_theme_draw_frame (MetaTheme *theme,
|
||||
GtkWidget *widget,
|
||||
@@ -5051,13 +5163,37 @@ meta_theme_draw_frame (MetaTheme *theme,
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST],
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon)
|
||||
{
|
||||
meta_theme_draw_frame_with_style (theme, widget->style, widget,
|
||||
drawable, clip, x_offset, y_offset, type,flags,
|
||||
client_width, client_height,
|
||||
title_layout, text_height,
|
||||
button_layout, button_states,
|
||||
mini_icon, icon);
|
||||
}
|
||||
|
||||
void
|
||||
meta_theme_draw_frame_by_name (MetaTheme *theme,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
int x_offset,
|
||||
int y_offset,
|
||||
const gchar *style_name,
|
||||
MetaFrameFlags flags,
|
||||
int client_width,
|
||||
int client_height,
|
||||
PangoLayout *title_layout,
|
||||
int text_height,
|
||||
const MetaButtonLayout *button_layout,
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST],
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon)
|
||||
{
|
||||
MetaFrameGeometry fgeom;
|
||||
MetaFrameStyle *style;
|
||||
|
||||
g_return_if_fail (type < META_FRAME_TYPE_LAST);
|
||||
|
||||
style = theme_get_style (theme, type, flags);
|
||||
style = meta_theme_lookup_style (theme, style_name);
|
||||
|
||||
/* Parser is not supposed to allow this currently */
|
||||
if (style == NULL)
|
||||
@@ -5084,6 +5220,16 @@ meta_theme_draw_frame (MetaTheme *theme,
|
||||
mini_icon, icon);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void
|
||||
meta_theme_get_frame_borders (MetaTheme *theme,
|
||||
MetaFrameType type,
|
||||
|
@@ -901,6 +901,15 @@ void meta_draw_op_draw (const MetaDrawOp *op,
|
||||
/* logical region being drawn */
|
||||
MetaRectangle logical_region);
|
||||
|
||||
void meta_draw_op_draw_with_style (const MetaDrawOp *op,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
const MetaDrawInfo *info,
|
||||
/* logical region being drawn */
|
||||
MetaRectangle logical_region);
|
||||
|
||||
MetaDrawOpList* meta_draw_op_list_new (int n_preallocs);
|
||||
void meta_draw_op_list_ref (MetaDrawOpList *op_list);
|
||||
void meta_draw_op_list_unref (MetaDrawOpList *op_list);
|
||||
@@ -910,6 +919,13 @@ void meta_draw_op_list_draw (const MetaDrawOpList *op_list,
|
||||
const GdkRectangle *clip,
|
||||
const MetaDrawInfo *info,
|
||||
MetaRectangle rect);
|
||||
void meta_draw_op_list_draw_with_style (const MetaDrawOpList *op_list,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
const MetaDrawInfo *info,
|
||||
MetaRectangle rect);
|
||||
void meta_draw_op_list_append (MetaDrawOpList *op_list,
|
||||
MetaDrawOp *op);
|
||||
gboolean meta_draw_op_list_validate (MetaDrawOpList *op_list,
|
||||
@@ -951,6 +967,23 @@ void meta_frame_style_draw (MetaFrameStyle *style,
|
||||
GdkPixbuf *icon);
|
||||
|
||||
|
||||
void meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
int x_offset,
|
||||
int y_offset,
|
||||
const GdkRectangle *clip,
|
||||
const MetaFrameGeometry *fgeom,
|
||||
int client_width,
|
||||
int client_height,
|
||||
PangoLayout *title_layout,
|
||||
int text_height,
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST],
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon);
|
||||
|
||||
|
||||
gboolean meta_frame_style_validate (MetaFrameStyle *style,
|
||||
guint current_theme_version,
|
||||
GError **error);
|
||||
@@ -1000,6 +1033,41 @@ void meta_theme_draw_frame (MetaTheme *theme,
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon);
|
||||
|
||||
void meta_theme_draw_frame_by_name (MetaTheme *theme,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
int x_offset,
|
||||
int y_offset,
|
||||
const gchar *style_name,
|
||||
MetaFrameFlags flags,
|
||||
int client_width,
|
||||
int client_height,
|
||||
PangoLayout *title_layout,
|
||||
int text_height,
|
||||
const MetaButtonLayout *button_layout,
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST],
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon);
|
||||
|
||||
void meta_theme_draw_frame_with_style (MetaTheme *theme,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
int x_offset,
|
||||
int y_offset,
|
||||
MetaFrameType type,
|
||||
MetaFrameFlags flags,
|
||||
int client_width,
|
||||
int client_height,
|
||||
PangoLayout *title_layout,
|
||||
int text_height,
|
||||
const MetaButtonLayout *button_layout,
|
||||
MetaButtonState button_states[META_BUTTON_TYPE_LAST],
|
||||
GdkPixbuf *mini_icon,
|
||||
GdkPixbuf *icon);
|
||||
|
||||
void meta_theme_get_frame_borders (MetaTheme *theme,
|
||||
MetaFrameType type,
|
||||
int text_height,
|
||||
|
10
src/ui/ui.c
10
src/ui/ui.c
@@ -671,10 +671,12 @@ meta_text_property_to_utf8 (Display *xdisplay,
|
||||
&list);
|
||||
|
||||
if (count == 0)
|
||||
return NULL;
|
||||
|
||||
retval = list[0];
|
||||
list[0] = g_strdup (""); /* something to free */
|
||||
retval = NULL;
|
||||
else
|
||||
{
|
||||
retval = list[0];
|
||||
list[0] = g_strdup (""); /* something to free */
|
||||
}
|
||||
|
||||
g_strfreev (list);
|
||||
|
||||
|
Reference in New Issue
Block a user