mirror of
https://github.com/brl/mutter.git
synced 2024-12-24 12:02:04 +00:00
Sync up to upstream 2.25.144
Conflicts: configure.in src/core/main.c src/core/prefs.c src/core/window.c src/include/prefs.h
This commit is contained in:
commit
39a3bb2c7d
144
ChangeLog
144
ChangeLog
@ -1,3 +1,147 @@
|
||||
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.
|
||||
|
||||
2008-12-25 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* src/include/all-keybindings.h: alt-F10 toggles maximisation,
|
||||
alt-F5 only restores. Also rename "unmaximize" to "restore".
|
||||
* src/ui/frames.c: Rename "unmaximize" to "restore".
|
||||
Closes #343824.
|
||||
|
||||
2008-12-25 Frederic Peters <fpeters@0d.be>
|
||||
|
||||
* src/core/main.c: (main): added call to g_thread_init(), as ORBit2
|
||||
stopped doing it and Metacity is using gconf; closes #565517.
|
||||
|
||||
2008-12-24 Yanko Kaneti <yaneti@declera.com>
|
||||
|
||||
* src/metacity.schemas.in.in: add screenshot commands which had
|
||||
mistakenly been removed; closes #564343, Launchpad bug 298463,
|
||||
Red Hat bug 474635, and probably others.
|
||||
|
||||
2008-12-24 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* src/include/all-keybindings.h: fix move_to_corner_se
|
||||
|
||||
2008-12-21 Colin Walters <walters@verbum.org>
|
||||
|
||||
* src/core/window.c: windows which attempt to present themselves
|
||||
but are offscreen end up demanding attention, unless they
|
||||
are transient, when they move to the current workspace
|
||||
as before. Closes #482354.
|
||||
|
||||
2008-12-19 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* src/ui/frames.c: when the user double-clicks the title bar,
|
||||
end the grab op. Closes #401028.
|
||||
|
||||
2008-12-16 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* configure.in: Post-release bump to 2.25.89.
|
||||
|
||||
2008-12-16 Thomas Thurman <tthurman@gnome.org>
|
||||
|
||||
* NEWS: 2.25.55 release.
|
||||
|
38
NEWS
38
NEWS
@ -1,3 +1,41 @@
|
||||
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
|
||||
=======
|
||||
|
||||
Thanks to Yanko Kaneti, Frederic Peters, Thomas Thurman, and Colin Walters for
|
||||
improvements in this version.
|
||||
|
||||
- The maximisation key is a toggle. (Thomas) (#343824)
|
||||
- "Unmaximise" is now called "restore". (Thomas) (#343824)
|
||||
- New thread handling call for gconf (Frederic) (#565517)
|
||||
- Add screenshot commands back which had been removed (Yanko) (#565343)
|
||||
- move_to_corner_se keybinding fixed (Thomas)
|
||||
- Windows on other workspaces which attempt to present themselves
|
||||
are marked as needing attention (Colin) (#482354)
|
||||
- End the grab op when the user clicks the titlebar (Thomas) (#401028)
|
||||
|
||||
Translations
|
||||
Jorge González (es)
|
||||
|
||||
2.25.55
|
||||
=======
|
||||
|
||||
|
@ -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], [55])
|
||||
m4_define([metacity_micro_version], [144])
|
||||
m4_define([mutter_version],[0.1])
|
||||
m4_define([metacity_version],
|
||||
[metacity_major_version.metacity_minor_version.metacity_micro_version~mutter_version])
|
||||
|
55
po/ChangeLog
55
po/ChangeLog
@ -1,3 +1,58 @@
|
||||
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.
|
||||
|
||||
2008-12-12 Luca Ferretti <elle.uca@libero.it>
|
||||
|
||||
* it.po: Imported updated translation from gnome-2-24 branch.
|
||||
|
@ -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
|
||||
|
188
po/es.po
188
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-11-23 21:55+0000\n"
|
||||
"PO-Revision-Date: 2008-11-23 23:23+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"
|
||||
@ -182,12 +182,12 @@ msgstr "Activar la composición"
|
||||
msgid "Turn compositing off"
|
||||
msgstr "Desactivar la composición"
|
||||
|
||||
#: ../src/core/main.c:475
|
||||
#: ../src/core/main.c:478
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Falló al inspeccionar el directorio de temas: %s\n"
|
||||
|
||||
#: ../src/core/main.c:491
|
||||
#: ../src/core/main.c:494
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@ -195,7 +195,7 @@ msgstr ""
|
||||
"No se ha podido encontrar un tema. Asegúrese de que %s existe y contiene los "
|
||||
"temas usuales.\n"
|
||||
|
||||
#: ../src/core/main.c:547
|
||||
#: ../src/core/main.c:550
|
||||
#, c-format
|
||||
msgid "Failed to restart: %s\n"
|
||||
msgstr "No se pudo reiniciar: %s\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:5728
|
||||
#: ../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:6293
|
||||
#: ../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 ""
|
||||
@ -697,8 +697,8 @@ msgid "Maximize window"
|
||||
msgstr "Maximizar la ventana"
|
||||
|
||||
#: ../src/include/all-keybindings.h:268
|
||||
msgid "Unmaximize window"
|
||||
msgstr "Desmaximizar la ventana"
|
||||
msgid "Restore window"
|
||||
msgstr "Restablecer la ventana"
|
||||
|
||||
#: ../src/include/all-keybindings.h:270
|
||||
msgid "Toggle shaded state"
|
||||
@ -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,26 @@ 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."
|
||||
msgstr ""
|
||||
"La clave /apps/metacity/global_keybindings/run_command_screenshot 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
|
||||
msgid ""
|
||||
"The /apps/metacity/global_keybindings/run_command_window_screenshot key "
|
||||
"defines a keybinding which causes the command specified by this setting to "
|
||||
"be invoked."
|
||||
msgstr ""
|
||||
"La clave /apps/metacity/global_keybindings/run_command_window_screenshot "
|
||||
"define una combinación de teclas que hace que el comando especificado por "
|
||||
"esta configuración se invoque."
|
||||
|
||||
#: ../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 "
|
||||
@ -1153,11 +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:35
|
||||
#: ../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:36
|
||||
#: ../src/metacity.schemas.in.in.h:39
|
||||
msgid "The screenshot command"
|
||||
msgstr "El comando de captura de pantalla"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:40
|
||||
msgid ""
|
||||
"The theme determines the appearance of window borders, titlebar, and so "
|
||||
"forth."
|
||||
@ -1165,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:37
|
||||
#: ../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."
|
||||
@ -1173,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:38
|
||||
#: ../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 "
|
||||
@ -1188,7 +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:39
|
||||
#: ../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: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 "
|
||||
@ -1208,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:40
|
||||
#: ../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 "
|
||||
@ -1228,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:41
|
||||
#: ../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 "
|
||||
@ -1248,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:42
|
||||
#: ../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 "
|
||||
@ -1260,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:43
|
||||
#: ../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 "
|
||||
@ -1270,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:44
|
||||
#: ../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:45
|
||||
#: ../src/metacity.schemas.in.in.h:50
|
||||
msgid "Visual Bell Type"
|
||||
msgstr "Tipo de campana visual"
|
||||
|
||||
#: ../src/metacity.schemas.in.in.h:46
|
||||
#: ../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:47
|
||||
#: ../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:48
|
||||
#: ../src/metacity.schemas.in.in.h:54
|
||||
msgid "Window title font"
|
||||
msgstr "Tipografía del título de la ventana"
|
||||
|
||||
@ -1314,8 +1364,8 @@ msgid "Maximize Window"
|
||||
msgstr "Maximizar la ventana"
|
||||
|
||||
#: ../src/ui/frames.c:1089
|
||||
msgid "Unmaximize Window"
|
||||
msgstr "Desmaximizar la ventana"
|
||||
msgid "Restore Window"
|
||||
msgstr "Restablecer la ventana"
|
||||
|
||||
#: ../src/ui/frames.c:1092
|
||||
msgid "Roll Up Window"
|
||||
@ -1852,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"
|
||||
@ -1860,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"
|
||||
@ -2444,6 +2494,12 @@ msgstr ""
|
||||
"%d expresiones de coordenadas interpretadas en %g segundos (%g segundos de "
|
||||
"media)\n"
|
||||
|
||||
#~ msgid "Unmaximize window"
|
||||
#~ msgstr "Desmaximizar la ventana"
|
||||
|
||||
#~ msgid "Unmaximize Window"
|
||||
#~ msgstr "Desmaximizar la ventana"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Many actions (e.g. clicking in the client area, moving or resizing the "
|
||||
#~ "window) normally raise the window as a side-effect. Setting this option "
|
||||
@ -2473,24 +2529,6 @@ msgstr ""
|
||||
#~ msgid "Unknown attribute %s on <geometry> element"
|
||||
#~ msgstr "Atributo desconocido %s en el elemento <geometry>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The /apps/metacity/global_keybindings/run_command_screenshot key defines "
|
||||
#~ "a keybinding which causes the command specified by this setting to be "
|
||||
#~ "invoked."
|
||||
#~ msgstr ""
|
||||
#~ "La clave /apps/metacity/global_keybindings/run_command_screenshot define "
|
||||
#~ "una combinación de teclas que hace que el comando especificado por esta "
|
||||
#~ "configuración se invoque."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The /apps/metacity/global_keybindings/run_command_window_screenshot key "
|
||||
#~ "defines a keybinding which causes the command specified by this setting "
|
||||
#~ "to be invoked."
|
||||
#~ msgstr ""
|
||||
#~ "La clave /apps/metacity/global_keybindings/run_command_window_screenshot "
|
||||
#~ "define una combinación de teclas que hace que el comando especificado por "
|
||||
#~ "esta configuración se invoque."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The keybinding that switches to the workspace above the current "
|
||||
#~ "workspace. The format looks like \"<Control>a\" or \"<Shift>"
|
||||
@ -3446,12 +3484,6 @@ msgstr ""
|
||||
#~ "Ctrl>». Si configura esta opción con la cadena especial «disabled» "
|
||||
#~ "entonces no habrá combinación de teclas para esta acción."
|
||||
|
||||
#~ msgid "The screenshot command"
|
||||
#~ msgstr "El comando de captura de pantalla"
|
||||
|
||||
#~ msgid "The window screenshot command"
|
||||
#~ msgstr "El comando de captura de una ventana"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This keybinding changes whether a window is above or below other windows. "
|
||||
#~ "If the window is covered by another one, it raises the window above all "
|
||||
|
4373
po/zh_CN.po
4373
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
@ -50,7 +50,6 @@
|
||||
typedef struct _MetaStack MetaStack;
|
||||
typedef struct _MetaUISlave MetaUISlave;
|
||||
|
||||
typedef struct _MetaWindowPropHooks MetaWindowPropHooks;
|
||||
typedef struct _MetaGroupPropHooks MetaGroupPropHooks;
|
||||
|
||||
typedef struct MetaEdgeResistanceData MetaEdgeResistanceData;
|
||||
@ -233,7 +232,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;
|
||||
|
@ -1682,7 +1682,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)
|
||||
{
|
||||
@ -1731,7 +1731,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
|
||||
|
@ -479,6 +479,9 @@ main (int argc, char **argv)
|
||||
guint i;
|
||||
GOptionContext *ctx;
|
||||
|
||||
if (!g_thread_supported ())
|
||||
g_thread_init (NULL);
|
||||
|
||||
if (setlocale (LC_ALL, "") == NULL)
|
||||
meta_warning ("Locale not understood by C library, internationalization will not work\n");
|
||||
|
||||
|
@ -102,6 +102,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;
|
||||
@ -421,6 +422,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,
|
||||
},
|
||||
#ifdef WITH_CLUTTER
|
||||
{ "/apps/metacity/general/clutter_disabled",
|
||||
META_PREF_CLUTTER_DISABLED,
|
||||
@ -1395,6 +1401,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");
|
||||
@ -1808,6 +1816,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";
|
||||
#ifdef WITH_CLUTTER
|
||||
case META_PREF_CLUTTER_DISABLED:
|
||||
return "CLUTTER_DISABLED";
|
||||
@ -2792,6 +2803,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)
|
||||
{
|
||||
|
@ -623,4 +623,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;
|
||||
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;
|
||||
MetaWindowPropHooks *hooks = find_hooks (display, property);
|
||||
|
||||
if (!hooks || hooks->type == META_PROP_VALUE_INVALID)
|
||||
{
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
value->type = hooks->type;
|
||||
value->atom = property;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reload_prop_value (MetaWindow *window,
|
||||
MetaPropValue *value)
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
MetaWindowPropHooks *hooks;
|
||||
MetaWindowPropHooks *hooks = find_hooks (window->display, value->atom);
|
||||
|
||||
hooks = find_hooks (window->display, value->atom);
|
||||
if (hooks && hooks->reload_func != NULL)
|
||||
(* hooks->reload_func) (window, value);
|
||||
}
|
||||
|
||||
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;
|
||||
(* 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -388,18 +427,10 @@ set_window_title (MetaWindow *window,
|
||||
g_object_notify (G_OBJECT (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)
|
||||
{
|
||||
@ -413,22 +444,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)
|
||||
{
|
||||
@ -463,18 +487,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)
|
||||
{
|
||||
@ -488,22 +504,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)
|
||||
{
|
||||
@ -525,18 +534,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;
|
||||
|
||||
@ -544,6 +545,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;
|
||||
@ -594,18 +602,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;
|
||||
gboolean old_decorated = window->decorated;
|
||||
@ -731,18 +731,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);
|
||||
@ -767,18 +759,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)
|
||||
{
|
||||
@ -790,18 +774,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;
|
||||
@ -836,18 +812,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)
|
||||
{
|
||||
@ -861,17 +829,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)
|
||||
@ -1276,7 +1233,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)
|
||||
{
|
||||
@ -1291,22 +1249,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;
|
||||
|
||||
@ -1337,18 +1289,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;
|
||||
|
||||
@ -1402,18 +1346,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;
|
||||
|
||||
@ -1459,184 +1395,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;
|
||||
display->prop_hooks_table = (gpointer) table;
|
||||
display->prop_hooks = g_hash_table_new (NULL, NULL);
|
||||
|
||||
i = 0;
|
||||
|
||||
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
|
||||
|
@ -61,8 +61,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);
|
||||
@ -795,12 +793,14 @@ 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);
|
||||
|
||||
if (!window->override_redirect)
|
||||
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);
|
||||
|
||||
if (!window->override_redirect)
|
||||
meta_window_update_icon_now (window);
|
||||
|
||||
@ -3269,8 +3269,23 @@ window_activate (MetaWindow *window,
|
||||
/* Get window on current or given workspace */
|
||||
if (workspace == NULL)
|
||||
workspace = window->screen->active_workspace;
|
||||
if (!meta_window_located_on_workspace (window, workspace))
|
||||
|
||||
/* For non-transient windows, we just set up a pulsing indicator,
|
||||
rather than move windows or workspaces.
|
||||
See http://bugzilla.gnome.org/show_bug.cgi?id=482354 */
|
||||
if (window->xtransient_for == None &&
|
||||
!meta_window_located_on_workspace (window, workspace))
|
||||
{
|
||||
meta_window_set_demands_attention (window);
|
||||
/* We've marked it as demanding, don't need to do anything else. */
|
||||
return;
|
||||
}
|
||||
else if (window->xtransient_for != None)
|
||||
{
|
||||
/* Move transients to current workspace - preference dialogs should appear over
|
||||
the source window. */
|
||||
meta_window_change_workspace (window, workspace);
|
||||
}
|
||||
|
||||
if (window->shaded)
|
||||
meta_window_unshade (window, timestamp);
|
||||
@ -5135,6 +5150,7 @@ meta_window_change_workspace_by_index (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,
|
||||
@ -5467,11 +5483,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)))
|
||||
{
|
||||
@ -5799,21 +5822,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 */
|
||||
{
|
||||
@ -5825,123 +5834,14 @@ 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);
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
@ -6130,8 +6030,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;
|
||||
|
||||
@ -6151,8 +6051,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;
|
||||
@ -6217,7 +6117,7 @@ update_net_wm_type (MetaWindow *window)
|
||||
meta_XFree (str);
|
||||
}
|
||||
|
||||
recalc_window_type (window);
|
||||
meta_window_recalc_window_type (window);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -258,14 +258,14 @@ keybind (activate_window_menu, handle_activate_window_menu, 0,
|
||||
keybind (toggle_fullscreen, handle_toggle_fullscreen, 0, BINDING_PER_WINDOW,
|
||||
NULL,
|
||||
_("Toggle fullscreen mode"))
|
||||
keybind (toggle_maximized, handle_toggle_maximized, 0, BINDING_PER_WINDOW, NULL,
|
||||
keybind (toggle_maximized, handle_toggle_maximized, 0, BINDING_PER_WINDOW, "<Alt>F10",
|
||||
_("Toggle maximization state"))
|
||||
keybind (toggle_above, handle_toggle_above, 0, BINDING_PER_WINDOW, NULL,
|
||||
_("Toggle whether a window will always be visible over other windows"))
|
||||
keybind (maximize, handle_maximize, 0, BINDING_PER_WINDOW, "<Alt>F10",
|
||||
keybind (maximize, handle_maximize, 0, BINDING_PER_WINDOW, NULL,
|
||||
_("Maximize window"))
|
||||
keybind (unmaximize, handle_unmaximize, 0, BINDING_PER_WINDOW, "<Alt>F5",
|
||||
_("Unmaximize window"))
|
||||
_("Restore window"))
|
||||
keybind (toggle_shaded, handle_toggle_shaded, 0, BINDING_PER_WINDOW, NULL,
|
||||
_("Toggle shaded state"))
|
||||
keybind (minimize, handle_minimize, 0, BINDING_PER_WINDOW, "<Alt>F9",
|
||||
@ -362,7 +362,7 @@ keybind (move_to_corner_ne, handle_move_to_corner_ne, 0,
|
||||
keybind (move_to_corner_sw, handle_move_to_corner_sw, 0,
|
||||
BINDING_PER_WINDOW, NULL,
|
||||
_("Move window to south-west (bottom left) corner"))
|
||||
keybind (move_to_corner_nw, handle_move_to_corner_se, 0,
|
||||
keybind (move_to_corner_se, handle_move_to_corner_se, 0,
|
||||
BINDING_PER_WINDOW, NULL,
|
||||
_("Move window to south-east (bottom right) corner"))
|
||||
|
||||
|
@ -59,6 +59,7 @@ typedef enum
|
||||
META_PREF_CURSOR_THEME,
|
||||
META_PREF_CURSOR_SIZE,
|
||||
META_PREF_COMPOSITING_MANAGER,
|
||||
META_PREF_RESIZE_WITH_RIGHT_BUTTON,
|
||||
#ifdef WITH_CLUTTER
|
||||
META_PREF_CLUTTER_DISABLED,
|
||||
META_PREF_CLUTTER_PLUGINS,
|
||||
@ -79,6 +80,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>
|
||||
@ -514,6 +533,38 @@
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/apps/metacity/keybinding_commands/command_screenshot</key>
|
||||
<applyto>/apps/metacity/keybinding_commands/command_screenshot</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>string</type>
|
||||
<default>gnome-screenshot</default>
|
||||
<locale name="C">
|
||||
<short>The screenshot command</short>
|
||||
<long>
|
||||
The /apps/metacity/global_keybindings/run_command_screenshot
|
||||
key defines a keybinding which causes the command specified
|
||||
by this setting to be invoked.
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/apps/metacity/keybinding_commands/command_window_screenshot</key>
|
||||
<applyto>/apps/metacity/keybinding_commands/command_window_screenshot</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>string</type>
|
||||
<default>gnome-screenshot --window</default>
|
||||
<locale name="C">
|
||||
<short>The window screenshot command</short>
|
||||
<long>
|
||||
The /apps/metacity/global_keybindings/run_command_window_screenshot
|
||||
key defines a keybinding which causes the command specified
|
||||
by this setting to be invoked.
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<!-- Schemas below are generated by schema-bindings.c when this file
|
||||
becomes metacity.schemas.in
|
||||
-->
|
||||
|
@ -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)
|
||||
@ -1086,7 +1127,7 @@ show_tip_now (MetaFrames *frames)
|
||||
tiptext = _("Maximize Window");
|
||||
break;
|
||||
case META_FRAME_CONTROL_UNMAXIMIZE:
|
||||
tiptext = _("Unmaximize Window");
|
||||
tiptext = _("Restore Window");
|
||||
break;
|
||||
case META_FRAME_CONTROL_SHADE:
|
||||
tiptext = _("Roll Up Window");
|
||||
@ -1388,6 +1429,7 @@ meta_frames_button_press_event (GtkWidget *widget,
|
||||
event->button == 1 &&
|
||||
event->type == GDK_2BUTTON_PRESS)
|
||||
{
|
||||
meta_core_end_grab_op (gdk_display, event->time);
|
||||
return meta_frame_double_click_event (frame, event);
|
||||
}
|
||||
|
||||
@ -2434,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], */
|
||||
@ -2459,7 +2502,8 @@ 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 (),
|
||||
meta_theme_draw_frame_with_style (meta_theme_get_current (),
|
||||
frame->style,
|
||||
widget,
|
||||
drawable,
|
||||
NULL,
|
||||
@ -2524,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;
|
||||
|
176
src/ui/theme.c
176
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,8 +3753,8 @@ 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,
|
||||
meta_draw_op_list_draw_with_style (op->data.op_list.op_list,
|
||||
style_gtk, widget, drawable, clip, info,
|
||||
d_rect);
|
||||
}
|
||||
break;
|
||||
@ -3794,8 +3795,8 @@ 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,
|
||||
meta_draw_op_list_draw_with_style (op->data.tile.op_list,
|
||||
style_gtk, widget, drawable, &new_clip, info,
|
||||
tile);
|
||||
|
||||
tile.y += tile.height;
|
||||
@ -3810,7 +3811,8 @@ meta_draw_op_draw_with_env (const MetaDrawOp *op,
|
||||
}
|
||||
|
||||
void
|
||||
meta_draw_op_draw (const MetaDrawOp *op,
|
||||
meta_draw_op_draw_with_style (const MetaDrawOp *op,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
@ -3819,14 +3821,28 @@ meta_draw_op_draw (const MetaDrawOp *op,
|
||||
{
|
||||
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, widget, drawable, clip,
|
||||
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,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
const MetaDrawInfo *info,
|
||||
MetaRectangle logical_region)
|
||||
{
|
||||
meta_draw_op_draw_with_style (op, widget->style, widget,
|
||||
drawable, clip, info, logical_region);
|
||||
}
|
||||
|
||||
MetaDrawOpList*
|
||||
meta_draw_op_list_new (int n_preallocs)
|
||||
{
|
||||
@ -3875,7 +3891,8 @@ meta_draw_op_list_unref (MetaDrawOpList *op_list)
|
||||
}
|
||||
|
||||
void
|
||||
meta_draw_op_list_draw (const MetaDrawOpList *op_list,
|
||||
meta_draw_op_list_draw_with_style (const MetaDrawOpList *op_list,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
@ -3887,6 +3904,8 @@ meta_draw_op_list_draw (const MetaDrawOpList *op_list,
|
||||
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,7 +4275,8 @@ button_rect (MetaButtonType type,
|
||||
}
|
||||
|
||||
void
|
||||
meta_frame_style_draw (MetaFrameStyle *style,
|
||||
meta_frame_style_draw_with_style (MetaFrameStyle *style,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
int x_offset,
|
||||
@ -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,7 +4453,8 @@ 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,
|
||||
meta_draw_op_list_draw_with_style (op_list,
|
||||
style_gtk,
|
||||
widget,
|
||||
drawable,
|
||||
&combined_clip,
|
||||
@ -4460,7 +4496,8 @@ 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,
|
||||
meta_draw_op_list_draw_with_style (op_list,
|
||||
style_gtk,
|
||||
widget,
|
||||
drawable,
|
||||
&combined_clip,
|
||||
@ -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)
|
||||
{
|
||||
@ -5035,7 +5095,8 @@ meta_theme_get_title_scale (MetaTheme *theme,
|
||||
}
|
||||
|
||||
void
|
||||
meta_theme_draw_frame (MetaTheme *theme,
|
||||
meta_theme_draw_frame_with_style (MetaTheme *theme,
|
||||
GtkStyle *style_gtk,
|
||||
GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const GdkRectangle *clip,
|
||||
@ -5059,6 +5120,81 @@ meta_theme_draw_frame (MetaTheme *theme,
|
||||
|
||||
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,
|
||||
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)
|
||||
{
|
||||
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;
|
||||
|
||||
style = meta_theme_lookup_style (theme, style_name);
|
||||
|
||||
/* Parser is not supposed to allow this currently */
|
||||
if (style == NULL)
|
||||
return;
|
||||
@ -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,
|
||||
|
@ -672,10 +672,12 @@ meta_text_property_to_utf8 (Display *xdisplay,
|
||||
&list);
|
||||
|
||||
if (count == 0)
|
||||
return NULL;
|
||||
|
||||
retval = NULL;
|
||||
else
|
||||
{
|
||||
retval = list[0];
|
||||
list[0] = g_strdup (""); /* something to free */
|
||||
}
|
||||
|
||||
g_strfreev (list);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user