Browse Source

Imported Upstream version 2.0.5

upstream upstream/2.0.5
Maximiliano Curia 9 years ago
parent
commit
c2c34aa7d9
  1. 18
      README-Mutter
  2. 8
      configure.in
  3. 17
      debian/README.Debian
  4. 119
      debian/changelog
  5. 1
      debian/compat
  6. 142
      debian/control
  7. 73
      debian/copyright
  8. 1
      debian/gir1.2-muffin-3.0.install
  9. 4
      debian/libmuffin-dev.install
  10. 1
      debian/libmuffin0.install
  11. 1
      debian/muffin-common.catalog
  12. 1
      debian/muffin-common.docs
  13. 3
      debian/muffin-common.gconf-defaults
  14. 3
      debian/muffin-common.gsettings-override
  15. 5
      debian/muffin-common.install
  16. 1
      debian/muffin-common.sgmlcatalogs
  17. 4
      debian/muffin.install
  18. 16
      debian/muffin.postinst
  19. 12
      debian/muffin.prerm
  20. 32
      debian/rules
  21. 1
      debian/source/format
  22. 2
      po/POTFILES.in
  23. 2
      po/bg.po
  24. 2
      po/ca.po
  25. 2
      po/ca@valencia.po
  26. 2
      po/cs.po
  27. 2
      po/da.po
  28. 2
      po/en_GB.po
  29. 2
      po/es.po
  30. 2
      po/et.po
  31. 2
      po/fr.po
  32. 2
      po/gl.po
  33. 4
      po/he.po
  34. 2
      po/hu.po
  35. 2
      po/ko.po
  36. 2
      po/nb.po
  37. 2
      po/pt.po
  38. 2
      po/pt_BR.po
  39. 4
      po/ru.po
  40. 4
      po/sl.po
  41. 2
      po/sr.po
  42. 2
      po/sr@latin.po
  43. 4
      po/sv.po
  44. 2
      po/te.po
  45. 2
      po/tr.po
  46. 2
      po/uk.po
  47. 2
      po/vi.po
  48. 2
      po/zh_CN.po
  49. 2
      po/zh_HK.po
  50. 2
      po/zh_TW.po
  51. 15
      src/50-muffin-windows.xml.in
  52. 17
      src/Makefile.am
  53. 21
      src/compositor/compositor.c
  54. 11
      src/compositor/meta-plugin-manager.c
  55. 1
      src/compositor/meta-plugin-manager.h
  56. 10
      src/compositor/meta-plugin.c
  57. 4
      src/compositor/meta-window-actor-private.h
  58. 117
      src/compositor/meta-window-actor.c
  59. 23
      src/compositor/meta-window-group.c
  60. 6
      src/core/bell.c
  61. 8
      src/core/boxes-private.h
  62. 157
      src/core/boxes.c
  63. 255
      src/core/constraints.c
  64. 53
      src/core/core.c
  65. 5
      src/core/core.h
  66. 8
      src/core/display-private.h
  67. 17
      src/core/display.c
  68. 27
      src/core/frame.c
  69. 1
      src/core/frame.h
  70. 400
      src/core/keybindings.c
  71. 76
      src/core/place.c
  72. 199
      src/core/prefs.c
  73. 18
      src/core/screen-private.h
  74. 290
      src/core/screen.c
  75. 2
      src/core/session.c
  76. 151
      src/core/window-private.h
  77. 53
      src/core/window-props.c
  78. 998
      src/core/window.c
  79. 4
      src/core/workspace-private.h
  80. 61
      src/core/workspace.c
  81. 2
      src/libmuffin.pc.in
  82. 5
      src/meta/atomnames.h
  83. 50
      src/meta/common.h
  84. 5
      src/meta/compositor.h
  85. 11
      src/meta/meta-plugin.h
  86. 49
      src/meta/prefs.h
  87. 3
      src/meta/screen.h
  88. 5
      src/meta/window.h
  89. 23
      src/muffin-wm.desktop.desktop
  90. 20
      src/muffin-wm.desktop.in
  91. 411
      src/org.cinnamon.muffin.gschema.xml.in
  92. 58
      src/ui/frames.c
  93. 8
      src/ui/theme-private.h
  94. 32
      src/ui/theme.c
  95. 511
      src/ui/tile-hud.c
  96. 52
      src/ui/tile-hud.h
  97. 71
      src/ui/tile-preview.c
  98. 4
      src/ui/tile-preview.h
  99. 2
      src/ui/ui.h

18
README-Mutter

@ -59,23 +59,23 @@ MUFFIN FEATURES
- Has a simple theme system and a couple of extra themes come with it.
Change themes via gsettings:
gsettings set org.gnome.desktop.wm.preferences theme Crux
gsettings set org.gnome.desktop.wm.preferences theme Gorilla
gsettings set org.gnome.desktop.wm.preferences theme Atlanta
gsettings set org.gnome.desktop.wm.preferences theme Bright
gsettings set org.cinnamon.desktop.wm.preferences theme Crux
gsettings set org.cinnamon.desktop.wm.preferences theme Gorilla
gsettings set org.cinnamon.desktop.wm.preferences theme Atlanta
gsettings set org.cinnamon.desktop.wm.preferences theme Bright
See theme-format.txt for docs on the theme format. Use
metacity-theme-viewer to preview themes.
- Change number of workspaces via gsettings:
gsettings set org.gnome.desktop.wm.preferences num-workspaces 5
gsettings set org.cinnamon.desktop.wm.preferences num-workspaces 5
Can also change workspaces from GNOME 2 pager.
- Change focus mode:
gsettings set org.gnome.desktop.wm.preferences focus-mode mouse
gsettings set org.gnome.desktop.wm.preferences focus-mode sloppy
gsettings set org.gnome.desktop.wm.preferences focus-mode click
gsettings set org.cinnamon.desktop.wm.preferences focus-mode mouse
gsettings set org.cinnamon.desktop.wm.preferences focus-mode sloppy
gsettings set org.cinnamon.desktop.wm.preferences focus-mode click
- Global keybinding defaults include:
@ -90,7 +90,7 @@ MUFFIN FEATURES
Change keybindings for example:
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 '[<Alt>F1]'
gsettings set org.cinnamon.desktop.wm.keybindings switch-to-workspace-1 '[<Alt>F1]'
Also try the GNOME keyboard shortcuts control panel.

8
configure.in

@ -1,8 +1,8 @@
AC_PREREQ(2.50)
m4_define([muffin_major_version], [1])
m4_define([muffin_minor_version], [8])
m4_define([muffin_micro_version], [2])
m4_define([muffin_major_version], [2])
m4_define([muffin_minor_version], [0])
m4_define([muffin_micro_version], [5])
m4_define([muffin_version],
[muffin_major_version.muffin_minor_version.muffin_micro_version])
@ -82,7 +82,7 @@ MUFFIN_PC_MODULES="
gio-2.0 >= 2.25.10
pango >= 1.2.0
cairo >= 1.10.0
gsettings-desktop-schemas >= 3.3.0
cinnamon-desktop >= 1.0.0
xcomposite >= 0.2 xfixes xrender xdamage
$CLUTTER_PACKAGE >= 1.9.10
cogl-1.0 >= 1.9.6

17
debian/README.Debian

@ -1,17 +0,0 @@
Muffin Compositor
===================
Muffin includes a compositor based on Clutter. Muffin by default adds
very simple effects using the compositor, such as a drop-shadow. The
compositor may be used by plugins to add more effects. GNOME Shell is
an example of one such plugin.
The compositor can be enabled on the fly by setting the gconf key
/apps/muffin/general/compositing_manager to true by using
gconf-editor or gconftool-2.
Before enabling the compositor, you need to make sure your X server
configuration has the composite extension, as well as DRI loaded and
enabled.
-- Gustavo Noronha Silva <kov@debian.org>, Sun, 26 Jul 2009 13:14:57 +0200

119
debian/changelog

@ -1,119 +0,0 @@
muffin (1.8.2) olivia; urgency=low
* 1.8.2
-- Clement Lefebvre <root@linuxmint.com> Sun, 19 May 2013 20:55:33 +0100
muffin (1.8.1) olivia; urgency=low
* 1.8.1
-- Clement Lefebvre <root@linuxmint.com> Thu, 09 May 2013 13:37:25 +0100
muffin (1.8.0) olivia; urgency=low
* 1.8.0
-- Clement Lefebvre <root@linuxmint.com> Sun, 05 May 2013 12:08:27 +0100
muffin (1.7.5) olivia; urgency=low
* 1.7.5
-- Clement Lefebvre <root@linuxmint.com> Fri, 03 May 2013 17:09:46 +0100
muffin (1.7.4) olivia; urgency=low
* 1.7.4
-- Clement Lefebvre <root@linuxmint.com> Sat, 27 Apr 2013 20:01:00 +0100
muffin (1.7.3) olivia; urgency=low
* 1.7.3
-- Clement Lefebvre <root@linuxmint.com> Mon, 15 Apr 2013 14:53:18 +0100
muffin (1.7.2) olivia; urgency=low
* 1.7.2
-- Clement Lefebvre <root@linuxmint.com> Tue, 05 Mar 2013 10:43:31 +0000
muffin (1.7.1) olivia; urgency=low
* 1.7.1
-- Clement Lefebvre <root@linuxmint.com> Thu, 21 Feb 2013 16:16:02 +0000
muffin (1.1.2) nadia; urgency=low
* 1.1.2
-- Clement Lefebvre <root@linuxmint.com> Tue, 23 Oct 2012 15:24:39 +0100
muffin (1.1.1) maya; urgency=low
* 1.1.1
-- Clement Lefebvre <root@linuxmint.com> Thu, 27 Sep 2012 14:30:13 +0100
muffin (1.1.0) maya; urgency=low
* 1.1.0
-- Clement Lefebvre <root@linuxmint.com> Mon, 17 Sep 2012 16:33:28 +0100
muffin (1.0.9) maya; urgency=low
* 1.0.9 (skipped 1.0.8 and 1.0.7 due to a git rebase)
-- Clement Lefebvre <root@linuxmint.com> Wed, 05 Sep 2012 23:55:04 +0100
muffin (1.0.6) maya; urgency=low
* 1.0.6
-- Clement Lefebvre <root@linuxmint.com> Thu, 26 Jul 2012 23:23:20 +0100
muffin (1.0.5) maya; urgency=low
* 1.0.5
-- Clement Lefebvre <root@linuxmint.com> Tue, 24 Jul 2012 15:50:33 +0100
muffin (1.0.4) maya; urgency=low
* 1.0.4
-- Clement Lefebvre <root@linuxmint.com> Fri, 08 Jun 2012 15:47:55 +0100
muffin (1.0.3-UP1) maya; urgency=low
* Fixed black borders (regression in GTK)
-- Clement Lefebvre <root@linuxmint.com> Fri, 18 May 2012 19:19:23 +0100
muffin (1.0.3) maya; urgency=low
* 1.0.3
-- Clement Lefebvre <root@linuxmint.com> Thu, 26 Apr 2012 11:41:00 +0000
muffin (1.0.2) lisa; urgency=low
* 1.0.2
-- Clement Lefebvre <root@linuxmint.com> Tue, 13 Mar 2012 15:55:26 +0000
muffin (1.0.1) lisa; urgency=low
* 1.0.1
-- Clement Lefebvre <root@linuxmint.com> Fri, 17 Feb 2012 10:57:41 +0000
muffin (1.0.0) lisa; urgency=low
* Muffin, based on Mutter 3.2.1(-0ubuntu2)
-- Clement Lefebvre <root@linuxmint.com> Wed, 11 Jan 2012 18:04:13 +0000

1
debian/compat

@ -1 +0,0 @@
8

142
debian/control

@ -1,142 +0,0 @@
Source: muffin
Section: x11
Priority: optional
Maintainer: Linux Mint <root@linuxmint.com>
Build-Depends: debhelper (>= 8),
dh-autoreconf,
intltool (>= 0.34.90),
libgtk-3-dev (>= 3.0.8-1~),
libcanberra-gtk3-dev,
gobject-introspection (>= 0.9.12-5~),
libgirepository1.0-dev (>= 0.9.12),
libjson-glib-dev (>= 0.13.2-1~),
libclutter-1.0-dev (>= 1.7.5),
libpango1.0-dev (>= 1.2.0),
libgconf2-dev (>= 2.6.1-2),
libglib2.0-dev (>= 2.6.0),
libstartup-notification0-dev (>= 0.7),
libxcomposite-dev (>= 1:0.2),
libxfixes-dev,
libxrender-dev,
libxdamage-dev,
libxcursor-dev,
libxt-dev,
libx11-dev,
libxinerama-dev,
libxext-dev,
libxrandr-dev,
libsm-dev,
libice-dev,
zenity,
gnome-doc-utils (>= 0.8),
gnome-pkg-tools (>= 0.10),
gsettings-desktop-schemas-dev (>= 3.3.0)
Standards-Version: 3.9.2
Package: muffin
Architecture: any
Depends: ${shlibs:Depends},
${misc:Depends},
muffin-common (= ${source:Version}),
zenity
Provides: x-window-manager
Suggests: gnome-themes,
xdg-user-dirs
Description: lightweight GTK+ window manager
Muffin is a small window manager, using GTK+ and Clutter to do
everything.
.
Muffin is the clutter-based evolution of Metacity, which, as the
author says, is a "Boring window manager for the adult in you. Many
window managers are like Marshmallow Froot Loops; Metacity is like
Cheerios."
.
This package contains the core binaries.
Package: libmuffin0
Section: libs
Architecture: any
Depends: ${shlibs:Depends},
${misc:Depends},
muffin-common (= ${source:Version})
Description: window manager library from the Muffin window manager
Muffin is a small window manager, using GTK+ and Clutter to do
everything.
.
Muffin is the clutter-based evolution of Metacity, which, as the
author says, is a "Boring window manager for the adult in you. Many
window managers are like Marshmallow Froot Loops; Metacity is like
Cheerios."
.
This package contains the window manager shared library, used by muffin
itself, and gnome-shell.
Package: muffin-common
Section: misc
Architecture: all
Depends: ${misc:Depends}
Description: shared files for the Muffin window manager
Muffin is a small window manager, using GTK+ and Clutter to do
everything.
.
Muffin is the clutter-based evolution of Metacity, which, as the
author says, is a "Boring window manager for the adult in you. Many
window managers are like Marshmallow Froot Loops; Metacity is like
Cheerios."
.
This package contains the shared files.
Package: libmuffin-dev
Section: libdevel
Architecture: any
Depends: ${misc:Depends},
libmuffin0 (= ${binary:Version}),
gir1.2-muffin-3.0 (= ${binary:Version}),
libclutter-1.0-dev (>= 1.0.0),
libgtk-3-dev (>= 3.0.0)
Description: Development files for the Muffin window manager
Muffin is a small window manager, using GTK+ and Clutter to do
everything.
.
Muffin is the clutter-based evolution of Metacity, which, as the
author says, is a "Boring window manager for the adult in you. Many
window managers are like Marshmallow Froot Loops; Metacity is like
Cheerios."
.
This package contains the development files.
Package: muffin-dbg
Section: debug
Priority: extra
Architecture: any
Depends: libmuffin0 (= ${binary:Version}),
muffin (= ${binary:Version}),
${misc:Depends}
Description: Debugging symbols for the Muffin window manager
Muffin is a small window manager, using GTK+ and Clutter to do
everything.
.
Muffin is the clutter-based evolution of Metacity, which, as the
author says, is a "Boring window manager for the adult in you. Many
window managers are like Marshmallow Froot Loops; Metacity is like
Cheerios."
.
This package contains the debugging symbols.
Package: gir1.2-muffin-3.0
Section: libs
Architecture: any
Depends: ${gir:Depends},
${shlibs:Depends},
${misc:Depends}
Description: GObject introspection data for Muffin
Muffin is a small window manager, using GTK+ and Clutter to do
everything.
.
Muffin is the clutter-based evolution of Metacity, which, as the
author says, is a "Boring window manager for the adult in you. Many
window managers are like Marshmallow Froot Loops; Metacity is like
Cheerios."
.
This package contains the GObject introspection data which may be
used to generate dynamic bindings.

73
debian/copyright

@ -1,73 +0,0 @@
This package was originally based on the 'mutter' packaging from the Debian
project: <http://packages.qa.debian.org/m/mutter.html>
In turn the mutter package was derived from the metacity package from the
Debian project: <http://packages.qa.debian.org/m/metacity.html>
The metacity package was debianized by Thom May <thom@debian.org> on
Sun, 10 Feb 2002 12:03:22 +0000.
Metacity Upstream Author: Havoc Pennington <hp@redhat.com>
Copyright:
Copyright © 2001-2008 Havoc Pennington, Red Hat, Inc., and others
Copyright © 2002 The Gnome Foundation
Copyright © 2007 The GNOME Project
Copyright © 2002 Ross Burton
Copyright © 2004-2006 Elijah Newren
Copyright © 2001 Dominik Vogt, Matthias Clasen, and fvwm2 team
Copyright © 2003-2004 Rob Adams
Copyright © 2002 Sun Microsystems, Inc.
Copyright © 1986-1998 The Open Group
Copyright © 1987 Digital Equipment Corporation
Copyright © 2001 Anders Carlsson
Copyright © 2008 Thomas Thurman
Copyright © 1995-2000 GTK+ Team
Copyright © 1988 Wyse Technology, Inc.,
Copyright © 2008 Iain Holmes
Copyright © 2000-2001 Eazel, Inc.
Copyright © 2001 Ximian, Inc.
Copyright © 2002 Gaute Lindkvist
Copyright © 2002 James M. Cape
Copyright © 2002 Garrett LeSage
Copyright © 2002 Tuomas Kuosmanen
Copyright © 2002 Jorn Baayen
Copyright © 1997-2000 Dan Pascu and Alfredo Kojima
Copyright © 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
Copyright © 1998 Tim Janik
Copyright © 1999-2007 Free Software Foundation, Inc.
Copyright © 1995-1997 Ulrich Drepper
Copyright © 1994 X Consortium
Copyright © 2004-2008 Rodney Dawes
Copyright © 2004 Scott James Remnant
Copyright © 2002 Simos Xenitellis
Copyright © 2003-2006 Miloslav Trmac
Copyright © 2008 GNOME i18n Project for Vietnamese
Copyright © 2003-2006 Sharif FarsiWeb, Inc.
Copyright © 2003 Åsmund Skjæveland.
Copyright © 2005-2006 Canonical Ltd. and Rosetta Contributors
Copyright © 2004-2006 Adam Weinberger and the GNOME Foundation
Copyright © 2004 Kakilik Project
Copyright © Croatiann team
Copyright © 2007-2008 OpenedHand
Copyright © 2008-2009 Intel Corporation
Copyright © 2008 Matthew Allum
License:
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this package; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.

1
debian/gir1.2-muffin-3.0.install

@ -1 +0,0 @@
usr/lib/muffin/Meta-*.typelib

4
debian/libmuffin-dev.install

@ -1,4 +0,0 @@
usr/include
usr/lib/lib*.so
usr/lib/pkgconfig/*.pc
usr/lib/muffin/Meta-*.gir

1
debian/libmuffin0.install

@ -1 +0,0 @@
usr/lib/libmuffin.so.*

1
debian/muffin-common.catalog

@ -1 +0,0 @@
PUBLIC "-//MetacityTheme//DTD MetacityTheme 1.0//EN//XML" "metacity-theme.dtd"

1
debian/muffin-common.docs

@ -1 +0,0 @@
doc/theme-format.txt

3
debian/muffin-common.gconf-defaults

@ -1,3 +0,0 @@
/desktop/gnome/keybindings/custom0/action x-terminal-emulator
/desktop/gnome/keybindings/custom0/binding <Primary><Alt>t
/desktop/gnome/keybindings/custom0/name "Launch Terminal"

3
debian/muffin-common.gsettings-override

@ -1,3 +0,0 @@
[org.cinnamon.muffin.keybindings]
toggle-tiled-left = ['<Super>Left','<Primary><Super>Left']
toggle-tiled-right = ['<Super>Right','<Primary><Super>Right']

5
debian/muffin-common.install

@ -1,5 +0,0 @@
usr/share/GConf
usr/share/glib-2.0
usr/share/locale
usr/share/man
usr/share/muffin

1
debian/muffin-common.sgmlcatalogs

@ -1 +0,0 @@
debian/muffin-common.catalog /usr/share/sgml/muffin-common/catalog

4
debian/muffin.install

@ -1,4 +0,0 @@
usr/bin
usr/lib/muffin/plugins
usr/share/applications
usr/share/gnome

16
debian/muffin.postinst

@ -1,16 +0,0 @@
#!/bin/sh
set -e
action="$1"
if [ "$action" = configure ]; then
# register the alternatives of x-window-manager manually
# because dh_installwm doesn't register manpage as slave yet.
update-alternatives --install /usr/bin/x-window-manager \
x-window-manager /usr/bin/muffin 60 \
--slave /usr/share/man/man1/x-window-manager.1.gz \
x-window-manager.1.gz /usr/share/man/man1/muffin.1.gz
fi
#DEBHELPER#

12
debian/muffin.prerm

@ -1,12 +0,0 @@
#!/bin/sh
set -e
action="$1"
if [ "$action" = remove ]; then
update-alternatives --remove x-window-manager \
/usr/bin/muffin
fi
#DEBHELPER#

32
debian/rules

@ -1,32 +0,0 @@
#!/usr/bin/make -f
# -*- makefile -*-
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
DH_PARALLEL_OPTION = --parallel
endif
CONFIGURE_FLAGS = --enable-startup-notification=yes \
--disable-static
%:
dh $@ --with autoreconf $(DH_PARALLEL_OPTION)
override_dh_auto_configure:
dh_auto_configure -- $(CONFIGURE_FLAGS)
override_dh_shlibdeps:
dh_shlibdeps
dh_girepository /usr/lib/muffin
override_dh_installdocs:
dh_installdocs --link-doc=muffin-common
override_dh_install:
dh_install -X.la
override_dh_strip:
dh_strip --dbg-package=muffin-dbg

1
debian/source/format

@ -1 +0,0 @@
3.0 (native)

2
po/POTFILES.in

@ -1,6 +1,5 @@
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
src/50-muffin-windows.xml.in
src/compositor/compositor.c
src/core/bell.c
src/core/core.c
@ -18,7 +17,6 @@ src/core/window.c
src/core/window-props.c
src/core/xprops.c
src/muffin.desktop.in
src/muffin-wm.desktop.in
src/org.cinnamon.muffin.gschema.xml.in
src/tools/muffin-message.c
src/ui/frames.c

2
po/bg.po

@ -467,7 +467,7 @@ msgid ""
"gnome.desktop.wm.preferences)."
msgstr ""
"Определя дали се ползва динамично управление на работните места или броят им "
"е установено число (зададено чрез ключа „num-workspaces“ в org.gnome.desktop."
"е установено число (зададено чрез ключа „num-workspaces“ в org.cinnamon.desktop."
"wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11

2
po/ca.po

@ -477,7 +477,7 @@ msgid ""
msgstr ""
"Determina si els espais de treball es gestionen dinàmicament o hi ha un "
"nombre determinat d'espais de treball (determinat per la clau num-workspaces "
"a org.gnome.desktop.wm.preferences)."
"a org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/ca@valencia.po

@ -475,7 +475,7 @@ msgid ""
msgstr ""
"Determina si els espais de treball es gestionen dinàmicament o hi ha un "
"nombre determinat d'espais de treball (determinat per la clau num-workspaces "
"a org.gnome.desktop.wm.preferences)."
"a org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/cs.po

@ -430,7 +430,7 @@ msgid ""
"gnome.desktop.wm.preferences)."
msgstr ""
"Určuje, zda jsou pracovní plochy spravovány dynamicky nebo jich je pevný "
"počet (daný klíčem num-workspaces v org.gnome.desktop.wm.preferences)."
"počet (daný klíčem num-workspaces v org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:7
msgid "Draggable border width"

2
po/da.po

@ -441,7 +441,7 @@ msgid ""
"gnome.desktop.wm.preferences)."
msgstr ""
"Afgør om arbejdsområderne håndteres dynamisk, eller om der er et statisk "
"antal arbejdsområder (angivet med nøglen num-workspaces i org.gnome.desktop."
"antal arbejdsområder (angivet med nøglen num-workspaces i org.cinnamon.desktop."
"wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:7

2
po/en_GB.po

@ -458,7 +458,7 @@ msgid ""
msgstr ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in "
"org.gnome.desktop.wm.preferences)."
"org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/es.po

@ -475,7 +475,7 @@ msgid ""
msgstr ""
"Determina si las áreas de trabajo se gestionan dinámicamente o si ha un "
"número estático de áreas de trabajo (determinado por la clave «num-"
"workspaces» en «org.gnome.desktop.wm.preferences»)."
"workspaces» en «org.cinnamon.desktop.wm.preferences»)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/et.po

@ -384,7 +384,7 @@ msgid ""
"gnome.desktop.wm.preferences)."
msgstr ""
"Määrab, kas tööalasid hallatakse dünaamiliselt või on nende arv staatiline "
"(arvu määrab org.gnome.desktop.wm.preferences all võti num-workspaces)."
"(arvu määrab org.cinnamon.desktop.wm.preferences all võti num-workspaces)."
msgid "Workspaces only on primary"
msgstr "Tööalad ainult peamisel"

2
po/fr.po

@ -480,7 +480,7 @@ msgid ""
msgstr ""
"Détermine si les espaces de travail sont gérés de manière dynamique ou si le "
"nombre d'espaces de travail est fixe (déterminé par la clé num-workspaces "
"dans org.gnome.desktop.wm.preferences)."
"dans org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/gl.po

@ -472,7 +472,7 @@ msgid ""
msgstr ""
"Determina se os espazos de traballo se xestionan dinamicamente ou se hai un "
"número estático de áreas de traballo (determinado pola chave «num-"
"workspaces» en «org.gnome.desktop.wm.preferences»)."
"workspaces» en «org.cinnamon.desktop.wm.preferences»)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

4
po/he.po

@ -367,8 +367,8 @@ msgid "Determines whether workspace switching should happen for windows on all m
msgstr "Determines whether workspace switching should happen for windows on all monitors or only for windows on the primary monitor."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:6
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.gnome.desktop.wm.preferences)."
msgstr "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.gnome.desktop.wm.preferences)."
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.cinnamon.desktop.wm.preferences)."
msgstr "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:7
msgid "Draggable border width"

2
po/hu.po

@ -434,7 +434,7 @@ msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr "A munkaterületek dinamikusan vannak-e kezelve, vagy a számuk rögzített (ezt a num-workspaces kulcs adja meg az org.gnome.desktop.wm.preferences fájlban)."
msgstr "A munkaterületek dinamikusan vannak-e kezelve, vagy a számuk rögzített (ezt a num-workspaces kulcs adja meg az org.cinnamon.desktop.wm.preferences fájlban)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:7
msgid "Draggable border width"

2
po/ko.po

@ -463,7 +463,7 @@ msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr "작업 공간을 동적으로 관리할지 아니면 작업 공간이 고정된 개수인지 지정합니다. (고정된 개수는 org.gnome.desktop.wm.preferences의 num-workspaces 키로 지정합니다.)"
msgstr "작업 공간을 동적으로 관리할지 아니면 작업 공간이 고정된 개수인지 지정합니다. (고정된 개수는 org.cinnamon.desktop.wm.preferences의 num-workspaces 키로 지정합니다.)"
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/nb.po

@ -451,7 +451,7 @@ msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr "Bestemmer om arbeidsområder skal håndteres dynamisk eller om det er et fast antall arbeidsområder (bestemt av num-workspaces nøkkelen i org.gnome.desktop.wm.preferences)."
msgstr "Bestemmer om arbeidsområder skal håndteres dynamisk eller om det er et fast antall arbeidsområder (bestemt av num-workspaces nøkkelen i org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/pt.po

@ -462,7 +462,7 @@ msgid ""
msgstr ""
"Determina se as áreas de trabalho são geridas dinamicamente ou se existe um "
"número estático de áreas de trabalho (determinado pela chave num-workspaces "
"em org.gnome.desktop.wm.preferences)."
"em org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/pt_BR.po

@ -449,7 +449,7 @@ msgid ""
msgstr ""
"Determina se as áreas de trabalho são gerenciadas de forma dinâmica ou se há "
"um número estático de áreas de trabalho (determinado pela chave num-"
"workspaces em org.gnome.desktop.wm.preferences)."
"workspaces em org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:7
msgid "Draggable border width"

4
po/ru.po

@ -385,8 +385,8 @@ msgid "Workspaces are managed dynamically"
msgstr "Рабочие места управляются динамически"
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:10
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.gnome.desktop.wm.preferences)."
msgstr "Определяет, управляются ли рабочие места автоматически или количество рабочих место постоянно (количество задаётся ключом в org.gnome.desktop.wm.preferences)."
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.cinnamon.desktop.wm.preferences)."
msgstr "Определяет, управляются ли рабочие места автоматически или количество рабочих место постоянно (количество задаётся ключом в org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

4
po/sl.po

@ -392,8 +392,8 @@ msgid "Workspaces are managed dynamically"
msgstr "Število delovnih površin je spremenljivo"
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:10
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.gnome.desktop.wm.preferences)."
msgstr "Možnost določa ali je število delovnih površin spremenljivo ali pa je to število stalno (določenih s ključem števila delovnih površin med možnostmi v org.gnome.desktop.wm.preferences)."
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.cinnamon.desktop.wm.preferences)."
msgstr "Možnost določa ali je število delovnih površin spremenljivo ali pa je to število stalno (določenih s ključem števila delovnih površin med možnostmi v org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/sr.po

@ -459,7 +459,7 @@ msgid ""
msgstr ""
"Одређује да ли се радним просторима управља динамички или ће постојати "
"стални број радних простора (одређен бројем радних простора у "
"„org.gnome.desktop.wm.preferences“)."
"„org.cinnamon.desktop.wm.preferences“)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/sr@latin.po

@ -459,7 +459,7 @@ msgid ""
msgstr ""
"Određuje da li se radnim prostorima upravlja dinamički ili će postojati "
"stalni broj radnih prostora (određen brojem radnih prostora u "
"„org.gnome.desktop.wm.preferences“)."
"„org.cinnamon.desktop.wm.preferences“)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

4
po/sv.po

@ -381,8 +381,8 @@ msgid "Workspaces are managed dynamically"
msgstr "Arbetsytor hanteras dynamiskt"
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:10
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.gnome.desktop.wm.preferences)."
msgstr "Bestämmer huruvida arbetsytor hanteras dynamiskt eller huruvida det finns ett fast antal arbetsytor (bestäms av nyckeln num-workspaces i org.gnome.desktop.wm.preferences)."
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.cinnamon.desktop.wm.preferences)."
msgstr "Bestämmer huruvida arbetsytor hanteras dynamiskt eller huruvida det finns ett fast antal arbetsytor (bestäms av nyckeln num-workspaces i org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/te.po

@ -450,7 +450,7 @@ msgid ""
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"పని చేసేస్థలాలు గతికంగా నిర్వహించారా లేదో లేదా పని చేసేస్థలాలు ఒక స్టాటిక్ సంఖ్య (org.gnome.desktop."
"పని చేసేస్థలాలు గతికంగా నిర్వహించారా లేదో లేదా పని చేసేస్థలాలు ఒక స్టాటిక్ సంఖ్య (org.cinnamon.desktop."
"wm.అభీష్టాల లో num-workspaces కీ ద్వారా గుర్తిస్తారు) ఉందో లేదో నిర్ణయిస్తుంది."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11

2
po/tr.po

@ -471,7 +471,7 @@ msgid ""
msgstr ""
"Çalışma alanlarının dinamik olarak mı yönetileceğini yoksa sabit sayıda "
"çalışma alanı mı olacağını "
"belirler (org.gnome.desktop.wm.preferences içindeki num-workspaces değişkeni "
"belirler (org.cinnamon.desktop.wm.preferences içindeki num-workspaces değişkeni "
"tarafından belirlenir)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11

2
po/uk.po

@ -454,7 +454,7 @@ msgid ""
msgstr ""
"Визначає, чи робочі простори керуються динамічно, чи є певна статична "
"кількість просторів (визначено ключем num-workspaces у "
"org.gnome.desktop.wm.preferences)."
"org.cinnamon.desktop.wm.preferences)."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/vi.po

@ -456,7 +456,7 @@ msgid ""
"gnome.desktop.wm.preferences)."
msgstr ""
"Xác định vùng làm việc được quản lý động, hay cố định số vùng làm việc, xác "
"định bởi khoá num-workspaces trong org.gnome.desktop.wm.preferences."
"định bởi khoá num-workspaces trong org.cinnamon.desktop.wm.preferences."
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:11
msgid "Workspaces only on primary"

2
po/zh_CN.po

@ -437,7 +437,7 @@ msgid ""
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"决定工作区动态管理还是静态数量的工作区(由 org.gnome.desktop.wm.preferences 中"
"决定工作区动态管理还是静态数量的工作区(由 org.cinnamon.desktop.wm.preferences 中"
"的 num-workspaces 键确定)。"
# 或者 只在主显示器上显示工作区

2
po/zh_HK.po

@ -399,7 +399,7 @@ msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr "決定工作區以動態方式管理或是有固定數量的工作區 (以 org.gnome.desktop.wm.preferences 中的 num-workspaces 鍵值來決定)。"
msgstr "決定工作區以動態方式管理或是有固定數量的工作區 (以 org.cinnamon.desktop.wm.preferences 中的 num-workspaces 鍵值來決定)。"
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:7
msgid "Draggable border width"

2
po/zh_TW.po

@ -407,7 +407,7 @@ msgid ""
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"決定工作區以動態方式管理或是有固定數量的工作區 (以 org.gnome.desktop.wm."
"決定工作區以動態方式管理或是有固定數量的工作區 (以 org.cinnamon.desktop.wm."
"preferences 中的 num-workspaces 鍵值來決定)。"
#: ../src/org.cinnamon.muffin.gschema.xml.in.h:7

15
src/50-muffin-windows.xml.in

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

17
src/Makefile.am

@ -132,6 +132,8 @@ libmuffin_la_SOURCES = \
inlinepixbufs.h \
ui/frames.c \
ui/frames.h \
ui/tile-hud.c \
ui/tile-hud.h \
ui/menu.c \
ui/menu.h \
ui/metaaccellabel.c \
@ -225,7 +227,7 @@ typelib_DATA = Meta-$(api_version).typelib
INTROSPECTION_GIRS = Meta-$(api_version).gir
Meta-$(api_version).gir: libmuffin.la
@META_GIR@_INCLUDES = GObject-2.0 GDesktopEnums-3.0 Gdk-3.0 Gtk-3.0 Clutter-1.0 xlib-2.0 xfixes-4.0
@META_GIR@_INCLUDES = GObject-2.0 CDesktopEnums-3.0 Gdk-3.0 Gtk-3.0 Clutter-1.0 xlib-2.0 xfixes-4.0
@META_GIR@_PACKAGES = clutter-1.0 gtk+-3.0
@META_GIR@_CFLAGS = $(INCLUDES)
@META_GIR@_LIBS = libmuffin.la
@ -262,16 +264,6 @@ desktopfiles_in_files=muffin.desktop.in
desktopfiles_files=$(desktopfiles_in_files:.desktop.in=.desktop)
desktopfiles_DATA = $(desktopfiles_files)
wmpropertiesdir=$(datadir)/gnome/wm-properties
wmproperties_in_files=muffin-wm.desktop.in
wmproperties_files=$(wmproperties_in_files:.desktop.in=.desktop)
wmproperties_DATA = $(wmproperties_files)
xmldir = @GNOME_KEYBINDINGS_KEYSDIR@
xml_in_files = \
50-muffin-windows.xml.in
xml_DATA = $(xml_in_files:.xml.in=.xml)
gsettings_SCHEMAS = org.cinnamon.muffin.gschema.xml
@INTLTOOL_XML_NOMERGE_RULE@
@GSETTINGS_RULES@
@ -288,7 +280,6 @@ BUILT_SOURCES = inlinepixbufs.h
CLEANFILES = \
inlinepixbufs.h \
muffin.desktop \
muffin-wm.desktop \
org.cinnamon.muffin.gschema.xml \
$(xml_DATA) \
$(muffin_built_sources) \
@ -303,10 +294,8 @@ pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libmuffin.pc muffin-plugins.pc
EXTRA_DIST=$(desktopfiles_files) \
$(wmproperties_files) \
$(IMAGES) \
$(desktopfiles_in_files) \
$(wmproperties_in_files) \
$(xml_in_files) \
org.cinnamon.muffin.gschema.xml.in \
muffin-schemas.convert \

21
src/compositor/compositor.c

@ -380,6 +380,7 @@ meta_begin_modal_for_plugin (MetaScreen *screen,
* are significant differences in how we handle grabs that make it difficult to
* merge the two.
*/
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdpy = meta_display_get_xdisplay (display);
MetaCompositor *compositor = display->compositor;
@ -968,6 +969,20 @@ meta_compositor_switch_workspace (MetaCompositor *compositor,
}
}
void
meta_compositor_tile_window (MetaCompositor *compositor,
MetaWindow *window,
MetaRectangle *old_rect,
MetaRectangle *new_rect)
{
MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
DEBUG_TRACE ("meta_compositor_tile_window\n");
if (!window_actor)
return;
meta_window_actor_tile (window_actor, old_rect, new_rect);
}
static void
sync_actor_stacking (MetaCompScreen *info)
{
@ -1361,8 +1376,10 @@ void
meta_enable_unredirect_for_screen (MetaScreen *screen)
{
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
if (info != NULL)
info->disable_unredirect_count = MAX(0, info->disable_unredirect_count - 1);
if (info != NULL && info->disable_unredirect_count == 0)
g_warning ("Called enable_unredirect_for_screen while unredirection is enabled.");
if (info != NULL && info->disable_unredirect_count > 0)
info->disable_unredirect_count = info->disable_unredirect_count - 1;
}
#define FLASH_TIME_MS 50

11
src/compositor/meta-plugin-manager.c

@ -368,6 +368,17 @@ meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr,
target_width, target_height);
}
break;
case META_PLUGIN_TILE:
if (klass->tile)
{
meta_plugin_manager_kill_window_effects (plugin_mgr,
actor);
_meta_plugin_effect_started (plugin);
klass->tile (plugin, actor,
target_x, target_y,
target_width, target_height);
}
break;
default:
g_warning ("Incorrect handler called for event %lu", event);
}

1
src/compositor/meta-plugin-manager.h

@ -34,6 +34,7 @@
#define META_PLUGIN_MINIMIZE (1<<0)
#define META_PLUGIN_MAXIMIZE (1<<1)
#define META_PLUGIN_UNMAXIMIZE (1<<2)
#define META_PLUGIN_TILE (1<<6)
#define META_PLUGIN_MAP (1<<3)
#define META_PLUGIN_DESTROY (1<<4)
#define META_PLUGIN_SWITCH_WORKSPACE (1<<5)

10
src/compositor/meta-plugin.c

@ -89,6 +89,9 @@ meta_plugin_set_features (MetaPlugin *plugin)
if (klass->switch_workspace)
priv->features |= META_PLUGIN_SWITCH_WORKSPACE;
if (klass->tile)
priv->features |= META_PLUGIN_TILE;
}
static void
@ -343,6 +346,13 @@ meta_plugin_unmaximize_completed (MetaPlugin *plugin,
meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_UNMAXIMIZE);
}
void
meta_plugin_tile_completed (MetaPlugin *plugin,
MetaWindowActor *actor)
{
meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_TILE);
}
void
meta_plugin_map_completed (MetaPlugin *plugin,
MetaWindowActor *actor)

4
src/compositor/meta-window-actor-private.h

@ -24,6 +24,10 @@ void meta_window_actor_unmaximize (MetaWindowActor *self,
MetaRectangle *old_rect,
MetaRectangle *new_rect);
void meta_window_actor_tile (MetaWindowActor *self,
MetaRectangle *old_rect,
MetaRectangle *new_rect);
void meta_window_actor_process_damage (MetaWindowActor *self,
XDamageNotifyEvent *event);

117
src/compositor/meta-window-actor.c

@ -91,6 +91,7 @@ struct _MetaWindowActorPrivate
gint minimize_in_progress;
gint maximize_in_progress;
gint unmaximize_in_progress;
gint tile_in_progress;
gint map_in_progress;
gint destroy_in_progress;
@ -116,6 +117,10 @@ struct _MetaWindowActorPrivate
guint no_more_x_calls : 1;
guint unredirected : 1;
/* This is used to detect fullscreen windows that need to be unredirected */
guint full_damage_frames_count;
guint does_full_damage : 1;
};
enum
@ -157,6 +162,8 @@ static void meta_window_actor_clear_shape_region (MetaWindowActor *self);
static void meta_window_actor_clear_bounding_region (MetaWindowActor *self);
static void meta_window_actor_clear_shadow_clip (MetaWindowActor *self);
static void check_needs_reshape (MetaWindowActor *self);
G_DEFINE_TYPE (MetaWindowActor, meta_window_actor, CLUTTER_TYPE_GROUP);
static void
@ -361,7 +368,8 @@ meta_window_actor_constructed (GObject *object)
}
meta_window_actor_update_opacity (self);
meta_window_actor_update_shape (self);
priv->shape_region = cairo_region_create();
}
static void
@ -974,6 +982,7 @@ meta_window_actor_effect_in_progress (MetaWindowActor *self)
self->priv->maximize_in_progress ||
self->priv->unmaximize_in_progress ||
self->priv->map_in_progress ||
self->priv->tile_in_progress ||
self->priv->destroy_in_progress);
}
@ -1006,6 +1015,7 @@ is_freeze_thaw_effect (gulong event)
case META_PLUGIN_DESTROY:
case META_PLUGIN_MAXIMIZE:
case META_PLUGIN_UNMAXIMIZE:
case META_PLUGIN_TILE:
return TRUE;
break;
default:
@ -1039,6 +1049,7 @@ start_simple_effect (MetaWindowActor *self,
case META_PLUGIN_UNMAXIMIZE:
case META_PLUGIN_MAXIMIZE:
case META_PLUGIN_SWITCH_WORKSPACE:
case META_PLUGIN_TILE:
g_assert_not_reached ();
break;
}
@ -1146,6 +1157,14 @@ meta_window_actor_effect_completed (MetaWindowActor *self,
priv->maximize_in_progress = 0;
}
break;
case META_PLUGIN_TILE:
priv->tile_in_progress--;
if (priv->tile_in_progress < 0)
{
g_warning ("Error in tile accounting.");
priv->tile_in_progress = 0;
}
break;
case META_PLUGIN_SWITCH_WORKSPACE:
g_assert_not_reached ();
break;
@ -1192,34 +1211,31 @@ LOCAL_SYMBOL gboolean
meta_window_actor_should_unredirect (MetaWindowActor *self)
{
MetaWindow *metaWindow = meta_window_actor_get_meta_window (self);
MetaScreen *screen = meta_window_get_screen (metaWindow);
MetaWindowActorPrivate *priv = self->priv;
if (meta_window_is_override_redirect (metaWindow) && priv->opacity == 0xff && !priv->argb32)
{
int screen_width, screen_height;
MetaRectangle window_rect;
meta_screen_get_size (screen, &screen_width, &screen_height);
meta_window_get_outer_rect (metaWindow, &window_rect);
if (meta_window_requested_dont_bypass_compositor (metaWindow))
return FALSE;
if (window_rect.x == 0 && window_rect.y == 0 &&
window_rect.width == screen_width && window_rect.height == screen_height)
return TRUE;
else
{
int num_monitors = meta_screen_get_n_monitors (screen);
int i;
MetaRectangle monitor_rect;
if (priv->opacity != 0xff)
return FALSE;
for (i = 0; i < num_monitors; i++)
{
meta_screen_get_monitor_geometry (screen , i, &monitor_rect);
if (monitor_rect.x == window_rect.x && monitor_rect.y == window_rect.y &&
monitor_rect.width == window_rect.width && monitor_rect.height == window_rect.height)
return TRUE;
}
}
}
if (metaWindow->has_shape)
return FALSE;
if (priv->argb32 && !meta_window_requested_bypass_compositor (metaWindow))
return FALSE;
if (!meta_window_is_monitor_sized (metaWindow))
return FALSE;
if (meta_window_requested_bypass_compositor (metaWindow))
return TRUE;
if (meta_window_is_override_redirect (metaWindow))
return TRUE;
if (priv->does_full_damage)
return TRUE;
return FALSE;
}
@ -1238,7 +1254,7 @@ meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state)
meta_error_trap_push (display);
XCompositeRedirectWindow (xdisplay, xwin, CompositeRedirectManual);
meta_error_trap_pop (display);
meta_window_actor_queue_create_pixmap (self);
meta_window_actor_detach (self);
self->priv->unredirected = FALSE;
}
else
@ -1471,6 +1487,35 @@ meta_window_actor_unmaximize (MetaWindowActor *self,
}
}
LOCAL_SYMBOL void
meta_window_actor_tile (MetaWindowActor *self,
MetaRectangle *old_rect,
MetaRectangle *new_rect)
{
MetaCompScreen *info = meta_screen_get_compositor_data (self->priv->screen);
/* The window has already been resized (in order to compute new_rect),
* which by side effect caused the actor to be resized. Restore it to the
* old size and position */
clutter_actor_set_position (CLUTTER_ACTOR (self), old_rect->x, old_rect->y);
clutter_actor_set_size (CLUTTER_ACTOR (self), old_rect->width, old_rect->height);
self->priv->tile_in_progress++;
meta_window_actor_freeze (self);
if (!info->plugin_mgr ||
!meta_plugin_manager_event_maximize (info->plugin_mgr,
self,
META_PLUGIN_TILE,
new_rect->x, new_rect->y,
new_rect->width, new_rect->height))
{
self->priv->tile_in_progress--;
meta_window_actor_thaw (self);
}
}
LOCAL_SYMBOL MetaWindowActor *
meta_window_actor_new (MetaWindow *window)
{
@ -1979,11 +2024,29 @@ meta_window_actor_process_damage (MetaWindowActor *self,
XDamageNotifyEvent *event)
{
MetaWindowActorPrivate *priv = self->priv;
MetaCompScreen *info = meta_screen_get_compositor_data (priv->screen);
priv->received_damage = TRUE;
if (meta_window_is_fullscreen (priv->window) && g_list_last (info->windows)->data == self && !priv->unredirected)
{
MetaRectangle window_rect;
meta_window_get_outer_rect (priv->window, &window_rect);
if (window_rect.x == event->area.x &&
window_rect.y == event->area.y &&
window_rect.width == event->area.width &&
window_rect.height == event->area.height)
priv->full_damage_frames_count++;
else
priv->full_damage_frames_count = 0;
if (priv->full_damage_frames_count >= 100)
priv->does_full_damage = TRUE;
}
/* Drop damage event for unredirected windows */
if (self->priv->unredirected)
if (priv->unredirected)
return;
if (is_frozen (self))

23
src/compositor/meta-window-group.c

@ -105,18 +105,12 @@ static void
meta_window_group_paint (ClutterActor *actor)
{
cairo_region_t *visible_region;
cairo_region_t *unredirected_window_region = NULL;
ClutterActor *stage;
cairo_rectangle_int_t visible_rect, unredirected_rect;
cairo_rectangle_int_t visible_rect;
GList *children, *l;
MetaWindowGroup *window_group = META_WINDOW_GROUP (actor);
MetaCompScreen *info = meta_screen_get_compositor_data (window_group->screen);
if (info->unredirected_window != NULL)
{
meta_window_actor_get_shape_bounds (META_WINDOW_ACTOR (info->unredirected_window), &unredirected_rect);
unredirected_window_region = cairo_region_create_rectangle (&unredirected_rect);
}
/* We walk the list from top to bottom (opposite of painting order),
* and subtract the opaque area of each window out of the visible
@ -137,14 +131,22 @@ meta_window_group_paint (ClutterActor *actor)
visible_region = cairo_region_create_rectangle (&visible_rect);
if (unredirected_window_region)
cairo_region_subtract (visible_region, unredirected_window_region);
if (info->unredirected_window != NULL)
{
cairo_rectangle_int_t unredirected_rect;
MetaWindow *window = meta_window_actor_get_meta_window (info->unredirected_window);
meta_window_get_outer_rect (window, (MetaRectangle*) &unredirected_rect);
cairo_region_subtract_rectangle (visible_region, &unredirected_rect);
}
for (l = children; l; l = l->next)
{
if (!CLUTTER_ACTOR_IS_VISIBLE (l->data))
continue;
if (l->data == info->unredirected_window)
continue;
/* If an actor has effects applied, then that can change the area
* it paints and the opacity, so we no longer can figure out what
* portion of the actor is obscured and what portion of the screen
@ -196,9 +198,6 @@ meta_window_group_paint (ClutterActor *actor)
cairo_region_destroy (visible_region);
if (unredirected_window_region)
cairo_region_destroy (unredirected_window_region);
CLUTTER_ACTOR_CLASS (meta_window_group_parent_class)->paint (actor);
/* Now that we are done painting, unset the visible regions (they will

6
src/core/bell.c

@ -131,7 +131,7 @@ bell_flash_screen (MetaDisplay *display,
XFreeGC (display->xdisplay, gc);
}
if (meta_prefs_get_focus_mode () != G_DESKTOP_FOCUS_MODE_CLICK &&
if (meta_prefs_get_focus_mode () != C_DESKTOP_FOCUS_MODE_CLICK &&
!display->mouse_mode)
meta_display_increment_focus_sentinel (display);
XFlush (display->xdisplay);
@ -278,10 +278,10 @@ bell_visual_notify (MetaDisplay *display,
{
switch (meta_prefs_get_visual_bell_type ())
{
case G_DESKTOP_VISUAL_BELL_FULLSCREEN_FLASH:
case C_DESKTOP_VISUAL_BELL_FULLSCREEN_FLASH:
bell_flash_fullscreen (display, xkb_ev);
break;
case G_DESKTOP_VISUAL_BELL_FRAME_FLASH:
case C_DESKTOP_VISUAL_BELL_FRAME_FLASH:
bell_flash_frame (display, xkb_ev); /* does nothing yet */
break;
}

8
src/core/boxes-private.h

@ -32,6 +32,8 @@
#define BOX_RIGHT(box) ((box).x + (box).width) /* One pixel past right */
#define BOX_TOP(box) ((box).y) /* Topmost pixel of rect */
#define BOX_BOTTOM(box) ((box).y + (box).height) /* One pixel past bottom */
#define BOX_CENTER_X(box) ((box).x + (box).width / 2) /* Center in X */
#define BOX_CENTER_Y(box) ((box).y + (box).height / 2) /* Center in Y */
typedef enum
{
@ -108,6 +110,12 @@ GList* meta_rectangle_expand_region_conditionally (
const int min_x,
const int min_y);
void meta_rectangle_expand_to_snapped_borders (MetaRectangle *rect,
const MetaRectangle *expand_to,
const GSList *all_struts,
const GSList *snapped_windows_as_struts,
const MetaRectangle *user_rect);
/* Expand rect in direction to the size of expand_to, and then clip out any
* overlapping struts oriented orthognal to the expansion direction. (Think
* horizontal or vertical maximization)

157
src/core/boxes.c

@ -751,6 +751,163 @@ meta_rectangle_expand_region_conditionally (GList *region,
return region;
}
LOCAL_SYMBOL void
meta_rectangle_expand_to_snapped_borders (MetaRectangle *rect,
const MetaRectangle *expand_to,
const GSList *all_struts,
const GSList *snapped_windows_as_struts,
const MetaRectangle *user_rect)
{
const GSList *strut_iter;
gint x_c, y_c, max_x, max_y, min_x, min_y, fallback_x, fallback_y, fallback_width, fallback_height;
x_c = BOX_CENTER_X (*user_rect);
y_c = BOX_TOP (*user_rect);
min_x = BOX_LEFT (*expand_to);
max_x = BOX_RIGHT (*expand_to);
min_y = BOX_TOP (*expand_to);
max_y = BOX_BOTTOM (*expand_to);
/* Iterate over all struts, find a box containing the center of the current rectangle */
for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next)
{
MetaStrut *strut = (MetaStrut*) strut_iter->data;
if (!meta_rectangle_overlap (&strut->rect, expand_to))
continue;
if (strut->side & META_SIDE_LEFT)
if (BOX_RIGHT (strut->rect) > min_x)
min_x = BOX_RIGHT (strut->rect);
if (strut->side & META_SIDE_RIGHT)
if (BOX_LEFT (strut->rect) < max_x)
max_x = BOX_LEFT (strut->rect);
if (strut->side & META_SIDE_TOP)
if (BOX_BOTTOM (strut->rect) > min_y)
min_y = BOX_BOTTOM (strut->rect);
if (strut->side & META_SIDE_BOTTOM)
if (BOX_TOP (strut->rect) < max_y)