Compare commits

..

2 Commits

Author SHA1 Message Date
Ryan Lortie
393a80d434 Add _DBUS_UNIQUE_NAME and _OBJECT_PATH properties
https://bugzilla.gnome.org/show_bug.cgi?id=664851
2011-12-05 12:54:29 -05:00
Colin Walters
a2f95e115c Load _DBUS_APPLICATION_ID property, expose it via API
This is used to associate GtkApplication -> X window, and will
be consumed by gnome-shell.

https://bugzilla.gnome.org/show_bug.cgi?id=664851
2011-12-05 12:52:29 -05:00
34 changed files with 3023 additions and 2784 deletions

1
.gitignore vendored
View File

@@ -19,7 +19,6 @@ libtool
ltmain.sh ltmain.sh
missing missing
.deps .deps
src/50-mutter-windows.xml
src/mutter-wm.desktop src/mutter-wm.desktop
src/mutter.desktop src/mutter.desktop
*.o *.o

34
NEWS
View File

@@ -1,37 +1,3 @@
3.3.4
=====
* Adapt to changes in GtkStateFlags [Owen]
* Redo properties for applications menu corresponding to GTK+ changes -
they are now _GTK_* not DBUS_*. [Ryan]
* Fix crash on gnome-shell restart when a modal dialog is open [Owen; #668299]
* Code cleanup [Florian; #666039]
Contributors:
Ryan Lortie, Florian Müllner, Owen Taylor
Translations:
Alexander Shopov [bg], Fran Diéguez [gl]
3.3.3
=====
* Add keybindings for tiling to left or right [Florian; #648700]
* Support GTK+'s hide-titlebar-when-maximized hint [Florian; #665617]
* Load _DBUS_APPLICATION_ID, _DBUS_UNIQUE_NAME, _DBUS_OBJECT_PATH
property [Colin, Ryan; #664851]
* Handle changes to workspaces-only-on-primary GSetting [Florian; #664853]
* Don't use the Clutter default stage [Jasper; #664028]
* Fix compilation with --disable-introspection [Lionel; #661871]
* Fix problem where stage could end up mis-sized on startup with
multiple monitors [Lionel]
* Misc bug fixes [Adel, Lionel, Jasper; #666015]
Contributors:
Adel Gadllah, Lionel Landwerlin, Florian Müllner, Jasper St. Pierre
Translations:
Daniel Mustieles [es], Yaron Shahrabani [he], Kjartan Maraas [nb],
Matej Urbančič [sk], Muhammet Kara [tr]
3.3.2 3.3.2
===== =====

View File

@@ -2,7 +2,7 @@ AC_PREREQ(2.50)
m4_define([mutter_major_version], [3]) m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [3]) m4_define([mutter_minor_version], [3])
m4_define([mutter_micro_version], [4]) m4_define([mutter_micro_version], [2])
m4_define([mutter_version], m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version]) [mutter_major_version.mutter_minor_version.mutter_micro_version])

View File

@@ -1,6 +1,5 @@
# List of source files containing translatable strings. # List of source files containing translatable strings.
# Please keep this file sorted alphabetically. # Please keep this file sorted alphabetically.
src/50-mutter-windows.xml.in
src/compositor/compositor.c src/compositor/compositor.c
src/core/bell.c src/core/bell.c
src/core/core.c src/core/core.c

1020
po/bg.po

File diff suppressed because it is too large Load Diff

515
po/es.po

File diff suppressed because it is too large Load Diff

1060
po/gl.po

File diff suppressed because it is too large Load Diff

1417
po/he.po

File diff suppressed because it is too large Load Diff

View File

@@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter 3.3.x\n" "Project-Id-Version: mutter 3.3.x\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-14 22:59+0100\n" "POT-Creation-Date: 2011-12-01 20:27+0100\n"
"PO-Revision-Date: 2011-12-14 22:59+0100\n" "PO-Revision-Date: 2011-12-01 20:29+0100\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n" "Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
"Language: \n" "Language: \n"
@@ -15,18 +15,6 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "View split on left"
msgstr "Visning delt til venstre"
#: ../src/50-mutter-windows.xml.in.h:2
msgid "View split on right"
msgstr "Visning delt til høyre"
#: ../src/50-mutter-windows.xml.in.h:3
msgid "Windows"
msgstr "Vinduer"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:492 #: ../src/compositor/compositor.c:492
@@ -70,12 +58,12 @@ msgstr "_Vent"
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Tvungen nedstenging" msgstr "_Tvungen nedstenging"
#: ../src/core/display.c:361 #: ../src/core/display.c:365
#, c-format #, c-format
msgid "Missing %s extension required for compositing" msgid "Missing %s extension required for compositing"
msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon" msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon"
#: ../src/core/display.c:427 #: ../src/core/display.c:431
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "Feil under åpning av X Window System skjerm «%s»\n" msgstr "Feil under åpning av X Window System skjerm «%s»\n"
@@ -184,12 +172,12 @@ msgstr ""
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Arbeidsområde %d" msgstr "Arbeidsområde %d"
#: ../src/core/screen.c:730 #: ../src/core/screen.c:741
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skjerm %d på display «%s» er ugyldig\n" msgstr "Skjerm %d på display «%s» er ugyldig\n"
#: ../src/core/screen.c:746 #: ../src/core/screen.c:757
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -198,19 +186,19 @@ msgstr ""
"Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke " "Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke "
"flagget --replace for å erstatte aktiv vindushåndterer.\n" "flagget --replace for å erstatte aktiv vindushåndterer.\n"
#: ../src/core/screen.c:773 #: ../src/core/screen.c:784
#, c-format #, c-format
msgid "" msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n" "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "" msgstr ""
"Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\n" "Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\n"
#: ../src/core/screen.c:828 #: ../src/core/screen.c:839
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n" msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n"
#: ../src/core/screen.c:1013 #: ../src/core/screen.c:1024
#, c-format #, c-format
msgid "Could not release screen %d on display \"%s\"\n" msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Kunne ikke slippe skjerm %d på display «%s»\n" msgstr "Kunne ikke slippe skjerm %d på display «%s»\n"
@@ -430,11 +418,7 @@ msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them " "If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available " "vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely." "area. Dropping windows on the top screen edge maximizes them completely."
msgstr "" msgstr "Maksimerer vinduer vertikalt og endrer størrelse horisontalt slik at de dekker halve det tilgjengeligeområdet hvis de slippes på vertikale skjermkanter. Hvis vindu slippes på øverste kant av skjermen maksimeres de fullstendig."
"Maksimerer vinduer vertikalt og endrer størrelse horisontalt slik at de "
"dekker halve det tilgjengeligeområdet hvis de slippes på vertikale "
"skjermkanter. Hvis vindu slippes på øverste kant av skjermen maksimeres de "
"fullstendig."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9 #: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Live Hidden Windows" msgid "Live Hidden Windows"

View File

@@ -10,8 +10,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter master\n" "Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-12-16 13:21+0000\n" "POT-Creation-Date: 2011-11-22 00:22+0000\n"
"PO-Revision-Date: 2011-12-16 21:47+0100\n" "PO-Revision-Date: 2011-11-25 20:53+0100\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n" "Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n" "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: \n" "Language: \n"
@@ -23,18 +23,6 @@ msgstr ""
"X-Poedit-Country: SLOVENIA\n" "X-Poedit-Country: SLOVENIA\n"
"X-Poedit-SourceCharset: utf-8\n" "X-Poedit-SourceCharset: utf-8\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "View split on left"
msgstr "Poglej razdelek na levi"
#: ../src/50-mutter-windows.xml.in.h:2
msgid "View split on right"
msgstr "Poglej razdelek na desni"
#: ../src/50-mutter-windows.xml.in.h:3
msgid "Windows"
msgstr "Okna"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:492 #: ../src/compositor/compositor.c:492
@@ -72,12 +60,12 @@ msgstr "_Počakaj"
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Vsili konec" msgstr "_Vsili konec"
#: ../src/core/display.c:361 #: ../src/core/display.c:365
#, c-format #, c-format
msgid "Missing %s extension required for compositing" msgid "Missing %s extension required for compositing"
msgstr "Manjka razširitev %s, ki je ključna za sestavljanje" msgstr "Manjka razširitev %s, ki je ključna za sestavljanje"
#: ../src/core/display.c:427 #: ../src/core/display.c:431
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "Ni mogoče odpreti zaslona '%s' okenskega sistema X\n" msgstr "Ni mogoče odpreti zaslona '%s' okenskega sistema X\n"
@@ -122,7 +110,7 @@ msgstr "Ni mogoče preiskati mape tem: %s\n"
msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n" msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
msgstr "Ni mogoče najti teme! Prepričajte se, da %s obstaja in vsebuje običajni zapis teme.\n" msgstr "Ni mogoče najti teme! Prepričajte se, da %s obstaja in vsebuje običajni zapis teme.\n"
#: ../src/core/mutter.c:40 #: ../src/core/mutter.c:42
#, c-format #, c-format
msgid "" msgid ""
"mutter %s\n" "mutter %s\n"
@@ -135,11 +123,11 @@ msgstr ""
"To je prosta programska oprema; za pogoje kopiranja si poglejte izvorno kodo.\n" "To je prosta programska oprema; za pogoje kopiranja si poglejte izvorno kodo.\n"
"Program je na voljo BREZ KAKRŠNIHKOLI ZAGOTOVIL.\n" "Program je na voljo BREZ KAKRŠNIHKOLI ZAGOTOVIL.\n"
#: ../src/core/mutter.c:54 #: ../src/core/mutter.c:56
msgid "Print version" msgid "Print version"
msgstr "Izpiši različico" msgstr "Izpiši različico"
#: ../src/core/mutter.c:60 #: ../src/core/mutter.c:62
msgid "Comma-separated list of compositor plugins" msgid "Comma-separated list of compositor plugins"
msgstr "Z vejico ločen seznam vstavkov sestavljanja" msgstr "Z vejico ločen seznam vstavkov sestavljanja"
@@ -168,27 +156,27 @@ msgstr "\"%s\", najden v podatkovni zbirki nastavitev, ni veljaven ključ za tip
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Delovna površina %d" msgstr "Delovna površina %d"
#: ../src/core/screen.c:730 #: ../src/core/screen.c:741
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "Zaslon %d na prikazu '%s' ni veljaven\n" msgstr "Zaslon %d na prikazu '%s' ni veljaven\n"
#: ../src/core/screen.c:746 #: ../src/core/screen.c:757
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager; try using the --replace option to replace the current window manager.\n" msgid "Screen %d on display \"%s\" already has a window manager; try using the --replace option to replace the current window manager.\n"
msgstr "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken; poskušajte uporabiti možnost --replace za zamenjavo trenutnega.\n" msgstr "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken; poskušajte uporabiti možnost --replace za zamenjavo trenutnega.\n"
#: ../src/core/screen.c:773 #: ../src/core/screen.c:784
#, c-format #, c-format
msgid "Could not acquire window manager selection on screen %d display \"%s\"\n" msgid "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "Ni mogoče dobiti izbire upravljalnika oken na zaslonu %d prikaza \"%s\"\n" msgstr "Ni mogoče dobiti izbire upravljalnika oken na zaslonu %d prikaza \"%s\"\n"
#: ../src/core/screen.c:828 #: ../src/core/screen.c:839
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken\n" msgstr "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken\n"
#: ../src/core/screen.c:1013 #: ../src/core/screen.c:1024
#, c-format #, c-format
msgid "Could not release screen %d on display \"%s\"\n" msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Ni mogoče opustiti zaslona %d na prikazu \"%s\"\n" msgstr "Ni mogoče opustiti zaslona %d na prikazu \"%s\"\n"
@@ -288,7 +276,7 @@ msgid "Window manager error: "
msgstr "Napaka upravljalnika oken: " msgstr "Napaka upravljalnika oken: "
#. first time through #. first time through
#: ../src/core/window.c:7180 #: ../src/core/window.c:7124
#, c-format #, c-format
msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n" msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LEADER kot je zavedeno v ICCCM.\n" msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LEADER kot je zavedeno v ICCCM.\n"
@@ -300,7 +288,7 @@ msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LE
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work. #. * about these apps but make them work.
#. #.
#: ../src/core/window.c:7843 #: ../src/core/window.c:7787
#, c-format #, c-format
msgid "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n" msgid "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr "Okno %s določi namig MWM, ki pove, da ni mogoče spremeniti velikosti, hkrati pa določi najmanjšo velikost na %d x %d in največjo na %d x %d; vrednost ni smiselna.\n" msgstr "Okno %s določi namig MWM, ki pove, da ni mogoče spremeniti velikosti, hkrati pa določi najmanjšo velikost na %d x %d in največjo na %d x %d; vrednost ni smiselna.\n"

981
po/tr.po

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<KeyListEntries schema="org.gnome.mutter.keybindings"
group="system"
_name="Windows"
wm_name="Mutter"
package="mutter">
<KeyListEntry name="toggle-tiled-left"
_description="View split on left"/>
<KeyListEntry name="toggle-tiled-right"
_description="View split on right"/>
</KeyListEntries>

View File

@@ -27,6 +27,8 @@ INCLUDES= \
-DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\" -DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\"
mutter_built_sources = \ mutter_built_sources = \
mutter-marshal.h \
mutter-marshal.c \
mutter-enum-types.h \ mutter-enum-types.h \
mutter-enum-types.c mutter-enum-types.c
@@ -259,11 +261,6 @@ wmproperties_in_files=mutter-wm.desktop.in
wmproperties_files=$(wmproperties_in_files:.desktop.in=.desktop) wmproperties_files=$(wmproperties_in_files:.desktop.in=.desktop)
wmproperties_DATA = $(wmproperties_files) wmproperties_DATA = $(wmproperties_files)
xmldir = @GNOME_KEYBINDINGS_KEYSDIR@
xml_in_files = \
50-mutter-windows.xml.in
xml_DATA = $(xml_in_files:.xml.in=.xml)
gsettings_SCHEMAS = org.gnome.mutter.gschema.xml gsettings_SCHEMAS = org.gnome.mutter.gschema.xml
@INTLTOOL_XML_NOMERGE_RULE@ @INTLTOOL_XML_NOMERGE_RULE@
@GSETTINGS_RULES@ @GSETTINGS_RULES@
@@ -282,7 +279,6 @@ CLEANFILES = \
mutter.desktop \ mutter.desktop \
mutter-wm.desktop \ mutter-wm.desktop \
org.gnome.mutter.gschema.xml \ org.gnome.mutter.gschema.xml \
$(xml_DATA) \
$(mutter_built_sources) \ $(mutter_built_sources) \
$(typelib_DATA) \ $(typelib_DATA) \
$(gir_DATA) $(gir_DATA)
@@ -299,18 +295,38 @@ EXTRA_DIST=$(desktopfiles_files) \
$(IMAGES) \ $(IMAGES) \
$(desktopfiles_in_files) \ $(desktopfiles_in_files) \
$(wmproperties_in_files) \ $(wmproperties_in_files) \
$(xml_in_files) \
org.gnome.mutter.gschema.xml.in \ org.gnome.mutter.gschema.xml.in \
mutter-schemas.convert \ mutter-schemas.convert \
libmutter.pc.in \ libmutter.pc.in \
mutter-plugins.pc.in \ mutter-plugins.pc.in \
mutter-enum-types.h.in \ mutter-enum-types.h.in \
mutter-enum-types.c.in mutter-enum-types.c.in \
mutter-marshal.list
BUILT_SOURCES += $(mutter_built_sources) BUILT_SOURCES += $(mutter_built_sources)
MUTTER_STAMP_FILES = stamp-mutter-enum-types.h MUTTER_STAMP_FILES = stamp-mutter-marshal.h stamp-mutter-enum-types.h
CLEANFILES += $(MUTTER_STAMP_FILES) CLEANFILES += $(MUTTER_STAMP_FILES)
mutter-marshal.h: stamp-mutter-marshal.h
@true
stamp-mutter-marshal.h: Makefile mutter-marshal.list
$(AM_V_GEN) $(GLIB_GENMARSHAL) \
--prefix=_mutter_marshal \
--header \
$(srcdir)/mutter-marshal.list > xgen-tmh && \
(cmp -s xgen-tmh mutter-marshal.h || cp -f xgen-tmh mutter-marshal.h) && \
rm -f xgen-tmh && \
echo timestamp > $(@F)
mutter-marshal.c: Makefile mutter-marshal.list
$(AM_V_GEN) (echo "#include \"mutter-marshal.h\"" ; \
$(GLIB_GENMARSHAL) \
--prefix=_mutter_marshal \
--body \
$(srcdir)/mutter-marshal.list ) > xgen-tmc && \
cp -f xgen-tmc mutter-marshal.c && \
rm -f xgen-tmc
mutter-enum-types.h: stamp-mutter-enum-types.h Makefile mutter-enum-types.h: stamp-mutter-enum-types.h Makefile
@true @true
stamp-mutter-enum-types.h: $(libmutterinclude_base_headers) mutter-enum-types.h.in stamp-mutter-enum-types.h: $(libmutterinclude_base_headers) mutter-enum-types.h.in

View File

@@ -515,15 +515,13 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
meta_screen_set_cm_selection (screen); meta_screen_set_cm_selection (screen);
info->stage = clutter_stage_new (); info->stage = clutter_stage_get_default ();
meta_screen_get_size (screen, &width, &height); meta_screen_get_size (screen, &width, &height);
clutter_actor_realize (info->stage); clutter_actor_set_size (info->stage, width, height);
xwin = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage)); xwin = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage));
XResizeWindow (xdisplay, xwin, width, height);
event_mask = FocusChangeMask | event_mask = FocusChangeMask |
ExposureMask | ExposureMask |
EnterWindowMask | LeaveWindowMask | EnterWindowMask | LeaveWindowMask |
@@ -1141,18 +1139,12 @@ meta_compositor_sync_screen_size (MetaCompositor *compositor,
guint width, guint width,
guint height) guint height)
{ {
MetaDisplay *display = meta_screen_get_display (screen);
MetaCompScreen *info = meta_screen_get_compositor_data (screen); MetaCompScreen *info = meta_screen_get_compositor_data (screen);
Display *xdisplay;
Window xwin;
DEBUG_TRACE ("meta_compositor_sync_screen_size\n"); DEBUG_TRACE ("meta_compositor_sync_screen_size\n");
g_return_if_fail (info); g_return_if_fail (info);
xdisplay = meta_display_get_xdisplay (display); clutter_actor_set_size (info->stage, width, height);
xwin = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage));
XResizeWindow (xdisplay, xwin, width, height);
meta_background_actor_screen_size_changed (screen); meta_background_actor_screen_size_changed (screen);

View File

@@ -442,7 +442,8 @@ meta_shadow_factory_class_init (MetaShadowFactoryClass *klass)
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
} }

View File

@@ -232,13 +232,15 @@ meta_window_actor_class_init (MetaWindowActorClass *klass)
g_signal_new ("position-changed", g_signal_new ("position-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL, 0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
signals[SIZE_CHANGED] = signals[SIZE_CHANGED] =
g_signal_new ("size-changed", g_signal_new ("size-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL, 0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
} }
@@ -1253,24 +1255,19 @@ void
meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state) meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state)
{ {
MetaWindow *metaWindow = meta_window_actor_get_meta_window (self); MetaWindow *metaWindow = meta_window_actor_get_meta_window (self);
MetaDisplay *display = meta_window_get_display (metaWindow);
Display *xdisplay = meta_display_get_xdisplay (display); Display *xdisplay = meta_display_get_xdisplay (meta_window_get_display (metaWindow));
Window xwin = meta_window_actor_get_x_window (self); Window xwin = meta_window_actor_get_x_window (self);
if (state) if (state)
{ {
meta_error_trap_push (display);
XCompositeRedirectWindow (xdisplay, xwin, CompositeRedirectManual); XCompositeRedirectWindow (xdisplay, xwin, CompositeRedirectManual);
meta_error_trap_pop (display);
meta_window_actor_queue_create_pixmap (self); meta_window_actor_queue_create_pixmap (self);
self->priv->unredirected = FALSE; self->priv->unredirected = FALSE;
} }
else else
{ {
meta_error_trap_push (display);
XCompositeUnredirectWindow (xdisplay, xwin, CompositeRedirectManual); XCompositeUnredirectWindow (xdisplay, xwin, CompositeRedirectManual);
meta_error_trap_pop (display);
self->priv->unredirected = TRUE; self->priv->unredirected = TRUE;
} }
} }

View File

@@ -439,13 +439,9 @@ setup_constraint_info (ConstraintInfo *info,
monitor_info->number); monitor_info->number);
/* Workaround braindead legacy apps that don't know how to /* Workaround braindead legacy apps that don't know how to
* fullscreen themselves properly - don't get fooled by * fullscreen themselves properly.
* windows which hide their titlebar when maximized; that's
* not the same as fullscreen, even if there are no struts
* making the workarea smaller than the monitor.
*/ */
if (meta_prefs_get_force_fullscreen() && if (meta_prefs_get_force_fullscreen() &&
!window->hide_titlebar_when_maximized &&
meta_rectangle_equal (new, &monitor_info->rect) && meta_rectangle_equal (new, &monitor_info->rect) &&
window->has_fullscreen_func && window->has_fullscreen_func &&
!window->fullscreen) !window->fullscreen)

View File

@@ -230,7 +230,8 @@ meta_display_class_init (MetaDisplayClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
display_signals[WINDOW_CREATED] = display_signals[WINDOW_CREATED] =
@@ -238,7 +239,8 @@ meta_display_class_init (MetaDisplayClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, META_TYPE_WINDOW); G_TYPE_NONE, 1, META_TYPE_WINDOW);
display_signals[WINDOW_DEMANDS_ATTENTION] = display_signals[WINDOW_DEMANDS_ATTENTION] =
@@ -246,7 +248,8 @@ meta_display_class_init (MetaDisplayClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, META_TYPE_WINDOW); G_TYPE_NONE, 1, META_TYPE_WINDOW);
display_signals[WINDOW_MARKED_URGENT] = display_signals[WINDOW_MARKED_URGENT] =
@@ -254,7 +257,8 @@ meta_display_class_init (MetaDisplayClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_NONE, 1,
META_TYPE_WINDOW); META_TYPE_WINDOW);
@@ -5025,21 +5029,12 @@ meta_display_unmanage_windows_for_screen (MetaDisplay *display,
winlist = meta_display_list_windows (display, winlist = meta_display_list_windows (display,
META_LIST_INCLUDE_OVERRIDE_REDIRECT); META_LIST_INCLUDE_OVERRIDE_REDIRECT);
winlist = g_slist_sort (winlist, meta_display_stack_cmp); winlist = g_slist_sort (winlist, meta_display_stack_cmp);
g_slist_foreach (winlist, (GFunc)g_object_ref, NULL);
/* Unmanage all windows */ /* Unmanage all windows */
tmp = winlist; tmp = winlist;
while (tmp != NULL) while (tmp != NULL)
{ {
MetaWindow *window = tmp->data; meta_window_unmanage (tmp->data, timestamp);
/* Check if already unmanaged for safety - in particular, catch
* the case where unmanaging a parent window can cause attached
* dialogs to be (temporarily) unmanaged.
*/
if (!window->unmanaging)
meta_window_unmanage (window, timestamp);
g_object_unref (window);
tmp = tmp->next; tmp = tmp->next;
} }

View File

@@ -3232,46 +3232,6 @@ handle_toggle_above (MetaDisplay *display,
meta_window_make_above (window); meta_window_make_above (window);
} }
static void
handle_toggle_tiled (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding,
gpointer dummy)
{
MetaTileMode mode = binding->handler->data;
if ((META_WINDOW_TILED_LEFT (window) && mode == META_TILE_LEFT) ||
(META_WINDOW_TILED_RIGHT (window) && mode == META_TILE_RIGHT))
{
window->tile_monitor_number = window->saved_maximize ? window->monitor->number
: -1;
window->tile_mode = window->saved_maximize ? META_TILE_MAXIMIZED
: META_TILE_NONE;
if (window->saved_maximize)
meta_window_maximize (window, META_MAXIMIZE_VERTICAL |
META_MAXIMIZE_HORIZONTAL);
else
meta_window_unmaximize (window, META_MAXIMIZE_VERTICAL |
META_MAXIMIZE_HORIZONTAL);
}
else if (meta_window_can_tile_side_by_side (window))
{
window->tile_monitor_number = window->monitor->number;
window->tile_mode = mode;
/* Maximization constraints beat tiling constraints, so if the window
* is maximized, tiling won't have any effect unless we unmaximize it
* horizontally first; rather than calling meta_window_unmaximize(),
* we just set the flag and rely on meta_window_tile() syncing it to
* save an additional roundtrip.
*/
window->maximized_horizontally = FALSE;
meta_window_tile (window);
}
}
static void static void
handle_toggle_maximized (MetaDisplay *display, handle_toggle_maximized (MetaDisplay *display,
MetaScreen *screen, MetaScreen *screen,
@@ -3929,20 +3889,6 @@ init_builtin_key_bindings (MetaDisplay *display)
META_KEYBINDING_ACTION_TOGGLE_MAXIMIZED, META_KEYBINDING_ACTION_TOGGLE_MAXIMIZED,
handle_toggle_maximized, 0); handle_toggle_maximized, 0);
add_builtin_keybinding (display,
"toggle-tiled-left",
SCHEMA_MUTTER_KEYBINDINGS,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_TILED_LEFT,
handle_toggle_tiled, META_TILE_LEFT);
add_builtin_keybinding (display,
"toggle-tiled-right",
SCHEMA_MUTTER_KEYBINDINGS,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_TILED_RIGHT,
handle_toggle_tiled, META_TILE_RIGHT);
add_builtin_keybinding (display, add_builtin_keybinding (display,
"toggle-above", "toggle-above",
SCHEMA_COMMON_KEYBINDINGS, SCHEMA_COMMON_KEYBINDINGS,

View File

@@ -25,7 +25,9 @@
#include <meta/main.h> #include <meta/main.h>
#include <meta/util.h> #include <meta/util.h>
#ifdef HAVE_INTROSPECTION
#include "meta-plugin-manager.h" #include "meta-plugin-manager.h"
#endif
#include <glib.h> #include <glib.h>

View File

@@ -914,8 +914,6 @@ do_override (char *key,
detailed_signal = g_strdup_printf ("changed::%s", key); detailed_signal = g_strdup_printf ("changed::%s", key);
handler_id = g_signal_connect (settings, detailed_signal, handler_id = g_signal_connect (settings, detailed_signal,
G_CALLBACK (settings_changed), NULL); G_CALLBACK (settings_changed), NULL);
g_free (detailed_signal);
g_object_set_data (G_OBJECT (settings), key, GUINT_TO_POINTER (handler_id)); g_object_set_data (G_OBJECT (settings), key, GUINT_TO_POINTER (handler_id));
settings_changed (settings, key, NULL); settings_changed (settings, key, NULL);

View File

@@ -39,6 +39,7 @@
#include "stack.h" #include "stack.h"
#include "xprops.h" #include "xprops.h"
#include <meta/compositor.h> #include <meta/compositor.h>
#include "mutter-marshal.h"
#include "mutter-enum-types.h" #include "mutter-enum-types.h"
#ifdef HAVE_SOLARIS_XINERAMA #ifdef HAVE_SOLARIS_XINERAMA
@@ -161,7 +162,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (MetaScreenClass, restacked), G_STRUCT_OFFSET (MetaScreenClass, restacked),
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
pspec = g_param_spec_int ("n-workspaces", pspec = g_param_spec_int ("n-workspaces",
@@ -175,7 +177,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__INT,
G_TYPE_NONE, G_TYPE_NONE,
1, 1,
G_TYPE_INT); G_TYPE_INT);
@@ -185,7 +188,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__INT,
G_TYPE_NONE, G_TYPE_NONE,
1, 1,
G_TYPE_INT); G_TYPE_INT);
@@ -195,7 +199,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
_mutter_marshal_VOID__INT_INT_ENUM,
G_TYPE_NONE, G_TYPE_NONE,
3, 3,
G_TYPE_INT, G_TYPE_INT,
@@ -207,7 +212,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
_mutter_marshal_VOID__INT_OBJECT,
G_TYPE_NONE, 2, G_TYPE_NONE, 2,
G_TYPE_INT, G_TYPE_INT,
META_TYPE_WINDOW); META_TYPE_WINDOW);
@@ -217,7 +223,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
_mutter_marshal_VOID__INT_OBJECT,
G_TYPE_NONE, 2, G_TYPE_NONE, 2,
G_TYPE_INT, G_TYPE_INT,
META_TYPE_WINDOW); META_TYPE_WINDOW);
@@ -227,7 +234,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1, G_TYPE_POINTER); G_TYPE_NONE, 1, G_TYPE_POINTER);
screen_signals[TOGGLE_RECORDING] = screen_signals[TOGGLE_RECORDING] =
@@ -235,7 +243,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
screen_signals[WORKAREAS_CHANGED] = screen_signals[WORKAREAS_CHANGED] =
@@ -243,7 +252,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (MetaScreenClass, workareas_changed), G_STRUCT_OFFSET (MetaScreenClass, workareas_changed),
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
screen_signals[MONITORS_CHANGED] = screen_signals[MONITORS_CHANGED] =
@@ -251,7 +261,8 @@ meta_screen_class_init (MetaScreenClass *klass)
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (MetaScreenClass, monitors_changed), G_STRUCT_OFFSET (MetaScreenClass, monitors_changed),
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
@@ -1554,7 +1565,7 @@ static void
update_num_workspaces (MetaScreen *screen, update_num_workspaces (MetaScreen *screen,
guint32 timestamp) guint32 timestamp)
{ {
int new_num, old_num; int new_num;
GList *tmp; GList *tmp;
int i; int i;
GList *extras; GList *extras;
@@ -1584,7 +1595,6 @@ update_num_workspaces (MetaScreen *screen,
++i; ++i;
tmp = tmp->next; tmp = tmp->next;
} }
old_num = i;
g_assert (last_remaining); g_assert (last_remaining);
@@ -1625,16 +1635,16 @@ update_num_workspaces (MetaScreen *screen,
g_list_free (extras); g_list_free (extras);
for (i = old_num; i < new_num; i++) while (i < new_num)
{
meta_workspace_new (screen); meta_workspace_new (screen);
++i;
}
set_number_of_spaces_hint (screen, new_num); set_number_of_spaces_hint (screen, new_num);
meta_screen_queue_workarea_recalc (screen); meta_screen_queue_workarea_recalc (screen);
for (i = old_num; i < new_num; i++)
g_signal_emit (screen, screen_signals[WORKSPACE_ADDED], 0, i);
g_object_notify (G_OBJECT (screen), "n-workspaces"); g_object_notify (G_OBJECT (screen), "n-workspaces");
} }
@@ -1925,6 +1935,7 @@ meta_screen_tile_preview_update_timeout (gpointer data)
{ {
MetaScreen *screen = data; MetaScreen *screen = data;
MetaWindow *window = screen->display->grab_window; MetaWindow *window = screen->display->grab_window;
gboolean composited = screen->display->compositor != NULL;
gboolean needs_preview = FALSE; gboolean needs_preview = FALSE;
screen->tile_preview_timeout_id = 0; screen->tile_preview_timeout_id = 0;
@@ -1934,7 +1945,8 @@ meta_screen_tile_preview_update_timeout (gpointer data)
Window xwindow; Window xwindow;
gulong create_serial; gulong create_serial;
screen->tile_preview = meta_tile_preview_new (screen->number); screen->tile_preview = meta_tile_preview_new (screen->number,
composited);
xwindow = meta_tile_preview_get_xwindow (screen->tile_preview, xwindow = meta_tile_preview_get_xwindow (screen->tile_preview,
&create_serial); &create_serial);
meta_stack_tracker_record_add (screen->stack_tracker, meta_stack_tracker_record_add (screen->stack_tracker,

View File

@@ -101,14 +101,10 @@ struct _MetaWindow
char *startup_id; char *startup_id;
char *mutter_hints; char *mutter_hints;
char *gtk_theme_variant; char *gtk_theme_variant;
char *gtk_application_id; char *dbus_application_id;
char *gtk_unique_bus_name; char *dbus_unique_name;
char *gtk_application_object_path; char *dbus_object_path;
char *gtk_window_object_path;
char *gtk_app_menu_object_path;
char *gtk_menubar_object_path;
int hide_titlebar_when_maximized;
int net_wm_pid; int net_wm_pid;
Window xtransient_for; Window xtransient_for;
@@ -137,9 +133,6 @@ struct _MetaWindow
* this is the current mode. If not, it is the mode which will be * this is the current mode. If not, it is the mode which will be
* requested after the window grab is released */ * requested after the window grab is released */
guint tile_mode : 2; guint tile_mode : 2;
/* The last "full" maximized/unmaximized state. We need to keep track of
* that to toggle between normal/tiled or maximized/tiled states. */
guint saved_maximize : 1;
int tile_monitor_number; int tile_monitor_number;
/* Whether we're shaded */ /* Whether we're shaded */
@@ -661,6 +654,5 @@ void meta_window_propagate_focus_appearance (MetaWindow *window,
gboolean focused); gboolean focused);
gboolean meta_window_should_attach_to_parent (MetaWindow *window); gboolean meta_window_should_attach_to_parent (MetaWindow *window);
gboolean meta_window_can_tile_side_by_side (MetaWindow *window);
#endif #endif

View File

@@ -1578,11 +1578,14 @@ reload_gtk_theme_variant (MetaWindow *window,
requested_variant, window->desc); requested_variant, window->desc);
} }
if (g_strcmp0 (requested_variant, current_variant) != 0) if (g_strcmp0 (requested_variant, current_variant))
{ {
g_free (current_variant); g_free (current_variant);
if (requested_variant)
window->gtk_theme_variant = g_strdup (requested_variant); window->gtk_theme_variant = g_strdup (requested_variant);
else
window->gtk_theme_variant = NULL;
if (window->frame) if (window->frame)
meta_ui_update_frame_style (window->screen->ui, window->frame->xwindow); meta_ui_update_frame_style (window->screen->ui, window->frame->xwindow);
@@ -1590,57 +1593,76 @@ reload_gtk_theme_variant (MetaWindow *window,
} }
static void static void
reload_gtk_hide_titlebar_when_maximized (MetaWindow *window, reload_dbus_application_id (MetaWindow *window,
MetaPropValue *value, MetaPropValue *value,
gboolean initial) gboolean initial)
{ {
gboolean requested_value = FALSE; char *new_id = NULL;
gboolean current_value = window->hide_titlebar_when_maximized; char *current_id = window->dbus_application_id;
if (value->type != META_PROP_VALUE_INVALID) if (value->type != META_PROP_VALUE_INVALID)
new_id = value->v.str;
if (g_strcmp0 (new_id, current_id))
{ {
requested_value = ((int) value->v.cardinal == 1); g_free (current_id);
meta_verbose ("Request to hide titlebar for window %s.\n", window->desc);
if (new_id)
window->dbus_application_id = g_strdup (new_id);
else
window->dbus_application_id = NULL;
g_object_notify ((GObject*)window, "dbus-application-id");
}
} }
if (requested_value == current_value) static void
return; reload_dbus_unique_name (MetaWindow *window,
MetaPropValue *value,
window->hide_titlebar_when_maximized = requested_value; gboolean initial)
if (META_WINDOW_MAXIMIZED (window))
{ {
meta_window_queue (window, META_QUEUE_MOVE_RESIZE); char *new_id = NULL;
char *current_id = window->dbus_unique_name;
if (window->frame) if (value->type != META_PROP_VALUE_INVALID)
meta_ui_update_frame_style (window->screen->ui, window->frame->xwindow); new_id = value->v.str;
if (g_strcmp0 (new_id, current_id))
{
g_free (current_id);
if (new_id)
window->dbus_unique_name = g_strdup (new_id);
else
window->dbus_unique_name = NULL;
g_object_notify ((GObject*)window, "dbus-unique-name");
} }
} }
#define RELOAD_STRING(var_name, propname) \ static void
static void \ reload_dbus_object_path (MetaWindow *window,
reload_ ## var_name (MetaWindow *window, \ MetaPropValue *value,
MetaPropValue *value, \ gboolean initial)
gboolean initial) \ {
{ \ char *new_path = NULL;
g_free (window->var_name); \ char *current_path = window->dbus_object_path;
\
if (value->type != META_PROP_VALUE_INVALID) \ if (value->type != META_PROP_VALUE_INVALID)
window->var_name = g_strdup (value->v.str); \ new_path = value->v.str;
else \
window->var_name = NULL; \ if (g_strcmp0 (new_path, current_path))
\ {
g_object_notify (G_OBJECT (window), propname); \ g_free (current_path);
if (new_path)
window->dbus_object_path = g_strdup (new_path);
else
window->dbus_object_path = NULL;
g_object_notify ((GObject*)window, "dbus-object-path");
}
} }
RELOAD_STRING (gtk_unique_bus_name, "gtk-unique-bus-name")
RELOAD_STRING (gtk_application_id, "gtk-application-id")
RELOAD_STRING (gtk_application_object_path, "gtk-application-object-path")
RELOAD_STRING (gtk_window_object_path, "gtk-window-object-path")
RELOAD_STRING (gtk_app_menu_object_path, "gtk-app-menu-object-path")
RELOAD_STRING (gtk_menubar_object_path, "gtk-menubar-object-path")
#undef RELOAD_STRING
/** /**
* Initialises the property hooks system. Each row in the table named "hooks" * Initialises the property hooks system. Each row in the table named "hooks"
@@ -1695,13 +1717,9 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
{ display->atom__MOTIF_WM_HINTS, META_PROP_VALUE_MOTIF_HINTS, reload_mwm_hints, TRUE, FALSE }, { display->atom__MOTIF_WM_HINTS, META_PROP_VALUE_MOTIF_HINTS, reload_mwm_hints, TRUE, FALSE },
{ XA_WM_TRANSIENT_FOR, META_PROP_VALUE_WINDOW, reload_transient_for, TRUE, FALSE }, { XA_WM_TRANSIENT_FOR, META_PROP_VALUE_WINDOW, reload_transient_for, TRUE, FALSE },
{ display->atom__GTK_THEME_VARIANT, META_PROP_VALUE_UTF8, reload_gtk_theme_variant, TRUE, FALSE }, { display->atom__GTK_THEME_VARIANT, META_PROP_VALUE_UTF8, reload_gtk_theme_variant, TRUE, FALSE },
{ display->atom__GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED, META_PROP_VALUE_CARDINAL, reload_gtk_hide_titlebar_when_maximized, TRUE, FALSE }, { display->atom__DBUS_APPLICATION_ID, META_PROP_VALUE_UTF8, reload_dbus_application_id, TRUE, FALSE },
{ display->atom__GTK_APPLICATION_ID, META_PROP_VALUE_UTF8, reload_gtk_application_id, TRUE, FALSE }, { display->atom__DBUS_UNIQUE_NAME, META_PROP_VALUE_UTF8, reload_dbus_unique_name, TRUE, FALSE },
{ display->atom__GTK_UNIQUE_BUS_NAME, META_PROP_VALUE_UTF8, reload_gtk_unique_bus_name, TRUE, FALSE }, { display->atom__DBUS_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_dbus_object_path, TRUE, FALSE },
{ display->atom__GTK_APPLICATION_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_application_object_path, TRUE, FALSE },
{ display->atom__GTK_WINDOW_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_window_object_path, TRUE, FALSE },
{ display->atom__GTK_APP_MENU_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_app_menu_object_path, TRUE, FALSE },
{ display->atom__GTK_MENUBAR_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_menubar_object_path, TRUE, FALSE },
{ display->atom__NET_WM_USER_TIME_WINDOW, META_PROP_VALUE_WINDOW, reload_net_wm_user_time_window, TRUE, FALSE }, { display->atom__NET_WM_USER_TIME_WINDOW, META_PROP_VALUE_WINDOW, reload_net_wm_user_time_window, TRUE, FALSE },
{ display->atom_WM_STATE, META_PROP_VALUE_INVALID, NULL, FALSE, FALSE }, { display->atom_WM_STATE, META_PROP_VALUE_INVALID, NULL, FALSE, FALSE },
{ display->atom__NET_WM_ICON, META_PROP_VALUE_INVALID, reload_net_wm_icon, FALSE, FALSE }, { display->atom__NET_WM_ICON, META_PROP_VALUE_INVALID, reload_net_wm_icon, FALSE, FALSE },

View File

@@ -165,12 +165,9 @@ enum {
PROP_RESIZEABLE, PROP_RESIZEABLE,
PROP_ABOVE, PROP_ABOVE,
PROP_WM_CLASS, PROP_WM_CLASS,
PROP_GTK_APPLICATION_ID, PROP_DBUS_APPLICATION_ID,
PROP_GTK_UNIQUE_BUS_NAME, PROP_DBUS_UNIQUE_NAME,
PROP_GTK_APPLICATION_OBJECT_PATH, PROP_DBUS_OBJECT_PATH
PROP_GTK_WINDOW_OBJECT_PATH,
PROP_GTK_APP_MENU_OBJECT_PATH,
PROP_GTK_MENUBAR_OBJECT_PATH
}; };
enum enum
@@ -227,12 +224,9 @@ meta_window_finalize (GObject *object)
g_free (window->icon_name); g_free (window->icon_name);
g_free (window->desc); g_free (window->desc);
g_free (window->gtk_theme_variant); g_free (window->gtk_theme_variant);
g_free (window->gtk_application_id); g_free (window->dbus_application_id);
g_free (window->gtk_unique_bus_name); g_free (window->dbus_unique_name);
g_free (window->gtk_application_object_path); g_free (window->dbus_object_path);
g_free (window->gtk_window_object_path);
g_free (window->gtk_app_menu_object_path);
g_free (window->gtk_menubar_object_path);
} }
static void static void
@@ -296,23 +290,14 @@ meta_window_get_property(GObject *object,
case PROP_ABOVE: case PROP_ABOVE:
g_value_set_boolean (value, win->wm_state_above); g_value_set_boolean (value, win->wm_state_above);
break; break;
case PROP_GTK_APPLICATION_ID: case PROP_DBUS_APPLICATION_ID:
g_value_set_string (value, win->gtk_application_id); g_value_set_string (value, win->dbus_application_id);
break; break;
case PROP_GTK_UNIQUE_BUS_NAME: case PROP_DBUS_UNIQUE_NAME:
g_value_set_string (value, win->gtk_unique_bus_name); g_value_set_string (value, win->dbus_unique_name);
break; break;
case PROP_GTK_APPLICATION_OBJECT_PATH: case PROP_DBUS_OBJECT_PATH:
g_value_set_string (value, win->gtk_application_object_path); g_value_set_string (value, win->dbus_object_path);
break;
case PROP_GTK_WINDOW_OBJECT_PATH:
g_value_set_string (value, win->gtk_window_object_path);
break;
case PROP_GTK_APP_MENU_OBJECT_PATH:
g_value_set_string (value, win->gtk_app_menu_object_path);
break;
case PROP_GTK_MENUBAR_OBJECT_PATH:
g_value_set_string (value, win->gtk_menubar_object_path);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -481,50 +466,26 @@ meta_window_class_init (MetaWindowClass *klass)
G_PARAM_READABLE)); G_PARAM_READABLE));
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_GTK_APPLICATION_ID, PROP_DBUS_APPLICATION_ID,
g_param_spec_string ("gtk-application-id", g_param_spec_string ("dbus-application-id",
"_GTK_APPLICATION_ID", "_DBUS_APPLICATION_ID",
"Contents of the _GTK_APPLICATION_ID property of this window", "Contents of the _DBUS_APPLICATION_ID property of this window",
NULL, NULL,
G_PARAM_READABLE)); G_PARAM_READABLE));
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_GTK_UNIQUE_BUS_NAME, PROP_DBUS_UNIQUE_NAME,
g_param_spec_string ("gtk-unique-bus-name", g_param_spec_string ("dbus-unique-name",
"_GTK_UNIQUE_BUS_NAME", "_DBUS_UNIQUE_NAME",
"Contents of the _GTK_UNIQUE_BUS_NAME property of this window", "Contents of the _DBUS_UNIQUE_NAME property of this window",
NULL, NULL,
G_PARAM_READABLE)); G_PARAM_READABLE));
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_GTK_APPLICATION_OBJECT_PATH, PROP_DBUS_OBJECT_PATH,
g_param_spec_string ("gtk-application-object-path", g_param_spec_string ("dbus-object-path",
"_GTK_APPLICATION_OBJECT_PATH", "_DBUS_OBJECT_PATH",
"Contents of the _GTK_APPLICATION_OBJECT_PATH property of this window", "Contents of the _DBUS_OBJECT_PATH property of this window",
NULL,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_GTK_WINDOW_OBJECT_PATH,
g_param_spec_string ("gtk-window-object-path",
"_GTK_WINDOW_OBJECT_PATH",
"Contents of the _GTK_WINDOW_OBJECT_PATH property of this window",
NULL,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_GTK_APP_MENU_OBJECT_PATH,
g_param_spec_string ("gtk-app-menu-object-path",
"_GTK_APP_MENU_OBJECT_PATH",
"Contents of the _GTK_APP_MENU_OBJECT_PATH property of this window",
NULL,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_GTK_MENUBAR_OBJECT_PATH,
g_param_spec_string ("gtk-menubar-object-path",
"_GTK_MENUBAR_OBJECT_PATH",
"Contents of the _GTK_MENUBAR_OBJECT_PATH property of this window",
NULL, NULL,
G_PARAM_READABLE)); G_PARAM_READABLE));
@@ -533,7 +494,8 @@ meta_window_class_init (MetaWindowClass *klass)
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (MetaWindowClass, workspace_changed), G_STRUCT_OFFSET (MetaWindowClass, workspace_changed),
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__INT,
G_TYPE_NONE, 1, G_TYPE_NONE, 1,
G_TYPE_INT); G_TYPE_INT);
@@ -542,7 +504,8 @@ meta_window_class_init (MetaWindowClass *klass)
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (MetaWindowClass, focus), G_STRUCT_OFFSET (MetaWindowClass, focus),
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
window_signals[RAISED] = window_signals[RAISED] =
@@ -550,7 +513,8 @@ meta_window_class_init (MetaWindowClass *klass)
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (MetaWindowClass, raised), G_STRUCT_OFFSET (MetaWindowClass, raised),
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
window_signals[UNMANAGED] = window_signals[UNMANAGED] =
@@ -558,7 +522,8 @@ meta_window_class_init (MetaWindowClass *klass)
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (MetaWindowClass, unmanaged), G_STRUCT_OFFSET (MetaWindowClass, unmanaged),
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
} }
@@ -3493,9 +3458,6 @@ meta_window_maximize_internal (MetaWindow *window,
else else
meta_window_save_rect (window); meta_window_save_rect (window);
if (maximize_horizontally && maximize_vertically)
window->saved_maximize = TRUE;
window->maximized_horizontally = window->maximized_horizontally =
window->maximized_horizontally || maximize_horizontally; window->maximized_horizontally || maximize_horizontally;
window->maximized_vertically = window->maximized_vertically =
@@ -3658,10 +3620,6 @@ meta_window_tile (MetaWindow *window)
window, window,
&old_rect, &old_rect,
&new_rect); &new_rect);
if (window->frame)
meta_ui_queue_frame_draw (window->screen->ui,
window->frame->xwindow);
} }
else else
{ {
@@ -3674,10 +3632,16 @@ meta_window_tile (MetaWindow *window)
static gboolean static gboolean
meta_window_can_tile_maximized (MetaWindow *window) meta_window_can_tile_maximized (MetaWindow *window)
{ {
return window->has_maximize_func; if (!META_WINDOW_ALLOWS_RESIZE (window))
return FALSE;
if (!window->has_maximize_func)
return FALSE;
return TRUE;
} }
gboolean static gboolean
meta_window_can_tile_side_by_side (MetaWindow *window) meta_window_can_tile_side_by_side (MetaWindow *window)
{ {
const MetaMonitorInfo *monitor; const MetaMonitorInfo *monitor;
@@ -3756,9 +3720,6 @@ meta_window_unmaximize_internal (MetaWindow *window,
unmaximize_vertically = directions & META_MAXIMIZE_VERTICAL; unmaximize_vertically = directions & META_MAXIMIZE_VERTICAL;
g_assert (unmaximize_horizontally || unmaximize_vertically); g_assert (unmaximize_horizontally || unmaximize_vertically);
if (unmaximize_horizontally && unmaximize_vertically)
window->saved_maximize = FALSE;
/* Only do something if the window isn't already maximized in the /* Only do something if the window isn't already maximized in the
* given direction(s). * given direction(s).
*/ */
@@ -10290,75 +10251,39 @@ meta_window_get_wm_class_instance (MetaWindow *window)
} }
/** /**
* meta_window_get_gtk_application_id: * meta_window_get_dbus_application_id:
* @window: a #MetaWindow * @window: a #MetaWindow
* *
* Return value: (transfer none): the application ID * Return value: (transfer none): the application ID
**/ **/
const char * const char *
meta_window_get_gtk_application_id (MetaWindow *window) meta_window_get_dbus_application_id (MetaWindow *window)
{ {
return window->gtk_application_id; return window->dbus_application_id;
} }
/** /**
* meta_window_get_gtk_unique_bus_name: * meta_window_get_dbus_unique_name:
* @window: a #MetaWindow * @window: a #MetaWindow
* *
* Return value: (transfer none): the unique name * Return value: (transfer none): the unique name
**/ **/
const char * const char *
meta_window_get_gtk_unique_bus_name (MetaWindow *window) meta_window_get_dbus_unique_name (MetaWindow *window)
{ {
return window->gtk_unique_bus_name; return window->dbus_unique_name;
} }
/** /**
* meta_window_get_gtk_application_object_path: * meta_window_get_dbus_object_path:
* @window: a #MetaWindow * @window: a #MetaWindow
* *
* Return value: (transfer none): the object path * Return value: (transfer none): the object path
**/ **/
const char * const char *
meta_window_get_gtk_application_object_path (MetaWindow *window) meta_window_get_dbus_object_path (MetaWindow *window)
{ {
return window->gtk_application_object_path; return window->dbus_object_path;
}
/**
* meta_window_get_gtk_window_object_path:
* @window: a #MetaWindow
*
* Return value: (transfer none): the object path
**/
const char *
meta_window_get_gtk_window_object_path (MetaWindow *window)
{
return window->gtk_window_object_path;
}
/**
* meta_window_get_gtk_app_menu_object_path:
* @window: a #MetaWindow
*
* Return value: (transfer none): the object path
**/
const char *
meta_window_get_gtk_app_menu_object_path (MetaWindow *window)
{
return window->gtk_app_menu_object_path;
}
/**
* meta_window_get_gtk_menubar_object_path:
* @window: a #MetaWindow
*
* Return value: (transfer none): the object path
**/
const char *
meta_window_get_gtk_menubar_object_path (MetaWindow *window)
{
return window->gtk_menubar_object_path;
} }
/** /**
@@ -10614,8 +10539,7 @@ meta_window_get_frame_type (MetaWindow *window)
/* can't add border if undecorated */ /* can't add border if undecorated */
return META_FRAME_TYPE_LAST; return META_FRAME_TYPE_LAST;
} }
else if ((window->border_only && base_type != META_FRAME_TYPE_ATTACHED) || else if (window->border_only && base_type != META_FRAME_TYPE_ATTACHED)
(window->hide_titlebar_when_maximized && META_WINDOW_MAXIMIZED (window)))
{ {
/* override base frame type */ /* override base frame type */
return META_FRAME_TYPE_BORDER; return META_FRAME_TYPE_BORDER;

View File

@@ -121,14 +121,16 @@ meta_workspace_class_init (MetaWorkspaceClass *klass)
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_NONE, 1,
META_TYPE_WINDOW); META_TYPE_WINDOW);
signals[WINDOW_REMOVED] = g_signal_new ("window-removed", signals[WINDOW_REMOVED] = g_signal_new ("window-removed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, 0,
NULL, NULL, NULL, NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_NONE, 1,
META_TYPE_WINDOW); META_TYPE_WINDOW);

View File

@@ -59,13 +59,9 @@ item(_MUTTER_SET_KEYBINDINGS_MESSAGE)
item(_MUTTER_TOGGLE_VERBOSE) item(_MUTTER_TOGGLE_VERBOSE)
item(_MUTTER_HINTS) item(_MUTTER_HINTS)
item(_GTK_THEME_VARIANT) item(_GTK_THEME_VARIANT)
item(_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED) item(_DBUS_APPLICATION_ID)
item(_GTK_APPLICATION_ID) item(_DBUS_UNIQUE_NAME)
item(_GTK_UNIQUE_BUS_NAME) item(_DBUS_OBJECT_PATH)
item(_GTK_APPLICATION_OBJECT_PATH)
item(_GTK_WINDOW_OBJECT_PATH)
item(_GTK_APP_MENU_OBJECT_PATH)
item(_GTK_MENUBAR_OBJECT_PATH)
item(_GNOME_WM_KEYBINDINGS) item(_GNOME_WM_KEYBINDINGS)
item(_GNOME_PANEL_ACTION) item(_GNOME_PANEL_ACTION)
item(_GNOME_PANEL_ACTION_MAIN_MENU) item(_GNOME_PANEL_ACTION_MAIN_MENU)

View File

@@ -191,8 +191,6 @@ typedef enum _MetaKeyBindingAction
META_KEYBINDING_ACTION_ACTIVATE_WINDOW_MENU, META_KEYBINDING_ACTION_ACTIVATE_WINDOW_MENU,
META_KEYBINDING_ACTION_TOGGLE_FULLSCREEN, META_KEYBINDING_ACTION_TOGGLE_FULLSCREEN,
META_KEYBINDING_ACTION_TOGGLE_MAXIMIZED, META_KEYBINDING_ACTION_TOGGLE_MAXIMIZED,
META_KEYBINDING_ACTION_TOGGLE_TILED_LEFT,
META_KEYBINDING_ACTION_TOGGLE_TILED_RIGHT,
META_KEYBINDING_ACTION_TOGGLE_ABOVE, META_KEYBINDING_ACTION_TOGGLE_ABOVE,
META_KEYBINDING_ACTION_MAXIMIZE, META_KEYBINDING_ACTION_MAXIMIZE,
META_KEYBINDING_ACTION_UNMAXIMIZE, META_KEYBINDING_ACTION_UNMAXIMIZE,

View File

@@ -95,12 +95,9 @@ const char * meta_window_get_wm_class (MetaWindow *window);
const char * meta_window_get_wm_class_instance (MetaWindow *window); const char * meta_window_get_wm_class_instance (MetaWindow *window);
gboolean meta_window_showing_on_its_workspace (MetaWindow *window); gboolean meta_window_showing_on_its_workspace (MetaWindow *window);
const char * meta_window_get_gtk_application_id (MetaWindow *window); const char * meta_window_get_dbus_application_id (MetaWindow *window);
const char * meta_window_get_gtk_unique_bus_name (MetaWindow *window); const char * meta_window_get_dbus_unique_name (MetaWindow *window);
const char * meta_window_get_gtk_application_object_path (MetaWindow *window); const char * meta_window_get_dbus_object_path (MetaWindow *window);
const char * meta_window_get_gtk_window_object_path (MetaWindow *window);
const char * meta_window_get_gtk_app_menu_object_path (MetaWindow *window);
const char * meta_window_get_gtk_menubar_object_path (MetaWindow *window);
void meta_window_move(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw); void meta_window_move(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw);
void meta_window_move_frame(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw); void meta_window_move_frame(MetaWindow *window, gboolean user_op, int root_x_nw, int root_y_nw);

2
src/mutter-marshal.list Normal file
View File

@@ -0,0 +1,2 @@
VOID:INT,INT,ENUM
VOID:INT,OBJECT

View File

@@ -83,14 +83,6 @@
<default><![CDATA[['<Control><Shift><Alt>r']]]></default> <default><![CDATA[['<Control><Shift><Alt>r']]]></default>
</key> </key>
<key name="toggle-tiled-left" type="as">
<default><![CDATA[['<Super>Left']]]></default>
</key>
<key name="toggle-tiled-right" type="as">
<default><![CDATA[['<Super>Right']]]></default>
</key>
<key name="tab-popup-select" type="as"> <key name="tab-popup-select" type="as">
<default>[]</default> <default>[]</default>
<_summary>Select window from tab popup</_summary> <_summary>Select window from tab popup</_summary>

View File

@@ -6403,8 +6403,8 @@ meta_gtk_state_from_string (const char *str)
return GTK_STATE_FLAG_INCONSISTENT; return GTK_STATE_FLAG_INCONSISTENT;
else if (g_ascii_strcasecmp ("focused", str) == 0) else if (g_ascii_strcasecmp ("focused", str) == 0)
return GTK_STATE_FLAG_FOCUSED; return GTK_STATE_FLAG_FOCUSED;
else if (g_ascii_strcasecmp ("backdrop", str) == 0) else if (g_ascii_strcasecmp ("window-unfocused", str) == 0)
return GTK_STATE_FLAG_BACKDROP; return GTK_STATE_FLAG_WINDOW_UNFOCUSED;
else else
return -1; /* hack */ return -1; /* hack */
} }
@@ -6428,8 +6428,8 @@ meta_gtk_state_to_string (GtkStateFlags state)
return "INCONSISTENT"; return "INCONSISTENT";
case GTK_STATE_FLAG_FOCUSED: case GTK_STATE_FLAG_FOCUSED:
return "FOCUSED"; return "FOCUSED";
case GTK_STATE_FLAG_BACKDROP: case GTK_STATE_FLAG_WINDOW_UNFOCUSED:
return "BACKDROP"; return "WINDOW_UNFOCUSED";
} }
return "<unknown>"; return "<unknown>";

View File

@@ -39,6 +39,8 @@ struct _MetaTilePreview {
GdkRGBA *preview_color; GdkRGBA *preview_color;
MetaRectangle tile_rect; MetaRectangle tile_rect;
gboolean has_alpha: 1;
}; };
static gboolean static gboolean
@@ -50,6 +52,8 @@ meta_tile_preview_draw (GtkWidget *widget,
cairo_set_line_width (cr, 1.0); cairo_set_line_width (cr, 1.0);
if (preview->has_alpha)
{
/* Fill the preview area with a transparent color */ /* Fill the preview area with a transparent color */
gdk_cairo_set_source_rgba (cr, preview->preview_color); gdk_cairo_set_source_rgba (cr, preview->preview_color);
@@ -61,6 +65,17 @@ meta_tile_preview_draw (GtkWidget *widget,
preview->preview_color->red, preview->preview_color->red,
preview->preview_color->green, preview->preview_color->green,
preview->preview_color->blue); preview->preview_color->blue);
}
else
{
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
cairo_rectangle (cr,
OUTLINE_WIDTH - 0.5, OUTLINE_WIDTH - 0.5,
preview->tile_rect.width - 2 * (OUTLINE_WIDTH - 1) - 1,
preview->tile_rect.height - 2 * (OUTLINE_WIDTH - 1) - 1);
cairo_stroke (cr);
}
cairo_rectangle (cr, cairo_rectangle (cr,
0.5, 0.5, 0.5, 0.5,
@@ -72,13 +87,11 @@ meta_tile_preview_draw (GtkWidget *widget,
} }
MetaTilePreview * MetaTilePreview *
meta_tile_preview_new (int screen_number) meta_tile_preview_new (int screen_number,
gboolean composited)
{ {
MetaTilePreview *preview; MetaTilePreview *preview;
GdkScreen *screen; GdkScreen *screen;
GtkStyleContext *context;
GtkWidgetPath *path;
guchar selection_alpha = 0xFF;
screen = gdk_display_get_screen (gdk_display_get_default (), screen_number); screen = gdk_display_get_screen (gdk_display_get_default (), screen_number);
@@ -94,6 +107,15 @@ meta_tile_preview_new (int screen_number)
preview->tile_rect.x = preview->tile_rect.y = 0; preview->tile_rect.x = preview->tile_rect.y = 0;
preview->tile_rect.width = preview->tile_rect.height = 0; preview->tile_rect.width = preview->tile_rect.height = 0;
preview->has_alpha = composited &&
(gdk_screen_get_rgba_visual (screen) != NULL);
if (preview->has_alpha)
{
GtkStyleContext *context;
GtkWidgetPath *path;
guchar selection_alpha = 0xFF;
gtk_widget_set_visual (preview->preview_window, gtk_widget_set_visual (preview->preview_window,
gdk_screen_get_rgba_visual (screen)); gdk_screen_get_rgba_visual (screen));
@@ -122,6 +144,7 @@ meta_tile_preview_new (int screen_number)
preview->preview_color->alpha = (double)selection_alpha / 0xFF; preview->preview_color->alpha = (double)selection_alpha / 0xFF;
g_object_unref (context); g_object_unref (context);
}
/* We make an assumption that XCreateWindow will be the first operation /* We make an assumption that XCreateWindow will be the first operation
* when calling gtk_widget_realize() (via gdk_window_new()), or that it * when calling gtk_widget_realize() (via gdk_window_new()), or that it
@@ -177,6 +200,33 @@ meta_tile_preview_show (MetaTilePreview *preview,
gdk_window_move_resize (window, gdk_window_move_resize (window,
preview->tile_rect.x, preview->tile_rect.y, preview->tile_rect.x, preview->tile_rect.y,
preview->tile_rect.width, preview->tile_rect.height); preview->tile_rect.width, preview->tile_rect.height);
if (!preview->has_alpha)
{
cairo_region_t *outer_region, *inner_region;
GdkRectangle outer_rect, inner_rect;
GdkRGBA black = { 0.0, 0.0, 0.0, 1.0 };
gdk_window_set_background_rgba (window, &black);
outer_rect.x = outer_rect.y = 0;
outer_rect.width = preview->tile_rect.width;
outer_rect.height = preview->tile_rect.height;
inner_rect.x = OUTLINE_WIDTH;
inner_rect.y = OUTLINE_WIDTH;
inner_rect.width = outer_rect.width - 2 * OUTLINE_WIDTH;
inner_rect.height = outer_rect.height - 2 * OUTLINE_WIDTH;
outer_region = cairo_region_create_rectangle (&outer_rect);
inner_region = cairo_region_create_rectangle (&inner_rect);
cairo_region_subtract (outer_region, inner_region);
cairo_region_destroy (inner_region);
gdk_window_shape_combine_region (window, outer_region, 0, 0);
cairo_region_destroy (outer_region);
}
} }
void void

View File

@@ -27,7 +27,8 @@
typedef struct _MetaTilePreview MetaTilePreview; typedef struct _MetaTilePreview MetaTilePreview;
MetaTilePreview *meta_tile_preview_new (int screen_number); MetaTilePreview *meta_tile_preview_new (int screen_number,
gboolean composited);
void meta_tile_preview_free (MetaTilePreview *preview); void meta_tile_preview_free (MetaTilePreview *preview);
void meta_tile_preview_show (MetaTilePreview *preview, void meta_tile_preview_show (MetaTilePreview *preview,
MetaRectangle *rect); MetaRectangle *rect);