summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob McCathie2015-10-08 01:48:00 +1100
committerRob McCathie2015-10-08 01:48:00 +1100
commit1cbd1b9d4aacb5e6896302a72808b9bd2ea50da4 (patch)
treec0ce3285995fcbecc5e2918c72364e4e761f3f63
parent85302729adc9e89aaa34fc6d07ca5ee68a498303 (diff)
downloadaur-1cbd1b9d4aacb5e6896302a72808b9bd2ea50da4.tar.gz
remove unused, deprecated patch from sources array
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD6
-rw-r--r--metacity-3_16.patch6172
3 files changed, 3 insertions, 6179 deletions
diff --git a/.SRCINFO b/.SRCINFO
index fa0a7c6649f7..cd23acee6057 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,5 +1,5 @@
# Generated by makepkg 4.2.1
-# Wed Oct 7 07:07:58 UTC 2015
+# Wed Oct 7 14:45:08 UTC 2015
pkgbase = compiz-manjaro
pkgdesc = OpenGL compositing window manager. Includes friendly defaults, GWD theme selector and autostart for Xfce & MATE.
pkgver = 0.9.12.2
@@ -74,7 +74,6 @@ pkgbase = compiz-manjaro
source = compiz-manjaro-mate-decoratortheme
source = compiz-manjaro-mate-decoratortheme.desktop
source = greybird-1.5.3.tar.gz::https://github.com/shimmerproject/Greybird/archive/v1.5.3.tar.gz
- source = metacity-3_16.patch
sha256sums = 8917ac9e6dfdacc740780e1995e932ed865d293ae87821e7a280da5325daec80
sha256sums = f4897590b0f677ba34767a29822f8f922a750daf66e8adf47be89f7c2550cf4b
sha256sums = 16ddb6311ce42d958505e21ca28faae5deeddce02cb558d55e648380274ba4d9
@@ -94,7 +93,6 @@ pkgbase = compiz-manjaro
sha256sums = 71d8a014695b23807e3c758e96045b2180c4d8d9ef501f1dded54f9232e1e1eb
sha256sums = a992819fd34c4a9c256519c081e53047ef6527662ae989f4cb0e575fd1592115
sha256sums = 856f092ebd199a2a28346938a3dfe62613135ad886c25bbaeebd3a917de4c962
- sha256sums = 27e7c516c22947a28bb1f34ecc63142fc1a6b8178439a04660f7ae0968bdc57c
pkgname = compiz-manjaro
diff --git a/PKGBUILD b/PKGBUILD
index 2672bb59a5eb..299a9dacc028 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -40,8 +40,7 @@ source=("${url}/${_series}/${pkgver}/+download/${_name}-${pkgver}.tar.bz2"
"${pkgname}-decoratortheme.desktop"
"${pkgname}-mate-decoratortheme"
"${pkgname}-mate-decoratortheme.desktop"
- "greybird-${_greybirdver}.tar.gz::https://github.com/shimmerproject/Greybird/archive/v${_greybirdver}.tar.gz"
- "metacity-3_16.patch")
+ "greybird-${_greybirdver}.tar.gz::https://github.com/shimmerproject/Greybird/archive/v${_greybirdver}.tar.gz")
sha256sums=('8917ac9e6dfdacc740780e1995e932ed865d293ae87821e7a280da5325daec80'
'f4897590b0f677ba34767a29822f8f922a750daf66e8adf47be89f7c2550cf4b'
'16ddb6311ce42d958505e21ca28faae5deeddce02cb558d55e648380274ba4d9'
@@ -60,8 +59,7 @@ sha256sums=('8917ac9e6dfdacc740780e1995e932ed865d293ae87821e7a280da5325daec80'
'dc7d2f58e1bfab312d056f02008faecc0bcd572f41065f1e09c077c62c3f65ca'
'71d8a014695b23807e3c758e96045b2180c4d8d9ef501f1dded54f9232e1e1eb'
'a992819fd34c4a9c256519c081e53047ef6527662ae989f4cb0e575fd1592115'
- '856f092ebd199a2a28346938a3dfe62613135ad886c25bbaeebd3a917de4c962'
- '27e7c516c22947a28bb1f34ecc63142fc1a6b8178439a04660f7ae0968bdc57c')
+ '856f092ebd199a2a28346938a3dfe62613135ad886c25bbaeebd3a917de4c962')
install="${pkgname}.install"
prepare() {
diff --git a/metacity-3_16.patch b/metacity-3_16.patch
deleted file mode 100644
index 150a7362e239..000000000000
--- a/metacity-3_16.patch
+++ /dev/null
@@ -1,6172 +0,0 @@
-diff -Nur original/gtk/CMakeLists.txt modified/gtk/CMakeLists.txt
---- original/gtk/CMakeLists.txt 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/CMakeLists.txt 2015-04-11 14:34:11.000000000 +0100
-@@ -28,6 +28,7 @@
- pkg_check_modules (METACITY libmetacity-private>=3.12.0)
- if (METACITY_FOUND)
- compiz_pkg_check_modules (HAVE_METACITY_3_14_0 libmetacity-private>=3.14.0)
-+ compiz_pkg_check_modules (HAVE_METACITY_3_16_0 libmetacity-private>=3.16.0)
- else (METACITY_FOUND)
- compiz_set (USE_METACITY 0)
- endif (METACITY_FOUND)
-diff -Nur original/gtk/config.h.gtk.in modified/gtk/config.h.gtk.in
---- original/gtk/config.h.gtk.in 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/config.h.gtk.in 2015-04-11 14:34:11.000000000 +0100
-@@ -4,4 +4,7 @@
- /* Define to 1 if metacity version >= 3.14.0 */
- #cmakedefine HAVE_METACITY_3_14_0 1
-
-+/* Define to 1 if metacity version >= 3.16.0 */
-+#cmakedefine HAVE_METACITY_3_16_0 1
-+
- #define GETTEXT_PACKAGE "${GETTEXT_PACKAGE}"
-diff -Nur original/gtk/window-decorator/cairo.c modified/gtk/window-decorator/cairo.c
---- original/gtk/window-decorator/cairo.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/cairo.c 2015-04-11 14:34:11.000000000 +0100
-@@ -26,6 +26,8 @@
- #include "gtk-window-decorator.h"
- #include "gwd-cairo-window-decoration-util.h"
-
-+#define STROKE_ALPHA 0.6f
-+
- void
- rounded_rectangle (cairo_t *cr,
- double x,
-diff -Nur original/gtk/window-decorator/CMakeLists.txt modified/gtk/window-decorator/CMakeLists.txt
---- original/gtk/window-decorator/CMakeLists.txt 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/CMakeLists.txt 2015-04-11 14:34:11.000000000 +0100
-@@ -99,6 +99,7 @@
- gdk.c
- switcher.c
- metacity.c
-+ metacity-3-16.c
- events.c
- forcequit.c
- tooltip.c
-@@ -138,6 +139,3 @@
- endif (COMPIZ_BUILD_TESTING)
-
- endif (USE_GTK)
--
--
--
-diff -Nur original/gtk/window-decorator/decorator.c modified/gtk/window-decorator/decorator.c
---- original/gtk/window-decorator/decorator.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/decorator.c 2015-04-11 14:34:11.000000000 +0100
-@@ -25,83 +25,12 @@
-
- #include "gtk-window-decorator.h"
-
--decor_frame_t *
--create_normal_frame (const gchar *type)
--{
-- decor_frame_t *frame = decor_frame_new (type);
--
-- decor_context_t _window_context = {
-- { 0, 0, 0, 0 },
-- 6, 6, 4, 6,
-- 0, 0, 0, 0
-- };
--
-- decor_context_t _max_window_context = {
-- { 0, 0, 0, 0 },
-- 6, 6, 4, 6,
-- 0, 0, 0, 0
-- };
--
-- decor_context_t _window_context_no_shadow = {
-- { 0, 0, 0, 0 },
-- 6, 6, 4, 6,
-- 0, 0, 0, 0
-- };
--
-- decor_context_t _max_window_context_no_shadow = {
-- { 0, 0, 0, 0 },
-- 6, 6, 4, 6,
-- 0, 0, 0, 0
-- };
--
-- decor_extents_t _win_extents = { 6, 6, 6, 6 };
-- decor_extents_t _max_win_extents = { 6, 6, 4, 6 };
--
-- frame->win_extents = _win_extents;
-- frame->max_win_extents = _max_win_extents;
-- frame->update_shadow = decor_frame_update_shadow;
-- frame->window_context_active = _window_context;
-- frame->window_context_inactive = _window_context;
-- frame->window_context_no_shadow = _window_context_no_shadow;
-- frame->max_window_context_active = _max_window_context;
-- frame->max_window_context_inactive = _max_window_context;
-- frame->max_window_context_no_shadow = _max_window_context_no_shadow;
--
-- return frame;
--}
--
- void
- destroy_normal_frame (decor_frame_t *frame)
- {
- decor_frame_destroy (frame);
- }
-
--decor_frame_t *
--create_bare_frame (const gchar *type)
--{
-- decor_frame_t *frame = decor_frame_new (type);
-- decor_context_t _shadow_context = {
-- { 0, 0, 0, 0 },
-- 0, 0, 0, 0,
-- 0, 0, 0, 0,
-- };
--
-- decor_extents_t _shadow_extents = { 0, 0, 0, 0 };
--
-- frame->win_extents = _shadow_extents;
-- frame->max_win_extents = _shadow_extents;
-- frame->win_extents = _shadow_extents;
-- frame->window_context_active = _shadow_context;
-- frame->window_context_inactive = _shadow_context;
-- frame->window_context_no_shadow = _shadow_context;
-- frame->max_window_context_active = _shadow_context;
-- frame->max_window_context_inactive = _shadow_context;
-- frame->max_window_context_no_shadow = _shadow_context;
-- frame->update_shadow = bare_frame_update_shadow;
--
-- return frame;
--}
--
- void
- destroy_bare_frame (decor_frame_t *frame)
- {
-@@ -411,7 +340,7 @@
- * the window name using pango (with 6px padding)
- * Returns zero if window has no name.
- */
--gint
-+static gint
- max_window_name_width (WnckWindow *win)
- {
- decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
-@@ -453,7 +382,7 @@
- * wnck. Also checks to see if the name has a length (slight optimization)
- * and re-creates the pango context to re-render the name
- */
--void
-+static void
- update_window_decoration_name (WnckWindow *win)
- {
- decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
-@@ -823,7 +752,7 @@
- *
- * We do something similar for the maximimzed mode as well
- */
--void
-+static void
- bare_frame_update_shadow (Display *xdisplay,
- Screen *screen,
- decor_frame_t *frame,
-@@ -894,7 +823,7 @@
- NULL);
- }
-
--void
-+static void
- decor_frame_update_shadow (Display *xdisplay,
- Screen *screen,
- decor_frame_t *frame,
-@@ -1507,3 +1436,74 @@
- cairo_set_source_surface (d->cr, d->buffer_surface, 0, 0);
- cairo_paint (d->cr);
- }
-+
-+decor_frame_t *
-+create_bare_frame (const gchar *type)
-+{
-+ decor_frame_t *frame = decor_frame_new (type);
-+ decor_context_t _shadow_context = {
-+ { 0, 0, 0, 0 },
-+ 0, 0, 0, 0,
-+ 0, 0, 0, 0,
-+ };
-+
-+ decor_extents_t _shadow_extents = { 0, 0, 0, 0 };
-+
-+ frame->win_extents = _shadow_extents;
-+ frame->max_win_extents = _shadow_extents;
-+ frame->win_extents = _shadow_extents;
-+ frame->window_context_active = _shadow_context;
-+ frame->window_context_inactive = _shadow_context;
-+ frame->window_context_no_shadow = _shadow_context;
-+ frame->max_window_context_active = _shadow_context;
-+ frame->max_window_context_inactive = _shadow_context;
-+ frame->max_window_context_no_shadow = _shadow_context;
-+ frame->update_shadow = bare_frame_update_shadow;
-+
-+ return frame;
-+}
-+
-+decor_frame_t *
-+create_normal_frame (const gchar *type)
-+{
-+ decor_frame_t *frame = decor_frame_new (type);
-+
-+ decor_context_t _window_context = {
-+ { 0, 0, 0, 0 },
-+ 6, 6, 4, 6,
-+ 0, 0, 0, 0
-+ };
-+
-+ decor_context_t _max_window_context = {
-+ { 0, 0, 0, 0 },
-+ 6, 6, 4, 6,
-+ 0, 0, 0, 0
-+ };
-+
-+ decor_context_t _window_context_no_shadow = {
-+ { 0, 0, 0, 0 },
-+ 6, 6, 4, 6,
-+ 0, 0, 0, 0
-+ };
-+
-+ decor_context_t _max_window_context_no_shadow = {
-+ { 0, 0, 0, 0 },
-+ 6, 6, 4, 6,
-+ 0, 0, 0, 0
-+ };
-+
-+ decor_extents_t _win_extents = { 6, 6, 6, 6 };
-+ decor_extents_t _max_win_extents = { 6, 6, 4, 6 };
-+
-+ frame->win_extents = _win_extents;
-+ frame->max_win_extents = _max_win_extents;
-+ frame->update_shadow = decor_frame_update_shadow;
-+ frame->window_context_active = _window_context;
-+ frame->window_context_inactive = _window_context;
-+ frame->window_context_no_shadow = _window_context_no_shadow;
-+ frame->max_window_context_active = _max_window_context;
-+ frame->max_window_context_inactive = _max_window_context;
-+ frame->max_window_context_no_shadow = _max_window_context_no_shadow;
-+
-+ return frame;
-+}
-diff -Nur original/gtk/window-decorator/events.c modified/gtk/window-decorator/events.c
---- original/gtk/window-decorator/events.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/events.c 2015-04-11 14:34:11.000000000 +0100
-@@ -26,7 +26,34 @@
- #include "gtk-window-decorator.h"
- #include "gwd-settings-interface.h"
-
--void
-+#define DOUBLE_CLICK_DISTANCE 8.0f
-+
-+#define WM_MOVERESIZE_SIZE_TOPLEFT 0
-+#define WM_MOVERESIZE_SIZE_TOP 1
-+#define WM_MOVERESIZE_SIZE_TOPRIGHT 2
-+#define WM_MOVERESIZE_SIZE_RIGHT 3
-+#define WM_MOVERESIZE_SIZE_BOTTOMRIGHT 4
-+#define WM_MOVERESIZE_SIZE_BOTTOM 5
-+#define WM_MOVERESIZE_SIZE_BOTTOMLEFT 6
-+#define WM_MOVERESIZE_SIZE_LEFT 7
-+#define WM_MOVERESIZE_MOVE 8
-+#define WM_MOVERESIZE_SIZE_KEYBOARD 9
-+#define WM_MOVERESIZE_MOVE_KEYBOARD 10
-+
-+static double
-+square (double x)
-+{
-+ return x * x;
-+}
-+
-+static double
-+dist (double x1, double y1,
-+ double x2, double y2)
-+{
-+ return sqrt (square (x1 - x2) + square (y1 - y2));
-+}
-+
-+static void
- move_resize_window (WnckWindow *win,
- int direction,
- decor_event *gtkwd_event)
-@@ -74,7 +101,7 @@
- XSync (xdisplay, FALSE);
- }
-
--void
-+static void
- common_button_event (WnckWindow *win,
- decor_event *gtkwd_event,
- decor_event_type gtkwd_type,
-@@ -392,7 +419,7 @@
- }
- }
-
--void
-+static void
- handle_title_button_event (WnckWindow *win,
- int action,
- decor_event *gtkwd_event)
-@@ -426,7 +453,7 @@
- }
- }
-
--void
-+static void
- handle_mouse_wheel_title_event (WnckWindow *win,
- unsigned int button)
- {
-@@ -526,7 +553,7 @@
- }
- }
-
--void
-+static void
- frame_common_event (WnckWindow *win,
- int direction,
- decor_event *gtkwd_event,
-@@ -684,7 +711,7 @@
- }
- }
-
--event_callback
-+static event_callback
- find_event_callback_for_point (decor_t *d,
- int x,
- int y,
-@@ -739,7 +766,7 @@
- return NULL;
- }
-
--event_callback
-+static event_callback
- find_leave_event_callback (decor_t *d)
- {
- int i, j;
-diff -Nur original/gtk/window-decorator/frames.c modified/gtk/window-decorator/frames.c
---- original/gtk/window-decorator/frames.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/frames.c 2015-04-11 14:34:11.000000000 +0100
-@@ -31,6 +31,192 @@
- GHashTable *frame_info_table;
- GHashTable *frames_table;
-
-+/* from clearlooks theme */
-+static void
-+rgb_to_hls (gdouble *r,
-+ gdouble *g,
-+ gdouble *b)
-+{
-+ gdouble min;
-+ gdouble max;
-+ gdouble red;
-+ gdouble green;
-+ gdouble blue;
-+ gdouble h, l, s;
-+ gdouble delta;
-+
-+ red = *r;
-+ green = *g;
-+ blue = *b;
-+
-+ if (red > green)
-+ {
-+ if (red > blue)
-+ max = red;
-+ else
-+ max = blue;
-+
-+ if (green < blue)
-+ min = green;
-+ else
-+ min = blue;
-+ }
-+ else
-+ {
-+ if (green > blue)
-+ max = green;
-+ else
-+ max = blue;
-+
-+ if (red < blue)
-+ min = red;
-+ else
-+ min = blue;
-+ }
-+
-+ l = (max + min) / 2;
-+ s = 0;
-+ h = 0;
-+
-+ if (max != min)
-+ {
-+ if (l <= 0.5)
-+ s = (max - min) / (max + min);
-+ else
-+ s = (max - min) / (2 - max - min);
-+
-+ delta = max -min;
-+ if (red == max)
-+ h = (green - blue) / delta;
-+ else if (green == max)
-+ h = 2 + (blue - red) / delta;
-+ else if (blue == max)
-+ h = 4 + (red - green) / delta;
-+
-+ h *= 60;
-+ if (h < 0.0)
-+ h += 360;
-+ }
-+
-+ *r = h;
-+ *g = l;
-+ *b = s;
-+}
-+
-+static void
-+hls_to_rgb (gdouble *h,
-+ gdouble *l,
-+ gdouble *s)
-+{
-+ gdouble hue;
-+ gdouble lightness;
-+ gdouble saturation;
-+ gdouble m1, m2;
-+ gdouble r, g, b;
-+
-+ lightness = *l;
-+ saturation = *s;
-+
-+ if (lightness <= 0.5)
-+ m2 = lightness * (1 + saturation);
-+ else
-+ m2 = lightness + saturation - lightness * saturation;
-+
-+ m1 = 2 * lightness - m2;
-+
-+ if (saturation == 0)
-+ {
-+ *h = lightness;
-+ *l = lightness;
-+ *s = lightness;
-+ }
-+ else
-+ {
-+ hue = *h + 120;
-+ while (hue > 360)
-+ hue -= 360;
-+ while (hue < 0)
-+ hue += 360;
-+
-+ if (hue < 60)
-+ r = m1 + (m2 - m1) * hue / 60;
-+ else if (hue < 180)
-+ r = m2;
-+ else if (hue < 240)
-+ r = m1 + (m2 - m1) * (240 - hue) / 60;
-+ else
-+ r = m1;
-+
-+ hue = *h;
-+ while (hue > 360)
-+ hue -= 360;
-+ while (hue < 0)
-+ hue += 360;
-+
-+ if (hue < 60)
-+ g = m1 + (m2 - m1) * hue / 60;
-+ else if (hue < 180)
-+ g = m2;
-+ else if (hue < 240)
-+ g = m1 + (m2 - m1) * (240 - hue) / 60;
-+ else
-+ g = m1;
-+
-+ hue = *h - 120;
-+ while (hue > 360)
-+ hue -= 360;
-+ while (hue < 0)
-+ hue += 360;
-+
-+ if (hue < 60)
-+ b = m1 + (m2 - m1) * hue / 60;
-+ else if (hue < 180)
-+ b = m2;
-+ else if (hue < 240)
-+ b = m1 + (m2 - m1) * (240 - hue) / 60;
-+ else
-+ b = m1;
-+
-+ *h = r;
-+ *l = g;
-+ *s = b;
-+ }
-+}
-+
-+static void
-+shade (const decor_color_t *a,
-+ decor_color_t *b,
-+ float k)
-+{
-+ double red;
-+ double green;
-+ double blue;
-+
-+ red = a->r;
-+ green = a->g;
-+ blue = a->b;
-+
-+ rgb_to_hls (&red, &green, &blue);
-+
-+ green *= k;
-+ if (green > 1.0)
-+ green = 1.0;
-+ else if (green < 0.0)
-+ green = 0.0;
-+
-+ blue *= k;
-+ if (blue > 1.0)
-+ blue = 1.0;
-+ else if (blue < 0.0)
-+ blue = 0.0;
-+
-+ hls_to_rgb (&red, &green, &blue);
-+
-+ b->r = red;
-+ b->g = green;
-+ b->b = blue;
-+}
-+
- static void
- update_style (GtkWidget *widget)
- {
-diff -Nur original/gtk/window-decorator/gtk-window-decorator.c modified/gtk/window-decorator/gtk-window-decorator.c
---- original/gtk/window-decorator/gtk-window-decorator.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gtk-window-decorator.c 2015-04-11 14:34:11.000000000 +0100
-@@ -36,29 +36,13 @@
-
- gdouble decoration_alpha = 0.5;
- #ifdef USE_METACITY
--MetaButtonLayout meta_button_layout;
- gboolean meta_button_layout_set = FALSE;
- #endif
-
- gboolean minimal = FALSE;
-
--#define SWITCHER_SPACE 40
--
--const float STROKE_ALPHA = 0.6f;
--
- const unsigned short ICON_SPACE = 20;
-
--const float DOUBLE_CLICK_DISTANCE = 8.0f;
--
--const float SHADOW_RADIUS = 8.0f;
--const float SHADOW_OPACITY = 0.5f;
--const unsigned short SHADOW_OFFSET_X = 1;
--const unsigned short SHADOW_OFFSET_Y = 1;
--
--const float META_OPACITY = 0.75f;
--
--const float META_ACTIVE_OPACITY = 1.0f;
--
- guint cmdline_options = 0;
-
- Atom frame_input_window_atom;
-diff -Nur original/gtk/window-decorator/gtk-window-decorator.h modified/gtk/window-decorator/gtk-window-decorator.h
---- original/gtk/window-decorator/gtk-window-decorator.h 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gtk-window-decorator.h 2015-04-11 14:34:11.000000000 +0100
-@@ -78,52 +78,11 @@
-
- #include <gwd-fwd.h>
-
--#define DBUS_DEST "org.freedesktop.compiz"
--#define DBUS_PATH "/org/freedesktop/compiz/decor/screen0"
--#define DBUS_INTERFACE "org.freedesktop.compiz"
--#define DBUS_METHOD_GET "get"
--
--extern const float STROKE_ALPHA;
--
- extern const unsigned short ICON_SPACE;
-
--extern const float DOUBLE_CLICK_DISTANCE;
--
--#define WM_MOVERESIZE_SIZE_TOPLEFT 0
--#define WM_MOVERESIZE_SIZE_TOP 1
--#define WM_MOVERESIZE_SIZE_TOPRIGHT 2
--#define WM_MOVERESIZE_SIZE_RIGHT 3
--#define WM_MOVERESIZE_SIZE_BOTTOMRIGHT 4
--#define WM_MOVERESIZE_SIZE_BOTTOM 5
--#define WM_MOVERESIZE_SIZE_BOTTOMLEFT 6
--#define WM_MOVERESIZE_SIZE_LEFT 7
--#define WM_MOVERESIZE_MOVE 8
--#define WM_MOVERESIZE_SIZE_KEYBOARD 9
--#define WM_MOVERESIZE_MOVE_KEYBOARD 10
--
--extern const float SHADOW_RADIUS;
--extern const float SHADOW_OPACITY;
--extern const unsigned short SHADOW_OFFSET_X;
--extern const unsigned short SHADOW_OFFSET_Y;
--#define SHADOW_COLOR_RED 0x0000
--#define SHADOW_COLOR_GREEN 0x0000
--#define SHADOW_COLOR_BLUE 0x0000
--
--extern const float META_OPACITY;
--#define META_SHADE_OPACITY TRUE;
--extern const float META_ACTIVE_OPACITY;
--#define META_ACTIVE_SHADE_OPACITY TRUE;
--
- #define META_MAXIMIZED (WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY | \
- WNCK_WINDOW_STATE_MAXIMIZED_VERTICALLY)
-
--#define CMDLINE_OPACITY (1 << 0)
--#define CMDLINE_OPACITY_SHADE (1 << 1)
--#define CMDLINE_ACTIVE_OPACITY (1 << 2)
--#define CMDLINE_ACTIVE_OPACITY_SHADE (1 << 3)
--#define CMDLINE_BLUR (1 << 4)
--#define CMDLINE_THEME (1 << 5)
--
- #define MWM_HINTS_DECORATIONS (1L << 1)
-
- #define MWM_DECOR_ALL (1L << 0)
-@@ -144,16 +103,13 @@
-
- extern gboolean minimal;
-
--#define SWITCHER_SPACE 40
--
- extern GWDSettingsNotified *notified;
--extern GWDSettings *settings;
-+extern GWDSettings *settings;
- extern GWDSettingsWritable *writable;
-
- extern gdouble decoration_alpha;
- #ifdef USE_METACITY
--extern MetaButtonLayout meta_button_layout;
--extern gboolean meta_button_layout_set;
-+extern gboolean meta_button_layout_set;
- #endif
-
- extern Atom frame_input_window_atom;
-@@ -406,22 +362,11 @@
- extern XRenderPictFormat *xformat_rgba;
- extern XRenderPictFormat *xformat_rgb;
-
--/* gtk-window-decorator.c */
--
--double
--dist (double x1, double y1,
-- double x2, double y2);
--
- /* frames.c */
-
- void
- initialize_decorations ();
-
--void
--update_frames_border_extents (gpointer key,
-- gpointer value,
-- gpointer user_data);
--
- decor_frame_t *
- gwd_get_decor_frame (const gchar *);
-
-@@ -458,30 +403,6 @@
- void
- frame_update_titlebar_font (decor_frame_t *frame);
-
--void
--bare_frame_update_shadow (Display *xdisplay,
-- Screen *screen,
-- decor_frame_t *frame,
-- decor_shadow_t **shadow_normal,
-- decor_context_t *context_normal,
-- decor_shadow_t **shadow_max,
-- decor_context_t *context_max,
-- decor_shadow_info_t *info,
-- decor_shadow_options_t *opt_shadow,
-- decor_shadow_options_t *opt_no_shadow);
--
--void
--decor_frame_update_shadow (Display *xdisplay,
-- Screen *screen,
-- decor_frame_t *frame,
-- decor_shadow_t **shadow_normal,
-- decor_context_t *context_normal,
-- decor_shadow_t **shadow_max,
-- decor_context_t *context_max,
-- decor_shadow_info_t *info,
-- decor_shadow_options_t *opt_shadow,
-- decor_shadow_options_t *opt_no_shadow);
--
- decor_frame_t *
- create_normal_frame (const gchar *type);
-
-@@ -501,12 +422,6 @@
- gboolean
- request_update_window_decoration_size (WnckWindow *win);
-
--void
--update_window_decoration_name (WnckWindow *win);
--
--gint
--max_window_name_width (WnckWindow *win);
--
- unsigned int
- populate_frame_type (decor_t *d);
-
-@@ -538,9 +453,6 @@
- update_titlebar_font ();
-
- void
--update_window_decoration_name (WnckWindow *win);
--
--void
- update_window_decoration (WnckWindow *win);
-
- void
-@@ -561,10 +473,6 @@
- connect_screen (WnckScreen *screen);
-
- void
--window_opened (WnckScreen *screen,
-- WnckWindow *window);
--
--void
- window_closed (WnckScreen *screen,
- WnckWindow *window);
-
-@@ -580,10 +488,6 @@
- restack_window (WnckWindow *win,
- int stack_mode);
-
--void
--connect_window (WnckWindow *win);
--
--
- /* blur.c */
-
- void
-@@ -711,6 +615,7 @@
- surface_new_from_pixbuf (GdkPixbuf *pixbuf, GtkWidget *parent);
-
- /* metacity.c */
-+
- #ifdef USE_METACITY
-
- MetaFrameType
-@@ -719,18 +624,6 @@
- void
- meta_draw_window_decoration (decor_t *d);
-
--void
--meta_get_decoration_geometry (decor_t *d,
-- MetaTheme *theme,
-- MetaFrameFlags *flags,
-- MetaFrameGeometry *fgeom,
-- MetaButtonLayout *button_layout,
-- MetaFrameType frame_type,
-- GdkRectangle *clip);
--
--void
--meta_calc_button_size (decor_t *d);
--
- gboolean
- meta_calc_decoration_size (decor_t *d,
- gint w,
-@@ -749,10 +642,6 @@
- gint *w,
- gint *h);
-
--gboolean
--meta_button_present (MetaButtonLayout *button_layout,
-- MetaButtonFunction function);
--
- void
- meta_get_event_window_position (decor_t *d,
- gint i,
-@@ -777,6 +666,7 @@
- meta_get_shadow (decor_frame_t *, decor_shadow_options_t *opts, gboolean active);
-
- #endif
-+
- /* switcher.c */
-
- #define SWITCHER_ALPHA 0xa0a0
-@@ -799,35 +689,13 @@
- void
- destroy_switcher_frame ();
-
--void
--draw_switcher_decoration (decor_t *d);
--
- gboolean
- update_switcher_window (Window popup,
- Window selected);
-
--decor_t *
--switcher_window_opened (Window popup, Window selected);
--
--void
--switcher_window_closed ();
--
- /* events.c */
-
- void
--move_resize_window (WnckWindow *win,
-- int direction,
-- decor_event *gtkwd_event);
--
--void
--common_button_event (WnckWindow *win,
-- decor_event *gtkwd_event,
-- decor_event_type gtkwd_type,
-- int button,
-- int max,
-- char *tooltip);
--
--void
- close_button_event (WnckWindow *win,
- decor_event *gtkwd_event,
- decor_event_type gtkwd_type);
-@@ -877,26 +745,11 @@
- decor_event_type gtkwd_type);
-
- void
--handle_title_button_event (WnckWindow *win,
-- int action,
-- decor_event *gtkwd_event);
--
--void
--handle_mouse_wheel_title_event (WnckWindow *win,
-- unsigned int button);
--
--void
- title_event (WnckWindow *win,
- decor_event *gtkwd_event,
- decor_event_type gtkwd_type);
-
- void
--frame_common_event (WnckWindow *win,
-- int direction,
-- decor_event *gtkwd_event,
-- decor_event_type gtkwd_type);
--
--void
- top_left_event (WnckWindow *win,
- decor_event *gtkwd_event,
- decor_event_type gtkwd_type);
-@@ -938,17 +791,6 @@
- frame_window_realized (GtkWidget *widget,
- gpointer data);
-
--event_callback
--find_event_callback_for_point (decor_t *d,
-- int x,
-- int y,
-- Bool *enter,
-- Bool *leave,
-- BoxPtr *entered_box);
--
--event_callback
--find_leave_event_callback (decor_t *d);
--
- void
- frame_handle_button_press (GtkWidget *widget,
- GdkEventButton *event,
-@@ -1004,18 +846,6 @@
-
- /* util.c */
-
--double
--square (double x);
--
--double
--dist (double x1, double y1,
-- double x2, double y2);
--
--void
--shade (const decor_color_t *a,
-- decor_color_t *b,
-- float k);
--
- gboolean
- get_window_prop (Window xwindow,
- Atom atom,
-diff -Nur original/gtk/window-decorator/gwd-settings.c modified/gtk/window-decorator/gwd-settings.c
---- original/gtk/window-decorator/gwd-settings.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gwd-settings.c 2015-04-11 14:34:11.000000000 +0100
-@@ -61,21 +61,20 @@
- GWD_SETTINGS_IMPL_PROPERTY_INACTIVE_SHADOW = 2,
- GWD_SETTINGS_IMPL_PROPERTY_USE_TOOLTIPS = 3,
- GWD_SETTINGS_IMPL_PROPERTY_DRAGGABLE_BORDER_WIDTH = 4,
-- GWD_SETTINGS_IMPL_PROPERTY_ATTACH_MODAL_DIALOGS = 5,
-- GWD_SETTINGS_IMPL_PROPERTY_BLUR_CHANGED = 6,
-- GWD_SETTINGS_IMPL_PROPERTY_METACITY_THEME = 7,
-- GWD_SETTINGS_IMPL_PROPERTY_ACTIVE_OPACITY = 8,
-- GWD_SETTINGS_IMPL_PROPERTY_INACTIVE_OPACITY = 9,
-- GWD_SETTINGS_IMPL_PROPERTY_ACTIVE_SHADE_OPACITY = 10,
-- GWD_SETTINGS_IMPL_PROPERTY_INACTIVE_SHADE_OPACITY = 11,
-- GWD_SETTINGS_IMPL_PROPERTY_BUTTON_LAYOUT = 12,
-- GWD_SETTINGS_IMPL_PROPERTY_TITLEBAR_ACTION_DOUBLE_CLICK = 13,
-- GWD_SETTINGS_IMPL_PROPERTY_TITLEBAR_ACTION_MIDDLE_CLICK = 14,
-- GWD_SETTINGS_IMPL_PROPERTY_TITLEBAR_ACTION_RIGHT_CLICK = 15,
-- GWD_SETTINGS_IMPL_PROPERTY_MOUSE_WHEEL_ACTION = 16,
-- GWD_SETTINGS_IMPL_PROPERTY_TITLEBAR_FONT = 17,
-- GWD_SETTINGS_IMPL_PROPERTY_CMDLINE_OPTIONS = 18,
-- GWD_SETTINGS_IMPL_PROPERTY_SETTINGS_NOTIFIED = 19
-+ GWD_SETTINGS_IMPL_PROPERTY_BLUR_CHANGED = 5,
-+ GWD_SETTINGS_IMPL_PROPERTY_METACITY_THEME = 6,
-+ GWD_SETTINGS_IMPL_PROPERTY_ACTIVE_OPACITY = 7,
-+ GWD_SETTINGS_IMPL_PROPERTY_INACTIVE_OPACITY = 8,
-+ GWD_SETTINGS_IMPL_PROPERTY_ACTIVE_SHADE_OPACITY = 9,
-+ GWD_SETTINGS_IMPL_PROPERTY_INACTIVE_SHADE_OPACITY = 10,
-+ GWD_SETTINGS_IMPL_PROPERTY_BUTTON_LAYOUT = 11,
-+ GWD_SETTINGS_IMPL_PROPERTY_TITLEBAR_ACTION_DOUBLE_CLICK = 12,
-+ GWD_SETTINGS_IMPL_PROPERTY_TITLEBAR_ACTION_MIDDLE_CLICK = 13,
-+ GWD_SETTINGS_IMPL_PROPERTY_TITLEBAR_ACTION_RIGHT_CLICK = 14,
-+ GWD_SETTINGS_IMPL_PROPERTY_MOUSE_WHEEL_ACTION = 15,
-+ GWD_SETTINGS_IMPL_PROPERTY_TITLEBAR_FONT = 16,
-+ GWD_SETTINGS_IMPL_PROPERTY_CMDLINE_OPTIONS = 17,
-+ GWD_SETTINGS_IMPL_PROPERTY_SETTINGS_NOTIFIED = 18
- };
-
- enum
-@@ -92,7 +91,6 @@
- decor_shadow_options_t inactive_shadow;
- gboolean use_tooltips;
- gint draggable_border_width;
-- gboolean attach_modal_dialogs;
- gint blur_type;
- gchar *metacity_theme;
- gdouble metacity_active_opacity;
-@@ -261,24 +259,6 @@
- }
-
- static gboolean
--gwd_settings_attach_modal_dialogs_changed (GWDSettingsWritable *settings,
-- gboolean attach_modal_dialogs)
--{
-- GWDSettingsImpl *settings_impl = GWD_SETTINGS_IMPL (settings);
-- GWDSettingsImplPrivate *priv = GET_PRIVATE (settings_impl);
--
-- if (priv->attach_modal_dialogs != attach_modal_dialogs)
-- {
-- priv->attach_modal_dialogs = attach_modal_dialogs;
-- append_to_notify_funcs (settings_impl, gwd_settings_notified_update_decorations);
-- release_notify_funcs (settings_impl);
-- return TRUE;
-- }
-- else
-- return FALSE;
--}
--
--static gboolean
- gwd_settings_blur_changed (GWDSettingsWritable *settings,
- const gchar *type)
-
-@@ -554,7 +534,6 @@
- interface->shadow_property_changed = gwd_settings_shadow_property_changed;
- interface->use_tooltips_changed = gwd_settings_use_tooltips_changed;
- interface->draggable_border_width_changed = gwd_settings_draggable_border_width_changed;
-- interface->attach_modal_dialogs_changed = gwd_settings_attach_modal_dialogs_changed;
- interface->blur_changed = gwd_settings_blur_changed;
- interface->metacity_theme_changed = gwd_settings_metacity_theme_changed;
- interface->opacity_changed = gwd_settings_opacity_changed;
-@@ -659,9 +638,6 @@
- case GWD_SETTINGS_IMPL_PROPERTY_DRAGGABLE_BORDER_WIDTH:
- g_value_set_int (value, priv->draggable_border_width);
- break;
-- case GWD_SETTINGS_IMPL_PROPERTY_ATTACH_MODAL_DIALOGS:
-- g_value_set_boolean (value, priv->attach_modal_dialogs);
-- break;
- case GWD_SETTINGS_IMPL_PROPERTY_BLUR_CHANGED:
- g_value_set_int (value, priv->blur_type);
- break;
-@@ -729,9 +705,6 @@
- GWD_SETTINGS_IMPL_PROPERTY_DRAGGABLE_BORDER_WIDTH,
- "draggable-border-width");
- g_object_class_override_property (object_class,
-- GWD_SETTINGS_IMPL_PROPERTY_ATTACH_MODAL_DIALOGS,
-- "attach-modal-dialogs");
-- g_object_class_override_property (object_class,
- GWD_SETTINGS_IMPL_PROPERTY_BLUR_CHANGED,
- "blur");
- g_object_class_override_property (object_class,
-@@ -807,7 +780,6 @@
- priv->inactive_shadow.shadow_color[1] = 0;
- priv->inactive_shadow.shadow_color[2] = 0;
- priv->draggable_border_width = DRAGGABLE_BORDER_WIDTH_DEFAULT;
-- priv->attach_modal_dialogs = ATTACH_MODAL_DIALOGS_DEFAULT;
- priv->blur_type = BLUR_TYPE_DEFAULT;
- priv->metacity_theme = g_strdup (METACITY_THEME_DEFAULT);
- priv->metacity_active_opacity = METACITY_ACTIVE_OPACITY_DEFAULT;
-diff -Nur original/gtk/window-decorator/gwd-settings-interface.c modified/gtk/window-decorator/gwd-settings-interface.c
---- original/gtk/window-decorator/gwd-settings-interface.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gwd-settings-interface.c 2015-04-11 14:34:11.000000000 +0100
-@@ -34,7 +34,6 @@
- const gchar *INACTIVE_SHADOW_COLOR_DEFAULT = "#00000000";
-
- const guint DRAGGABLE_BORDER_WIDTH_DEFAULT = 7;
--const gboolean ATTACH_MODAL_DIALOGS_DEFAULT = FALSE;
- const gint BLUR_TYPE_DEFAULT = BLUR_TYPE_NONE;
-
- const gchar *METACITY_THEME_DEFAULT = "Adwaita";
-@@ -83,12 +82,6 @@
- DRAGGABLE_BORDER_WIDTH_DEFAULT,
- G_PARAM_READABLE));
- g_object_interface_install_property (settings_interface,
-- g_param_spec_boolean ("attach-modal-dialogs",
-- "Attach modal dialogs",
-- "Attach modal dialogs setting",
-- ATTACH_MODAL_DIALOGS_DEFAULT,
-- G_PARAM_READABLE));
-- g_object_interface_install_property (settings_interface,
- g_param_spec_int ("blur",
- "Blur Type",
- "Blur type property",
-diff -Nur original/gtk/window-decorator/gwd-settings-notified.c modified/gtk/window-decorator/gwd-settings-notified.c
---- original/gtk/window-decorator/gwd-settings-notified.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gwd-settings-notified.c 2015-04-11 14:34:11.000000000 +0100
-@@ -200,17 +200,6 @@
- interface->update_metacity_theme = gwd_settings_notified_impl_update_metacity_theme;
- }
-
--static void gwd_settings_notified_impl_dispose (GObject *object)
--{
-- GWDSettingsNotifiedImplPrivate *priv = GET_PRIVATE (object);
--
-- if (priv->screen)
-- {
-- g_object_unref (priv->screen);
-- priv->screen = NULL;
-- }
--}
--
- static void gwd_settings_notified_impl_finalize (GObject *object)
- {
- G_OBJECT_CLASS (gwd_settings_notified_impl_parent_class)->finalize (object);
-@@ -240,7 +229,6 @@
-
- g_type_class_add_private (klass, sizeof (GWDSettingsNotifiedImplPrivate));
-
-- object_class->dispose = gwd_settings_notified_impl_dispose;
- object_class->finalize = gwd_settings_notified_impl_finalize;
- object_class->set_property = gwd_settings_notified_impl_set_property;
-
-diff -Nur original/gtk/window-decorator/gwd-settings-storage-gsettings.c modified/gtk/window-decorator/gwd-settings-storage-gsettings.c
---- original/gtk/window-decorator/gwd-settings-storage-gsettings.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gwd-settings-storage-gsettings.c 2015-04-11 14:34:11.000000000 +0100
-@@ -17,6 +17,9 @@
- *
- * Authored By: Sam Spilsbury <sam.spilsbury@canonical.com>
- */
-+#ifdef HAVE_CONFIG_H
-+#include <config.h>
-+#endif
- #include <glib-object.h>
-
- #include <gio/gio.h>
-@@ -28,6 +31,7 @@
- #include "gwd-settings-storage-gsettings.h"
-
- const gchar * ORG_COMPIZ_GWD = "org.compiz.gwd";
-+const gchar * ORG_GNOME_METACITY = "org.gnome.metacity";
- const gchar * ORG_GNOME_MUTTER = "org.gnome.mutter";
- const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES = "org.gnome.desktop.wm.preferences";
-
-@@ -39,6 +43,8 @@
- const gchar * ORG_COMPIZ_GWD_KEY_METACITY_THEME_INACTIVE_SHADE_OPACITY = "metacity-theme-inactive-shade-opacity";
- const gchar * ORG_COMPIZ_GWD_KEY_USE_METACITY_THEME = "use-metacity-theme";
- const gchar * ORG_COMPIZ_GWD_KEY_MOUSE_WHEEL_ACTION = "mouse-wheel-action";
-+const gchar * ORG_GNOME_METACITY_THEME = "theme";
-+const gchar * ORG_GNOME_MUTTER_DRAGGABLE_BORDER_WIDTH = "draggable-border-width";
- const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_ACTION_DOUBLE_CLICK_TITLEBAR = "action-double-click-titlebar";
- const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_ACTION_MIDDLE_CLICK_TITLEBAR = "action-middle-click-titlebar";
- const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_ACTION_RIGHT_CLICK_TITLEBAR = "action-right-click-titlebar";
-@@ -46,8 +52,6 @@
- const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_TITLEBAR_USES_SYSTEM_FONT = "titlebar-uses-system-font";
- const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_TITLEBAR_FONT = "titlebar-font";
- const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_BUTTON_LAYOUT = "button-layout";
--const gchar * ORG_GNOME_MUTTER_ATTACH_MODAL_DIALOGS = "attach-modal-dialogs";
--const gchar * ORG_GNOME_MUTTER_DRAGGABLE_BORDER_WIDTH = "draggable-border-width";
-
- #define GWD_SETTINGS_STORAGE_GSETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GWD_TYPE_SETTINGS_STORAGE_GSETTINGS, GWDSettingsStorageGSettings));
- #define GWD_SETTINGS_STORAGE_GSETTINGS_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), GWD_TYPE_SETTINGS_STORAGE_GSETTINGS, GWDSettingsStorageGSettingsClass));
-@@ -75,10 +79,11 @@
-
- enum
- {
-- GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_DESKTOP_GSETTINGS = 1,
-- GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_MUTTER_GSETTINGS = 2,
-- GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_GWD_GSETTINGS = 3,
-- GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_WRITABLE_SETTINGS = 4
-+ GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_DESKTOP_GSETTINGS = 1,
-+ GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_METACITY_GSETTINGS = 2,
-+ GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_MUTTER_GSETTINGS = 3,
-+ GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_GWD_GSETTINGS = 4,
-+ GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_WRITABLE_SETTINGS = 5
- };
-
- const guint GWD_SETTINGS_STORAGE_GSETTINGS_N_CONSTRUCTION_PARAMS = 4;
-@@ -86,6 +91,7 @@
- typedef struct _GWDSettingsStorageGSettingsPrivate
- {
- GSettings *desktop;
-+ GSettings *metacity;
- GSettings *mutter;
- GSettings *gwd;
- GWDSettingsWritable *writable;
-@@ -120,20 +126,6 @@
- }
-
- static gboolean
--gwd_settings_storage_gsettings_update_attach_modal_dialogs (GWDSettingsStorage *settings)
--{
-- GWDSettingsStorageGSettings *storage = GWD_SETTINGS_STORAGE_GSETTINGS (settings);
-- GWDSettingsStorageGSettingsPrivate *priv = GET_PRIVATE (storage);
--
-- if (!priv->mutter)
-- return FALSE;
--
-- return gwd_settings_writable_attach_modal_dialogs_changed (priv->writable,
-- g_settings_get_boolean (priv->mutter,
-- ORG_GNOME_MUTTER_ATTACH_MODAL_DIALOGS));
--}
--
--static gboolean
- gwd_settings_storage_gsettings_update_blur (GWDSettingsStorage *settings)
- {
- GWDSettingsStorageGSettings *storage = GWD_SETTINGS_STORAGE_GSETTINGS (settings);
-@@ -150,20 +142,34 @@
- static gboolean
- gwd_settings_storage_gsettings_update_metacity_theme (GWDSettingsStorage *settings)
- {
-- GWDSettingsStorageGSettings *storage = GWD_SETTINGS_STORAGE_GSETTINGS (settings);
-- GWDSettingsStorageGSettingsPrivate *priv = GET_PRIVATE (storage);
-+ GWDSettingsStorageGSettings *storage;
-+ GWDSettingsStorageGSettingsPrivate *priv;
-+ gboolean use_metacity_theme;
-+ gchar *theme;
-+
-+ storage = GWD_SETTINGS_STORAGE_GSETTINGS (settings);
-+ priv = GET_PRIVATE (storage);
-
- if (!priv->gwd)
-- return FALSE;
-+ return FALSE;
-
-+ use_metacity_theme = g_settings_get_boolean (priv->gwd, ORG_COMPIZ_GWD_KEY_USE_METACITY_THEME);
-+
-+#ifdef HAVE_METACITY_3_16_0
-+ if (!priv->metacity)
-+ return FALSE;
-+
-+ theme = g_settings_get_string (priv->metacity, ORG_GNOME_METACITY_THEME);
-+#else
- if (!priv->desktop)
-- return FALSE;
-+ return FALSE;
-+
-+ theme = g_settings_get_string (priv->desktop, ORG_GNOME_DESKTOP_WM_PREFERENCES_THEME);
-+#endif
-
- return gwd_settings_writable_metacity_theme_changed (priv->writable,
-- g_settings_get_boolean (priv->gwd,
-- ORG_COMPIZ_GWD_KEY_USE_METACITY_THEME),
-- g_settings_get_string (priv->desktop,
-- ORG_GNOME_DESKTOP_WM_PREFERENCES_THEME));
-+ use_metacity_theme,
-+ theme);
- }
-
- static gboolean
-@@ -275,7 +281,6 @@
- {
- interface->update_use_tooltips = gwd_settings_storage_gsettings_update_use_tooltips;
- interface->update_draggable_border_width = gwd_settings_storage_gsettings_update_draggable_border_width;
-- interface->update_attach_modal_dialogs = gwd_settings_storage_gsettings_update_attach_modal_dialogs;
- interface->update_blur = gwd_settings_storage_gsettings_update_blur;
- interface->update_metacity_theme = gwd_settings_storage_gsettings_update_metacity_theme;
- interface->update_opacity = gwd_settings_storage_gsettings_update_opacity;
-@@ -300,6 +305,12 @@
-
- priv->desktop = g_value_dup_object (value);
- break;
-+ case GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_METACITY_GSETTINGS:
-+ if (priv->metacity)
-+ g_object_unref (priv->metacity);
-+
-+ priv->metacity = g_value_dup_object (value);
-+ break;
- case GWD_SETTINGS_STORAGE_GSETTINGS_PROPERTY_MUTTER_GSETTINGS:
- if (priv->mutter)
- g_object_unref (priv->mutter);
-@@ -330,6 +341,9 @@
- if (priv->desktop)
- g_object_unref (priv->desktop);
-
-+ if (priv->metacity)
-+ g_object_unref (priv->metacity);
-+
- if (priv->mutter)
- g_object_unref (priv->mutter);
-
-@@ -355,6 +369,11 @@
- "GSettings Object for org.gnome.desktop.wm.preferences",
- G_TYPE_SETTINGS,
- G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY),
-+ g_param_spec_object ("metacity-gsettings",
-+ ORG_GNOME_METACITY,
-+ "GSettings Object for org.gnome.metacity",
-+ G_TYPE_SETTINGS,
-+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY),
- g_param_spec_object ("mutter-gsettings",
- ORG_GNOME_MUTTER,
- "GSettings Object for org.gnome.mutter",
-@@ -388,14 +407,16 @@
-
- GWDSettingsStorage *
- gwd_settings_storage_gsettings_new (GSettings *desktop,
-+ GSettings *metacity,
- GSettings *mutter,
- GSettings *gwd,
- GWDSettingsWritable *writable)
- {
-- static const guint gwd_settings_storage_gsettings_n_construction_params = 4;
-+ static const guint gwd_settings_storage_gsettings_n_construction_params = 5;
- GParameter param[gwd_settings_storage_gsettings_n_construction_params];
-
- GValue desktop_value = G_VALUE_INIT;
-+ GValue metacity_value = G_VALUE_INIT;
- GValue mutter_value = G_VALUE_INIT;
- GValue gwd_value = G_VALUE_INIT;
- GValue writable_value = G_VALUE_INIT;
-@@ -405,29 +426,34 @@
- g_return_val_if_fail (writable != NULL, NULL);
-
- g_value_init (&desktop_value, G_TYPE_OBJECT);
-+ g_value_init (&metacity_value, G_TYPE_OBJECT);
- g_value_init (&mutter_value, G_TYPE_OBJECT);
- g_value_init (&gwd_value, G_TYPE_OBJECT);
- g_value_init (&writable_value, G_TYPE_POINTER);
-
- g_value_take_object (&desktop_value, desktop);
-+ g_value_take_object (&metacity_value, metacity);
- g_value_take_object (&mutter_value, mutter);
- g_value_take_object (&gwd_value, gwd);
- g_value_set_pointer (&writable_value, writable);
-
- param[0].name = "desktop-gsettings";
- param[0].value = desktop_value;
-- param[1].name = "mutter-gsettings";
-- param[1].value = mutter_value;
-- param[2].name = "gwd-gsettings";
-- param[2].value = gwd_value;
-- param[3].name = "writable-settings";
-- param[3].value = writable_value;
-+ param[1].name = "metacity-gsettings";
-+ param[1].value = metacity_value;
-+ param[2].name = "mutter-gsettings";
-+ param[2].value = mutter_value;
-+ param[3].name = "gwd-gsettings";
-+ param[3].value = gwd_value;
-+ param[4].name = "writable-settings";
-+ param[4].value = writable_value;
-
- storage = GWD_SETTINGS_STORAGE_INTERFACE (g_object_newv (GWD_TYPE_SETTINGS_STORAGE_GSETTINGS,
- gwd_settings_storage_gsettings_n_construction_params,
- param));
-
- g_value_unset (&desktop_value);
-+ g_value_unset (&metacity_value);
- g_value_unset (&mutter_value);
- g_value_unset (&gwd_value);
- g_value_unset (&writable_value);
-@@ -488,6 +514,35 @@
- }
-
- static void
-+org_gnome_metacity_settings_changed (GSettings *settings,
-+ const gchar *key,
-+ gpointer user_data)
-+{
-+ GWDSettingsStorage *storage;
-+
-+ storage = GWD_SETTINGS_STORAGE_INTERFACE (user_data);
-+
-+ if (strcmp (key, ORG_GNOME_METACITY_THEME) == 0)
-+ gwd_settings_storage_update_metacity_theme (storage);
-+}
-+
-+void
-+gwd_connect_org_gnome_metacity_settings (GSettings *settings,
-+ GWDSettingsStorage *storage)
-+{
-+ if (!settings)
-+ return;
-+
-+ g_signal_connect (settings, "changed", (GCallback) org_gnome_metacity_settings_changed, storage);
-+}
-+
-+GSettings *
-+gwd_get_org_gnome_metacity_settings ()
-+{
-+ return get_settings_no_abort (ORG_GNOME_METACITY);
-+}
-+
-+static void
- org_gnome_mutter_settings_changed (GSettings *settings,
- const gchar *key,
- gpointer user_data)
-@@ -496,8 +551,6 @@
-
- if (strcmp (key, ORG_GNOME_MUTTER_DRAGGABLE_BORDER_WIDTH) == 0)
- gwd_settings_storage_update_draggable_border_width (storage);
-- else if (strcmp (key, ORG_GNOME_MUTTER_ATTACH_MODAL_DIALOGS) == 0)
-- gwd_settings_storage_update_attach_modal_dialogs (storage);
- }
-
- void
-diff -Nur original/gtk/window-decorator/gwd-settings-storage-gsettings.h modified/gtk/window-decorator/gwd-settings-storage-gsettings.h
---- original/gtk/window-decorator/gwd-settings-storage-gsettings.h 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gwd-settings-storage-gsettings.h 2015-04-11 14:34:11.000000000 +0100
-@@ -30,6 +30,7 @@
-
- GWDSettingsStorage *
- gwd_settings_storage_gsettings_new (GSettings *orgGNOMEDesktopSettings,
-+ GSettings *metacitySettings,
- GSettings *mutterSettings,
- GSettings *gwdSettings,
- GWDSettingsWritable *writableSettings);
-@@ -42,6 +43,13 @@
- gwd_get_org_compiz_gwd_settings ();
-
- void
-+gwd_connect_org_gnome_metacity_settings (GSettings *settings,
-+ GWDSettingsStorage *storage);
-+
-+GSettings *
-+gwd_get_org_gnome_metacity_settings ();
-+
-+void
- gwd_connect_org_gnome_mutter_settings (GSettings *settings,
- GWDSettingsStorage *storage);
-
-@@ -56,6 +64,7 @@
- gwd_get_org_gnome_desktop_wm_preferences_settings ();
-
- extern const gchar * ORG_COMPIZ_GWD;
-+extern const gchar * ORG_GNOME_METACITY;
- extern const gchar * ORG_GNOME_MUTTER;
- extern const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES;
-
-@@ -67,6 +76,8 @@
- extern const gchar * ORG_COMPIZ_GWD_KEY_METACITY_THEME_INACTIVE_SHADE_OPACITY;
- extern const gchar * ORG_COMPIZ_GWD_KEY_USE_METACITY_THEME;
- extern const gchar * ORG_COMPIZ_GWD_KEY_MOUSE_WHEEL_ACTION;
-+extern const gchar * ORG_GNOME_METACITY_THEME;
-+extern const gchar * ORG_GNOME_MUTTER_DRAGGABLE_BORDER_WIDTH;
- extern const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_ACTION_DOUBLE_CLICK_TITLEBAR;
- extern const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_ACTION_MIDDLE_CLICK_TITLEBAR;
- extern const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_ACTION_RIGHT_CLICK_TITLEBAR;
-@@ -74,8 +85,6 @@
- extern const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_TITLEBAR_USES_SYSTEM_FONT;
- extern const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_TITLEBAR_FONT;
- extern const gchar * ORG_GNOME_DESKTOP_WM_PREFERENCES_BUTTON_LAYOUT;
--extern const gchar * ORG_GNOME_MUTTER_ATTACH_MODAL_DIALOGS;
--extern const gchar * ORG_GNOME_MUTTER_DRAGGABLE_BORDER_WIDTH;
-
- G_END_DECLS
-
-diff -Nur original/gtk/window-decorator/gwd-settings-storage-interface.c modified/gtk/window-decorator/gwd-settings-storage-interface.c
---- original/gtk/window-decorator/gwd-settings-storage-interface.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gwd-settings-storage-interface.c 2015-04-11 14:34:11.000000000 +0100
-@@ -39,12 +39,6 @@
- return (*interface->update_draggable_border_width) (settings);
- }
-
--gboolean gwd_settings_storage_update_attach_modal_dialogs (GWDSettingsStorage *settings)
--{
-- GWDSettingsStorageInterface *interface = GWD_SETTINGS_STORAGE_GET_INTERFACE (settings);
-- return (*interface->update_attach_modal_dialogs) (settings);
--}
--
- gboolean gwd_settings_storage_update_blur (GWDSettingsStorage *settings)
- {
- GWDSettingsStorageInterface *interface = GWD_SETTINGS_STORAGE_GET_INTERFACE (settings);
-diff -Nur original/gtk/window-decorator/gwd-settings-storage-interface.h modified/gtk/window-decorator/gwd-settings-storage-interface.h
---- original/gtk/window-decorator/gwd-settings-storage-interface.h 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gwd-settings-storage-interface.h 2015-04-11 14:34:11.000000000 +0100
-@@ -41,7 +41,6 @@
-
- gboolean (*update_use_tooltips) (GWDSettingsStorage *settings);
- gboolean (*update_draggable_border_width) (GWDSettingsStorage *settings);
-- gboolean (*update_attach_modal_dialogs) (GWDSettingsStorage *settings);
- gboolean (*update_blur) (GWDSettingsStorage *settings);
- gboolean (*update_metacity_theme) (GWDSettingsStorage *settings);
- gboolean (*update_opacity) (GWDSettingsStorage *settings);
-@@ -52,7 +51,6 @@
-
- gboolean gwd_settings_storage_update_use_tooltips (GWDSettingsStorage *settings);
- gboolean gwd_settings_storage_update_draggable_border_width (GWDSettingsStorage *settings);
--gboolean gwd_settings_storage_update_attach_modal_dialogs (GWDSettingsStorage *settings);
- gboolean gwd_settings_storage_update_blur (GWDSettingsStorage *settings);
- gboolean gwd_settings_storage_update_metacity_theme (GWDSettingsStorage *settings);
- gboolean gwd_settings_storage_update_opacity (GWDSettingsStorage *settings);
-diff -Nur original/gtk/window-decorator/gwd-settings-writable-interface.c modified/gtk/window-decorator/gwd-settings-writable-interface.c
---- original/gtk/window-decorator/gwd-settings-writable-interface.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gwd-settings-writable-interface.c 2015-04-11 14:34:11.000000000 +0100
-@@ -85,14 +85,6 @@
- }
-
- gboolean
--gwd_settings_writable_attach_modal_dialogs_changed (GWDSettingsWritable *settings,
-- gboolean attach_modal_dialogs)
--{
-- GWDSettingsWritableInterface *iface = GWD_SETTINGS_WRITABLE_GET_INTERFACE (settings);
-- return (*iface->attach_modal_dialogs_changed) (settings, attach_modal_dialogs);
--}
--
--gboolean
- gwd_settings_writable_blur_changed (GWDSettingsWritable *settings,
- const gchar *blur_type)
- {
-diff -Nur original/gtk/window-decorator/gwd-settings-writable-interface.h modified/gtk/window-decorator/gwd-settings-writable-interface.h
---- original/gtk/window-decorator/gwd-settings-writable-interface.h 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/gwd-settings-writable-interface.h 2015-04-11 14:34:11.000000000 +0100
-@@ -56,8 +56,6 @@
- gboolean new_value);
- gboolean (*draggable_border_width_changed) (GWDSettingsWritable *settings,
- gint new_value);
-- gboolean (*attach_modal_dialogs_changed) (GWDSettingsWritable *settings,
-- gboolean new_value);
- gboolean (*blur_changed) (GWDSettingsWritable *settings,
- const gchar *type);
- gboolean (*metacity_theme_changed) (GWDSettingsWritable *settings,
-@@ -108,10 +106,6 @@
- gint draggable_border_width);
-
- gboolean
--gwd_settings_writable_attach_modal_dialogs_changed (GWDSettingsWritable *settings,
-- gboolean attach_modal_dialogs);
--
--gboolean
- gwd_settings_writable_blur_changed (GWDSettingsWritable *settings,
- const gchar *blur_type);
-
-diff -Nur original/gtk/window-decorator/metacity-3-16.c modified/gtk/window-decorator/metacity-3-16.c
---- original/gtk/window-decorator/metacity-3-16.c 1970-01-01 01:00:00.000000000 +0100
-+++ modified/gtk/window-decorator/metacity-3-16.c 2015-04-11 14:34:11.000000000 +0100
-@@ -0,0 +1,1555 @@
-+/*
-+ * Copyright © 2006 Novell, Inc.
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ *
-+ * Author: David Reveman <davidr@novell.com>
-+ *
-+ * 2D Mode: Copyright © 2010 Sam Spilsbury <smspillaz@gmail.com>
-+ * Frames Management: Copright © 2011 Canonical Ltd.
-+ * Authored By: Sam Spilsbury <sam.spilsbury@canonical.com>
-+ */
-+
-+#include "gtk-window-decorator.h"
-+
-+#ifdef USE_METACITY
-+#ifdef HAVE_METACITY_3_16_0
-+
-+MetaButtonLayout meta_button_layout;
-+
-+static gboolean
-+meta_button_present (MetaButtonLayout *button_layout,
-+ MetaButtonFunction function)
-+{
-+ int i;
-+
-+ for (i = 0; i < MAX_BUTTONS_PER_CORNER; ++i)
-+ if (button_layout->left_buttons[i] == function)
-+ return TRUE;
-+
-+ for (i = 0; i < MAX_BUTTONS_PER_CORNER; ++i)
-+ if (button_layout->right_buttons[i] == function)
-+ return TRUE;
-+
-+ return FALSE;
-+}
-+
-+static void
-+decor_update_meta_window_property (decor_t *d,
-+ MetaTheme *theme,
-+ MetaFrameFlags flags,
-+ MetaFrameType type,
-+ Region top,
-+ Region bottom,
-+ Region left,
-+ Region right)
-+{
-+ long *data;
-+ GdkDisplay *display;
-+ Display *xdisplay;
-+ gint nQuad;
-+ decor_extents_t win_extents;
-+ decor_extents_t frame_win_extents;
-+ decor_extents_t max_win_extents;
-+ decor_extents_t frame_max_win_extents;
-+ decor_quad_t quads[N_QUADS_MAX];
-+ unsigned int nOffset;
-+ unsigned int frame_type;
-+ unsigned int frame_state;
-+ unsigned int frame_actions;
-+ gint w;
-+ gint lh;
-+ gint rh;
-+ gint top_stretch_offset;
-+ gint bottom_stretch_offset;
-+ gint left_stretch_offset;
-+ gint right_stretch_offset;
-+
-+ display = gdk_display_get_default ();
-+ xdisplay = gdk_x11_display_get_xdisplay (display);
-+
-+ nOffset = 1;
-+
-+ frame_type = populate_frame_type (d);
-+ frame_state = populate_frame_state (d);
-+ frame_actions = populate_frame_actions (d);
-+
-+ win_extents = frame_win_extents = d->frame->win_extents;
-+ max_win_extents = frame_max_win_extents = d->frame->max_win_extents;
-+
-+ /* Add the invisible grab area padding, but only for
-+ * pixmap type decorations */
-+ if (!d->frame_window)
-+ {
-+ GdkScreen *screen;
-+ MetaStyleInfo *style_info;
-+ MetaFrameBorders borders;
-+
-+ screen = gtk_widget_get_screen (d->frame->style_window_rgba);
-+ style_info = meta_theme_create_style_info (screen, NULL);
-+
-+ meta_theme_get_frame_borders (theme, style_info, type,
-+ d->frame->text_height,
-+ flags, &borders);
-+
-+ if (flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE)
-+ {
-+ frame_win_extents.left += borders.invisible.left;
-+ frame_win_extents.right += borders.invisible.right;
-+ frame_max_win_extents.left += borders.invisible.left;
-+ frame_max_win_extents.right += borders.invisible.right;
-+ }
-+
-+ if (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE)
-+ {
-+ frame_win_extents.bottom += borders.invisible.bottom;
-+ frame_win_extents.top += borders.invisible.top;
-+ frame_max_win_extents.bottom += borders.invisible.bottom;
-+ frame_max_win_extents.top += borders.invisible.top;
-+ }
-+
-+ meta_style_info_unref (style_info);
-+ }
-+
-+ w = d->border_layout.top.x2 - d->border_layout.top.x1 -
-+ d->context->left_space - d->context->right_space;
-+
-+ if (d->border_layout.rotation)
-+ lh = d->border_layout.left.x2 - d->border_layout.left.x1;
-+ else
-+ lh = d->border_layout.left.y2 - d->border_layout.left.y1;
-+
-+ if (d->border_layout.rotation)
-+ rh = d->border_layout.right.x2 - d->border_layout.right.x1;
-+ else
-+ rh = d->border_layout.right.y2 - d->border_layout.right.y1;
-+
-+ left_stretch_offset = lh / 2;
-+ right_stretch_offset = rh / 2;
-+ top_stretch_offset = w - d->button_width - 1;
-+ bottom_stretch_offset = (d->border_layout.bottom.x2 - d->border_layout.bottom.x1 -
-+ d->context->left_space - d->context->right_space) / 2;
-+
-+ nQuad = decor_set_lXrXtXbX_window_quads (quads, d->context, &d->border_layout,
-+ left_stretch_offset, right_stretch_offset,
-+ top_stretch_offset, bottom_stretch_offset);
-+
-+ win_extents.top += d->frame->titlebar_height;
-+ frame_win_extents.top += d->frame->titlebar_height;
-+ max_win_extents.top += d->frame->max_titlebar_height;
-+ frame_max_win_extents.top += d->frame->max_titlebar_height;
-+
-+ if (d->frame_window)
-+ {
-+ data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_WINDOW);
-+ decor_gen_window_property (data, nOffset - 1, &win_extents, &max_win_extents,
-+ 20, 20, frame_type, frame_state, frame_actions);
-+ }
-+ else
-+ {
-+ data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_PIXMAP);
-+ decor_quads_to_property (data, nOffset - 1, cairo_xlib_surface_get_drawable (d->surface),
-+ &frame_win_extents, &win_extents,
-+ &frame_max_win_extents, &max_win_extents,
-+ ICON_SPACE + d->button_width,
-+ 0, quads, nQuad, frame_type, frame_state, frame_actions);
-+ }
-+
-+ gdk_error_trap_push ();
-+
-+ XChangeProperty (xdisplay, d->prop_xid, win_decor_atom, XA_INTEGER,
-+ 32, PropModeReplace, (guchar *) data,
-+ PROP_HEADER_SIZE + BASE_PROP_SIZE + QUAD_PROP_SIZE * N_QUADS_MAX);
-+ gdk_display_sync (display);
-+
-+ gdk_error_trap_pop_ignored ();
-+
-+ free (data);
-+
-+ decor_update_blur_property (d, w, lh,
-+ top, top_stretch_offset,
-+ bottom, bottom_stretch_offset,
-+ left, left_stretch_offset,
-+ right, right_stretch_offset);
-+}
-+
-+static void
-+meta_get_corner_radius (const MetaFrameGeometry *fgeom,
-+ int *top_left_radius,
-+ int *top_right_radius,
-+ int *bottom_left_radius,
-+ int *bottom_right_radius)
-+{
-+ *top_left_radius = fgeom->top_left_corner_rounded_radius;
-+ *top_right_radius = fgeom->top_right_corner_rounded_radius;
-+ *bottom_left_radius = fgeom->bottom_left_corner_rounded_radius;
-+ *bottom_right_radius = fgeom->bottom_right_corner_rounded_radius;
-+}
-+
-+static int
-+radius_to_width (int radius,
-+ int i)
-+{
-+ float r1 = sqrt (radius) + radius;
-+ float r2 = r1 * r1 - (r1 - (i + 0.5)) * (r1 - (i + 0.5));
-+
-+ return floor (0.5f + r1 - sqrt (r2));
-+}
-+
-+static Region
-+meta_get_top_border_region (const MetaFrameGeometry *fgeom,
-+ int width)
-+{
-+ Region corners_xregion;
-+ Region border_xregion;
-+ XRectangle xrect;
-+ int top_left_radius;
-+ int top_right_radius;
-+ int bottom_left_radius;
-+ int bottom_right_radius;
-+ int w;
-+ int i;
-+ int height;
-+
-+ corners_xregion = XCreateRegion ();
-+
-+ meta_get_corner_radius (fgeom, &top_left_radius, &top_right_radius,
-+ &bottom_left_radius, &bottom_right_radius);
-+
-+ width = width - fgeom->borders.invisible.left - fgeom->borders.invisible.right;
-+ height = fgeom->borders.visible.top;
-+
-+ if (top_left_radius)
-+ {
-+ for (i = 0; i < top_left_radius; ++i)
-+ {
-+ w = radius_to_width (top_left_radius, i);
-+
-+ xrect.x = 0;
-+ xrect.y = i;
-+ xrect.width = w;
-+ xrect.height = 1;
-+
-+ XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-+ }
-+ }
-+
-+ if (top_right_radius)
-+ {
-+ for (i = 0; i < top_right_radius; ++i)
-+ {
-+ w = radius_to_width (top_right_radius, i);
-+
-+ xrect.x = width - w;
-+ xrect.y = i;
-+ xrect.width = w;
-+ xrect.height = 1;
-+
-+ XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-+ }
-+ }
-+
-+ border_xregion = XCreateRegion ();
-+
-+ xrect.x = 0;
-+ xrect.y = 0;
-+ xrect.width = width;
-+ xrect.height = height;
-+
-+ XUnionRectWithRegion (&xrect, border_xregion, border_xregion);
-+
-+ XSubtractRegion (border_xregion, corners_xregion, border_xregion);
-+
-+ XDestroyRegion (corners_xregion);
-+
-+ return border_xregion;
-+}
-+
-+static Region
-+meta_get_bottom_border_region (const MetaFrameGeometry *fgeom,
-+ int width)
-+{
-+ Region corners_xregion;
-+ Region border_xregion;
-+ XRectangle xrect;
-+ int top_left_radius;
-+ int top_right_radius;
-+ int bottom_left_radius;
-+ int bottom_right_radius;
-+ int w;
-+ int i;
-+ int height;
-+
-+ corners_xregion = XCreateRegion ();
-+
-+ meta_get_corner_radius (fgeom, &top_left_radius, &top_right_radius,
-+ &bottom_left_radius, &bottom_right_radius);
-+
-+ width = width - fgeom->borders.invisible.left - fgeom->borders.invisible.right;
-+ height = fgeom->borders.visible.bottom;
-+
-+ if (bottom_left_radius)
-+ {
-+ for (i = 0; i < bottom_left_radius; ++i)
-+ {
-+ w = radius_to_width (bottom_left_radius, i);
-+
-+ xrect.x = 0;
-+ xrect.y = height - i - 1;
-+ xrect.width = w;
-+ xrect.height = 1;
-+
-+ XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-+ }
-+ }
-+
-+ if (bottom_right_radius)
-+ {
-+ for (i = 0; i < bottom_right_radius; ++i)
-+ {
-+ w = radius_to_width (bottom_right_radius, i);
-+
-+ xrect.x = width - w;
-+ xrect.y = height - i - 1;
-+ xrect.width = w;
-+ xrect.height = 1;
-+
-+ XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-+ }
-+ }
-+
-+ border_xregion = XCreateRegion ();
-+
-+ xrect.x = 0;
-+ xrect.y = 0;
-+ xrect.width = width;
-+ xrect.height = height;
-+
-+ XUnionRectWithRegion (&xrect, border_xregion, border_xregion);
-+
-+ XSubtractRegion (border_xregion, corners_xregion, border_xregion);
-+
-+ XDestroyRegion (corners_xregion);
-+
-+ return border_xregion;
-+}
-+
-+static Region
-+meta_get_left_border_region (const MetaFrameGeometry *fgeom,
-+ int height)
-+{
-+ Region border_xregion;
-+ XRectangle xrect;
-+
-+ border_xregion = XCreateRegion ();
-+
-+ xrect.x = 0;
-+ xrect.y = 0;
-+ xrect.width = fgeom->borders.visible.left;
-+ xrect.height = height - fgeom->borders.total.top - fgeom->borders.total.bottom;
-+
-+ XUnionRectWithRegion (&xrect, border_xregion, border_xregion);
-+
-+ return border_xregion;
-+}
-+
-+static Region
-+meta_get_right_border_region (const MetaFrameGeometry *fgeom,
-+ int height)
-+{
-+ Region border_xregion;
-+ XRectangle xrect;
-+
-+ border_xregion = XCreateRegion ();
-+
-+ xrect.x = 0;
-+ xrect.y = 0;
-+ xrect.width = fgeom->borders.visible.right;
-+ xrect.height = height - fgeom->borders.total.top - fgeom->borders.total.bottom;
-+
-+ XUnionRectWithRegion (&xrect, border_xregion, border_xregion);
-+
-+ return border_xregion;
-+}
-+
-+static MetaButtonState
-+meta_button_state (int state)
-+{
-+ if (state & IN_EVENT_WINDOW)
-+ {
-+ if (state & PRESSED_EVENT_WINDOW)
-+ return META_BUTTON_STATE_PRESSED;
-+
-+ return META_BUTTON_STATE_PRELIGHT;
-+ }
-+
-+ return META_BUTTON_STATE_NORMAL;
-+}
-+
-+static MetaButtonType
-+meta_function_to_type (MetaButtonFunction function)
-+{
-+ switch (function)
-+ {
-+ case META_BUTTON_FUNCTION_MENU:
-+ return META_BUTTON_TYPE_MENU;
-+ case META_BUTTON_FUNCTION_MINIMIZE:
-+ return META_BUTTON_TYPE_MINIMIZE;
-+ case META_BUTTON_FUNCTION_MAXIMIZE:
-+ return META_BUTTON_TYPE_MAXIMIZE;
-+ case META_BUTTON_FUNCTION_CLOSE:
-+ return META_BUTTON_TYPE_CLOSE;
-+ case META_BUTTON_FUNCTION_SHADE:
-+ return META_BUTTON_TYPE_SHADE;
-+ case META_BUTTON_FUNCTION_ABOVE:
-+ return META_BUTTON_TYPE_ABOVE;
-+ case META_BUTTON_FUNCTION_STICK:
-+ return META_BUTTON_TYPE_STICK;
-+ case META_BUTTON_FUNCTION_UNSHADE:
-+ return META_BUTTON_TYPE_UNSHADE;
-+ case META_BUTTON_FUNCTION_UNABOVE:
-+ return META_BUTTON_TYPE_UNABOVE;
-+ case META_BUTTON_FUNCTION_UNSTICK:
-+ return META_BUTTON_TYPE_UNSTICK;
-+ default:
-+ break;
-+ }
-+
-+ return META_BUTTON_TYPE_LAST;
-+}
-+
-+static MetaButtonState
-+meta_button_state_for_button_type (decor_t *d,
-+ MetaButtonType type)
-+{
-+ switch (type)
-+ {
-+ case META_BUTTON_TYPE_LEFT_LEFT_BACKGROUND:
-+ type = meta_function_to_type (meta_button_layout.left_buttons[0]);
-+ break;
-+ case META_BUTTON_TYPE_LEFT_MIDDLE_BACKGROUND:
-+ type = meta_function_to_type (meta_button_layout.left_buttons[1]);
-+ break;
-+ case META_BUTTON_TYPE_LEFT_RIGHT_BACKGROUND:
-+ type = meta_function_to_type (meta_button_layout.left_buttons[2]);
-+ break;
-+ case META_BUTTON_TYPE_RIGHT_LEFT_BACKGROUND:
-+ type = meta_function_to_type (meta_button_layout.right_buttons[0]);
-+ break;
-+ case META_BUTTON_TYPE_RIGHT_MIDDLE_BACKGROUND:
-+ type = meta_function_to_type (meta_button_layout.right_buttons[1]);
-+ break;
-+ case META_BUTTON_TYPE_RIGHT_RIGHT_BACKGROUND:
-+ type = meta_function_to_type (meta_button_layout.right_buttons[2]);
-+ default:
-+ break;
-+ }
-+
-+ switch (type)
-+ {
-+ case META_BUTTON_TYPE_CLOSE:
-+ return meta_button_state (d->button_states[BUTTON_CLOSE]);
-+ case META_BUTTON_TYPE_MAXIMIZE:
-+ return meta_button_state (d->button_states[BUTTON_MAX]);
-+ case META_BUTTON_TYPE_MINIMIZE:
-+ return meta_button_state (d->button_states[BUTTON_MIN]);
-+ case META_BUTTON_TYPE_MENU:
-+ return meta_button_state (d->button_states[BUTTON_MENU]);
-+ case META_BUTTON_TYPE_SHADE:
-+ return meta_button_state (d->button_states[BUTTON_SHADE]);
-+ case META_BUTTON_TYPE_ABOVE:
-+ return meta_button_state (d->button_states[BUTTON_ABOVE]);
-+ case META_BUTTON_TYPE_STICK:
-+ return meta_button_state (d->button_states[BUTTON_STICK]);
-+ case META_BUTTON_TYPE_UNSHADE:
-+ return meta_button_state (d->button_states[BUTTON_UNSHADE]);
-+ case META_BUTTON_TYPE_UNABOVE:
-+ return meta_button_state (d->button_states[BUTTON_UNABOVE]);
-+ case META_BUTTON_TYPE_UNSTICK:
-+ return meta_button_state (d->button_states[BUTTON_UNSTICK]);
-+ default:
-+ break;
-+ }
-+
-+ return META_BUTTON_STATE_NORMAL;
-+}
-+
-+static void
-+meta_get_decoration_geometry (decor_t *d,
-+ MetaTheme *theme,
-+ MetaFrameFlags *flags,
-+ MetaFrameGeometry *fgeom,
-+ MetaButtonLayout *button_layout,
-+ MetaFrameType frame_type)
-+{
-+ GdkScreen *screen;
-+ MetaStyleInfo *style_info;
-+ gint client_width;
-+ gint client_height;
-+
-+ if (!(frame_type < META_FRAME_TYPE_LAST))
-+ frame_type = META_FRAME_TYPE_NORMAL;
-+
-+ if (meta_button_layout_set)
-+ {
-+ *button_layout = meta_button_layout;
-+ }
-+ else
-+ {
-+ gint i;
-+
-+ button_layout->left_buttons[0] = META_BUTTON_FUNCTION_MENU;
-+
-+ for (i = 1; i < MAX_BUTTONS_PER_CORNER; ++i)
-+ button_layout->left_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+
-+ button_layout->right_buttons[0] = META_BUTTON_FUNCTION_MINIMIZE;
-+ button_layout->right_buttons[1] = META_BUTTON_FUNCTION_MAXIMIZE;
-+ button_layout->right_buttons[2] = META_BUTTON_FUNCTION_CLOSE;
-+
-+ for (i = 3; i < MAX_BUTTONS_PER_CORNER; ++i)
-+ button_layout->right_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+ }
-+
-+ *flags = 0;
-+
-+ if (d->actions & WNCK_WINDOW_ACTION_CLOSE)
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_DELETE;
-+
-+ if (d->actions & WNCK_WINDOW_ACTION_MINIMIZE)
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MINIMIZE;
-+
-+ if (d->actions & WNCK_WINDOW_ACTION_MAXIMIZE)
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MAXIMIZE;
-+
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MENU;
-+
-+ if (d->actions & WNCK_WINDOW_ACTION_RESIZE)
-+ {
-+ if (!(d->state & WNCK_WINDOW_STATE_MAXIMIZED_VERTICALLY))
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_VERTICAL_RESIZE;
-+ if (!(d->state & WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY))
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_HORIZONTAL_RESIZE;
-+ }
-+
-+ if (d->actions & WNCK_WINDOW_ACTION_MOVE)
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MOVE;
-+
-+ if (d->actions & WNCK_WINDOW_ACTION_MAXIMIZE)
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MAXIMIZE;
-+
-+ if (d->actions & WNCK_WINDOW_ACTION_SHADE)
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_SHADE;
-+
-+ if (d->active)
-+ *flags |= (MetaFrameFlags ) META_FRAME_HAS_FOCUS;
-+
-+ if ((d->state & META_MAXIMIZED) == META_MAXIMIZED)
-+ *flags |= (MetaFrameFlags ) META_FRAME_MAXIMIZED;
-+
-+ if (d->state & WNCK_WINDOW_STATE_STICKY)
-+ *flags |= (MetaFrameFlags ) META_FRAME_STUCK;
-+
-+ if (d->state & WNCK_WINDOW_STATE_FULLSCREEN)
-+ *flags |= (MetaFrameFlags ) META_FRAME_FULLSCREEN;
-+
-+ if (d->state & WNCK_WINDOW_STATE_SHADED)
-+ *flags |= (MetaFrameFlags ) META_FRAME_SHADED;
-+
-+ if (d->state & WNCK_WINDOW_STATE_ABOVE)
-+ *flags |= (MetaFrameFlags ) META_FRAME_ABOVE;
-+
-+ client_width = d->border_layout.top.x2 - d->border_layout.top.x1;
-+ client_width -= d->context->right_space + d->context->left_space;
-+
-+ if (d->border_layout.rotation)
-+ client_height = d->border_layout.left.x2 - d->border_layout.left.x1;
-+ else
-+ client_height = d->border_layout.left.y2 - d->border_layout.left.y1;
-+
-+ screen = gtk_widget_get_screen (d->frame->style_window_rgba);
-+ style_info = meta_theme_create_style_info (screen, NULL);
-+
-+ meta_theme_calc_geometry (theme, style_info, frame_type, d->frame->text_height,
-+ *flags, client_width, client_height,
-+ button_layout, fgeom);
-+
-+ meta_style_info_unref (style_info);
-+}
-+
-+void
-+meta_draw_window_decoration (decor_t *d)
-+{
-+ GdkDisplay *display;
-+ GdkScreen *screen;
-+ Display *xdisplay;
-+ cairo_surface_t *surface;
-+ Picture src;
-+ MetaButtonState button_states [META_BUTTON_TYPE_LAST];
-+ MetaButtonLayout button_layout;
-+ MetaFrameGeometry fgeom;
-+ MetaFrameFlags flags;
-+ MetaFrameType frame_type;
-+ MetaTheme *theme;
-+ MetaStyleInfo *style_info;
-+ GtkStyleContext *context;
-+ cairo_t *cr;
-+ gint i;
-+ Region top_region;
-+ Region bottom_region;
-+ Region left_region;
-+ Region right_region;
-+ gdouble meta_active_opacity;
-+ gdouble meta_inactive_opacity;
-+ gboolean meta_active_shade_opacity;
-+ gboolean meta_inactive_shade_opacity;
-+ double alpha;
-+ gboolean shade_alpha;
-+ MetaFrameStyle *frame_style;
-+ GtkWidget *style_window;
-+ GdkRGBA bg_rgba;
-+
-+ if (!d->surface || !d->picture)
-+ return;
-+
-+ display = gdk_display_get_default ();
-+ xdisplay = gdk_x11_display_get_xdisplay (display);
-+
-+ top_region = NULL;
-+ bottom_region = NULL;
-+ left_region = NULL;
-+ right_region = NULL;
-+
-+ g_object_get (settings, "metacity-active-opacity", &meta_active_opacity, NULL);
-+ g_object_get (settings, "metacity-inactive-opacity", &meta_inactive_opacity, NULL);
-+ g_object_get (settings, "metacity-active-shade-opacity", &meta_active_shade_opacity, NULL);
-+ g_object_get (settings, "metacity-inactive-shade-opacity", &meta_inactive_shade_opacity, NULL);
-+
-+ alpha = (d->active) ? meta_active_opacity : meta_inactive_opacity;
-+ shade_alpha = (d->active) ? meta_active_shade_opacity : meta_inactive_shade_opacity;
-+
-+ if (decoration_alpha == 1.0)
-+ alpha = 1.0;
-+
-+ if (cairo_xlib_surface_get_depth (d->surface) == 32)
-+ style_window = d->frame->style_window_rgba;
-+ else
-+ style_window = d->frame->style_window_rgb;
-+
-+ context = gtk_widget_get_style_context (style_window);
-+
-+ cr = cairo_create (d->buffer_surface ? d->buffer_surface : d->surface);
-+
-+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
-+
-+ theme = meta_theme_get_current ();
-+
-+ frame_type = meta_frame_type_from_string (d->frame->type);
-+
-+ if (frame_type == META_FRAME_TYPE_LAST)
-+ frame_type = META_FRAME_TYPE_NORMAL;
-+
-+ meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout,
-+ frame_type);
-+
-+ if ((d->prop_xid || !d->buffer_surface) && !d->frame_window)
-+ draw_shadow_background (d, cr, d->shadow, d->context);
-+
-+ for (i = 0; i < META_BUTTON_TYPE_LAST; ++i)
-+ button_states[i] = meta_button_state_for_button_type (d, i);
-+
-+ frame_style = meta_theme_get_frame_style (theme, frame_type, flags);
-+
-+ gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &bg_rgba);
-+ bg_rgba.alpha = 1.0;
-+
-+ if (frame_style->window_background_color)
-+ {
-+ meta_color_spec_render (frame_style->window_background_color,
-+ context, &bg_rgba);
-+
-+ bg_rgba.alpha = frame_style->window_background_alpha / 255.0;
-+ }
-+
-+ /* Draw something that will be almost invisible to user. This is hacky way
-+ * to fix invisible decorations. */
-+ cairo_set_source_rgba (cr, 0, 0, 0, 0.01);
-+ cairo_rectangle (cr, 0, 0, 1, 1);
-+ cairo_fill (cr);
-+ /* ------------ */
-+
-+ cairo_destroy (cr);
-+
-+ if (d->frame_window)
-+ surface = create_surface (fgeom.width, fgeom.height, d->frame->style_window_rgb);
-+ else
-+ surface = create_surface (fgeom.width, fgeom.height, d->frame->style_window_rgba);
-+
-+ cr = cairo_create (surface);
-+ gdk_cairo_set_source_rgba (cr, &bg_rgba);
-+ cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
-+
-+ src = XRenderCreatePicture (xdisplay, cairo_xlib_surface_get_drawable (surface),
-+ get_format_for_surface (d, surface), 0, NULL);
-+
-+ screen = gtk_widget_get_screen (d->frame->style_window_rgba);
-+ style_info = meta_theme_create_style_info (screen, NULL);
-+
-+ cairo_paint (cr);
-+ meta_theme_draw_frame (theme, style_info, cr, frame_type, flags,
-+ fgeom.width - fgeom.borders.total.left - fgeom.borders.total.right,
-+ fgeom.height - fgeom.borders.total.top - fgeom.borders.total.bottom,
-+ d->layout, d->frame->text_height, &button_layout,
-+ button_states, d->icon_pixbuf, NULL);
-+
-+ meta_style_info_unref (style_info);
-+
-+ if (fgeom.borders.visible.top)
-+ {
-+ top_region = meta_get_top_border_region (&fgeom, fgeom.width);
-+
-+ decor_blend_border_picture (xdisplay, d->context, src,
-+ fgeom.borders.invisible.left,
-+ fgeom.borders.invisible.top,
-+ d->picture, &d->border_layout,
-+ BORDER_TOP, top_region,
-+ alpha * 0xffff, shade_alpha, 0);
-+ }
-+
-+ if (fgeom.borders.visible.bottom)
-+ {
-+ bottom_region = meta_get_bottom_border_region (&fgeom, fgeom.width);
-+
-+ decor_blend_border_picture (xdisplay, d->context, src,
-+ fgeom.borders.invisible.left,
-+ fgeom.height - fgeom.borders.total.bottom,
-+ d->picture, &d->border_layout,
-+ BORDER_BOTTOM, bottom_region,
-+ alpha * 0xffff, shade_alpha, 0);
-+ }
-+
-+ if (fgeom.borders.visible.left)
-+ {
-+ left_region = meta_get_left_border_region (&fgeom, fgeom.height);
-+
-+ decor_blend_border_picture (xdisplay, d->context, src,
-+ fgeom.borders.invisible.left,
-+ fgeom.borders.total.top,
-+ d->picture, &d->border_layout,
-+ BORDER_LEFT, left_region,
-+ alpha * 0xffff, shade_alpha, 0);
-+ }
-+
-+ if (fgeom.borders.visible.right)
-+ {
-+ right_region = meta_get_right_border_region (&fgeom, fgeom.height);
-+
-+ decor_blend_border_picture (xdisplay, d->context, src,
-+ fgeom.width - fgeom.borders.total.right,
-+ fgeom.borders.total.top,
-+ d->picture, &d->border_layout,
-+ BORDER_RIGHT, right_region,
-+ alpha * 0xffff, shade_alpha, 0);
-+ }
-+
-+ cairo_destroy (cr);
-+ cairo_surface_destroy (surface);
-+ XRenderFreePicture (xdisplay, src);
-+
-+ copy_to_front_buffer (d);
-+
-+ if (d->frame_window)
-+ {
-+ GdkWindow *gdk_frame_window;
-+ GdkPixbuf *pixbuf;
-+
-+ gdk_frame_window = gtk_widget_get_window (d->decor_window);
-+
-+ pixbuf = gdk_pixbuf_get_from_surface (d->surface, 0, 0, d->width, d->height);
-+ gtk_image_set_from_pixbuf (GTK_IMAGE (d->decor_image), pixbuf);
-+ g_object_unref (pixbuf);
-+
-+ gdk_window_move_resize (gdk_frame_window,
-+ d->context->left_corner_space - 1,
-+ d->context->top_corner_space - 1,
-+ d->width,
-+ d->height);
-+
-+ gdk_window_lower (gdk_frame_window);
-+ }
-+
-+ if (d->prop_xid)
-+ {
-+ /* translate from frame to client window space */
-+ if (top_region)
-+ XOffsetRegion (top_region, -fgeom.borders.total.left, -fgeom.borders.total.top);
-+ if (bottom_region)
-+ XOffsetRegion (bottom_region, -fgeom.borders.total.left, 0);
-+ if (left_region)
-+ XOffsetRegion (left_region, -fgeom.borders.total.left, 0);
-+
-+ decor_update_meta_window_property (d, theme, flags, frame_type,
-+ top_region, bottom_region,
-+ left_region, right_region);
-+
-+ d->prop_xid = 0;
-+ }
-+
-+ if (top_region)
-+ XDestroyRegion (top_region);
-+ if (bottom_region)
-+ XDestroyRegion (bottom_region);
-+ if (left_region)
-+ XDestroyRegion (left_region);
-+ if (right_region)
-+ XDestroyRegion (right_region);
-+}
-+
-+static void
-+meta_calc_button_size (decor_t *d)
-+{
-+ MetaTheme *theme;
-+ MetaFrameType frame_type;
-+ MetaFrameFlags flags;
-+ MetaFrameGeometry fgeom;
-+ MetaButtonLayout button_layout;
-+ gint i, min_x, x, y, w, h, width;
-+
-+ if (!d->context)
-+ {
-+ d->button_width = 0;
-+ return;
-+ }
-+
-+ theme = meta_theme_get_current ();
-+
-+ frame_type = meta_frame_type_from_string (d->frame->type);
-+ if (!(frame_type < META_FRAME_TYPE_LAST))
-+ frame_type = META_FRAME_TYPE_NORMAL;
-+
-+ meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout,
-+ frame_type);
-+
-+ width = d->border_layout.top.x2 - d->border_layout.top.x1 -
-+ d->context->left_space - d->context->right_space +
-+ fgeom.borders.total.left + fgeom.borders.total.right;
-+
-+ min_x = width;
-+
-+ for (i = 0; i < 3; ++i)
-+ {
-+ static guint button_actions[3] = {
-+ WNCK_WINDOW_ACTION_CLOSE,
-+ WNCK_WINDOW_ACTION_MAXIMIZE,
-+ WNCK_WINDOW_ACTION_MINIMIZE
-+ };
-+
-+ if (d->actions & button_actions[i])
-+ {
-+ if (meta_get_button_position (d, i, width, 256, &x, &y, &w, &h))
-+ {
-+ if (x > width / 2 && x < min_x)
-+ min_x = x;
-+ }
-+ }
-+ }
-+
-+ d->button_width = width - min_x;
-+}
-+
-+static MetaButtonFunction
-+button_to_meta_button_function (gint i)
-+{
-+ switch (i)
-+ {
-+ case BUTTON_MENU:
-+ return META_BUTTON_FUNCTION_MENU;
-+ case BUTTON_MIN:
-+ return META_BUTTON_FUNCTION_MINIMIZE;
-+ case BUTTON_MAX:
-+ return META_BUTTON_FUNCTION_MAXIMIZE;
-+ case BUTTON_CLOSE:
-+ return META_BUTTON_FUNCTION_CLOSE;
-+ case BUTTON_SHADE:
-+ return META_BUTTON_FUNCTION_SHADE;
-+ case BUTTON_ABOVE:
-+ return META_BUTTON_FUNCTION_ABOVE;
-+ case BUTTON_STICK:
-+ return META_BUTTON_FUNCTION_STICK;
-+ case BUTTON_UNSHADE:
-+ return META_BUTTON_FUNCTION_UNSHADE;
-+ case BUTTON_UNABOVE:
-+ return META_BUTTON_FUNCTION_UNABOVE;
-+ case BUTTON_UNSTICK:
-+ return META_BUTTON_FUNCTION_UNSTICK;
-+ default:
-+ break;
-+ }
-+
-+ return META_BUTTON_FUNCTION_LAST;
-+}
-+
-+gboolean
-+meta_get_button_position (decor_t *d,
-+ gint i,
-+ gint width,
-+ gint height,
-+ gint *x,
-+ gint *y,
-+ gint *w,
-+ gint *h)
-+{
-+ MetaButtonLayout button_layout;
-+ MetaFrameGeometry fgeom;
-+ MetaFrameType frame_type;
-+ MetaFrameFlags flags;
-+ MetaTheme *theme;
-+ MetaButtonFunction button_function;
-+ MetaButtonSpace *space;
-+
-+ if (!d->context)
-+ {
-+ /* undecorated windows implicitly have no buttons */
-+ return FALSE;
-+ }
-+
-+ theme = meta_theme_get_current ();
-+
-+ frame_type = meta_frame_type_from_string (d->frame->type);
-+ if (!(frame_type < META_FRAME_TYPE_LAST))
-+ frame_type = META_FRAME_TYPE_NORMAL;
-+
-+ meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout,
-+ frame_type);
-+
-+ button_function = button_to_meta_button_function (i);
-+ if (!meta_button_present (&button_layout, button_function))
-+ return FALSE;
-+
-+ switch (i)
-+ {
-+ case BUTTON_MENU:
-+ space = &fgeom.menu_rect;
-+ break;
-+ case BUTTON_MIN:
-+ space = &fgeom.min_rect;
-+ break;
-+ case BUTTON_MAX:
-+ space = &fgeom.max_rect;
-+ break;
-+ case BUTTON_CLOSE:
-+ space = &fgeom.close_rect;
-+ break;
-+ case BUTTON_SHADE:
-+ space = &fgeom.shade_rect;
-+ break;
-+ case BUTTON_ABOVE:
-+ space = &fgeom.above_rect;
-+ break;
-+ case BUTTON_STICK:
-+ space = &fgeom.stick_rect;
-+ break;
-+ case BUTTON_UNSHADE:
-+ space = &fgeom.unshade_rect;
-+ break;
-+ case BUTTON_UNABOVE:
-+ space = &fgeom.unabove_rect;
-+ break;
-+ case BUTTON_UNSTICK:
-+ space = &fgeom.unstick_rect;
-+ break;
-+ default:
-+ return FALSE;
-+ }
-+
-+ if (!space->clickable.width && !space->clickable.height)
-+ return FALSE;
-+
-+ *x = space->clickable.x;
-+ *y = space->clickable.y;
-+ *w = space->clickable.width;
-+ *h = space->clickable.height;
-+
-+ if (d->frame_window)
-+ {
-+ *x += d->frame->win_extents.left + 4;
-+ *y += d->frame->win_extents.top + 2;
-+ }
-+
-+ return TRUE;
-+}
-+
-+gfloat
-+meta_get_title_scale (decor_frame_t *frame)
-+{
-+ MetaTheme *theme;
-+ MetaFrameType type;
-+ MetaFrameFlags flags;
-+
-+ theme = meta_theme_get_current ();
-+ type = meta_frame_type_from_string (frame->type);
-+ flags = 0xc33; /* fixme */
-+
-+ if (type == META_FRAME_TYPE_LAST)
-+ return 1.0f;
-+
-+ gfloat scale = meta_theme_get_title_scale (theme, type, flags);
-+
-+ return scale;
-+}
-+
-+gboolean
-+meta_calc_decoration_size (decor_t *d,
-+ gint w,
-+ gint h,
-+ gint name_width,
-+ gint *width,
-+ gint *height)
-+{
-+ decor_layout_t layout;
-+ decor_context_t *context;
-+ decor_shadow_t *shadow;
-+
-+ if (!d->decorated)
-+ return FALSE;
-+
-+ if ((d->state & META_MAXIMIZED) == META_MAXIMIZED)
-+ {
-+ if (!d->frame_window)
-+ {
-+ if (d->active)
-+ {
-+ context = &d->frame->max_window_context_active;
-+ shadow = d->frame->max_border_shadow_active;
-+ }
-+ else
-+ {
-+ context = &d->frame->max_window_context_inactive;
-+ shadow = d->frame->max_border_shadow_inactive;
-+ }
-+ }
-+ else
-+ {
-+ context = &d->frame->max_window_context_no_shadow;
-+ shadow = d->frame->max_border_no_shadow;
-+ }
-+ }
-+ else
-+ {
-+ if (!d->frame_window)
-+ {
-+ if (d->active)
-+ {
-+ context = &d->frame->window_context_active;
-+ shadow = d->frame->border_shadow_active;
-+ }
-+ else
-+ {
-+ context = &d->frame->window_context_inactive;
-+ shadow = d->frame->border_shadow_inactive;
-+ }
-+ }
-+ else
-+ {
-+ context = &d->frame->window_context_no_shadow;
-+ shadow = d->frame->border_no_shadow;
-+ }
-+ }
-+
-+ if (!d->frame_window)
-+ {
-+ decor_get_best_layout (context, w, h, &layout);
-+
-+ if (context != d->context || memcmp (&layout, &d->border_layout, sizeof (layout)))
-+ {
-+ *width = layout.width;
-+ *height = layout.height;
-+
-+ d->border_layout = layout;
-+ d->context = context;
-+ d->shadow = shadow;
-+
-+ meta_calc_button_size (d);
-+
-+ return TRUE;
-+ }
-+ }
-+ else
-+ {
-+ if ((d->state & META_MAXIMIZED) == META_MAXIMIZED)
-+ decor_get_default_layout (context, d->client_width,
-+ d->client_height - d->frame->titlebar_height,
-+ &layout);
-+ else
-+ decor_get_default_layout (context, d->client_width,
-+ d->client_height, &layout);
-+
-+ *width = layout.width;
-+ *height = layout.height;
-+
-+ d->border_layout = layout;
-+ d->shadow = shadow;
-+ d->context = context;
-+
-+ meta_calc_button_size (d);
-+
-+ return TRUE;
-+ }
-+
-+ return FALSE;
-+}
-+
-+#define TOP_RESIZE_HEIGHT 2
-+#define RESIZE_EXTENDS 15
-+
-+void
-+meta_get_event_window_position (decor_t *d,
-+ gint i,
-+ gint j,
-+ gint width,
-+ gint height,
-+ gint *x,
-+ gint *y,
-+ gint *w,
-+ gint *h)
-+{
-+ MetaButtonLayout button_layout;
-+ MetaFrameGeometry fgeom;
-+ MetaFrameFlags flags;
-+ MetaTheme *theme;
-+
-+ theme = meta_theme_get_current ();
-+
-+ meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout,
-+ meta_frame_type_from_string (d->frame->type));
-+
-+ width += fgeom.borders.total.right + fgeom.borders.total.left;
-+ height += fgeom.borders.total.top + fgeom.borders.total.bottom;
-+
-+ switch (i)
-+ {
-+ case 2: /* bottom */
-+ switch (j)
-+ {
-+ case 2: /* bottom right */
-+ *x = width - fgeom.borders.total.right - RESIZE_EXTENDS;
-+ *y = height - fgeom.borders.total.bottom - RESIZE_EXTENDS;
-+
-+ if (d->frame_window)
-+ {
-+ *x += d->frame->win_extents.left + 2;
-+ *y += d->frame->win_extents.top + 2;
-+ }
-+
-+ *w = fgeom.borders.total.right + RESIZE_EXTENDS;
-+ *h = fgeom.borders.total.bottom + RESIZE_EXTENDS;
-+ break;
-+ case 1: /* bottom */
-+ *x = fgeom.borders.total.left + RESIZE_EXTENDS;
-+ *y = height - fgeom.borders.total.bottom;
-+
-+ if (d->frame_window)
-+ *y += d->frame->win_extents.top + 2;
-+
-+ *w = width - fgeom.borders.total.left - fgeom.borders.total.right - (2 * RESIZE_EXTENDS);
-+ *h = fgeom.borders.total.bottom;
-+ break;
-+ case 0: /* bottom left */
-+ default:
-+ *x = 0;
-+ *y = height - fgeom.borders.total.bottom - RESIZE_EXTENDS;
-+
-+ if (d->frame_window)
-+ {
-+ *x += d->frame->win_extents.left + 4;
-+ *y += d->frame->win_extents.bottom + 2;
-+ }
-+
-+ *w = fgeom.borders.total.left + RESIZE_EXTENDS;
-+ *h = fgeom.borders.total.bottom + RESIZE_EXTENDS;
-+ break;
-+ }
-+ break;
-+ case 1: /* middle */
-+ switch (j)
-+ {
-+ case 2: /* right */
-+ *x = width - fgeom.borders.total.right;
-+ *y = fgeom.borders.total.top + RESIZE_EXTENDS;
-+
-+ if (d->frame_window)
-+ *x += d->frame->win_extents.left + 2;
-+
-+ *w = fgeom.borders.total.right;
-+ *h = height - fgeom.borders.total.top - fgeom.borders.total.bottom - (2 * RESIZE_EXTENDS);
-+ break;
-+ case 1: /* middle */
-+ *x = fgeom.borders.total.left;
-+ *y = fgeom.title_rect.y + TOP_RESIZE_HEIGHT;
-+ *w = width - fgeom.borders.total.left - fgeom.borders.total.right;
-+ *h = height - fgeom.top_titlebar_edge - fgeom.borders.total.bottom;
-+ break;
-+ case 0: /* left */
-+ default:
-+ *x = 0;
-+ *y = fgeom.borders.total.top + RESIZE_EXTENDS;
-+
-+ if (d->frame_window)
-+ *x += d->frame->win_extents.left + 4;
-+
-+ *w = fgeom.borders.total.left;
-+ *h = height - fgeom.borders.total.top - fgeom.borders.total.bottom - (2 * RESIZE_EXTENDS);
-+ break;
-+ }
-+ break;
-+ case 0: /* top */
-+ default:
-+ switch (j)
-+ {
-+ case 2: /* top right */
-+ *x = width - fgeom.borders.total.right - RESIZE_EXTENDS;
-+ *y = 0;
-+
-+ if (d->frame_window)
-+ {
-+ *x += d->frame->win_extents.left + 2;
-+ *y += d->frame->win_extents.top + 2 - fgeom.title_rect.height;
-+ }
-+
-+ *w = fgeom.borders.total.right + RESIZE_EXTENDS;
-+ *h = fgeom.borders.total.top + RESIZE_EXTENDS;
-+ break;
-+ case 1: /* top */
-+ *x = fgeom.borders.total.left + RESIZE_EXTENDS;
-+ *y = 0;
-+
-+ if (d->frame_window)
-+ *y += d->frame->win_extents.top + 2;
-+
-+ *w = width - fgeom.borders.total.left - fgeom.borders.total.right - (2 * RESIZE_EXTENDS);
-+ *h = fgeom.borders.total.top - fgeom.title_rect.height;
-+ break;
-+ case 0: /* top left */
-+ default:
-+ *x = 0;
-+ *y = 0;
-+
-+ if (d->frame_window)
-+ {
-+ *x += d->frame->win_extents.left + 4;
-+ *y += d->frame->win_extents.top + 2 - fgeom.title_rect.height;
-+ }
-+
-+ *w = fgeom.borders.total.left + RESIZE_EXTENDS;
-+ *h = fgeom.borders.total.top + RESIZE_EXTENDS;
-+ break;
-+ }
-+ break;
-+ }
-+
-+ if (!(flags & META_FRAME_ALLOWS_VERTICAL_RESIZE))
-+ {
-+ /* turn off top and bottom event windows */
-+ if (i == 0 || i == 2)
-+ *w = *h = 0;
-+ }
-+
-+ if (!(flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE))
-+ {
-+ /* turn off left and right event windows */
-+ if (j == 0 || j == 2)
-+ *w = *h = 0;
-+ }
-+}
-+
-+static MetaButtonFunction
-+meta_button_function_from_string (const char *str)
-+{
-+ if (strcmp (str, "menu") == 0)
-+ return META_BUTTON_FUNCTION_MENU;
-+ else if (strcmp (str, "appmenu") == 0)
-+ return META_BUTTON_FUNCTION_APPMENU;
-+ else if (strcmp (str, "minimize") == 0)
-+ return META_BUTTON_FUNCTION_MINIMIZE;
-+ else if (strcmp (str, "maximize") == 0)
-+ return META_BUTTON_FUNCTION_MAXIMIZE;
-+ else if (strcmp (str, "close") == 0)
-+ return META_BUTTON_FUNCTION_CLOSE;
-+ else if (strcmp (str, "shade") == 0)
-+ return META_BUTTON_FUNCTION_SHADE;
-+ else if (strcmp (str, "above") == 0)
-+ return META_BUTTON_FUNCTION_ABOVE;
-+ else if (strcmp (str, "stick") == 0)
-+ return META_BUTTON_FUNCTION_STICK;
-+ else if (strcmp (str, "unshade") == 0)
-+ return META_BUTTON_FUNCTION_UNSHADE;
-+ else if (strcmp (str, "unabove") == 0)
-+ return META_BUTTON_FUNCTION_UNABOVE;
-+ else if (strcmp (str, "unstick") == 0)
-+ return META_BUTTON_FUNCTION_UNSTICK;
-+ else
-+ return META_BUTTON_FUNCTION_LAST;
-+}
-+
-+static MetaButtonFunction
-+meta_button_opposite_function (MetaButtonFunction ofwhat)
-+{
-+ switch (ofwhat)
-+ {
-+ case META_BUTTON_FUNCTION_SHADE:
-+ return META_BUTTON_FUNCTION_UNSHADE;
-+ case META_BUTTON_FUNCTION_UNSHADE:
-+ return META_BUTTON_FUNCTION_SHADE;
-+
-+ case META_BUTTON_FUNCTION_ABOVE:
-+ return META_BUTTON_FUNCTION_UNABOVE;
-+ case META_BUTTON_FUNCTION_UNABOVE:
-+ return META_BUTTON_FUNCTION_ABOVE;
-+
-+ case META_BUTTON_FUNCTION_STICK:
-+ return META_BUTTON_FUNCTION_UNSTICK;
-+ case META_BUTTON_FUNCTION_UNSTICK:
-+ return META_BUTTON_FUNCTION_STICK;
-+
-+ default:
-+ return META_BUTTON_FUNCTION_LAST;
-+ }
-+}
-+
-+static void
-+meta_initialize_button_layout (MetaButtonLayout *layout)
-+{
-+ int i;
-+
-+ for (i = 0; i < MAX_BUTTONS_PER_CORNER; ++i)
-+ {
-+ layout->left_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+ layout->right_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+ layout->left_buttons_has_spacer[i] = FALSE;
-+ layout->right_buttons_has_spacer[i] = FALSE;
-+ }
-+}
-+
-+void
-+meta_update_button_layout (const char *value)
-+{
-+ MetaButtonLayout new_layout;
-+ MetaButtonFunction f;
-+ char **sides;
-+ int i;
-+
-+ meta_initialize_button_layout (&new_layout);
-+
-+ sides = g_strsplit (value, ":", 2);
-+
-+ if (sides[0] != NULL)
-+ {
-+ char **buttons;
-+ int b;
-+ gboolean used[META_BUTTON_FUNCTION_LAST];
-+
-+ for (i = 0; i < META_BUTTON_FUNCTION_LAST; ++i)
-+ used[i] = FALSE;
-+
-+ buttons = g_strsplit (sides[0], ",", -1);
-+
-+ i = b = 0;
-+ while (buttons[b] != NULL)
-+ {
-+ f = meta_button_function_from_string (buttons[b]);
-+ if (i > 0 && strcmp ("spacer", buttons[b]) == 0)
-+ {
-+ new_layout.left_buttons_has_spacer[i - 1] = TRUE;
-+ f = meta_button_opposite_function (f);
-+
-+ if (f != META_BUTTON_FUNCTION_LAST)
-+ new_layout.left_buttons_has_spacer[i - 2] = TRUE;
-+ }
-+ else
-+ {
-+ if (f != META_BUTTON_FUNCTION_LAST && !used[f])
-+ {
-+ used[f] = TRUE;
-+ new_layout.left_buttons[i++] = f;
-+
-+ f = meta_button_opposite_function (f);
-+
-+ if (f != META_BUTTON_FUNCTION_LAST)
-+ new_layout.left_buttons[i++] = f;
-+
-+ }
-+ else
-+ {
-+ fprintf (stderr, "%s: Ignoring unknown or already-used "
-+ "button name \"%s\"\n", program_name, buttons[b]);
-+ }
-+ }
-+ ++b;
-+ }
-+
-+ new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+
-+ g_strfreev (buttons);
-+
-+ if (sides[1] != NULL)
-+ {
-+ for (i = 0; i < META_BUTTON_FUNCTION_LAST; ++i)
-+ used[i] = FALSE;
-+
-+ buttons = g_strsplit (sides[1], ",", -1);
-+
-+ i = b = 0;
-+ while (buttons[b] != NULL)
-+ {
-+ f = meta_button_function_from_string (buttons[b]);
-+ if (i > 0 && strcmp ("spacer", buttons[b]) == 0)
-+ {
-+ new_layout.right_buttons_has_spacer[i - 1] = TRUE;
-+ f = meta_button_opposite_function (f);
-+ if (f != META_BUTTON_FUNCTION_LAST)
-+ new_layout.right_buttons_has_spacer[i - 2] = TRUE;
-+ }
-+ else
-+ {
-+ if (f != META_BUTTON_FUNCTION_LAST && !used[f])
-+ {
-+ used[f] = TRUE;
-+ new_layout.right_buttons[i++] = f;
-+
-+ f = meta_button_opposite_function (f);
-+
-+ if (f != META_BUTTON_FUNCTION_LAST)
-+ new_layout.right_buttons[i++] = f;
-+ }
-+ else
-+ {
-+ fprintf (stderr, "%s: Ignoring unknown or "
-+ "already-used button name \"%s\"\n",
-+ program_name, buttons[b]);
-+ }
-+ }
-+ ++b;
-+ }
-+
-+ new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+
-+ g_strfreev (buttons);
-+ }
-+ }
-+
-+ g_strfreev (sides);
-+
-+ /* Invert the button layout for RTL languages */
-+ if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
-+ {
-+ MetaButtonLayout rtl_layout;
-+ int j;
-+
-+ meta_initialize_button_layout (&rtl_layout);
-+
-+ i = 0;
-+ while (new_layout.left_buttons[i] != META_BUTTON_FUNCTION_LAST)
-+ ++i;
-+
-+ for (j = 0; j < i; ++j)
-+ {
-+ rtl_layout.right_buttons[j] = new_layout.left_buttons[i - j - 1];
-+ if (j == 0)
-+ rtl_layout.right_buttons_has_spacer[i - 1] = new_layout.left_buttons_has_spacer[i - j - 1];
-+ else
-+ rtl_layout.right_buttons_has_spacer[j - 1] = new_layout.left_buttons_has_spacer[i - j - 1];
-+ }
-+
-+ i = 0;
-+ while (new_layout.right_buttons[i] != META_BUTTON_FUNCTION_LAST)
-+ ++i;
-+
-+ for (j = 0; j < i; ++j)
-+ {
-+ rtl_layout.left_buttons[j] = new_layout.right_buttons[i - j - 1];
-+ if (j == 0)
-+ rtl_layout.left_buttons_has_spacer[i - 1] = new_layout.right_buttons_has_spacer[i - j - 1];
-+ else
-+ rtl_layout.left_buttons_has_spacer[j - 1] = new_layout.right_buttons_has_spacer[i - j - 1];
-+ }
-+
-+ new_layout = rtl_layout;
-+ }
-+
-+ meta_button_layout = new_layout;
-+}
-+
-+void
-+meta_update_border_extents (decor_frame_t *frame)
-+{
-+ MetaTheme *theme;
-+ GdkScreen *screen;
-+ MetaStyleInfo *style_info;
-+ MetaFrameBorders borders;
-+ MetaFrameType frame_type;
-+ gint top_height;
-+ gint bottom_height;
-+ gint left_width;
-+ gint right_width;
-+
-+ gwd_decor_frame_ref (frame);
-+
-+ frame_type = meta_frame_type_from_string (frame->type);
-+ if (!(frame_type < META_FRAME_TYPE_LAST))
-+ frame_type = META_FRAME_TYPE_NORMAL;
-+
-+ theme = meta_theme_get_current ();
-+
-+ screen = gtk_widget_get_screen (frame->style_window_rgba);
-+ style_info = meta_theme_create_style_info (screen, NULL);
-+
-+ meta_theme_get_frame_borders (theme, style_info, frame_type, frame->text_height,
-+ 0, &borders);
-+
-+ top_height = borders.visible.top;
-+ bottom_height = borders.visible.bottom;
-+ left_width = borders.visible.left;
-+ right_width = borders.visible.right;
-+
-+ frame->win_extents.top = frame->win_extents.top;
-+ frame->win_extents.bottom = bottom_height;
-+ frame->win_extents.left = left_width;
-+ frame->win_extents.right = right_width;
-+
-+ frame->titlebar_height = top_height - frame->win_extents.top;
-+
-+ meta_theme_get_frame_borders (theme, style_info, frame_type, frame->text_height,
-+ META_FRAME_MAXIMIZED, &borders);
-+
-+ top_height = borders.visible.top;
-+ bottom_height = borders.visible.bottom;
-+ left_width = borders.visible.left;
-+ right_width = borders.visible.right;
-+
-+ frame->max_win_extents.top = frame->win_extents.top;
-+ frame->max_win_extents.bottom = bottom_height;
-+ frame->max_win_extents.left = left_width;
-+ frame->max_win_extents.right = right_width;
-+
-+ frame->max_titlebar_height = top_height - frame->max_win_extents.top;
-+
-+ meta_style_info_unref (style_info);
-+
-+ gwd_decor_frame_unref (frame);
-+}
-+
-+#endif /* HAVE_METACITY_3_16_0 */
-+#endif /* USE_METACITY */
-diff -Nur original/gtk/window-decorator/metacity.c modified/gtk/window-decorator/metacity.c
---- original/gtk/window-decorator/metacity.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/metacity.c 2015-04-11 14:34:11.000000000 +0100
-@@ -26,87 +26,118 @@
- #include "gtk-window-decorator.h"
-
- #ifdef USE_METACITY
-+#ifndef HAVE_METACITY_3_16_0
-+
-+MetaButtonLayout meta_button_layout;
-+
-+static gboolean
-+meta_button_present (MetaButtonLayout *button_layout,
-+ MetaButtonFunction function)
-+{
-+ int i;
-+
-+ for (i = 0; i < MAX_BUTTONS_PER_CORNER; ++i)
-+ if (button_layout->left_buttons[i] == function)
-+ return TRUE;
-+
-+ for (i = 0; i < MAX_BUTTONS_PER_CORNER; ++i)
-+ if (button_layout->right_buttons[i] == function)
-+ return TRUE;
-+
-+ return FALSE;
-+}
-
- static void
--decor_update_meta_window_property (decor_t *d,
-- MetaTheme *theme,
-- MetaFrameFlags flags,
-- Region top,
-- Region bottom,
-- Region left,
-- Region right)
--{
-- long *data;
-- Display *xdisplay =
-- GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
-- gint nQuad;
-- decor_extents_t win_extents, frame_win_extents;
-- decor_extents_t max_win_extents, frame_max_win_extents;
-- decor_quad_t quads[N_QUADS_MAX];
-- unsigned int nOffset = 1;
-- unsigned int frame_type = populate_frame_type (d);
-- unsigned int frame_state = populate_frame_state (d);
-- unsigned int frame_actions = populate_frame_actions (d);
-- gint w, lh, rh;
-- gint top_stretch_offset;
-- gint bottom_stretch_offset;
-- gint left_stretch_offset;
-- gint right_stretch_offset;
-- gint mutter_draggable_border_width = 0;
-+decor_update_meta_window_property (decor_t *d,
-+ MetaTheme *theme,
-+ MetaFrameFlags flags,
-+ Region top,
-+ Region bottom,
-+ Region left,
-+ Region right)
-+{
-+ long *data;
-+ GdkDisplay *display;
-+ Display *xdisplay;
-+ gint nQuad;
-+ decor_extents_t win_extents;
-+ decor_extents_t frame_win_extents;
-+ decor_extents_t max_win_extents;
-+ decor_extents_t frame_max_win_extents;
-+ decor_quad_t quads[N_QUADS_MAX];
-+ unsigned int nOffset;
-+ unsigned int frame_type;
-+ unsigned int frame_state;
-+ unsigned int frame_actions;
-+ gint w;
-+ gint lh;
-+ gint rh;
-+ gint top_stretch_offset;
-+ gint bottom_stretch_offset;
-+ gint left_stretch_offset;
-+ gint right_stretch_offset;
-+ gint mutter_draggable_border_width;
-+
-+ display = gdk_display_get_default ();
-+ xdisplay = gdk_x11_display_get_xdisplay (display);
-+
-+ nOffset = 1;
-+
-+ frame_type = populate_frame_type (d);
-+ frame_state = populate_frame_state (d);
-+ frame_actions = populate_frame_actions (d);
-
- win_extents = frame_win_extents = d->frame->win_extents;
- max_win_extents = frame_max_win_extents = d->frame->max_win_extents;
-
-- g_object_get (settings, "draggable-border-width", &mutter_draggable_border_width, NULL);
-+ mutter_draggable_border_width = 0;
-+
-+ g_object_get (settings, "draggable-border-width",
-+ &mutter_draggable_border_width, NULL);
-
- /* Add the invisible grab area padding, but only for
- * pixmap type decorations */
- if (!d->frame_window)
- {
-- if (flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE)
-- {
-- frame_win_extents.left += mutter_draggable_border_width;
-- frame_win_extents.right += mutter_draggable_border_width;
-- frame_max_win_extents.left += mutter_draggable_border_width;
-- frame_max_win_extents.right += mutter_draggable_border_width;
-- }
--
-- if (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE)
-- {
-- frame_win_extents.bottom += mutter_draggable_border_width;
-- frame_win_extents.top += mutter_draggable_border_width;
-- frame_max_win_extents.bottom += mutter_draggable_border_width;
-- frame_max_win_extents.top += mutter_draggable_border_width;
-- }
-+ if (flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE)
-+ {
-+ frame_win_extents.left += mutter_draggable_border_width;
-+ frame_win_extents.right += mutter_draggable_border_width;
-+ frame_max_win_extents.left += mutter_draggable_border_width;
-+ frame_max_win_extents.right += mutter_draggable_border_width;
-+ }
-+
-+ if (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE)
-+ {
-+ frame_win_extents.bottom += mutter_draggable_border_width;
-+ frame_win_extents.top += mutter_draggable_border_width;
-+ frame_max_win_extents.bottom += mutter_draggable_border_width;
-+ frame_max_win_extents.top += mutter_draggable_border_width;
-+ }
- }
-
- w = d->border_layout.top.x2 - d->border_layout.top.x1 -
-- d->context->left_space - d->context->right_space;
-+ d->context->left_space - d->context->right_space;
-
- if (d->border_layout.rotation)
-- lh = d->border_layout.left.x2 - d->border_layout.left.x1;
-+ lh = d->border_layout.left.x2 - d->border_layout.left.x1;
- else
-- lh = d->border_layout.left.y2 - d->border_layout.left.y1;
-+ lh = d->border_layout.left.y2 - d->border_layout.left.y1;
-
- if (d->border_layout.rotation)
-- rh = d->border_layout.right.x2 - d->border_layout.right.x1;
-+ rh = d->border_layout.right.x2 - d->border_layout.right.x1;
- else
-- rh = d->border_layout.right.y2 - d->border_layout.right.y1;
-+ rh = d->border_layout.right.y2 - d->border_layout.right.y1;
-
-- left_stretch_offset = lh / 2;
-- right_stretch_offset = rh / 2;
-- top_stretch_offset = w - d->button_width - 1;
-- bottom_stretch_offset = (d->border_layout.bottom.x2 -
-- d->border_layout.bottom.x1 -
-- d->context->left_space -
-- d->context->right_space) / 2;
--
-- nQuad = decor_set_lXrXtXbX_window_quads (quads, d->context,
-- &d->border_layout,
-- left_stretch_offset,
-- right_stretch_offset,
-- top_stretch_offset,
-- bottom_stretch_offset);
-+ left_stretch_offset = lh / 2;
-+ right_stretch_offset = rh / 2;
-+ top_stretch_offset = w - d->button_width - 1;
-+ bottom_stretch_offset = (d->border_layout.bottom.x2 - d->border_layout.bottom.x1 -
-+ d->context->left_space - d->context->right_space) / 2;
-+
-+ nQuad = decor_set_lXrXtXbX_window_quads (quads, d->context, &d->border_layout,
-+ left_stretch_offset, right_stretch_offset,
-+ top_stretch_offset, bottom_stretch_offset);
-
- win_extents.top += d->frame->titlebar_height;
- frame_win_extents.top += d->frame->titlebar_height;
-@@ -115,47 +146,44 @@
-
- if (d->frame_window)
- {
-- data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_WINDOW);
-- decor_gen_window_property (data, nOffset - 1, &win_extents, &max_win_extents, 20, 20,
-- frame_type, frame_state, frame_actions);
-+ data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_WINDOW);
-+ decor_gen_window_property (data, nOffset - 1, &win_extents, &max_win_extents,
-+ 20, 20, frame_type, frame_state, frame_actions);
- }
- else
- {
-- data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_PIXMAP);
-- decor_quads_to_property (data, nOffset - 1, cairo_xlib_surface_get_drawable (d->surface),
-- &frame_win_extents, &win_extents,
-- &frame_max_win_extents, &max_win_extents,
-- ICON_SPACE + d->button_width,
-- 0,
-- quads, nQuad, frame_type, frame_state, frame_actions);
-+ data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_PIXMAP);
-+ decor_quads_to_property (data, nOffset - 1, cairo_xlib_surface_get_drawable (d->surface),
-+ &frame_win_extents, &win_extents,
-+ &frame_max_win_extents, &max_win_extents,
-+ ICON_SPACE + d->button_width,
-+ 0, quads, nQuad, frame_type, frame_state, frame_actions);
- }
-
- gdk_error_trap_push ();
-
-- XChangeProperty (xdisplay, d->prop_xid,
-- win_decor_atom,
-- XA_INTEGER,
-- 32, PropModeReplace, (guchar *) data,
-- PROP_HEADER_SIZE + BASE_PROP_SIZE + QUAD_PROP_SIZE * N_QUADS_MAX);
-- gdk_display_sync (gdk_display_get_default ());
-+ XChangeProperty (xdisplay, d->prop_xid, win_decor_atom, XA_INTEGER,
-+ 32, PropModeReplace, (guchar *) data,
-+ PROP_HEADER_SIZE + BASE_PROP_SIZE + QUAD_PROP_SIZE * N_QUADS_MAX);
-+ gdk_display_sync (display);
-+
- gdk_error_trap_pop_ignored ();
-
- free (data);
-
-- decor_update_blur_property (d,
-- w, lh,
-- top, top_stretch_offset,
-- bottom, bottom_stretch_offset,
-- left, left_stretch_offset,
-- right, right_stretch_offset);
-+ decor_update_blur_property (d, w, lh,
-+ top, top_stretch_offset,
-+ bottom, bottom_stretch_offset,
-+ left, left_stretch_offset,
-+ right, right_stretch_offset);
- }
-
- static void
- meta_get_corner_radius (const MetaFrameGeometry *fgeom,
-- int *top_left_radius,
-- int *top_right_radius,
-- int *bottom_left_radius,
-- int *bottom_right_radius)
-+ int *top_left_radius,
-+ int *top_right_radius,
-+ int *bottom_left_radius,
-+ int *bottom_right_radius)
- {
- *top_left_radius = fgeom->top_left_corner_rounded_radius;
- *top_right_radius = fgeom->top_right_corner_rounded_radius;
-@@ -165,7 +193,7 @@
-
- static int
- radius_to_width (int radius,
-- int i)
-+ int i)
- {
- float r1 = sqrt (radius) + radius;
- float r2 = r1 * r1 - (r1 - (i + 0.5)) * (r1 - (i + 0.5));
-@@ -175,52 +203,51 @@
-
- static Region
- meta_get_top_border_region (const MetaFrameGeometry *fgeom,
-- int width)
-+ int width)
- {
-- Region corners_xregion, border_xregion;
-+ Region corners_xregion;
-+ Region border_xregion;
- XRectangle xrect;
-- int top_left_radius;
-- int top_right_radius;
-- int bottom_left_radius;
-- int bottom_right_radius;
-- int w, i;
-+ int top_left_radius;
-+ int top_right_radius;
-+ int bottom_left_radius;
-+ int bottom_right_radius;
-+ int w;
-+ int i;
-
- corners_xregion = XCreateRegion ();
-
-- meta_get_corner_radius (fgeom,
-- &top_left_radius,
-- &top_right_radius,
-- &bottom_left_radius,
-- &bottom_right_radius);
-+ meta_get_corner_radius (fgeom, &top_left_radius, &top_right_radius,
-+ &bottom_left_radius, &bottom_right_radius);
-
- if (top_left_radius)
- {
-- for (i = 0; i < top_left_radius; ++i)
-- {
-- w = radius_to_width (top_left_radius, i);
--
-- xrect.x = 0;
-- xrect.y = i;
-- xrect.width = w;
-- xrect.height = 1;
-+ for (i = 0; i < top_left_radius; ++i)
-+ {
-+ w = radius_to_width (top_left_radius, i);
-+
-+ xrect.x = 0;
-+ xrect.y = i;
-+ xrect.width = w;
-+ xrect.height = 1;
-
-- XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-- }
-+ XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-+ }
- }
-
- if (top_right_radius)
- {
-- for (i = 0; i < top_right_radius; ++i)
-- {
-- w = radius_to_width (top_right_radius, i);
--
-- xrect.x = width - w;
-- xrect.y = i;
-- xrect.width = w;
-- xrect.height = 1;
-+ for (i = 0; i < top_right_radius; ++i)
-+ {
-+ w = radius_to_width (top_right_radius, i);
-+
-+ xrect.x = width - w;
-+ xrect.y = i;
-+ xrect.width = w;
-+ xrect.height = 1;
-
-- XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-- }
-+ XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-+ }
- }
-
- border_xregion = XCreateRegion ();
-@@ -241,52 +268,51 @@
-
- static Region
- meta_get_bottom_border_region (const MetaFrameGeometry *fgeom,
-- int width)
-+ int width)
- {
-- Region corners_xregion, border_xregion;
-+ Region corners_xregion;
-+ Region border_xregion;
- XRectangle xrect;
-- int top_left_radius;
-- int top_right_radius;
-- int bottom_left_radius;
-- int bottom_right_radius;
-- int w, i;
-+ int top_left_radius;
-+ int top_right_radius;
-+ int bottom_left_radius;
-+ int bottom_right_radius;
-+ int w;
-+ int i;
-
- corners_xregion = XCreateRegion ();
-
-- meta_get_corner_radius (fgeom,
-- &top_left_radius,
-- &top_right_radius,
-- &bottom_left_radius,
-- &bottom_right_radius);
-+ meta_get_corner_radius (fgeom, &top_left_radius, &top_right_radius,
-+ &bottom_left_radius, &bottom_right_radius);
-
- if (bottom_left_radius)
- {
-- for (i = 0; i < bottom_left_radius; ++i)
-- {
-- w = radius_to_width (bottom_left_radius, i);
--
-- xrect.x = 0;
-- xrect.y = fgeom->bottom_height - i - 1;
-- xrect.width = w;
-- xrect.height = 1;
-+ for (i = 0; i < bottom_left_radius; ++i)
-+ {
-+ w = radius_to_width (bottom_left_radius, i);
-+
-+ xrect.x = 0;
-+ xrect.y = fgeom->bottom_height - i - 1;
-+ xrect.width = w;
-+ xrect.height = 1;
-
-- XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-- }
-+ XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-+ }
- }
-
- if (bottom_right_radius)
- {
-- for (i = 0; i < bottom_right_radius; ++i)
-- {
-- w = radius_to_width (bottom_right_radius, i);
--
-- xrect.x = width - w;
-- xrect.y = fgeom->bottom_height - i - 1;
-- xrect.width = w;
-- xrect.height = 1;
-+ for (i = 0; i < bottom_right_radius; ++i)
-+ {
-+ w = radius_to_width (bottom_right_radius, i);
-+
-+ xrect.x = width - w;
-+ xrect.y = fgeom->bottom_height - i - 1;
-+ xrect.width = w;
-+ xrect.height = 1;
-
-- XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-- }
-+ XUnionRectWithRegion (&xrect, corners_xregion, corners_xregion);
-+ }
- }
-
- border_xregion = XCreateRegion ();
-@@ -307,16 +333,16 @@
-
- static Region
- meta_get_left_border_region (const MetaFrameGeometry *fgeom,
-- int height)
-+ int height)
- {
-- Region border_xregion;
-+ Region border_xregion;
- XRectangle xrect;
-
- border_xregion = XCreateRegion ();
-
-- xrect.x = 0;
-- xrect.y = 0;
-- xrect.width = fgeom->left_width;
-+ xrect.x = 0;
-+ xrect.y = 0;
-+ xrect.width = fgeom->left_width;
- xrect.height = height - fgeom->top_height - fgeom->bottom_height;
-
- XUnionRectWithRegion (&xrect, border_xregion, border_xregion);
-@@ -326,16 +352,16 @@
-
- static Region
- meta_get_right_border_region (const MetaFrameGeometry *fgeom,
-- int height)
-+ int height)
- {
-- Region border_xregion;
-+ Region border_xregion;
- XRectangle xrect;
-
- border_xregion = XCreateRegion ();
-
-- xrect.x = 0;
-- xrect.y = 0;
-- xrect.width = fgeom->right_width;
-+ xrect.x = 0;
-+ xrect.y = 0;
-+ xrect.width = fgeom->right_width;
- xrect.height = height - fgeom->top_height - fgeom->bottom_height;
-
- XUnionRectWithRegion (&xrect, border_xregion, border_xregion);
-@@ -348,10 +374,10 @@
- {
- if (state & IN_EVENT_WINDOW)
- {
-- if (state & PRESSED_EVENT_WINDOW)
-- return META_BUTTON_STATE_PRESSED;
-+ if (state & PRESSED_EVENT_WINDOW)
-+ return META_BUTTON_STATE_PRESSED;
-
-- return META_BUTTON_STATE_PRELIGHT;
-+ return META_BUTTON_STATE_PRELIGHT;
- }
-
- return META_BUTTON_STATE_NORMAL;
-@@ -360,271 +386,245 @@
- static MetaButtonType
- meta_function_to_type (MetaButtonFunction function)
- {
-- switch (function) {
-+ switch (function)
-+ {
- case META_BUTTON_FUNCTION_MENU:
-- return META_BUTTON_TYPE_MENU;
-+ return META_BUTTON_TYPE_MENU;
- case META_BUTTON_FUNCTION_MINIMIZE:
-- return META_BUTTON_TYPE_MINIMIZE;
-+ return META_BUTTON_TYPE_MINIMIZE;
- case META_BUTTON_FUNCTION_MAXIMIZE:
-- return META_BUTTON_TYPE_MAXIMIZE;
-+ return META_BUTTON_TYPE_MAXIMIZE;
- case META_BUTTON_FUNCTION_CLOSE:
-- return META_BUTTON_TYPE_CLOSE;
-+ return META_BUTTON_TYPE_CLOSE;
- case META_BUTTON_FUNCTION_SHADE:
-- return META_BUTTON_TYPE_SHADE;
-+ return META_BUTTON_TYPE_SHADE;
- case META_BUTTON_FUNCTION_ABOVE:
-- return META_BUTTON_TYPE_ABOVE;
-+ return META_BUTTON_TYPE_ABOVE;
- case META_BUTTON_FUNCTION_STICK:
-- return META_BUTTON_TYPE_STICK;
-+ return META_BUTTON_TYPE_STICK;
- case META_BUTTON_FUNCTION_UNSHADE:
-- return META_BUTTON_TYPE_UNSHADE;
-+ return META_BUTTON_TYPE_UNSHADE;
- case META_BUTTON_FUNCTION_UNABOVE:
-- return META_BUTTON_TYPE_UNABOVE;
-+ return META_BUTTON_TYPE_UNABOVE;
- case META_BUTTON_FUNCTION_UNSTICK:
-- return META_BUTTON_TYPE_UNSTICK;
-+ return META_BUTTON_TYPE_UNSTICK;
- default:
-- break;
-+ break;
- }
-
- return META_BUTTON_TYPE_LAST;
- }
-
- static MetaButtonState
--meta_button_state_for_button_type (decor_t *d,
-- MetaButtonType type)
-+meta_button_state_for_button_type (decor_t *d,
-+ MetaButtonType type)
- {
-- switch (type) {
-+ switch (type)
-+ {
- case META_BUTTON_TYPE_LEFT_LEFT_BACKGROUND:
-- type = meta_function_to_type (meta_button_layout.left_buttons[0]);
-- break;
-+ type = meta_function_to_type (meta_button_layout.left_buttons[0]);
-+ break;
- case META_BUTTON_TYPE_LEFT_MIDDLE_BACKGROUND:
-- type = meta_function_to_type (meta_button_layout.left_buttons[1]);
-- break;
-+ type = meta_function_to_type (meta_button_layout.left_buttons[1]);
-+ break;
- case META_BUTTON_TYPE_LEFT_RIGHT_BACKGROUND:
-- type = meta_function_to_type (meta_button_layout.left_buttons[2]);
-- break;
-+ type = meta_function_to_type (meta_button_layout.left_buttons[2]);
-+ break;
- case META_BUTTON_TYPE_RIGHT_LEFT_BACKGROUND:
-- type = meta_function_to_type (meta_button_layout.right_buttons[0]);
-- break;
-+ type = meta_function_to_type (meta_button_layout.right_buttons[0]);
-+ break;
- case META_BUTTON_TYPE_RIGHT_MIDDLE_BACKGROUND:
-- type = meta_function_to_type (meta_button_layout.right_buttons[1]);
-- break;
-+ type = meta_function_to_type (meta_button_layout.right_buttons[1]);
-+ break;
- case META_BUTTON_TYPE_RIGHT_RIGHT_BACKGROUND:
-- type = meta_function_to_type (meta_button_layout.right_buttons[2]);
-+ type = meta_function_to_type (meta_button_layout.right_buttons[2]);
- default:
-- break;
-+ break;
- }
-
-- switch (type) {
-+ switch (type)
-+ {
- case META_BUTTON_TYPE_CLOSE:
-- return meta_button_state (d->button_states[BUTTON_CLOSE]);
-+ return meta_button_state (d->button_states[BUTTON_CLOSE]);
- case META_BUTTON_TYPE_MAXIMIZE:
-- return meta_button_state (d->button_states[BUTTON_MAX]);
-+ return meta_button_state (d->button_states[BUTTON_MAX]);
- case META_BUTTON_TYPE_MINIMIZE:
-- return meta_button_state (d->button_states[BUTTON_MIN]);
-+ return meta_button_state (d->button_states[BUTTON_MIN]);
- case META_BUTTON_TYPE_MENU:
-- return meta_button_state (d->button_states[BUTTON_MENU]);
-+ return meta_button_state (d->button_states[BUTTON_MENU]);
- case META_BUTTON_TYPE_SHADE:
-- return meta_button_state (d->button_states[BUTTON_SHADE]);
-+ return meta_button_state (d->button_states[BUTTON_SHADE]);
- case META_BUTTON_TYPE_ABOVE:
-- return meta_button_state (d->button_states[BUTTON_ABOVE]);
-+ return meta_button_state (d->button_states[BUTTON_ABOVE]);
- case META_BUTTON_TYPE_STICK:
-- return meta_button_state (d->button_states[BUTTON_STICK]);
-+ return meta_button_state (d->button_states[BUTTON_STICK]);
- case META_BUTTON_TYPE_UNSHADE:
-- return meta_button_state (d->button_states[BUTTON_UNSHADE]);
-+ return meta_button_state (d->button_states[BUTTON_UNSHADE]);
- case META_BUTTON_TYPE_UNABOVE:
-- return meta_button_state (d->button_states[BUTTON_UNABOVE]);
-+ return meta_button_state (d->button_states[BUTTON_UNABOVE]);
- case META_BUTTON_TYPE_UNSTICK:
-- return meta_button_state (d->button_states[BUTTON_UNSTICK]);
-+ return meta_button_state (d->button_states[BUTTON_UNSTICK]);
- default:
-- break;
-+ break;
- }
-
- return META_BUTTON_STATE_NORMAL;
- }
-
--void
--meta_get_decoration_geometry (decor_t *d,
-- MetaTheme *theme,
-- MetaFrameFlags *flags,
-- MetaFrameGeometry *fgeom,
-- MetaButtonLayout *button_layout,
-- MetaFrameType frame_type,
-- GdkRectangle *clip)
-+static void
-+meta_get_decoration_geometry (decor_t *d,
-+ MetaTheme *theme,
-+ MetaFrameFlags *flags,
-+ MetaFrameGeometry *fgeom,
-+ MetaButtonLayout *button_layout,
-+ MetaFrameType frame_type)
- {
--#ifdef HAVE_METACITY_3_14_0
-- MetaFrameBorders borders;
--#endif
-- gint left_width, right_width, top_height, bottom_height;
-+ gint client_width;
-+ gint client_height;
-
- if (!(frame_type < META_FRAME_TYPE_LAST))
-- frame_type = META_FRAME_TYPE_NORMAL;
-+ frame_type = META_FRAME_TYPE_NORMAL;
-
- if (meta_button_layout_set)
- {
-- *button_layout = meta_button_layout;
-+ *button_layout = meta_button_layout;
- }
- else
- {
-- gint i;
-+ gint i;
-
-- button_layout->left_buttons[0] = META_BUTTON_FUNCTION_MENU;
-+ button_layout->left_buttons[0] = META_BUTTON_FUNCTION_MENU;
-
-- for (i = 1; i < MAX_BUTTONS_PER_CORNER; ++i)
-- button_layout->left_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+ for (i = 1; i < MAX_BUTTONS_PER_CORNER; ++i)
-+ button_layout->left_buttons[i] = META_BUTTON_FUNCTION_LAST;
-
-- button_layout->right_buttons[0] = META_BUTTON_FUNCTION_MINIMIZE;
-- button_layout->right_buttons[1] = META_BUTTON_FUNCTION_MAXIMIZE;
-- button_layout->right_buttons[2] = META_BUTTON_FUNCTION_CLOSE;
-+ button_layout->right_buttons[0] = META_BUTTON_FUNCTION_MINIMIZE;
-+ button_layout->right_buttons[1] = META_BUTTON_FUNCTION_MAXIMIZE;
-+ button_layout->right_buttons[2] = META_BUTTON_FUNCTION_CLOSE;
-
-- for (i = 3; i < MAX_BUTTONS_PER_CORNER; ++i)
-- button_layout->right_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+ for (i = 3; i < MAX_BUTTONS_PER_CORNER; ++i)
-+ button_layout->right_buttons[i] = META_BUTTON_FUNCTION_LAST;
- }
-
- *flags = 0;
-
- if (d->actions & WNCK_WINDOW_ACTION_CLOSE)
-- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_DELETE;
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_DELETE;
-
- if (d->actions & WNCK_WINDOW_ACTION_MINIMIZE)
-- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MINIMIZE;
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MINIMIZE;
-
- if (d->actions & WNCK_WINDOW_ACTION_MAXIMIZE)
-- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MAXIMIZE;
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MAXIMIZE;
-
- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MENU;
-
- if (d->actions & WNCK_WINDOW_ACTION_RESIZE)
- {
-- if (!(d->state & WNCK_WINDOW_STATE_MAXIMIZED_VERTICALLY))
-- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_VERTICAL_RESIZE;
-- if (!(d->state & WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY))
-- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_HORIZONTAL_RESIZE;
-+ if (!(d->state & WNCK_WINDOW_STATE_MAXIMIZED_VERTICALLY))
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_VERTICAL_RESIZE;
-+ if (!(d->state & WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY))
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_HORIZONTAL_RESIZE;
- }
-
- if (d->actions & WNCK_WINDOW_ACTION_MOVE)
-- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MOVE;
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MOVE;
-
- if (d->actions & WNCK_WINDOW_ACTION_MAXIMIZE)
-- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MAXIMIZE;
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_MAXIMIZE;
-
- if (d->actions & WNCK_WINDOW_ACTION_SHADE)
-- *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_SHADE;
-+ *flags |= (MetaFrameFlags ) META_FRAME_ALLOWS_SHADE;
-
- if (d->active)
-- *flags |= (MetaFrameFlags ) META_FRAME_HAS_FOCUS;
-+ *flags |= (MetaFrameFlags ) META_FRAME_HAS_FOCUS;
-
- if ((d->state & META_MAXIMIZED) == META_MAXIMIZED)
-- *flags |= (MetaFrameFlags ) META_FRAME_MAXIMIZED;
-+ *flags |= (MetaFrameFlags ) META_FRAME_MAXIMIZED;
-
- if (d->state & WNCK_WINDOW_STATE_STICKY)
-- *flags |= (MetaFrameFlags ) META_FRAME_STUCK;
-+ *flags |= (MetaFrameFlags ) META_FRAME_STUCK;
-
- if (d->state & WNCK_WINDOW_STATE_FULLSCREEN)
-- *flags |= (MetaFrameFlags ) META_FRAME_FULLSCREEN;
-+ *flags |= (MetaFrameFlags ) META_FRAME_FULLSCREEN;
-
- if (d->state & WNCK_WINDOW_STATE_SHADED)
-- *flags |= (MetaFrameFlags ) META_FRAME_SHADED;
-+ *flags |= (MetaFrameFlags ) META_FRAME_SHADED;
-
- if (d->state & WNCK_WINDOW_STATE_ABOVE)
-- *flags |= (MetaFrameFlags ) META_FRAME_ABOVE;
--
--#ifdef HAVE_METACITY_3_14_0
-- meta_theme_get_frame_borders (theme,
-- frame_type,
-- d->frame->text_height,
-- *flags,
-- &borders);
-- top_height = borders.visible.top;
-- bottom_height = borders.visible.bottom;
-- left_width = borders.visible.left;
-- right_width = borders.visible.right;
--#else
-- meta_theme_get_frame_borders (theme,
-- frame_type,
-- d->frame->text_height,
-- *flags,
-- &top_height,
-- &bottom_height,
-- &left_width,
-- &right_width);
--#endif
-+ *flags |= (MetaFrameFlags ) META_FRAME_ABOVE;
-
-- clip->x = d->context->left_space - left_width;
-- clip->y = d->context->top_space - top_height;
--
-- clip->width = d->border_layout.top.x2 - d->border_layout.top.x1;
-- clip->width -= d->context->right_space + d->context->left_space;
-+ client_width = d->border_layout.top.x2 - d->border_layout.top.x1;
-+ client_width -= d->context->right_space + d->context->left_space;
-
- if (d->border_layout.rotation)
-- clip->height = d->border_layout.left.x2 - d->border_layout.left.x1;
-+ client_height = d->border_layout.left.x2 - d->border_layout.left.x1;
- else
-- clip->height = d->border_layout.left.y2 - d->border_layout.left.y1;
--
-- meta_theme_calc_geometry (theme,
-- frame_type,
-- d->frame->text_height,
-- *flags,
-- clip->width,
-- clip->height,
-- button_layout,
-- fgeom);
-+ client_height = d->border_layout.left.y2 - d->border_layout.left.y1;
-
-- clip->width += left_width + right_width;
-- clip->height += top_height + bottom_height;
-+ meta_theme_calc_geometry (theme, frame_type, d->frame->text_height,
-+ *flags, client_width, client_height,
-+ button_layout, fgeom);
- }
-
- void
- meta_draw_window_decoration (decor_t *d)
- {
-- Display *xdisplay =
-- GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
-+ GdkDisplay *display;
-+ Display *xdisplay;
- cairo_surface_t *surface;
-- Picture src;
-- MetaButtonState button_states [META_BUTTON_TYPE_LAST];
-- MetaButtonLayout button_layout;
-+ Picture src;
-+ MetaButtonState button_states [META_BUTTON_TYPE_LAST];
-+ MetaButtonLayout button_layout;
- MetaFrameGeometry fgeom;
-- MetaFrameFlags flags;
-- MetaFrameType frame_type;
-- MetaTheme *theme;
-+ MetaFrameFlags flags;
-+ MetaFrameType frame_type;
-+ MetaTheme *theme;
- GtkStyleContext *context;
-- cairo_t *cr;
-- gint i;
-- GdkRectangle clip;
-- Region top_region = NULL;
-- Region bottom_region = NULL;
-- Region left_region = NULL;
-- Region right_region = NULL;
-- gdouble meta_active_opacity, meta_inactive_opacity;
-- gboolean meta_active_shade_opacity, meta_inactive_shade_opacity;
-+ cairo_t *cr;
-+ gint i;
-+ Region top_region;
-+ Region bottom_region;
-+ Region left_region;
-+ Region right_region;
-+ gdouble meta_active_opacity;
-+ gdouble meta_inactive_opacity;
-+ gboolean meta_active_shade_opacity;
-+ gboolean meta_inactive_shade_opacity;
-+ double alpha;
-+ gboolean shade_alpha;
-+ MetaFrameStyle *frame_style;
-+ GtkWidget *style_window;
-+ GdkRGBA bg_rgba;
-+
-+ if (!d->surface || !d->picture)
-+ return;
-+
-+ display = gdk_display_get_default ();
-+ xdisplay = gdk_x11_display_get_xdisplay (display);
-+
-+ top_region = NULL;
-+ bottom_region = NULL;
-+ left_region = NULL;
-+ right_region = NULL;
-
- g_object_get (settings, "metacity-active-opacity", &meta_active_opacity, NULL);
- g_object_get (settings, "metacity-inactive-opacity", &meta_inactive_opacity, NULL);
- g_object_get (settings, "metacity-active-shade-opacity", &meta_active_shade_opacity, NULL);
- g_object_get (settings, "metacity-inactive-shade-opacity", &meta_inactive_shade_opacity, NULL);
-
-- double alpha = (d->active) ? meta_active_opacity : meta_inactive_opacity;
-- gboolean shade_alpha = (d->active) ? meta_active_shade_opacity :
-- meta_inactive_shade_opacity;
-- MetaFrameStyle *frame_style;
-- GtkWidget *style_window;
-- GdkRGBA bg_rgba;
--
-- if (!d->surface || !d->picture)
-- return;
-+ alpha = (d->active) ? meta_active_opacity : meta_inactive_opacity;
-+ shade_alpha = (d->active) ? meta_active_shade_opacity : meta_inactive_shade_opacity;
-
- if (decoration_alpha == 1.0)
-- alpha = 1.0;
-+ alpha = 1.0;
-
- if (cairo_xlib_surface_get_depth (d->surface) == 32)
-- {
-- context = gtk_widget_get_style_context (d->frame->style_window_rgba);
-- style_window = d->frame->style_window_rgba;
-- }
-+ style_window = d->frame->style_window_rgba;
- else
-- {
-- context = gtk_widget_get_style_context (d->frame->style_window_rgb);
-- style_window = d->frame->style_window_rgb;
-- }
-+ style_window = d->frame->style_window_rgb;
-+
-+ context = gtk_widget_get_style_context (style_window);
-
- cr = cairo_create (d->buffer_surface ? d->buffer_surface : d->surface);
-
-@@ -635,31 +635,28 @@
- frame_type = meta_frame_type_from_string (d->frame->type);
-
- if (frame_type == META_FRAME_TYPE_LAST)
-- frame_type = META_FRAME_TYPE_NORMAL;
-+ frame_type = META_FRAME_TYPE_NORMAL;
-
- meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout,
-- frame_type, &clip);
-+ frame_type);
-
- if ((d->prop_xid || !d->buffer_surface) && !d->frame_window)
-- draw_shadow_background (d, cr, d->shadow, d->context);
-+ draw_shadow_background (d, cr, d->shadow, d->context);
-
- for (i = 0; i < META_BUTTON_TYPE_LAST; ++i)
-- button_states[i] = meta_button_state_for_button_type (d, i);
-+ button_states[i] = meta_button_state_for_button_type (d, i);
-
-- frame_style = meta_theme_get_frame_style (theme,
-- frame_type,
-- flags);
-+ frame_style = meta_theme_get_frame_style (theme, frame_type, flags);
-
- gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &bg_rgba);
- bg_rgba.alpha = 1.0;
-
- if (frame_style->window_background_color)
- {
-- meta_color_spec_render (frame_style->window_background_color,
-- gtk_widget_get_style_context (style_window),
-- &bg_rgba);
-+ meta_color_spec_render (frame_style->window_background_color,
-+ context, &bg_rgba);
-
-- bg_rgba.alpha = frame_style->window_background_alpha / 255.0;
-+ bg_rgba.alpha = frame_style->window_background_alpha / 255.0;
- }
-
- /* Draw something that will be almost invisible to user. This is hacky way
-@@ -671,286 +668,290 @@
-
- cairo_destroy (cr);
-
-- if (d->frame_window)
-- surface = create_surface (clip.width, clip.height, d->frame->style_window_rgb);
-- else
-- surface = create_surface (clip.width, clip.height, d->frame->style_window_rgba);
--
-- cr = cairo_create (surface);
-- gdk_cairo_set_source_rgba (cr, &bg_rgba);
-- cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
-+ if (d->frame_window)
-+ surface = create_surface (fgeom.width, fgeom.height, d->frame->style_window_rgb);
-+ else
-+ surface = create_surface (fgeom.width, fgeom.height, d->frame->style_window_rgba);
-+
-+ cr = cairo_create (surface);
-+ gdk_cairo_set_source_rgba (cr, &bg_rgba);
-+ cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
-
-- src = XRenderCreatePicture (xdisplay, cairo_xlib_surface_get_drawable (surface),
-+ src = XRenderCreatePicture (xdisplay, cairo_xlib_surface_get_drawable (surface),
- get_format_for_surface (d, surface), 0, NULL);
-
- cairo_paint (cr);
-- meta_theme_draw_frame (theme,
-- style_window,
-- cr,
-- frame_type,
-- flags,
-- clip.width - fgeom.left_width - fgeom.right_width,
-- clip.height - fgeom.top_height - fgeom.bottom_height,
-- d->layout,
-- d->frame->text_height,
-- &button_layout,
-- button_states,
-- d->icon_pixbuf,
-- NULL);
-+ meta_theme_draw_frame (theme, style_window, cr, frame_type, flags,
-+ fgeom.width - fgeom.left_width - fgeom.right_width,
-+ fgeom.height - fgeom.top_height - fgeom.bottom_height,
-+ d->layout, d->frame->text_height, &button_layout,
-+ button_states, d->icon_pixbuf, NULL);
-
- if (fgeom.top_height)
-- {
-- top_region = meta_get_top_border_region (&fgeom, clip.width);
-+ {
-+ top_region = meta_get_top_border_region (&fgeom, fgeom.width);
-+
-+ decor_blend_border_picture (xdisplay, d->context, src,
-+ 0, 0,
-+ d->picture, &d->border_layout,
-+ BORDER_TOP, top_region,
-+ alpha * 0xffff, shade_alpha, 0);
-+ }
-
-- decor_blend_border_picture (xdisplay,
-- d->context,
-- src,
-- 0, 0,
-- d->picture,
-- &d->border_layout,
-- BORDER_TOP,
-- top_region,
-- alpha * 0xffff,
-- shade_alpha,
-- 0);
-- }
--
-- if (fgeom.bottom_height)
-- {
-- bottom_region = meta_get_bottom_border_region (&fgeom, clip.width);
--
-- decor_blend_border_picture (xdisplay,
-- d->context,
-- src,
-- 0, clip.height - fgeom.bottom_height,
-- d->picture,
-- &d->border_layout,
-- BORDER_BOTTOM,
-- bottom_region,
-- alpha * 0xffff,
-- shade_alpha,
-- 0);
--
-- }
--
-- if (fgeom.left_width)
-- {
-- left_region = meta_get_left_border_region (&fgeom, clip.height);
--
-- decor_blend_border_picture (xdisplay,
-- d->context,
-- src,
-- 0, fgeom.top_height,
-- d->picture,
-- &d->border_layout,
-- BORDER_LEFT,
-- left_region,
-- alpha * 0xffff,
-- shade_alpha,
-- 0);
-- }
--
-- if (fgeom.right_width)
-- {
-- right_region = meta_get_right_border_region (&fgeom, clip.height);
--
-- decor_blend_border_picture (xdisplay,
-- d->context,
-- src,
-- clip.width - fgeom.right_width, fgeom.top_height,
-- d->picture,
-- &d->border_layout,
-- BORDER_RIGHT,
-- right_region,
-- alpha * 0xffff,
-- shade_alpha,
-- 0);
-- }
--
-- cairo_destroy (cr);
-- cairo_surface_destroy (surface);
-- XRenderFreePicture (xdisplay, src);
-+ if (fgeom.bottom_height)
-+ {
-+ bottom_region = meta_get_bottom_border_region (&fgeom, fgeom.width);
-+
-+ decor_blend_border_picture (xdisplay, d->context, src,
-+ 0, fgeom.height - fgeom.bottom_height,
-+ d->picture, &d->border_layout,
-+ BORDER_BOTTOM, bottom_region,
-+ alpha * 0xffff, shade_alpha, 0);
-+ }
-+
-+ if (fgeom.left_width)
-+ {
-+ left_region = meta_get_left_border_region (&fgeom, fgeom.height);
-+
-+ decor_blend_border_picture (xdisplay, d->context, src,
-+ 0, fgeom.top_height,
-+ d->picture, &d->border_layout,
-+ BORDER_LEFT, left_region,
-+ alpha * 0xffff, shade_alpha, 0);
-+ }
-+
-+ if (fgeom.right_width)
-+ {
-+ right_region = meta_get_right_border_region (&fgeom, fgeom.height);
-+
-+ decor_blend_border_picture (xdisplay, d->context, src,
-+ fgeom.width - fgeom.right_width, fgeom.top_height,
-+ d->picture, &d->border_layout,
-+ BORDER_RIGHT, right_region,
-+ alpha * 0xffff, shade_alpha, 0);
-+ }
-+
-+ cairo_destroy (cr);
-+ cairo_surface_destroy (surface);
-+ XRenderFreePicture (xdisplay, src);
-
- copy_to_front_buffer (d);
-
- if (d->frame_window)
- {
-- GdkWindow *gdk_frame_window = gtk_widget_get_window (d->decor_window);
-- GdkPixbuf *pixbuf = gdk_pixbuf_get_from_surface (d->surface, 0, 0, d->width, d->height);
-+ GdkWindow *gdk_frame_window;
-+ GdkPixbuf *pixbuf;
-+
-+ gdk_frame_window = gtk_widget_get_window (d->decor_window);
-
-- gtk_image_set_from_pixbuf (GTK_IMAGE (d->decor_image), pixbuf);
-- g_object_unref (pixbuf);
-+ pixbuf = gdk_pixbuf_get_from_surface (d->surface, 0, 0, d->width, d->height);
-+ gtk_image_set_from_pixbuf (GTK_IMAGE (d->decor_image), pixbuf);
-+ g_object_unref (pixbuf);
-+
-+ gdk_window_move_resize (gdk_frame_window,
-+ d->context->left_corner_space - 1,
-+ d->context->top_corner_space - 1,
-+ d->width,
-+ d->height);
-
-- gtk_window_resize (GTK_WINDOW (d->decor_window), d->width, d->height);
-- gdk_window_move (gdk_frame_window,
-- d->context->left_corner_space - 1,
-- d->context->top_corner_space - 1);
-- gdk_window_lower (gdk_frame_window);
-+ gdk_window_lower (gdk_frame_window);
- }
-
- if (d->prop_xid)
- {
-- /* translate from frame to client window space */
-- if (top_region)
-- XOffsetRegion (top_region, -fgeom.left_width, -fgeom.top_height);
-- if (bottom_region)
-- XOffsetRegion (bottom_region, -fgeom.left_width, 0);
-- if (left_region)
-- XOffsetRegion (left_region, -fgeom.left_width, 0);
--
-- decor_update_meta_window_property (d, theme, flags,
-- top_region,
-- bottom_region,
-- left_region,
-- right_region);
-- d->prop_xid = 0;
-+ /* translate from frame to client window space */
-+ if (top_region)
-+ XOffsetRegion (top_region, -fgeom.left_width, -fgeom.top_height);
-+ if (bottom_region)
-+ XOffsetRegion (bottom_region, -fgeom.left_width, 0);
-+ if (left_region)
-+ XOffsetRegion (left_region, -fgeom.left_width, 0);
-+
-+ decor_update_meta_window_property (d, theme, flags,
-+ top_region, bottom_region,
-+ left_region, right_region);
-+
-+ d->prop_xid = 0;
- }
-
- if (top_region)
-- XDestroyRegion (top_region);
-+ XDestroyRegion (top_region);
- if (bottom_region)
-- XDestroyRegion (bottom_region);
-+ XDestroyRegion (bottom_region);
- if (left_region)
-- XDestroyRegion (left_region);
-+ XDestroyRegion (left_region);
- if (right_region)
-- XDestroyRegion (right_region);
-+ XDestroyRegion (right_region);
- }
-
--void
-+static void
- meta_calc_button_size (decor_t *d)
- {
-+ MetaTheme *theme;
-+ MetaFrameType frame_type;
-+ MetaFrameFlags flags;
-+ MetaFrameGeometry fgeom;
-+ MetaButtonLayout button_layout;
-+ MetaFrameBorders borders;
-+ gint mutter_draggable_border_width;
- gint i, min_x, x, y, w, h, width;
-
-+ if (!d->context)
-+ {
-+ d->button_width = 0;
-+ return;
-+ }
-+
-+ theme = meta_theme_get_current ();
-+
-+ frame_type = meta_frame_type_from_string (d->frame->type);
-+ if (!(frame_type < META_FRAME_TYPE_LAST))
-+ frame_type = META_FRAME_TYPE_NORMAL;
-+
-+ meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout,
-+ frame_type);
-+ meta_theme_get_frame_borders (theme, frame_type, d->frame->text_height,
-+ flags, &borders);
-+
-+ mutter_draggable_border_width = 0;
-+ g_object_get (settings, "draggable-border-width", &mutter_draggable_border_width, NULL);
-+
- width = d->border_layout.top.x2 - d->border_layout.top.x1 -
-- d->context->left_space - d->context->right_space;
-+ d->context->left_space - d->context->right_space +
-+ borders.visible.left + borders.visible.right;
-+
-+ if (flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE)
-+ width += mutter_draggable_border_width;
-+
- min_x = width;
-
- for (i = 0; i < 3; ++i)
- {
-- static guint button_actions[3] = {
-- WNCK_WINDOW_ACTION_CLOSE,
-- WNCK_WINDOW_ACTION_MAXIMIZE,
-- WNCK_WINDOW_ACTION_MINIMIZE
-- };
--
-- if (d->actions & button_actions[i])
-- {
-- if (meta_get_button_position (d, i, width, 256,
-- &x, &y, &w, &h))
-- {
-- if (x > width / 2 && x < min_x)
-- min_x = x;
-- }
-- }
-+ static guint button_actions[3] = {
-+ WNCK_WINDOW_ACTION_CLOSE,
-+ WNCK_WINDOW_ACTION_MAXIMIZE,
-+ WNCK_WINDOW_ACTION_MINIMIZE
-+ };
-+
-+ if (d->actions & button_actions[i])
-+ {
-+ if (meta_get_button_position (d, i, width, 256, &x, &y, &w, &h))
-+ {
-+ if (x > width / 2 && x < min_x)
-+ min_x = x;
-+ }
-+ }
- }
-
-- d->button_width = width - min_x + 6;
-+ d->button_width = width - min_x;
- }
-
--gboolean
--meta_get_button_position (decor_t *d,
-- gint i,
-- gint width,
-- gint height,
-- gint *x,
-- gint *y,
-- gint *w,
-- gint *h)
-+static MetaButtonFunction
-+button_to_meta_button_function (gint i)
- {
-- MetaButtonLayout button_layout;
-- MetaFrameGeometry fgeom;
-- MetaFrameFlags flags;
-- MetaTheme *theme;
--
-- GdkRectangle clip;
-+ switch (i)
-+ {
-+ case BUTTON_MENU:
-+ return META_BUTTON_FUNCTION_MENU;
-+ case BUTTON_MIN:
-+ return META_BUTTON_FUNCTION_MINIMIZE;
-+ case BUTTON_MAX:
-+ return META_BUTTON_FUNCTION_MAXIMIZE;
-+ case BUTTON_CLOSE:
-+ return META_BUTTON_FUNCTION_CLOSE;
-+ case BUTTON_SHADE:
-+ return META_BUTTON_FUNCTION_SHADE;
-+ case BUTTON_ABOVE:
-+ return META_BUTTON_FUNCTION_ABOVE;
-+ case BUTTON_STICK:
-+ return META_BUTTON_FUNCTION_STICK;
-+ case BUTTON_UNSHADE:
-+ return META_BUTTON_FUNCTION_UNSHADE;
-+ case BUTTON_UNABOVE:
-+ return META_BUTTON_FUNCTION_UNABOVE;
-+ case BUTTON_UNSTICK:
-+ return META_BUTTON_FUNCTION_UNSTICK;
-+ default:
-+ break;
-+ }
-
-- MetaButtonSpace *space;
-+ return META_BUTTON_FUNCTION_LAST;
-+}
-
-- gint mutter_draggable_border_width = 0;
-+gboolean
-+meta_get_button_position (decor_t *d,
-+ gint i,
-+ gint width,
-+ gint height,
-+ gint *x,
-+ gint *y,
-+ gint *w,
-+ gint *h)
-+{
-+ MetaButtonLayout button_layout;
-+ MetaFrameGeometry fgeom;
-+ MetaFrameFlags flags;
-+ MetaTheme *theme;
-+ MetaButtonFunction button_function;
-+ MetaButtonSpace *space;
-+ gint mutter_draggable_border_width;
-
-+ mutter_draggable_border_width = 0;
- g_object_get (settings, "draggable-border-width", &mutter_draggable_border_width, NULL);
-
- if (!d->context)
- {
-- /* undecorated windows implicitly have no buttons */
-- return FALSE;
-+ /* undecorated windows implicitly have no buttons */
-+ return FALSE;
- }
-
- theme = meta_theme_get_current ();
-
- meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout,
-- meta_frame_type_from_string (d->frame->type),
-- &clip);
-+ meta_frame_type_from_string (d->frame->type));
-
-- switch (i) {
-- case BUTTON_MENU:
-- if (!meta_button_present (&button_layout, META_BUTTON_FUNCTION_MENU))
-- return FALSE;
-+ button_function = button_to_meta_button_function (i);
-+ if (!meta_button_present (&button_layout, button_function))
-+ return FALSE;
-
-- space = &fgeom.menu_rect;
-- break;
-+ switch (i)
-+ {
-+ case BUTTON_MENU:
-+ space = &fgeom.menu_rect;
-+ break;
- case BUTTON_MIN:
-- if (!meta_button_present (&button_layout,
-- META_BUTTON_FUNCTION_MINIMIZE))
-- return FALSE;
--
-- space = &fgeom.min_rect;
-- break;
-+ space = &fgeom.min_rect;
-+ break;
- case BUTTON_MAX:
-- if (!meta_button_present (&button_layout,
-- META_BUTTON_FUNCTION_MAXIMIZE))
-- return FALSE;
--
-- space = &fgeom.max_rect;
-- break;
-+ space = &fgeom.max_rect;
-+ break;
- case BUTTON_CLOSE:
-- if (!meta_button_present (&button_layout, META_BUTTON_FUNCTION_CLOSE))
-- return FALSE;
--
-- space = &fgeom.close_rect;
-- break;
-+ space = &fgeom.close_rect;
-+ break;
- case BUTTON_SHADE:
-- if (!meta_button_present (&button_layout, META_BUTTON_FUNCTION_SHADE))
-- return FALSE;
--
-- space = &fgeom.shade_rect;
-- break;
-+ space = &fgeom.shade_rect;
-+ break;
- case BUTTON_ABOVE:
-- if (!meta_button_present (&button_layout, META_BUTTON_FUNCTION_ABOVE))
-- return FALSE;
--
-- space = &fgeom.above_rect;
-- break;
-+ space = &fgeom.above_rect;
-+ break;
- case BUTTON_STICK:
-- if (!meta_button_present (&button_layout, META_BUTTON_FUNCTION_STICK))
-- return FALSE;
--
-- space = &fgeom.stick_rect;
-- break;
-+ space = &fgeom.stick_rect;
-+ break;
- case BUTTON_UNSHADE:
-- if (!meta_button_present (&button_layout, META_BUTTON_FUNCTION_UNSHADE))
-- return FALSE;
--
-- space = &fgeom.unshade_rect;
-- break;
-+ space = &fgeom.unshade_rect;
-+ break;
- case BUTTON_UNABOVE:
-- if (!meta_button_present (&button_layout, META_BUTTON_FUNCTION_UNABOVE))
-- return FALSE;
--
-- space = &fgeom.unabove_rect;
-- break;
-+ space = &fgeom.unabove_rect;
-+ break;
- case BUTTON_UNSTICK:
-- if (!meta_button_present (&button_layout, META_BUTTON_FUNCTION_UNSTICK))
-- return FALSE;
--
-- space = &fgeom.unstick_rect;
-- break;
-+ space = &fgeom.unstick_rect;
-+ break;
- default:
-- return FALSE;
-+ return FALSE;
- }
-
- if (!space->clickable.width && !space->clickable.height)
-- return FALSE;
-+ return FALSE;
-
- *x = space->clickable.x;
- *y = space->clickable.y;
-@@ -959,19 +960,15 @@
-
- if (d->frame_window)
- {
-- *x += d->frame->win_extents.left + 4;
-- *y += d->frame->win_extents.top + 2;
-+ *x += d->frame->win_extents.left + 4;
-+ *y += d->frame->win_extents.top + 2;
- }
-
- if (flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE)
-- {
-- *x += mutter_draggable_border_width;
-- }
-+ *x += mutter_draggable_border_width;
-
- if (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE)
-- {
-- *y += mutter_draggable_border_width;
-- }
-+ *y += mutter_draggable_border_width;
-
- return TRUE;
- }
-@@ -979,14 +976,16 @@
- gfloat
- meta_get_title_scale (decor_frame_t *frame)
- {
-- MetaTheme *theme = meta_theme_get_current ();
-- MetaFrameType type;
-- MetaFrameFlags flags = 0xc33; /* fixme */
-+ MetaTheme *theme;
-+ MetaFrameType type;
-+ MetaFrameFlags flags;
-
-+ theme = meta_theme_get_current ();
- type = meta_frame_type_from_string (frame->type);
-+ flags = 0xc33; /* fixme */
-
- if (type == META_FRAME_TYPE_LAST)
-- return 1.0f;
-+ return 1.0f;
-
- gfloat scale = meta_theme_get_title_scale (theme, type, flags);
-
-@@ -995,381 +994,367 @@
-
- gboolean
- meta_calc_decoration_size (decor_t *d,
-- gint w,
-- gint h,
-- gint name_width,
-- gint *width,
-- gint *height)
-+ gint w,
-+ gint h,
-+ gint name_width,
-+ gint *width,
-+ gint *height)
- {
-- decor_layout_t layout;
-+ decor_layout_t layout;
- decor_context_t *context;
-- decor_shadow_t *shadow;
-+ decor_shadow_t *shadow;
-
- if (!d->decorated)
-- return FALSE;
-+ return FALSE;
-
- if ((d->state & META_MAXIMIZED) == META_MAXIMIZED)
- {
-- if (!d->frame_window)
-- {
-- if (d->active)
-- {
-- context = &d->frame->max_window_context_active;
-- shadow = d->frame->max_border_shadow_active;
-- }
-- else
-- {
-- context = &d->frame->max_window_context_inactive;
-- shadow = d->frame->max_border_shadow_inactive;
-- }
-- }
-- else
-- {
-- context = &d->frame->max_window_context_no_shadow;
-- shadow = d->frame->max_border_no_shadow;
-- }
-+ if (!d->frame_window)
-+ {
-+ if (d->active)
-+ {
-+ context = &d->frame->max_window_context_active;
-+ shadow = d->frame->max_border_shadow_active;
-+ }
-+ else
-+ {
-+ context = &d->frame->max_window_context_inactive;
-+ shadow = d->frame->max_border_shadow_inactive;
-+ }
-+ }
-+ else
-+ {
-+ context = &d->frame->max_window_context_no_shadow;
-+ shadow = d->frame->max_border_no_shadow;
-+ }
- }
- else
- {
-- if (!d->frame_window)
-- {
-- if (d->active)
-- {
-- context = &d->frame->window_context_active;
-- shadow = d->frame->border_shadow_active;
-- }
-- else
-- {
-- context = &d->frame->window_context_inactive;
-- shadow = d->frame->border_shadow_inactive;
-- }
-- }
-- else
-- {
-- context = &d->frame->window_context_no_shadow;
-- shadow = d->frame->border_no_shadow;
-- }
-+ if (!d->frame_window)
-+ {
-+ if (d->active)
-+ {
-+ context = &d->frame->window_context_active;
-+ shadow = d->frame->border_shadow_active;
-+ }
-+ else
-+ {
-+ context = &d->frame->window_context_inactive;
-+ shadow = d->frame->border_shadow_inactive;
-+ }
-+ }
-+ else
-+ {
-+ context = &d->frame->window_context_no_shadow;
-+ shadow = d->frame->border_no_shadow;
-+ }
- }
-
- if (!d->frame_window)
- {
-- decor_get_best_layout (context, w, h, &layout);
-+ decor_get_best_layout (context, w, h, &layout);
-+
-+ if (context != d->context || memcmp (&layout, &d->border_layout, sizeof (layout)))
-+ {
-+ *width = layout.width;
-+ *height = layout.height;
-
-- if (context != d->context ||
-- memcmp (&layout, &d->border_layout, sizeof (layout)))
-- {
-- *width = layout.width;
-- *height = layout.height;
--
-- d->border_layout = layout;
-- d->context = context;
-- d->shadow = shadow;
-+ d->border_layout = layout;
-+ d->context = context;
-+ d->shadow = shadow;
-
-- meta_calc_button_size (d);
-+ meta_calc_button_size (d);
-
-- return TRUE;
-- }
-+ return TRUE;
-+ }
- }
- else
- {
-- if ((d->state & META_MAXIMIZED) == META_MAXIMIZED)
-- decor_get_default_layout (context, d->client_width,
-- d->client_height - d->frame->titlebar_height,
-- &layout);
-- else
-- decor_get_default_layout (context, d->client_width,
-- d->client_height, &layout);
--
-- *width = layout.width;
-- *height = layout.height;
--
-- d->border_layout = layout;
-- d->shadow = shadow;
-- d->context = context;
-+ if ((d->state & META_MAXIMIZED) == META_MAXIMIZED)
-+ decor_get_default_layout (context, d->client_width,
-+ d->client_height - d->frame->titlebar_height,
-+ &layout);
-+ else
-+ decor_get_default_layout (context, d->client_width,
-+ d->client_height, &layout);
-+
-+ *width = layout.width;
-+ *height = layout.height;
-+
-+ d->border_layout = layout;
-+ d->shadow = shadow;
-+ d->context = context;
-
-- meta_calc_button_size (d);
-+ meta_calc_button_size (d);
-
-- return TRUE;
-+ return TRUE;
- }
-
- return FALSE;
- }
-
--gboolean
--meta_button_present (MetaButtonLayout *button_layout,
-- MetaButtonFunction function)
--{
-- int i;
--
-- for (i = 0; i < MAX_BUTTONS_PER_CORNER; ++i)
-- if (button_layout->left_buttons[i] == function)
-- return TRUE;
--
-- for (i = 0; i < MAX_BUTTONS_PER_CORNER; ++i)
-- if (button_layout->right_buttons[i] == function)
-- return TRUE;
--
-- return FALSE;
--}
--
- #define TOP_RESIZE_HEIGHT 2
- #define RESIZE_EXTENDS 15
-
- void
- meta_get_event_window_position (decor_t *d,
-- gint i,
-- gint j,
-- gint width,
-- gint height,
-- gint *x,
-- gint *y,
-- gint *w,
-- gint *h)
-+ gint i,
-+ gint j,
-+ gint width,
-+ gint height,
-+ gint *x,
-+ gint *y,
-+ gint *w,
-+ gint *h)
- {
-- MetaButtonLayout button_layout;
-+ MetaButtonLayout button_layout;
- MetaFrameGeometry fgeom;
-- MetaFrameFlags flags;
-- MetaTheme *theme;
-- GdkRectangle clip;
--
-- gint mutter_draggable_border_width = 0;
-+ MetaFrameFlags flags;
-+ MetaTheme *theme;
-+ gint mutter_draggable_border_width;
-
-+ mutter_draggable_border_width = 0;
- g_object_get (settings, "draggable-border-width", &mutter_draggable_border_width, NULL);
-
- theme = meta_theme_get_current ();
-
- meta_get_decoration_geometry (d, theme, &flags, &fgeom, &button_layout,
-- meta_frame_type_from_string (d->frame->type),
-- &clip);
-+ meta_frame_type_from_string (d->frame->type));
-
-- width += fgeom.right_width + fgeom.left_width;
-- height += fgeom.top_height + fgeom.bottom_height;
-+ width += fgeom.right_width + fgeom.left_width;
-+ height += fgeom.top_height + fgeom.bottom_height;
-
-- switch (i) {
-+ switch (i)
-+ {
- case 2: /* bottom */
-- switch (j) {
-- case 2: /* bottom right */
-- if (d->frame_window)
-- {
-- *x = width - fgeom.right_width - RESIZE_EXTENDS +
-- d->frame->win_extents.left + 2;
-- *y = height - fgeom.bottom_height - RESIZE_EXTENDS +
-- d->frame->win_extents.top + 2;
-- }
-- else
-- {
-- *x = width - fgeom.right_width - RESIZE_EXTENDS;
-- *y = height - fgeom.bottom_height - RESIZE_EXTENDS;
-- }
-- *w = fgeom.right_width + RESIZE_EXTENDS;
-- *h = fgeom.bottom_height + RESIZE_EXTENDS;
--
-- if (!d->frame_window)
-- {
-- *x += mutter_draggable_border_width;
-- *y += mutter_draggable_border_width;
-- *w += mutter_draggable_border_width;
-- *h += mutter_draggable_border_width;
-- }
--
-- break;
-- case 1: /* bottom */
-- *x = fgeom.left_width + RESIZE_EXTENDS;
-- *y = height - fgeom.bottom_height;
-- if (d->frame_window)
-- *y += d->frame->win_extents.top + 2;
-- *w = width - fgeom.left_width - fgeom.right_width -
-- (2 * RESIZE_EXTENDS);
-- *h = fgeom.bottom_height;
--
-- if (!d->frame_window)
-- {
-- *x -= mutter_draggable_border_width;
-- *y += mutter_draggable_border_width;
-- *h += mutter_draggable_border_width;
-- *w += mutter_draggable_border_width * 2;
-- }
--
-- break;
-- case 0: /* bottom left */
-- default:
-- *x = 0;
-- *y = height - fgeom.bottom_height - RESIZE_EXTENDS;
-- if (d->frame_window)
-- {
-- *x += d->frame->win_extents.left + 4;
-- *y += d->frame->win_extents.bottom + 2;
-- }
-- *w = fgeom.left_width + RESIZE_EXTENDS;
-- *h = fgeom.bottom_height + RESIZE_EXTENDS;
--
-- if (!d->frame_window)
-- {
-- *y += mutter_draggable_border_width;
-- *w += mutter_draggable_border_width;
-- *h += mutter_draggable_border_width;
-- }
--
-- break;
-- }
-- break;
-+ switch (j)
-+ {
-+ case 2: /* bottom right */
-+ if (d->frame_window)
-+ {
-+ *x = width - fgeom.right_width - RESIZE_EXTENDS +
-+ d->frame->win_extents.left + 2;
-+ *y = height - fgeom.bottom_height - RESIZE_EXTENDS +
-+ d->frame->win_extents.top + 2;
-+ }
-+ else
-+ {
-+ *x = width - fgeom.right_width - RESIZE_EXTENDS;
-+ *y = height - fgeom.bottom_height - RESIZE_EXTENDS;
-+ }
-+
-+ *w = fgeom.right_width + RESIZE_EXTENDS;
-+ *h = fgeom.bottom_height + RESIZE_EXTENDS;
-+
-+ if (!d->frame_window)
-+ {
-+ *x += mutter_draggable_border_width;
-+ *y += mutter_draggable_border_width;
-+ *w += mutter_draggable_border_width;
-+ *h += mutter_draggable_border_width;
-+ }
-+ break;
-+ case 1: /* bottom */
-+ *x = fgeom.left_width + RESIZE_EXTENDS;
-+ *y = height - fgeom.bottom_height;
-+
-+ if (d->frame_window)
-+ *y += d->frame->win_extents.top + 2;
-+
-+ *w = width - fgeom.left_width - fgeom.right_width - (2 * RESIZE_EXTENDS);
-+ *h = fgeom.bottom_height;
-+
-+ if (!d->frame_window)
-+ {
-+ *x -= mutter_draggable_border_width;
-+ *y += mutter_draggable_border_width;
-+ *h += mutter_draggable_border_width;
-+ *w += mutter_draggable_border_width * 2;
-+ }
-+ break;
-+ case 0: /* bottom left */
-+ default:
-+ *x = 0;
-+ *y = height - fgeom.bottom_height - RESIZE_EXTENDS;
-+
-+ if (d->frame_window)
-+ {
-+ *x += d->frame->win_extents.left + 4;
-+ *y += d->frame->win_extents.bottom + 2;
-+ }
-+
-+ *w = fgeom.left_width + RESIZE_EXTENDS;
-+ *h = fgeom.bottom_height + RESIZE_EXTENDS;
-+
-+ if (!d->frame_window)
-+ {
-+ *y += mutter_draggable_border_width;
-+ *w += mutter_draggable_border_width;
-+ *h += mutter_draggable_border_width;
-+ }
-+ break;
-+ }
-+ break;
- case 1: /* middle */
-- switch (j) {
-- case 2: /* right */
-- *x = width - fgeom.right_width;
-- *y = fgeom.top_height + RESIZE_EXTENDS;
-- if (d->frame_window)
-- *x += d->frame->win_extents.left + 2;
-- *w = fgeom.right_width;
-- *h = height - fgeom.top_height - fgeom.bottom_height -
-- (2 * RESIZE_EXTENDS);
--
-- if (!d->frame_window)
-- {
-- *x += mutter_draggable_border_width;
-- *y += mutter_draggable_border_width;
-- *w += mutter_draggable_border_width;
-- *h += mutter_draggable_border_width;
-- }
--
--
-- break;
-- case 1: /* middle */
-- *x = fgeom.left_width;
-- *y = fgeom.title_rect.y + TOP_RESIZE_HEIGHT;
-- *w = width - fgeom.left_width - fgeom.right_width;
-- *h = height - fgeom.top_titlebar_edge - fgeom.bottom_height;
--
-- if (!d->frame_window)
-- {
-- *x += mutter_draggable_border_width;
-- if (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE)
-- *y += mutter_draggable_border_width;
-- }
--
-- break;
-- case 0: /* left */
-- default:
-- *x = 0;
-- if (d->frame_window)
-- *x += d->frame->win_extents.left + 4;
-- *y = fgeom.top_height + RESIZE_EXTENDS;
-- *w = fgeom.left_width;
-- *h = height - fgeom.top_height - fgeom.bottom_height -
-- (2 * RESIZE_EXTENDS);
--
-- if (!d->frame_window)
-- {
-- *y += mutter_draggable_border_width;
-- *h += mutter_draggable_border_width;
-- *w += mutter_draggable_border_width;
-- }
--
--
-- break;
-- }
-- break;
-+ switch (j)
-+ {
-+ case 2: /* right */
-+ *x = width - fgeom.right_width;
-+ *y = fgeom.top_height + RESIZE_EXTENDS;
-+
-+ if (d->frame_window)
-+ *x += d->frame->win_extents.left + 2;
-+
-+ *w = fgeom.right_width;
-+ *h = height - fgeom.top_height - fgeom.bottom_height - (2 * RESIZE_EXTENDS);
-+
-+ if (!d->frame_window)
-+ {
-+ *x += mutter_draggable_border_width;
-+ *y += mutter_draggable_border_width;
-+ *w += mutter_draggable_border_width;
-+ *h += mutter_draggable_border_width;
-+ }
-+ break;
-+ case 1: /* middle */
-+ *x = fgeom.left_width;
-+ *y = fgeom.title_rect.y + TOP_RESIZE_HEIGHT;
-+ *w = width - fgeom.left_width - fgeom.right_width;
-+ *h = height - fgeom.top_titlebar_edge - fgeom.bottom_height;
-+
-+ if (!d->frame_window)
-+ {
-+ *x += mutter_draggable_border_width;
-+
-+ if (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE)
-+ *y += mutter_draggable_border_width;
-+ }
-+ break;
-+ case 0: /* left */
-+ default:
-+ *x = 0;
-+
-+ if (d->frame_window)
-+ *x += d->frame->win_extents.left + 4;
-+
-+ *y = fgeom.top_height + RESIZE_EXTENDS;
-+ *w = fgeom.left_width;
-+ *h = height - fgeom.top_height - fgeom.bottom_height - (2 * RESIZE_EXTENDS);
-+
-+ if (!d->frame_window)
-+ {
-+ *y += mutter_draggable_border_width;
-+ *h += mutter_draggable_border_width;
-+ *w += mutter_draggable_border_width;
-+ }
-+ break;
-+ }
-+ break;
- case 0: /* top */
- default:
-- switch (j) {
-- case 2: /* top right */
-- *x = width - fgeom.right_width - RESIZE_EXTENDS;
-- *y = 0;
-- if (d->frame_window)
-- {
-- *x += d->frame->win_extents.left + 2;
-- *y += d->frame->win_extents.top + 2 - fgeom.title_rect.height;
-- }
-- *w = fgeom.right_width + RESIZE_EXTENDS;
-- *h = fgeom.top_height + RESIZE_EXTENDS;
--
-- if (!d->frame_window)
-- {
-- *x += mutter_draggable_border_width;
-- *w += mutter_draggable_border_width;
-- *h += mutter_draggable_border_width;
-- }
-- break;
-- case 1: /* top */
-- *x = fgeom.left_width + RESIZE_EXTENDS;
-- *y = 0;
-- if (d->frame_window)
-- *y += d->frame->win_extents.top + 2;
-- *w = width - fgeom.left_width - fgeom.right_width -
-- (2 * RESIZE_EXTENDS);
-- *h = fgeom.title_rect.y + TOP_RESIZE_HEIGHT;
--
-- if (!d->frame_window)
-- {
-- *x -= mutter_draggable_border_width;
-- *w += mutter_draggable_border_width * 2;
-- *h += mutter_draggable_border_width;
-- }
--
-- break;
-- case 0: /* top left */
-- default:
-- *x = 0;
-- *y = 0;
-- if (d->frame_window)
-- {
-- *x += d->frame->win_extents.left + 4;
-- *y += d->frame->win_extents.top + 2 - fgeom.title_rect.height;
-- }
-- *w = fgeom.left_width + RESIZE_EXTENDS;
-- *h = fgeom.top_height + RESIZE_EXTENDS;
--
-- if (!d->frame_window)
-- {
-- *w += mutter_draggable_border_width;
-- *h += mutter_draggable_border_width;
-- }
-+ switch (j)
-+ {
-+ case 2: /* top right */
-+ *x = width - fgeom.right_width - RESIZE_EXTENDS;
-+ *y = 0;
-+
-+ if (d->frame_window)
-+ {
-+ *x += d->frame->win_extents.left + 2;
-+ *y += d->frame->win_extents.top + 2 - fgeom.title_rect.height;
-+ }
-+
-+ *w = fgeom.right_width + RESIZE_EXTENDS;
-+ *h = fgeom.top_height + RESIZE_EXTENDS;
-+
-+ if (!d->frame_window)
-+ {
-+ *x += mutter_draggable_border_width;
-+ *w += mutter_draggable_border_width;
-+ *h += mutter_draggable_border_width;
-+ }
-+ break;
-+ case 1: /* top */
-+ *x = fgeom.left_width + RESIZE_EXTENDS;
-+ *y = 0;
-+
-+ if (d->frame_window)
-+ *y += d->frame->win_extents.top + 2;
-+
-+ *w = width - fgeom.left_width - fgeom.right_width - (2 * RESIZE_EXTENDS);
-+ *h = fgeom.title_rect.y + TOP_RESIZE_HEIGHT;
-+
-+ if (!d->frame_window)
-+ {
-+ *x -= mutter_draggable_border_width;
-+ *w += mutter_draggable_border_width * 2;
-+ *h += mutter_draggable_border_width;
-+ }
-+ break;
-+ case 0: /* top left */
-+ default:
-+ *x = 0;
-+ *y = 0;
-
-- break;
-- }
-+ if (d->frame_window)
-+ {
-+ *x += d->frame->win_extents.left + 4;
-+ *y += d->frame->win_extents.top + 2 - fgeom.title_rect.height;
-+ }
-+
-+ *w = fgeom.left_width + RESIZE_EXTENDS;
-+ *h = fgeom.top_height + RESIZE_EXTENDS;
-+
-+ if (!d->frame_window)
-+ {
-+ *w += mutter_draggable_border_width;
-+ *h += mutter_draggable_border_width;
-+ }
-+ break;
-+ }
-+ break;
- }
-
- if (!(flags & META_FRAME_ALLOWS_VERTICAL_RESIZE))
- {
-- /* turn off top and bottom event windows */
-- if (i == 0 || i == 2)
-- *w = *h = 0;
-+ /* turn off top and bottom event windows */
-+ if (i == 0 || i == 2)
-+ *w = *h = 0;
- }
-
- if (!(flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE))
- {
-- /* turn off left and right event windows */
-- if (j == 0 || j == 2)
-- *w = *h = 0;
-+ /* turn off left and right event windows */
-+ if (j == 0 || j == 2)
-+ *w = *h = 0;
- }
- }
-
--
- static MetaButtonFunction
- meta_button_function_from_string (const char *str)
- {
- if (strcmp (str, "menu") == 0)
-- return META_BUTTON_FUNCTION_MENU;
-+ return META_BUTTON_FUNCTION_MENU;
- else if (strcmp (str, "minimize") == 0)
-- return META_BUTTON_FUNCTION_MINIMIZE;
-+ return META_BUTTON_FUNCTION_MINIMIZE;
- else if (strcmp (str, "maximize") == 0)
-- return META_BUTTON_FUNCTION_MAXIMIZE;
-+ return META_BUTTON_FUNCTION_MAXIMIZE;
- else if (strcmp (str, "close") == 0)
-- return META_BUTTON_FUNCTION_CLOSE;
-+ return META_BUTTON_FUNCTION_CLOSE;
- else if (strcmp (str, "shade") == 0)
-- return META_BUTTON_FUNCTION_SHADE;
-+ return META_BUTTON_FUNCTION_SHADE;
- else if (strcmp (str, "above") == 0)
-- return META_BUTTON_FUNCTION_ABOVE;
-+ return META_BUTTON_FUNCTION_ABOVE;
- else if (strcmp (str, "stick") == 0)
-- return META_BUTTON_FUNCTION_STICK;
-+ return META_BUTTON_FUNCTION_STICK;
- else if (strcmp (str, "unshade") == 0)
-- return META_BUTTON_FUNCTION_UNSHADE;
-+ return META_BUTTON_FUNCTION_UNSHADE;
- else if (strcmp (str, "unabove") == 0)
-- return META_BUTTON_FUNCTION_UNABOVE;
-+ return META_BUTTON_FUNCTION_UNABOVE;
- else if (strcmp (str, "unstick") == 0)
-- return META_BUTTON_FUNCTION_UNSTICK;
-+ return META_BUTTON_FUNCTION_UNSTICK;
- else
-- return META_BUTTON_FUNCTION_LAST;
-+ return META_BUTTON_FUNCTION_LAST;
- }
-
- static MetaButtonFunction
-@@ -1378,22 +1363,22 @@
- switch (ofwhat)
- {
- case META_BUTTON_FUNCTION_SHADE:
-- return META_BUTTON_FUNCTION_UNSHADE;
-+ return META_BUTTON_FUNCTION_UNSHADE;
- case META_BUTTON_FUNCTION_UNSHADE:
-- return META_BUTTON_FUNCTION_SHADE;
-+ return META_BUTTON_FUNCTION_SHADE;
-
- case META_BUTTON_FUNCTION_ABOVE:
-- return META_BUTTON_FUNCTION_UNABOVE;
-+ return META_BUTTON_FUNCTION_UNABOVE;
- case META_BUTTON_FUNCTION_UNABOVE:
-- return META_BUTTON_FUNCTION_ABOVE;
-+ return META_BUTTON_FUNCTION_ABOVE;
-
- case META_BUTTON_FUNCTION_STICK:
-- return META_BUTTON_FUNCTION_UNSTICK;
-+ return META_BUTTON_FUNCTION_UNSTICK;
- case META_BUTTON_FUNCTION_UNSTICK:
-- return META_BUTTON_FUNCTION_STICK;
-+ return META_BUTTON_FUNCTION_STICK;
-
- default:
-- return META_BUTTON_FUNCTION_LAST;
-+ return META_BUTTON_FUNCTION_LAST;
- }
- }
-
-@@ -1404,20 +1389,20 @@
-
- for (i = 0; i < MAX_BUTTONS_PER_CORNER; ++i)
- {
-- layout->left_buttons[i] = META_BUTTON_FUNCTION_LAST;
-- layout->right_buttons[i] = META_BUTTON_FUNCTION_LAST;
-- layout->left_buttons_has_spacer[i] = FALSE;
-- layout->right_buttons_has_spacer[i] = FALSE;
-+ layout->left_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+ layout->right_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+ layout->left_buttons_has_spacer[i] = FALSE;
-+ layout->right_buttons_has_spacer[i] = FALSE;
- }
- }
-
- void
- meta_update_button_layout (const char *value)
- {
-- MetaButtonLayout new_layout;
-+ MetaButtonLayout new_layout;
- MetaButtonFunction f;
-- char **sides;
-- int i;
-+ char **sides;
-+ int i;
-
- meta_initialize_button_layout (&new_layout);
-
-@@ -1425,96 +1410,97 @@
-
- if (sides[0] != NULL)
- {
-- char **buttons;
-- int b;
-- gboolean used[META_BUTTON_FUNCTION_LAST];
--
-- for (i = 0; i < META_BUTTON_FUNCTION_LAST; ++i)
-- used[i] = FALSE;
--
-- buttons = g_strsplit (sides[0], ",", -1);
--
-- i = b = 0;
-- while (buttons[b] != NULL)
-- {
-- f = meta_button_function_from_string (buttons[b]);
-- if (i > 0 && strcmp ("spacer", buttons[b]) == 0)
-- {
-- new_layout.left_buttons_has_spacer[i - 1] = TRUE;
-- f = meta_button_opposite_function (f);
--
-- if (f != META_BUTTON_FUNCTION_LAST)
-- new_layout.left_buttons_has_spacer[i - 2] = TRUE;
-- }
-- else
-- {
-- if (f != META_BUTTON_FUNCTION_LAST && !used[f])
-- {
-- used[f] = TRUE;
-- new_layout.left_buttons[i++] = f;
--
-- f = meta_button_opposite_function (f);
--
-- if (f != META_BUTTON_FUNCTION_LAST)
-- new_layout.left_buttons[i++] = f;
--
-- }
-- else
-- {
-- fprintf (stderr, "%s: Ignoring unknown or already-used "
-- "button name \"%s\"\n", program_name, buttons[b]);
-- }
-- }
-- ++b;
-- }
--
-- new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
--
-- g_strfreev (buttons);
--
-- if (sides[1] != NULL)
-- {
-- for (i = 0; i < META_BUTTON_FUNCTION_LAST; ++i)
-- used[i] = FALSE;
--
-- buttons = g_strsplit (sides[1], ",", -1);
--
-- i = b = 0;
-- while (buttons[b] != NULL)
-- {
-- f = meta_button_function_from_string (buttons[b]);
-- if (i > 0 && strcmp ("spacer", buttons[b]) == 0)
-- {
-- new_layout.right_buttons_has_spacer[i - 1] = TRUE;
-- f = meta_button_opposite_function (f);
-- if (f != META_BUTTON_FUNCTION_LAST)
-- new_layout.right_buttons_has_spacer[i - 2] = TRUE;
-- }
-- else
-- {
-- if (f != META_BUTTON_FUNCTION_LAST && !used[f])
-- {
-- used[f] = TRUE;
-- new_layout.right_buttons[i++] = f;
--
-- f = meta_button_opposite_function (f);
--
-- if (f != META_BUTTON_FUNCTION_LAST)
-- new_layout.right_buttons[i++] = f;
-- }
-- else
-- {
-- fprintf (stderr, "%s: Ignoring unknown or "
-- "already-used button name \"%s\"\n",
-- program_name, buttons[b]);
-- }
-- }
-- ++b;
-- }
-- new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+ char **buttons;
-+ int b;
-+ gboolean used[META_BUTTON_FUNCTION_LAST];
-+
-+ for (i = 0; i < META_BUTTON_FUNCTION_LAST; ++i)
-+ used[i] = FALSE;
-+
-+ buttons = g_strsplit (sides[0], ",", -1);
-+
-+ i = b = 0;
-+ while (buttons[b] != NULL)
-+ {
-+ f = meta_button_function_from_string (buttons[b]);
-+ if (i > 0 && strcmp ("spacer", buttons[b]) == 0)
-+ {
-+ new_layout.left_buttons_has_spacer[i - 1] = TRUE;
-+ f = meta_button_opposite_function (f);
-+
-+ if (f != META_BUTTON_FUNCTION_LAST)
-+ new_layout.left_buttons_has_spacer[i - 2] = TRUE;
-+ }
-+ else
-+ {
-+ if (f != META_BUTTON_FUNCTION_LAST && !used[f])
-+ {
-+ used[f] = TRUE;
-+ new_layout.left_buttons[i++] = f;
-+
-+ f = meta_button_opposite_function (f);
-+
-+ if (f != META_BUTTON_FUNCTION_LAST)
-+ new_layout.left_buttons[i++] = f;
-+
-+ }
-+ else
-+ {
-+ fprintf (stderr, "%s: Ignoring unknown or already-used "
-+ "button name \"%s\"\n", program_name, buttons[b]);
-+ }
-+ }
-+ ++b;
-+ }
-+
-+ new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
-+
-+ g_strfreev (buttons);
-+
-+ if (sides[1] != NULL)
-+ {
-+ for (i = 0; i < META_BUTTON_FUNCTION_LAST; ++i)
-+ used[i] = FALSE;
-+
-+ buttons = g_strsplit (sides[1], ",", -1);
-+
-+ i = b = 0;
-+ while (buttons[b] != NULL)
-+ {
-+ f = meta_button_function_from_string (buttons[b]);
-+ if (i > 0 && strcmp ("spacer", buttons[b]) == 0)
-+ {
-+ new_layout.right_buttons_has_spacer[i - 1] = TRUE;
-+ f = meta_button_opposite_function (f);
-+ if (f != META_BUTTON_FUNCTION_LAST)
-+ new_layout.right_buttons_has_spacer[i - 2] = TRUE;
-+ }
-+ else
-+ {
-+ if (f != META_BUTTON_FUNCTION_LAST && !used[f])
-+ {
-+ used[f] = TRUE;
-+ new_layout.right_buttons[i++] = f;
-+
-+ f = meta_button_opposite_function (f);
-+
-+ if (f != META_BUTTON_FUNCTION_LAST)
-+ new_layout.right_buttons[i++] = f;
-+ }
-+ else
-+ {
-+ fprintf (stderr, "%s: Ignoring unknown or "
-+ "already-used button name \"%s\"\n",
-+ program_name, buttons[b]);
-+ }
-+ }
-+ ++b;
-+ }
-+
-+ new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
-
-- g_strfreev (buttons);
-- }
-+ g_strfreev (buttons);
-+ }
- }
-
- g_strfreev (sides);
-@@ -1522,42 +1508,38 @@
- /* Invert the button layout for RTL languages */
- if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
- {
-- MetaButtonLayout rtl_layout;
-- int j;
-+ MetaButtonLayout rtl_layout;
-+ int j;
-
-- meta_initialize_button_layout (&rtl_layout);
-+ meta_initialize_button_layout (&rtl_layout);
-
-- i = 0;
-- while (new_layout.left_buttons[i] != META_BUTTON_FUNCTION_LAST)
-- ++i;
--
-- for (j = 0; j < i; ++j)
-- {
-- rtl_layout.right_buttons[j] = new_layout.left_buttons[i - j - 1];
-- if (j == 0)
-- rtl_layout.right_buttons_has_spacer[i - 1] =
-- new_layout.left_buttons_has_spacer[i - j - 1];
-- else
-- rtl_layout.right_buttons_has_spacer[j - 1] =
-- new_layout.left_buttons_has_spacer[i - j - 1];
-- }
--
-- i = 0;
-- while (new_layout.right_buttons[i] != META_BUTTON_FUNCTION_LAST)
-- ++i;
--
-- for (j = 0; j < i; ++j)
-- {
-- rtl_layout.left_buttons[j] = new_layout.right_buttons[i - j - 1];
-- if (j == 0)
-- rtl_layout.left_buttons_has_spacer[i - 1] =
-- new_layout.right_buttons_has_spacer[i - j - 1];
-- else
-- rtl_layout.left_buttons_has_spacer[j - 1] =
-- new_layout.right_buttons_has_spacer[i - j - 1];
-- }
-+ i = 0;
-+ while (new_layout.left_buttons[i] != META_BUTTON_FUNCTION_LAST)
-+ ++i;
-+
-+ for (j = 0; j < i; ++j)
-+ {
-+ rtl_layout.right_buttons[j] = new_layout.left_buttons[i - j - 1];
-+ if (j == 0)
-+ rtl_layout.right_buttons_has_spacer[i - 1] = new_layout.left_buttons_has_spacer[i - j - 1];
-+ else
-+ rtl_layout.right_buttons_has_spacer[j - 1] = new_layout.left_buttons_has_spacer[i - j - 1];
-+ }
-+
-+ i = 0;
-+ while (new_layout.right_buttons[i] != META_BUTTON_FUNCTION_LAST)
-+ ++i;
-+
-+ for (j = 0; j < i; ++j)
-+ {
-+ rtl_layout.left_buttons[j] = new_layout.right_buttons[i - j - 1];
-+ if (j == 0)
-+ rtl_layout.left_buttons_has_spacer[i - 1] = new_layout.right_buttons_has_spacer[i - j - 1];
-+ else
-+ rtl_layout.left_buttons_has_spacer[j - 1] = new_layout.right_buttons_has_spacer[i - j - 1];
-+ }
-
-- new_layout = rtl_layout;
-+ new_layout = rtl_layout;
- }
-
- meta_button_layout = new_layout;
-@@ -1566,37 +1548,36 @@
- void
- meta_update_border_extents (decor_frame_t *frame)
- {
-- MetaTheme *theme = meta_theme_get_current ();
-+ MetaTheme *theme;
- #ifdef HAVE_METACITY_3_14_0
- MetaFrameBorders borders;
- #endif
-+ MetaFrameType frame_type;
-+ gint top_height;
-+ gint bottom_height;
-+ gint left_width;
-+ gint right_width;
-
- gwd_decor_frame_ref (frame);
-- MetaFrameType frame_type = meta_frame_type_from_string (frame->type);
-- gint top_height, bottom_height, left_width, right_width;
-
-+ frame_type = meta_frame_type_from_string (frame->type);
- if (!(frame_type < META_FRAME_TYPE_LAST))
-- frame_type = META_FRAME_TYPE_NORMAL;
-+ frame_type = META_FRAME_TYPE_NORMAL;
-+
-+ theme = meta_theme_get_current ();
-
- #ifdef HAVE_METACITY_3_14_0
-- meta_theme_get_frame_borders (theme,
-- frame_type,
-- frame->text_height,
-- 0,
-- &borders);
-+ meta_theme_get_frame_borders (theme, frame_type, frame->text_height,
-+ 0, &borders);
-+
- top_height = borders.visible.top;
- bottom_height = borders.visible.bottom;
- left_width = borders.visible.left;
- right_width = borders.visible.right;
- #else
-- meta_theme_get_frame_borders (theme,
-- frame_type,
-- frame->text_height,
-- 0,
-- &top_height,
-- &bottom_height,
-- &left_width,
-- &right_width);
-+ meta_theme_get_frame_borders (theme, frame_type, frame->text_height,
-+ 0, &top_height, &bottom_height,
-+ &left_width, &right_width);
- #endif
-
- frame->win_extents.top = frame->win_extents.top;
-@@ -1607,24 +1588,18 @@
- frame->titlebar_height = top_height - frame->win_extents.top;
-
- #ifdef HAVE_METACITY_3_14_0
-- meta_theme_get_frame_borders (theme,
-- frame_type,
-- frame->text_height,
-- META_FRAME_MAXIMIZED,
-- &borders);
-+ meta_theme_get_frame_borders (theme, frame_type, frame->text_height,
-+ META_FRAME_MAXIMIZED, &borders);
-+
- top_height = borders.visible.top;
- bottom_height = borders.visible.bottom;
- left_width = borders.visible.left;
- right_width = borders.visible.right;
- #else
-- meta_theme_get_frame_borders (theme,
-- frame_type,
-- frame->text_height,
-- META_FRAME_MAXIMIZED,
-- &top_height,
-- &bottom_height,
-- &left_width,
-- &right_width);
-+ meta_theme_get_frame_borders (theme, frame_type, frame->text_height,
-+ META_FRAME_MAXIMIZED,
-+ &top_height, &bottom_height,
-+ &left_width, &right_width);
- #endif
-
- frame->max_win_extents.top = frame->win_extents.top;
-@@ -1637,4 +1612,5 @@
- gwd_decor_frame_unref (frame);
- }
-
--#endif
-+#endif /* HAVE_METACITY_3_16_0 */
-+#endif /* USE_METACITY */
-diff -Nur original/gtk/window-decorator/settings.c modified/gtk/window-decorator/settings.c
---- original/gtk/window-decorator/settings.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/settings.c 2015-04-11 14:34:11.000000000 +0100
-@@ -45,11 +45,14 @@
- #ifdef USE_GSETTINGS
- #define STORAGE_USED
- GSettings *compiz = gwd_get_org_compiz_gwd_settings ();
-+ GSettings *metacity = gwd_get_org_gnome_metacity_settings ();
- GSettings *mutter = gwd_get_org_gnome_mutter_settings ();
- GSettings *gnome = gwd_get_org_gnome_desktop_wm_preferences_settings ();
-- storage = gwd_settings_storage_gsettings_new (gnome, mutter, compiz, writable);
-+
-+ storage = gwd_settings_storage_gsettings_new (gnome, metacity, mutter, compiz, writable);
-
- gwd_connect_org_compiz_gwd_settings (compiz, storage);
-+ gwd_connect_org_gnome_metacity_settings (metacity, storage);
- gwd_connect_org_gnome_mutter_settings (mutter, storage);
- gwd_connect_org_gnome_desktop_wm_preferences_settings (gnome, storage);
- #endif
-@@ -70,7 +73,6 @@
- gwd_settings_storage_update_titlebar_actions (storage);
- gwd_settings_storage_update_blur (storage);
- gwd_settings_storage_update_draggable_border_width (storage);
-- gwd_settings_storage_update_attach_modal_dialogs (storage);
- gwd_settings_storage_update_use_tooltips (storage);
- gwd_process_decor_shadow_property_update ();
- #else
-diff -Nur original/gtk/window-decorator/switcher.c modified/gtk/window-decorator/switcher.c
---- original/gtk/window-decorator/switcher.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/switcher.c 2015-04-11 14:34:11.000000000 +0100
-@@ -25,6 +25,8 @@
-
- #include "gtk-window-decorator.h"
-
-+#define SWITCHER_SPACE 40
-+
- decor_frame_t *
- create_switcher_frame (const gchar *type)
- {
-@@ -319,7 +321,7 @@
- copy_to_front_buffer (d);
- }
-
--void
-+static void
- draw_switcher_decoration (decor_t *d)
- {
- if (d->prop_xid)
-@@ -328,7 +330,8 @@
- draw_switcher_foreground (d);
- }
-
--void
-+#if 0
-+static void
- switcher_window_closed ()
- {
- decor_t *d = switcher_window;
-@@ -356,10 +359,11 @@
- g_free (switcher_window);
- switcher_window = NULL;
- }
-+#endif
-
- /* Switcher is override-redirect now, we need to track
- * it separately */
--decor_t *
-+static decor_t *
- switcher_window_opened (Window popup, Window window)
- {
- decor_t *d;
-diff -Nur original/gtk/window-decorator/tests/CMakeLists.txt modified/gtk/window-decorator/tests/CMakeLists.txt
---- original/gtk/window-decorator/tests/CMakeLists.txt 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/tests/CMakeLists.txt 2015-04-11 14:34:11.000000000 +0100
-@@ -75,6 +75,21 @@
-
- add_gsettings_schema_to_recompilation_list (compiz_gwd_gsettings_org_gnome_desktop_wm_preferences_schema)
-
-+ set (_metacity_gschema_name org.gnome.metacity)
-+ set (_metacity_gschema_filename ${_metacity_gschema_name}.gschema.xml)
-+ set (_metacity_gschema_filepath ${CMAKE_CURRENT_SOURCE_DIR}/${_metacity_gschema_filename})
-+ set (_metacity_gschema_generated_location ${CMAKE_BINARY_DIR}/generated/glib-2.0/schemas/${_metacity_gschema_filename})
-+
-+ add_custom_command (OUTPUT ${_metacity_gschema_generated_location}
-+ COMMAND cp -r ${_metacity_gschema_filepath} ${_metacity_gschema_generated_location}
-+ DEPENDS ${_metacity_gschema_filepath}
-+ VERBATIM)
-+
-+ add_custom_target (compiz_gwd_gsettings_org_gnome_metacity_schema ALL
-+ DEPENDS ${_metacity_gschema_generated_location})
-+
-+ add_gsettings_schema_to_recompilation_list (compiz_gwd_gsettings_org_gnome_metacity_schema)
-+
- set (_mutter_gschema_name org.gnome.mutter)
- set (_mutter_gschema_filename ${_mutter_gschema_name}.gschema.xml)
- set (_mutter_gschema_filepath ${CMAKE_CURRENT_SOURCE_DIR}/${_mutter_gschema_filename})
-diff -Nur original/gtk/window-decorator/tests/compiz_gwd_mock_settings_storage.cpp modified/gtk/window-decorator/tests/compiz_gwd_mock_settings_storage.cpp
---- original/gtk/window-decorator/tests/compiz_gwd_mock_settings_storage.cpp 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/tests/compiz_gwd_mock_settings_storage.cpp 2015-04-11 14:34:11.000000000 +0100
-@@ -73,13 +73,6 @@
- return settingsGMock->updateDraggableBorderWidth ();
- }
-
--gboolean gwd_mock_settings_storage_update_attach_modal_dialogs (GWDSettingsStorage *settings)
--{
-- GWDMockSettingsStorage *settingsStorageMock = GWD_MOCK_SETTINGS_STORAGE (settings)
-- GWDMockSettingsStorageGMockInterface *settingsGMock = GET_PRIVATE (settingsStorageMock)->mock;
-- return settingsGMock->updateAttachModalDialogs ();
--}
--
- gboolean gwd_mock_settings_storage_update_blur (GWDSettingsStorage *settings)
- {
- GWDMockSettingsStorage *settingsStorageMock = GWD_MOCK_SETTINGS_STORAGE (settings);
-@@ -126,7 +119,6 @@
- {
- interface->update_use_tooltips = gwd_mock_settings_storage_update_use_tooltips;
- interface->update_draggable_border_width = gwd_mock_settings_storage_update_draggable_border_width;
-- interface->update_attach_modal_dialogs = gwd_mock_settings_storage_update_attach_modal_dialogs;
- interface->update_blur = gwd_mock_settings_storage_update_blur;
- interface->update_metacity_theme = gwd_mock_settings_storage_update_metacity_theme;
- interface->update_opacity = gwd_mock_settings_storage_update_opacity;
-diff -Nur original/gtk/window-decorator/tests/compiz_gwd_mock_settings_writable.cpp modified/gtk/window-decorator/tests/compiz_gwd_mock_settings_writable.cpp
---- original/gtk/window-decorator/tests/compiz_gwd_mock_settings_writable.cpp 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/tests/compiz_gwd_mock_settings_writable.cpp 2015-04-11 14:34:11.000000000 +0100
-@@ -116,14 +116,6 @@
- }
-
- gboolean
--gwd_mock_settings_writable_attach_modal_dialogs_changed (GWDSettingsWritable *settings,
-- gboolean attach_modal_dialogs)
--{
-- GWDMockSettingsWritableGMockInterface *gmockSettingsWritable = GET_PRIVATE (settings)->mock;
-- return gmockSettingsWritable->attachModalDialogsChanged (attach_modal_dialogs);
--}
--
--gboolean
- gwd_mock_settings_writable_blur_changed (GWDSettingsWritable *settings,
- const gchar *blur_type)
- {
-@@ -187,7 +179,6 @@
- interface->shadow_property_changed = gwd_mock_settings_writable_shadow_property_changed;
- interface->use_tooltips_changed = gwd_mock_settings_writable_use_tooltips_changed;
- interface->draggable_border_width_changed = gwd_mock_settings_writable_draggable_border_width_changed;
-- interface->attach_modal_dialogs_changed = gwd_mock_settings_writable_attach_modal_dialogs_changed;
- interface->blur_changed = gwd_mock_settings_writable_blur_changed;
- interface->metacity_theme_changed = gwd_mock_settings_writable_metacity_theme_changed;
- interface->opacity_changed = gwd_mock_settings_writable_opacity_changed;
-diff -Nur original/gtk/window-decorator/tests/compiz_gwd_mock_settings_writable.h modified/gtk/window-decorator/tests/compiz_gwd_mock_settings_writable.h
---- original/gtk/window-decorator/tests/compiz_gwd_mock_settings_writable.h 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/tests/compiz_gwd_mock_settings_writable.h 2015-04-11 14:34:11.000000000 +0100
-@@ -59,7 +59,6 @@
- const gchar *inactive_shadow_color) = 0;
- virtual gboolean useTooltipsChanged (gboolean newValue) = 0;
- virtual gboolean draggableBorderWidthChanged (gint newValue) = 0;
-- virtual gboolean attachModalDialogsChanged (gboolean newValue) = 0;
- virtual gboolean blurChanged (const gchar *type) = 0;
- virtual gboolean metacityThemeChanged (gboolean useMetacityTheme, const gchar *metacityTheme) = 0;
- virtual gboolean opacityChanged (gdouble inactiveOpacity,
-@@ -90,7 +89,6 @@
- gdouble, gdouble, gdouble, gdouble, const gchar *));
- MOCK_METHOD1 (useTooltipsChanged, gboolean (gboolean));
- MOCK_METHOD1 (draggableBorderWidthChanged, gboolean (gint));
-- MOCK_METHOD1 (attachModalDialogsChanged, gboolean (gboolean));
- MOCK_METHOD1 (blurChanged, gboolean (const gchar *));
- MOCK_METHOD2 (metacityThemeChanged, gboolean (gboolean, const gchar *));
- MOCK_METHOD4 (opacityChanged, gboolean (gdouble, gdouble, gboolean, gboolean));
-diff -Nur original/gtk/window-decorator/tests/org.gnome.metacity.gschema.xml modified/gtk/window-decorator/tests/org.gnome.metacity.gschema.xml
---- original/gtk/window-decorator/tests/org.gnome.metacity.gschema.xml 1970-01-01 01:00:00.000000000 +0100
-+++ modified/gtk/window-decorator/tests/org.gnome.metacity.gschema.xml 2015-04-11 14:34:11.000000000 +0100
-@@ -0,0 +1,10 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<schemalist>
-+ <schema path="/org/gnome/metacity/" id="org.gnome.metacity" gettext-domain="@GETTEXT_DOMAIN">
-+ <key type="s" name="theme">
-+ <default>'Adwaita'</default>
-+ <summary>Current theme</summary>
-+ <description>The theme determines the appearance of window borders, titlebar, and so forth.</description>
-+ </key>
-+ </schema>
-+</schemalist>
-diff -Nur original/gtk/window-decorator/tests/org.gnome.mutter.gschema.xml modified/gtk/window-decorator/tests/org.gnome.mutter.gschema.xml
---- original/gtk/window-decorator/tests/org.gnome.mutter.gschema.xml 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/tests/org.gnome.mutter.gschema.xml 2015-04-11 14:34:11.000000000 +0100
-@@ -1,13 +1,6 @@
- <?xml version="1.0" encoding="UTF-8"?>
- <schemalist>
- <schema path="/org/gnome/mutter/" id="org.gnome.mutter" gettext-domain="@GETTEXT_DOMAIN">
--
-- <key type="b" name="attach-modal-dialogs">
-- <default>false</default>
-- <summary>Attach modal dialogs</summary>
-- <description>When true, instead of having independent titlebars, modal dialogs appear attached to the titlebar of the parent window and are moved together with the parent window.</description>
-- </key>
--
- <key type="i" name="draggable-border-width">
- <default>10</default>
- <range min="0" max="64"/>
-diff -Nur original/gtk/window-decorator/tests/test_gwd_settings.cpp modified/gtk/window-decorator/tests/test_gwd_settings.cpp
---- original/gtk/window-decorator/tests/test_gwd_settings.cpp 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/tests/test_gwd_settings.cpp 2015-04-11 14:34:11.000000000 +0100
-@@ -198,7 +198,6 @@
- const gushort INACTIVE_SHADOW_COLOR_VALUE[] = { 0, 0, 0 };
- const gboolean USE_TOOLTIPS_VALUE = !USE_TOOLTIPS_DEFAULT;
- const guint DRAGGABLE_BORDER_WIDTH_VALUE = 1;
-- const gboolean ATTACH_MODAL_DIALOGS_VALUE = TRUE;
- const std::string BLUR_TYPE_TITLEBAR_VALUE ("titlebar");
- const gint BLUR_TYPE_TITLEBAR_INT_VALUE = BLUR_TYPE_TITLEBAR;
- const std::string BLUR_TYPE_ALL_VALUE ("all");
-@@ -330,7 +329,6 @@
- Eq (testing_values::INACTIVE_SHADOW_COLOR_STR_VALUE))).WillOnce (Return (TRUE));
- EXPECT_CALL (writableGMock, useTooltipsChanged (testing_values::USE_TOOLTIPS_VALUE)).WillOnce (Return (TRUE));
- EXPECT_CALL (writableGMock, draggableBorderWidthChanged (testing_values::DRAGGABLE_BORDER_WIDTH_VALUE)).WillOnce (Return (TRUE));
-- EXPECT_CALL (writableGMock, attachModalDialogsChanged (testing_values::ATTACH_MODAL_DIALOGS_VALUE)).WillOnce (Return (TRUE));
- EXPECT_CALL (writableGMock, blurChanged (Eq (testing_values::BLUR_TYPE_TITLEBAR_VALUE))).WillOnce (Return (TRUE));
- EXPECT_CALL (writableGMock, metacityThemeChanged (TRUE, Eq (testing_values::METACITY_THEME_VALUE))).WillOnce (Return (TRUE));
- EXPECT_CALL (writableGMock, opacityChanged (testing_values::ACTIVE_OPACITY_VALUE,
-@@ -364,7 +362,6 @@
- testing_values::INACTIVE_SHADOW_COLOR_STR_VALUE.c_str ()), IsTrue ());
- EXPECT_THAT (gwd_settings_writable_use_tooltips_changed (writableMock.get (), testing_values::USE_TOOLTIPS_VALUE), IsTrue ());
- EXPECT_THAT (gwd_settings_writable_draggable_border_width_changed (writableMock.get (), testing_values::DRAGGABLE_BORDER_WIDTH_VALUE), IsTrue ());
-- EXPECT_THAT (gwd_settings_writable_attach_modal_dialogs_changed (writableMock.get (), testing_values::ATTACH_MODAL_DIALOGS_VALUE), IsTrue ());
- EXPECT_THAT (gwd_settings_writable_blur_changed (writableMock.get (), testing_values::BLUR_TYPE_TITLEBAR_VALUE.c_str ()), IsTrue ());
- EXPECT_THAT (gwd_settings_writable_metacity_theme_changed (writableMock.get (),
- testing_values::USE_METACITY_THEME_VALUE,
-@@ -472,14 +469,6 @@
- "draggable-border-width",
- &integerGValue);
-
-- EXPECT_CALL (settingsGMock, getProperty (GWD_MOCK_SETTINGS_PROPERTY_ATTACH_MODAL_DIALOGS,
-- GValueMatch <gboolean> (FALSE, g_value_get_boolean),
-- _));
--
-- g_object_get_property (G_OBJECT (settingsMock.get ()),
-- "attach-modal-dialogs",
-- &booleanGValue);
--
- EXPECT_CALL (settingsGMock, getProperty (GWD_MOCK_SETTINGS_PROPERTY_BLUR_CHANGED,
- GValueMatch <gint> (0, g_value_get_int),
- _));
-@@ -783,29 +772,6 @@
- DRAGGABLE_BORDER_WIDTH_DEFAULT), IsFalse ());
- }
-
--TEST_F(GWDSettingsTest, TestAttachModalDialogsChanged)
--{
-- EXPECT_CALL (*mGMockNotified, updateDecorations ());
-- EXPECT_THAT (gwd_settings_writable_attach_modal_dialogs_changed (GWD_SETTINGS_WRITABLE_INTERFACE (mSettings.get ()),
-- testing_values::ATTACH_MODAL_DIALOGS_VALUE), IsTrue ());
--
-- AutoUnsetGValue attachModalDialogsValue (G_TYPE_BOOLEAN);
-- GValue &attachModalDialogsGValue = attachModalDialogsValue;
--
-- g_object_get_property (G_OBJECT (mSettings.get ()),
-- "attach-modal-dialogs",
-- &attachModalDialogsGValue);
--
-- EXPECT_THAT (&attachModalDialogsGValue, GValueMatch <gboolean> (testing_values::ATTACH_MODAL_DIALOGS_VALUE,
-- g_value_get_boolean));
--}
--
--TEST_F(GWDSettingsTest, TestAttachModalDialogsChangedIsDefault)
--{
-- EXPECT_THAT (gwd_settings_writable_attach_modal_dialogs_changed (GWD_SETTINGS_WRITABLE_INTERFACE (mSettings.get ()),
-- ATTACH_MODAL_DIALOGS_DEFAULT), IsFalse ());
--}
--
- TEST_F(GWDSettingsTest, TestBlurChangedTitlebar)
- {
- EXPECT_CALL (*mGMockNotified, updateDecorations ());
-@@ -1218,7 +1184,6 @@
- virtual GWDSettingsStorage * GetStorage () = 0;
- virtual void SetUseTooltips (gboolean useTooltips) = 0;
- virtual void SetDraggableBorderWidth (gint draggableBorderWidth) = 0;
-- virtual void SetAttachModalDialogs (gboolean attachModalDialogs) = 0;
- virtual void SetBlur (const std::string &blurType) = 0;
- virtual void SetOpacity (gdouble activeOpacity,
- gdouble inactiveOpacity,
-@@ -1292,16 +1257,6 @@
- gwd_settings_storage_update_draggable_border_width (storage);
- }
-
--TEST_P (GWDSettingsTestStorageUpdates, TestSetAttachModalDialogs)
--{
-- GWDSettingsStorage *storage = GetParam ()->GetStorage ();
-- GetParam ()->SetAttachModalDialogs (testing_values::ATTACH_MODAL_DIALOGS_VALUE);
--
-- EXPECT_CALL (*mSettingsMock, attachModalDialogsChanged (testing_values::ATTACH_MODAL_DIALOGS_VALUE));
--
-- gwd_settings_storage_update_attach_modal_dialogs (storage);
--}
--
- TEST_P (GWDSettingsTestStorageUpdates, TestSetBlur)
- {
- GWDSettingsStorage *storage = GetParam ()->GetStorage ();
-@@ -1414,15 +1369,6 @@
- gwd_settings_writable_draggable_border_width_changed, mWritable, draggableBorderWidth)));
- }
-
-- virtual void SetAttachModalDialogs (gboolean attachModalDialogs)
-- {
-- EXPECT_CALL (*mStorageMock, updateAttachModalDialogs ())
-- .WillOnce (
-- InvokeFunctor (
-- boost::bind (
-- gwd_settings_writable_attach_modal_dialogs_changed, mWritable, attachModalDialogs)));
-- }
--
- virtual void SetBlur (const std::string &blurType)
- {
- EXPECT_CALL (*mStorageMock, updateBlur ())
-@@ -1535,6 +1481,7 @@
- boost::bind (gwd_settings_storage_unref, _1));
-
- gwd_connect_org_compiz_gwd_settings (NULL, mStorage.get ());
-+ gwd_connect_org_gnome_metacity_settings (NULL, mStorage.get ());
- gwd_connect_org_gnome_mutter_settings (NULL, mStorage.get ());
- gwd_connect_org_gnome_desktop_wm_preferences_settings (NULL, mStorage.get ());
-
-@@ -1554,10 +1501,12 @@
-
- /* We do not need to keep a reference to these */
- mGWDSettings = gwd_get_org_compiz_gwd_settings ();
-+ mMetacitySettings = gwd_get_org_gnome_mutter_settings ();
- mMutterSettings = gwd_get_org_gnome_mutter_settings ();
- mDesktopSettings = gwd_get_org_gnome_desktop_wm_preferences_settings ();
-
- mStorage.reset (gwd_settings_storage_gsettings_new (mDesktopSettings,
-+ mMetacitySettings,
- mMutterSettings,
- mGWDSettings,
- writable),
-@@ -1579,11 +1528,6 @@
- g_settings_set_int (mMutterSettings, ORG_GNOME_MUTTER_DRAGGABLE_BORDER_WIDTH, draggableBorderWidth);
- }
-
-- virtual void SetAttachModalDialogs (gboolean attachModalDialogs)
-- {
-- g_settings_set_boolean (mMutterSettings, ORG_GNOME_MUTTER_ATTACH_MODAL_DIALOGS, attachModalDialogs);
-- }
--
- virtual void SetBlur (const std::string &blurType)
- {
- g_settings_set_string (mGWDSettings, ORG_COMPIZ_GWD_KEY_BLUR_TYPE, blurType.c_str ());
-@@ -1655,6 +1599,7 @@
- {
- mStorage.reset ();
- mGWDSettings = NULL;
-+ mMetacitySettings = NULL;
- mMutterSettings = NULL;
- mDesktopSettings = NULL;
- gsettingsEnv.TearDownEnv ();
-@@ -1664,6 +1609,7 @@
- private:
-
- GSettings *mGWDSettings;
-+ GSettings *mMetacitySettings;
- GSettings *mMutterSettings;
- GSettings *mDesktopSettings;
- boost::shared_ptr <GWDSettingsStorage> mStorage;
-diff -Nur original/gtk/window-decorator/util.c modified/gtk/window-decorator/util.c
---- original/gtk/window-decorator/util.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/util.c 2015-04-11 14:34:11.000000000 +0100
-@@ -21,19 +21,6 @@
-
- #include "gtk-window-decorator.h"
-
--double
--square (double x)
--{
-- return x * x;
--}
--
--double
--dist (double x1, double y1,
-- double x2, double y2)
--{
-- return sqrt (square (x1 - x2) + square (y1 - y2));
--}
--
- gboolean
- get_window_prop (Window xwindow,
- Atom atom,
-@@ -110,190 +97,3 @@
-
- return decor;
- }
--
--/* from clearlooks theme */
--static void
--rgb_to_hls (gdouble *r,
-- gdouble *g,
-- gdouble *b)
--{
-- gdouble min;
-- gdouble max;
-- gdouble red;
-- gdouble green;
-- gdouble blue;
-- gdouble h, l, s;
-- gdouble delta;
--
-- red = *r;
-- green = *g;
-- blue = *b;
--
-- if (red > green)
-- {
-- if (red > blue)
-- max = red;
-- else
-- max = blue;
--
-- if (green < blue)
-- min = green;
-- else
-- min = blue;
-- }
-- else
-- {
-- if (green > blue)
-- max = green;
-- else
-- max = blue;
--
-- if (red < blue)
-- min = red;
-- else
-- min = blue;
-- }
--
-- l = (max + min) / 2;
-- s = 0;
-- h = 0;
--
-- if (max != min)
-- {
-- if (l <= 0.5)
-- s = (max - min) / (max + min);
-- else
-- s = (max - min) / (2 - max - min);
--
-- delta = max -min;
-- if (red == max)
-- h = (green - blue) / delta;
-- else if (green == max)
-- h = 2 + (blue - red) / delta;
-- else if (blue == max)
-- h = 4 + (red - green) / delta;
--
-- h *= 60;
-- if (h < 0.0)
-- h += 360;
-- }
--
-- *r = h;
-- *g = l;
-- *b = s;
--}
--
--static void
--hls_to_rgb (gdouble *h,
-- gdouble *l,
-- gdouble *s)
--{
-- gdouble hue;
-- gdouble lightness;
-- gdouble saturation;
-- gdouble m1, m2;
-- gdouble r, g, b;
--
-- lightness = *l;
-- saturation = *s;
--
-- if (lightness <= 0.5)
-- m2 = lightness * (1 + saturation);
-- else
-- m2 = lightness + saturation - lightness * saturation;
--
-- m1 = 2 * lightness - m2;
--
-- if (saturation == 0)
-- {
-- *h = lightness;
-- *l = lightness;
-- *s = lightness;
-- }
-- else
-- {
-- hue = *h + 120;
-- while (hue > 360)
-- hue -= 360;
-- while (hue < 0)
-- hue += 360;
--
-- if (hue < 60)
-- r = m1 + (m2 - m1) * hue / 60;
-- else if (hue < 180)
-- r = m2;
-- else if (hue < 240)
-- r = m1 + (m2 - m1) * (240 - hue) / 60;
-- else
-- r = m1;
--
-- hue = *h;
-- while (hue > 360)
-- hue -= 360;
-- while (hue < 0)
-- hue += 360;
--
-- if (hue < 60)
-- g = m1 + (m2 - m1) * hue / 60;
-- else if (hue < 180)
-- g = m2;
-- else if (hue < 240)
-- g = m1 + (m2 - m1) * (240 - hue) / 60;
-- else
-- g = m1;
--
-- hue = *h - 120;
-- while (hue > 360)
-- hue -= 360;
-- while (hue < 0)
-- hue += 360;
--
-- if (hue < 60)
-- b = m1 + (m2 - m1) * hue / 60;
-- else if (hue < 180)
-- b = m2;
-- else if (hue < 240)
-- b = m1 + (m2 - m1) * (240 - hue) / 60;
-- else
-- b = m1;
--
-- *h = r;
-- *l = g;
-- *s = b;
-- }
--}
--
--void
--shade (const decor_color_t *a,
-- decor_color_t *b,
-- float k)
--{
-- double red;
-- double green;
-- double blue;
--
-- red = a->r;
-- green = a->g;
-- blue = a->b;
--
-- rgb_to_hls (&red, &green, &blue);
--
-- green *= k;
-- if (green > 1.0)
-- green = 1.0;
-- else if (green < 0.0)
-- green = 0.0;
--
-- blue *= k;
-- if (blue > 1.0)
-- blue = 1.0;
-- else if (blue < 0.0)
-- blue = 0.0;
--
-- hls_to_rgb (&red, &green, &blue);
--
-- b->r = red;
-- b->g = green;
-- b->b = blue;
--}
--
-diff -Nur original/gtk/window-decorator/wnck.c modified/gtk/window-decorator/wnck.c
---- original/gtk/window-decorator/wnck.c 2015-04-11 14:38:52.624406000 +0100
-+++ modified/gtk/window-decorator/wnck.c 2015-04-11 14:34:11.000000000 +0100
-@@ -162,7 +162,7 @@
- }
- }
-
--void
-+static void
- update_frames_border_extents (gpointer key,
- gpointer value,
- gpointer user_data)
-@@ -590,7 +590,7 @@
- draw_list = g_slist_remove (draw_list, d);
- }
-
--void
-+static void
- connect_window (WnckWindow *win)
- {
- g_signal_connect_object (win, "name_changed",
-@@ -762,7 +762,7 @@
- }
- }
-
--void
-+static void
- window_opened (WnckScreen *screen,
- WnckWindow *win)
- {