summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraurelien <aurelien@cwb.io>2013-09-25 15:57:53 +0200
committeraurelien <aurelien@cwb.io>2013-09-25 15:57:53 +0200
commitc2307a65147cd7aa22e30e6edd69c460b153bbbc (patch)
treeebf1091a6361a27093d84055726765ce660bb5b8
parent0f2365941f7fabcae71f5beaf964b0b9cfa2a422 (diff)
downloadabslibre-c2307a65147cd7aa22e30e6edd69c460b153bbbc.tar.gz
abslibre-c2307a65147cd7aa22e30e6edd69c460b153bbbc.tar.bz2
abslibre-c2307a65147cd7aa22e30e6edd69c460b153bbbc.zip
+ xfwm4-titleless
-rw-r--r--pcr/xfwm4-titleless/PKGBUILD46
-rw-r--r--pcr/xfwm4-titleless/xfwm4-hide-titlebar-when-maximized.patch1456
-rw-r--r--pcr/xfwm4-titleless/xfwm4.install13
3 files changed, 1515 insertions, 0 deletions
diff --git a/pcr/xfwm4-titleless/PKGBUILD b/pcr/xfwm4-titleless/PKGBUILD
new file mode 100644
index 000000000..dd80d287d
--- /dev/null
+++ b/pcr/xfwm4-titleless/PKGBUILD
@@ -0,0 +1,46 @@
+# Contributor: Christian Hesse <mail@eworm.de>
+# Contributor: Evangelos Foutras <evangelos@foutrelis.com>
+# Contributor: tobias <tobias funnychar archlinux.org>
+# Maintainer : Parabola Aurélien DESBRIÈRES <aurelien@replicant.io>
+
+pkgname=xfwm4-titleless
+pkgver=4.10.1
+pkgrel=1
+pkgdesc="Xfce window manager - patched with option to hide titlebar when maximized"
+arch=('i686' 'x86_64')
+url="https://bitbucket.org/thesame/xfwm4-titleless"
+license=('GPL2')
+depends=('libxfce4ui' 'libwnck' 'hicolor-icon-theme')
+makedepends=('intltool')
+options=('!libtool')
+conflicts=('xfwm4')
+provides=('xfwm4')
+install=${pkgname%%-*}.install
+source=("http://archive.xfce.org/src/xfce/${pkgname%%-*}/4.10/${pkgname%%-*}-${pkgver}.tar.bz2"
+ "xfwm4-hide-titlebar-when-maximized.patch")
+
+build() {
+ cd "${srcdir}/${pkgname%%-*}-${pkgver}"
+
+ patch -Np1 < ${srcdir}/xfwm4-hide-titlebar-when-maximized.patch
+
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --libexecdir=/usr/lib \
+ --localstatedir=/var \
+ --disable-static \
+ --enable-startup-notification \
+ --enable-randr \
+ --enable-compositor \
+ --enable-xsync \
+ --disable-debug
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname%%-*}-${pkgver}"
+
+ make DESTDIR="${pkgdir}" install
+}
+
diff --git a/pcr/xfwm4-titleless/xfwm4-hide-titlebar-when-maximized.patch b/pcr/xfwm4-titleless/xfwm4-hide-titlebar-when-maximized.patch
new file mode 100644
index 000000000..fa43b6b8e
--- /dev/null
+++ b/pcr/xfwm4-titleless/xfwm4-hide-titlebar-when-maximized.patch
@@ -0,0 +1,1456 @@
+From 999c375f5342947525813584fbdc92f3b63dced6 Mon Sep 17 00:00:00 2001
+From: Christian Hesse <eworm@leda.eworm.de>
+Date: Wed, 25 Sep 2013 15:16:57 +0200
+Subject: [PATCH 1/1] xfwm4: hide titlebar when maximized
+
+---
+ defaults/defaults | 1 +
+ settings-dialogs/tweaks-settings.c | 5 +
+ settings-dialogs/xfwm4-tweaks-dialog.glade | 25 +-
+ settings-dialogs/xfwm4-tweaks-dialog_ui.h | 612 +++++++++++++++--------------
+ src/client.c | 6 +
+ src/client.h | 1 +
+ src/display.c | 3 +-
+ src/display.h | 1 +
+ src/events.c | 5 +
+ src/frame.c | 366 ++++++++++-------
+ src/netwm.c | 38 ++
+ src/placement.c | 4 +-
+ src/settings.c | 8 +
+ src/settings.h | 1 +
+ 14 files changed, 616 insertions(+), 460 deletions(-)
+
+diff --git a/defaults/defaults b/defaults/defaults
+index 6db210a..1582fc1 100644
+--- a/defaults/defaults
++++ b/defaults/defaults
+@@ -1,5 +1,6 @@
+ activate_action=bring
+ borderless_maximize=true
++titleless_maximize=false
+ box_move=false
+ box_resize=false
+ button_layout=O|SHMC
+diff --git a/settings-dialogs/tweaks-settings.c b/settings-dialogs/tweaks-settings.c
+index f60b606..2532733 100644
+--- a/settings-dialogs/tweaks-settings.c
++++ b/settings-dialogs/tweaks-settings.c
+@@ -180,6 +180,7 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder)
+ GtkWidget *easy_click_combo_box = GTK_WIDGET (gtk_builder_get_object (builder, "easy_click_combo_box"));
+ GtkWidget *raise_with_any_button_check = GTK_WIDGET (gtk_builder_get_object (builder, "raise_with_any_button_check"));
+ GtkWidget *borderless_maximize_check = GTK_WIDGET (gtk_builder_get_object (builder, "borderless_maximize_check"));
++ GtkWidget *titleless_maximize_check = GTK_WIDGET (gtk_builder_get_object (builder, "titleless_maximize_check"));
+ GtkWidget *restore_on_move_check = GTK_WIDGET (gtk_builder_get_object (builder, "restore_on_move_check"));
+ GtkWidget *tile_on_move_check = GTK_WIDGET (gtk_builder_get_object (builder, "tile_on_move_check"));
+ GtkWidget *snap_resist_check = GTK_WIDGET (gtk_builder_get_object (builder, "snap_resist_check"));
+@@ -336,6 +337,10 @@ wm_tweaks_dialog_configure_widgets (GtkBuilder *builder)
+ G_TYPE_BOOLEAN,
+ (GObject *)borderless_maximize_check, "active");
+ xfconf_g_property_bind (xfwm4_channel,
++ "/general/titleless_maximize",
++ G_TYPE_BOOLEAN,
++ (GObject *)titleless_maximize_check, "active");
++ xfconf_g_property_bind (xfwm4_channel,
+ "/general/restore_on_move",
+ G_TYPE_BOOLEAN,
+ (GObject *)restore_on_move_check, "active");
+diff --git a/settings-dialogs/xfwm4-tweaks-dialog.glade b/settings-dialogs/xfwm4-tweaks-dialog.glade
+index bd2a86f..7d604c6 100644
+--- a/settings-dialogs/xfwm4-tweaks-dialog.glade
++++ b/settings-dialogs/xfwm4-tweaks-dialog.glade
+@@ -343,6 +343,21 @@ or "skip taskbar" properties set</property>
+ </packing>
+ </child>
+ <child>
++ <object class="GtkCheckButton" id="titleless_maximize_check">
++ <property name="label" translatable="yes">Hide _title of windows when maximized</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">False</property>
++ <property name="use_underline">True</property>
++ <property name="draw_indicator">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">False</property>
++ <property name="position">3</property>
++ </packing>
++ </child>
++ <child>
+ <object class="GtkCheckButton" id="restore_on_move_check">
+ <property name="label" translatable="yes">Restore original _size of maximized windows when moving</property>
+ <property name="visible">True</property>
+@@ -354,7 +369,7 @@ or "skip taskbar" properties set</property>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+- <property name="position">3</property>
++ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+@@ -369,7 +384,7 @@ or "skip taskbar" properties set</property>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+- <property name="position">4</property>
++ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+@@ -384,7 +399,7 @@ or "skip taskbar" properties set</property>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+- <property name="position">5</property>
++ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+@@ -399,7 +414,7 @@ or "skip taskbar" properties set</property>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+- <property name="position">5</property>
++ <property name="position">7</property>
+ </packing>
+ </child>
+ <child>
+@@ -414,7 +429,7 @@ or "skip taskbar" properties set</property>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+- <property name="position">6</property>
++ <property name="position">8</property>
+ </packing>
+ </child>
+ </object>
+diff --git a/settings-dialogs/xfwm4-tweaks-dialog_ui.h b/settings-dialogs/xfwm4-tweaks-dialog_ui.h
+index a6121dd..8ddbf30 100644
+--- a/settings-dialogs/xfwm4-tweaks-dialog_ui.h
++++ b/settings-dialogs/xfwm4-tweaks-dialog_ui.h
+@@ -177,332 +177,340 @@ static const char tweaks_dialog_ui[] =
+ "y><property name=\"draw_indicator\">True</property></object><packing><p"
+ "roperty name=\"expand\">False</property><property name=\"fill\">False</"
+ "property><property name=\"position\">2</property></packing></child><chi"
+- "ld><object class=\"GtkCheckButton\" id=\"restore_on_move_check\"><prope"
+- "rty name=\"label\" translatable=\"yes\">Restore original _size of maxim"
+- "ized windows when moving</property><property name=\"visible\">True</pro"
+- "perty><property name=\"can_focus\">True</property><property name=\"rece"
+- "ives_default\">False</property><property name=\"use_underline\">True</p"
+- "roperty><property name=\"draw_indicator\">True</property></object><pack"
+- "ing><property name=\"expand\">False</property><property name=\"fill\">F"
+- "alse</property><property name=\"position\">3</property></packing></chil"
+- "d><child><object class=\"GtkCheckButton\" id=\"tile_on_move_check\"><pr"
+- "operty name=\"label\" translatable=\"yes\">Automatically _tile windows "
+- "when moving toward the screen edge</property><property name=\"visible\""
+- ">True</property><property name=\"can_focus\">True</property><property n"
+- "ame=\"receives_default\">False</property><property name=\"use_underline"
+- "\">True</property><property name=\"draw_indicator\">True</property></ob"
+- "ject><packing><property name=\"expand\">False</property><property name="
+- "\"fill\">False</property><property name=\"position\">4</property></pack"
+- "ing></child><child><object class=\"GtkCheckButton\" id=\"snap_resist_ch"
+- "eck\"><property name=\"label\" translatable=\"yes\">Use _edge resistanc"
+- "e instead of window snapping</property><property name=\"visible\">True<"
+- "/property><property name=\"can_focus\">True</property><property name=\""
+- "receives_default\">False</property><property name=\"use_underline\">Tru"
+- "e</property><property name=\"draw_indicator\">True</property></object><"
+- "packing><property name=\"expand\">False</property><property name=\"fill"
+- "\">False</property><property name=\"position\">5</property></packing></"
+- "child><child><object class=\"GtkCheckButton\" id=\"urgent_blink\"><prop"
+- "erty name=\"label\" translatable=\"yes\">Notify of _urgency by making w"
+- "indow\'s decoration blink</property><property name=\"visible\">True</pr"
++ "ld><object class=\"GtkCheckButton\" id=\"titleless_maximize_check\"><pr"
++ "operty name=\"label\" translatable=\"yes\">Hide _title of windows when "
++ "maximized</property><property name=\"visible\">True</property><property"
++ " name=\"can_focus\">True</property><property name=\"receives_default\">"
++ "False</property><property name=\"use_underline\">True</property><proper"
++ "ty name=\"draw_indicator\">True</property></object><packing><property n"
++ "ame=\"expand\">False</property><property name=\"fill\">False</property>"
++ "<property name=\"position\">3</property></packing></child><child><objec"
++ "t class=\"GtkCheckButton\" id=\"restore_on_move_check\"><property name="
++ "\"label\" translatable=\"yes\">Restore original _size of maximized wind"
++ "ows when moving</property><property name=\"visible\">True</property><pr"
++ "operty name=\"can_focus\">True</property><property name=\"receives_defa"
++ "ult\">False</property><property name=\"use_underline\">True</property><"
++ "property name=\"draw_indicator\">True</property></object><packing><prop"
++ "erty name=\"expand\">False</property><property name=\"fill\">False</pro"
++ "perty><property name=\"position\">4</property></packing></child><child>"
++ "<object class=\"GtkCheckButton\" id=\"tile_on_move_check\"><property na"
++ "me=\"label\" translatable=\"yes\">Automatically _tile windows when movi"
++ "ng toward the screen edge</property><property name=\"visible\">True</pr"
+ "operty><property name=\"can_focus\">True</property><property name=\"rec"
+ "eives_default\">False</property><property name=\"use_underline\">True</"
+ "property><property name=\"draw_indicator\">True</property></object><pac"
+ "king><property name=\"expand\">False</property><property name=\"fill\">"
+ "False</property><property name=\"position\">5</property></packing></chi"
+- "ld><child><object class=\"GtkCheckButton\" id=\"repeat_urgent_blink\"><"
+- "property name=\"label\" translatable=\"yes\">Keep urgent windows _blink"
+- "ing repeatedly</property><property name=\"visible\">True</property><pro"
++ "ld><child><object class=\"GtkCheckButton\" id=\"snap_resist_check\"><pr"
++ "operty name=\"label\" translatable=\"yes\">Use _edge resistance instead"
++ " of window snapping</property><property name=\"visible\">True</property"
++ "><property name=\"can_focus\">True</property><property name=\"receives_"
++ "default\">False</property><property name=\"use_underline\">True</proper"
++ "ty><property name=\"draw_indicator\">True</property></object><packing><"
++ "property name=\"expand\">False</property><property name=\"fill\">False<"
++ "/property><property name=\"position\">6</property></packing></child><ch"
++ "ild><object class=\"GtkCheckButton\" id=\"urgent_blink\"><property name"
++ "=\"label\" translatable=\"yes\">Notify of _urgency by making window\'s "
++ "decoration blink</property><property name=\"visible\">True</property><p"
++ "roperty name=\"can_focus\">True</property><property name=\"receives_def"
++ "ault\">False</property><property name=\"use_underline\">True</property>"
++ "<property name=\"draw_indicator\">True</property></object><packing><pro"
++ "perty name=\"expand\">False</property><property name=\"fill\">False</pr"
++ "operty><property name=\"position\">7</property></packing></child><child"
++ "><object class=\"GtkCheckButton\" id=\"repeat_urgent_blink\"><property "
++ "name=\"label\" translatable=\"yes\">Keep urgent windows _blinking repea"
++ "tedly</property><property name=\"visible\">True</property><property nam"
++ "e=\"can_focus\">True</property><property name=\"receives_default\">Fals"
++ "e</property><property name=\"use_underline\">True</property><property n"
++ "ame=\"draw_indicator\">True</property></object><packing><property name="
++ "\"expand\">False</property><property name=\"fill\">False</property><pro"
++ "perty name=\"position\">8</property></packing></child></object><packing"
++ "><property name=\"position\">2</property></packing></child><child type="
++ "\"tab\"><object class=\"GtkLabel\" id=\"label3\"><property name=\"visib"
++ "le\">True</property><property name=\"label\" translatable=\"yes\">_Acce"
++ "ssibility</property><property name=\"use_underline\">True</property></o"
++ "bject><packing><property name=\"position\">2</property><property name=\""
++ "tab_fill\">False</property></packing></child><child><object class=\"Gtk"
++ "VBox\" id=\"vbox5\"><property name=\"visible\">True</property><property"
++ " name=\"border_width\">12</property><property name=\"orientation\">vert"
++ "ical</property><property name=\"spacing\">6</property><child><object cl"
++ "ass=\"GtkCheckButton\" id=\"scroll_workspaces_check\"><property name=\""
++ "label\" translatable=\"yes\">Use the _mouse wheel on the desktop to swi"
++ "tch workspaces</property><property name=\"visible\">True</property><pro"
+ "perty name=\"can_focus\">True</property><property name=\"receives_defau"
+ "lt\">False</property><property name=\"use_underline\">True</property><p"
+ "roperty name=\"draw_indicator\">True</property></object><packing><prope"
+ "rty name=\"expand\">False</property><property name=\"fill\">False</prop"
+- "erty><property name=\"position\">6</property></packing></child></object"
+- "><packing><property name=\"position\">2</property></packing></child><ch"
+- "ild type=\"tab\"><object class=\"GtkLabel\" id=\"label3\"><property nam"
+- "e=\"visible\">True</property><property name=\"label\" translatable=\"ye"
+- "s\">_Accessibility</property><property name=\"use_underline\">True</pro"
+- "perty></object><packing><property name=\"position\">2</property><proper"
+- "ty name=\"tab_fill\">False</property></packing></child><child><object c"
+- "lass=\"GtkVBox\" id=\"vbox5\"><property name=\"visible\">True</property"
+- "><property name=\"border_width\">12</property><property name=\"orientat"
+- "ion\">vertical</property><property name=\"spacing\">6</property><child>"
+- "<object class=\"GtkCheckButton\" id=\"scroll_workspaces_check\"><proper"
+- "ty name=\"label\" translatable=\"yes\">Use the _mouse wheel on the desk"
+- "top to switch workspaces</property><property name=\"visible\">True</pro"
+- "perty><property name=\"can_focus\">True</property><property name=\"rece"
+- "ives_default\">False</property><property name=\"use_underline\">True</p"
+- "roperty><property name=\"draw_indicator\">True</property></object><pack"
+- "ing><property name=\"expand\">False</property><property name=\"fill\">F"
+- "alse</property><property name=\"position\">0</property></packing></chil"
+- "d><child><object class=\"GtkCheckButton\" id=\"toggle_workspaces_check\""
+- "><property name=\"label\" translatable=\"yes\">_Remember and recall pre"
+- "vious workspace\nwhen switching via keyboard shortcuts</property><prope"
+- "rty name=\"visible\">True</property><property name=\"can_focus\">True</"
+- "property><property name=\"receives_default\">False</property><property "
+- "name=\"use_underline\">True</property><property name=\"draw_indicator\""
+- ">True</property></object><packing><property name=\"expand\">False</prop"
+- "erty><property name=\"fill\">False</property><property name=\"position\""
+- ">1</property></packing></child><child><object class=\"GtkCheckButton\" "
+- "id=\"wrap_layout_check\"><property name=\"label\" translatable=\"yes\">"
+- "Wrap workspaces depending on the actual desktop _layout</property><prop"
+- "erty name=\"visible\">True</property><property name=\"can_focus\">True<"
+- "/property><property name=\"receives_default\">False</property><property"
+- " name=\"use_underline\">True</property><property name=\"draw_indicator\""
+- ">True</property></object><packing><property name=\"expand\">False</prop"
+- "erty><property name=\"fill\">False</property><property name=\"position\""
+- ">2</property></packing></child><child><object class=\"GtkCheckButton\" "
+- "id=\"wrap_cycle_check\"><property name=\"label\" translatable=\"yes\">W"
+- "rap workspaces when the _first or the last workspace is reached</proper"
+- "ty><property name=\"visible\">True</property><property name=\"can_focus"
+- "\">True</property><property name=\"receives_default\">False</property><"
+- "property name=\"use_underline\">True</property><property name=\"draw_in"
+- "dicator\">True</property></object><packing><property name=\"expand\">Fa"
+- "lse</property><property name=\"fill\">False</property><property name=\""
+- "position\">3</property></packing></child></object><packing><property na"
+- "me=\"position\">3</property></packing></child><child type=\"tab\"><obje"
+- "ct class=\"GtkLabel\" id=\"label4\"><property name=\"visible\">True</pr"
+- "operty><property name=\"label\" translatable=\"yes\">_Workspaces</prope"
+- "rty><property name=\"use_underline\">True</property></object><packing><"
+- "property name=\"position\">3</property><property name=\"tab_fill\">Fals"
+- "e</property></packing></child><child><object class=\"GtkVBox\" id=\"vbo"
+- "x6\"><property name=\"visible\">True</property><property name=\"border_"
+- "width\">12</property><property name=\"orientation\">vertical</property>"
+- "<property name=\"spacing\">6</property><child><object class=\"GtkLabel\""
+- " id=\"label8\"><property name=\"visible\">True</property><property name"
+- "=\"xalign\">0</property><property name=\"label\" translatable=\"yes\">_"
+- "Minimum size of windows to trigger smart placement:</property><property"
+- " name=\"use_underline\">True</property><property name=\"mnemonic_widget"
+- "\">placement_ratio_scale</property></object><packing><property name=\"e"
+- "xpand\">False</property><property name=\"fill\">False</property><proper"
+- "ty name=\"position\">0</property></packing></child><child><object class"
+- "=\"GtkAlignment\" id=\"alignment4\"><property name=\"visible\">True</pr"
+- "operty><property name=\"bottom_padding\">6</property><property name=\"l"
+- "eft_padding\">12</property><child><object class=\"GtkHBox\" id=\"hbox2\""
+- "><property name=\"visible\">True</property><property name=\"spacing\">1"
+- "2</property><child><object class=\"GtkLabel\" id=\"label9\"><property n"
+- "ame=\"visible\">True</property><property name=\"label\" translatable=\""
+- "yes\" comments=\"Smart placement size\">&lt;i&gt;Small&lt;/i&gt;</prope"
+- "rty><property name=\"use_markup\">True</property></object><packing><pro"
+- "perty name=\"expand\">False</property><property name=\"fill\">False</pr"
+- "operty><property name=\"position\">0</property></packing></child><child"
+- "><object class=\"GtkHScale\" id=\"placement_ratio_scale\"><property nam"
+- "e=\"visible\">True</property><property name=\"can_focus\">True</propert"
+- "y><property name=\"adjustment\">adjustment1</property><property name=\""
+- "restrict_to_fill_level\">False</property><property name=\"draw_value\">"
+- "False</property></object><packing><property name=\"position\">1</proper"
+- "ty></packing></child><child><object class=\"GtkLabel\" id=\"label10\"><"
+- "property name=\"visible\">True</property><property name=\"label\" trans"
+- "latable=\"yes\" comments=\"Smart placement size\">&lt;i&gt;Large&lt;/i&"
+- "gt;</property><property name=\"use_markup\">True</property></object><pa"
+- "cking><property name=\"expand\">False</property><property name=\"positi"
+- "on\">2</property></packing></child></object></child></object><packing><"
+- "property name=\"expand\">False</property><property name=\"fill\">False<"
+- "/property><property name=\"position\">1</property></packing></child><ch"
+- "ild><object class=\"GtkVBox\" id=\"default_placement_box\"><property na"
+- "me=\"visible\">True</property><property name=\"orientation\">vertical</"
+- "property><property name=\"spacing\">6</property><child><object class=\""
+- "GtkLabel\" id=\"label27\"><property name=\"visible\">True</property><pr"
+- "operty name=\"xalign\">0</property><property name=\"label\" translatabl"
+- "e=\"yes\">By default, place windows:</property></object><packing><prope"
+- "rty name=\"position\">0</property></packing></child><child><object clas"
+- "s=\"GtkAlignment\" id=\"alignment10\"><property name=\"visible\">True</"
+- "property><property name=\"bottom_padding\">6</property><property name=\""
+- "left_padding\">12</property><child><object class=\"GtkVBox\" id=\"vbox1"
+- "8\"><property name=\"visible\">True</property><property name=\"border_w"
+- "idth\">6</property><property name=\"orientation\">vertical</property><p"
+- "roperty name=\"spacing\">6</property><child><object class=\"GtkRadioBut"
+- "ton\" id=\"placement_center_option\"><property name=\"label\" translata"
+- "ble=\"yes\">At the _center of the screen</property><property name=\"vis"
+- "ible\">True</property><property name=\"can_focus\">True</property><prop"
+- "erty name=\"receives_default\">False</property><property name=\"use_und"
+- "erline\">True</property><property name=\"draw_indicator\">True</propert"
+- "y></object><packing><property name=\"position\">0</property></packing><"
+- "/child><child><object class=\"GtkRadioButton\" id=\"placement_mouse_opt"
+- "ion\"><property name=\"label\" translatable=\"yes\">Under the mouse _po"
+- "inter</property><property name=\"visible\">True</property><property nam"
+- "e=\"can_focus\">True</property><property name=\"receives_default\">Fals"
+- "e</property><property name=\"use_underline\">True</property><property n"
+- "ame=\"active\">True</property><property name=\"draw_indicator\">True</p"
+- "roperty><property name=\"group\">placement_center_option</property></ob"
+- "ject><packing><property name=\"position\">1</property></packing></child"
+- "></object></child></object><packing><property name=\"position\">1</prop"
+- "erty></packing></child></object><packing><property name=\"expand\">Fals"
+- "e</property><property name=\"fill\">False</property><property name=\"po"
+- "sition\">2</property></packing></child></object><packing><property name"
+- "=\"position\">4</property></packing></child><child type=\"tab\"><object"
+- " class=\"GtkLabel\" id=\"label5\"><property name=\"visible\">True</prop"
+- "erty><property name=\"label\" translatable=\"yes\">_Placement</property"
+- "><property name=\"use_underline\">True</property></object><packing><pro"
+- "perty name=\"position\">4</property><property name=\"tab_fill\">False</"
+- "property></packing></child><child><object class=\"GtkVBox\" id=\"vbox7\""
+- "><property name=\"visible\">True</property><property name=\"border_widt"
+- "h\">12</property><property name=\"orientation\">vertical</property><pro"
+- "perty name=\"spacing\">6</property><child><object class=\"GtkCheckButto"
+- "n\" id=\"use_compositing_check\"><property name=\"label\" translatable="
+- "\"yes\">_Enable display compositing</property><property name=\"visible\""
+- ">True</property><property name=\"can_focus\">True</property><property n"
+- "ame=\"receives_default\">False</property><property name=\"use_underline"
+- "\">True</property><property name=\"draw_indicator\">True</property></ob"
+- "ject><packing><property name=\"expand\">False</property><property name="
+- "\"fill\">False</property><property name=\"position\">0</property></pack"
+- "ing></child><child><object class=\"GtkScrolledWindow\" id=\"use_composi"
+- "ting_box\"><property name=\"visible\">True</property><property name=\"s"
+- "ensitive\">False</property><property name=\"can_focus\">True</property>"
+- "<property name=\"hscrollbar_policy\">never</property><property name=\"v"
+- "scrollbar_policy\">automatic</property><child><object class=\"GtkViewpo"
+- "rt\" id=\"viewport1\"><property name=\"visible\">True</property><proper"
+- "ty name=\"resize_mode\">queue</property><property name=\"shadow_type\">"
+- "none</property><child><object class=\"GtkAlignment\" id=\"alignment3\">"
+- "<property name=\"visible\">True</property><property name=\"bottom_paddi"
+- "ng\">6</property><property name=\"left_padding\">12</property><child><o"
+- "bject class=\"GtkVBox\" id=\"vbox8\"><property name=\"visible\">True</p"
+- "roperty><property name=\"orientation\">vertical</property><property nam"
+- "e=\"spacing\">6</property><child><object class=\"GtkCheckButton\" id=\""
+- "unredirect_overlays_check\"><property name=\"label\" translatable=\"yes"
+- "\">Display _fullscreen overlay windows directly</property><property nam"
++ "erty><property name=\"position\">0</property></packing></child><child><"
++ "object class=\"GtkCheckButton\" id=\"toggle_workspaces_check\"><propert"
++ "y name=\"label\" translatable=\"yes\">_Remember and recall previous wor"
++ "kspace\nwhen switching via keyboard shortcuts</property><property name="
++ "\"visible\">True</property><property name=\"can_focus\">True</property>"
++ "<property name=\"receives_default\">False</property><property name=\"us"
++ "e_underline\">True</property><property name=\"draw_indicator\">True</pr"
++ "operty></object><packing><property name=\"expand\">False</property><pro"
++ "perty name=\"fill\">False</property><property name=\"position\">1</prop"
++ "erty></packing></child><child><object class=\"GtkCheckButton\" id=\"wra"
++ "p_layout_check\"><property name=\"label\" translatable=\"yes\">Wrap wor"
++ "kspaces depending on the actual desktop _layout</property><property nam"
+ "e=\"visible\">True</property><property name=\"can_focus\">True</propert"
+ "y><property name=\"receives_default\">False</property><property name=\""
+ "use_underline\">True</property><property name=\"draw_indicator\">True</"
+ "property></object><packing><property name=\"expand\">False</property><p"
+- "roperty name=\"position\">0</property></packing></child><child><object "
+- "class=\"GtkCheckButton\" id=\"show_frame_shadow_check\"><property name="
+- "\"label\" translatable=\"yes\">Show shadows under _regular windows</pro"
+- "perty><property name=\"visible\">True</property><property name=\"can_fo"
+- "cus\">True</property><property name=\"receives_default\">False</propert"
+- "y><property name=\"use_underline\">True</property><property name=\"draw"
+- "_indicator\">True</property></object><packing><property name=\"expand\""
+- ">False</property><property name=\"position\">1</property></packing></ch"
+- "ild><child><object class=\"GtkCheckButton\" id=\"show_popup_shadow_chec"
+- "k\"><property name=\"label\" translatable=\"yes\">Show shadows under po"
+- "p_up windows</property><property name=\"visible\">True</property><prope"
+- "rty name=\"can_focus\">True</property><property name=\"receives_default"
+- "\">False</property><property name=\"use_underline\">True</property><pro"
+- "perty name=\"draw_indicator\">True</property></object><packing><propert"
+- "y name=\"expand\">False</property><property name=\"position\">2</proper"
+- "ty></packing></child><child><object class=\"GtkCheckButton\" id=\"show_"
+- "dock_shadow_check\"><property name=\"label\" translatable=\"yes\">Show "
+- "shadows under _dock windows</property><property name=\"visible\">True</"
+- "property><property name=\"can_focus\">True</property><property name=\"r"
+- "eceives_default\">False</property><property name=\"use_underline\">True"
+- "</property><property name=\"draw_indicator\">True</property></object><p"
+- "acking><property name=\"expand\">False</property><property name=\"posit"
+- "ion\">3</property></packing></child><child><object class=\"GtkLabel\" i"
+- "d=\"label12\"><property name=\"visible\">True</property><property name="
+- "\"xalign\">0</property><property name=\"label\" translatable=\"yes\">Op"
+- "aci_ty of window decorations:</property><property name=\"use_underline\""
+- ">True</property><property name=\"mnemonic_widget\">frame_opacity_scale<"
+- "/property></object><packing><property name=\"expand\">False</property><"
+- "property name=\"position\">4</property></packing></child><child><object"
+- " class=\"GtkAlignment\" id=\"alignment5\"><property name=\"visible\">Tr"
+- "ue</property><property name=\"top_padding\">2</property><property name="
+- "\"left_padding\">12</property><child><object class=\"GtkHBox\" id=\"hbo"
+- "x3\"><property name=\"visible\">True</property><child><object class=\"G"
+- "tkLabel\" id=\"label17\"><property name=\"visible\">True</property><pro"
+- "perty name=\"label\" translatable=\"yes\">&lt;i&gt;Transparent&lt;/i&gt"
+- ";</property><property name=\"use_markup\">True</property></object><pack"
+- "ing><property name=\"expand\">False</property><property name=\"fill\">F"
+- "alse</property><property name=\"position\">0</property></packing></chil"
+- "d><child><object class=\"GtkHScale\" id=\"frame_opacity_scale\"><proper"
++ "roperty name=\"fill\">False</property><property name=\"position\">2</pr"
++ "operty></packing></child><child><object class=\"GtkCheckButton\" id=\"w"
++ "rap_cycle_check\"><property name=\"label\" translatable=\"yes\">Wrap wo"
++ "rkspaces when the _first or the last workspace is reached</property><pr"
++ "operty name=\"visible\">True</property><property name=\"can_focus\">Tru"
++ "e</property><property name=\"receives_default\">False</property><proper"
++ "ty name=\"use_underline\">True</property><property name=\"draw_indicato"
++ "r\">True</property></object><packing><property name=\"expand\">False</p"
++ "roperty><property name=\"fill\">False</property><property name=\"positi"
++ "on\">3</property></packing></child></object><packing><property name=\"p"
++ "osition\">3</property></packing></child><child type=\"tab\"><object cla"
++ "ss=\"GtkLabel\" id=\"label4\"><property name=\"visible\">True</property"
++ "><property name=\"label\" translatable=\"yes\">_Workspaces</property><p"
++ "roperty name=\"use_underline\">True</property></object><packing><proper"
++ "ty name=\"position\">3</property><property name=\"tab_fill\">False</pro"
++ "perty></packing></child><child><object class=\"GtkVBox\" id=\"vbox6\"><"
++ "property name=\"visible\">True</property><property name=\"border_width\""
++ ">12</property><property name=\"orientation\">vertical</property><proper"
++ "ty name=\"spacing\">6</property><child><object class=\"GtkLabel\" id=\""
++ "label8\"><property name=\"visible\">True</property><property name=\"xal"
++ "ign\">0</property><property name=\"label\" translatable=\"yes\">_Minimu"
++ "m size of windows to trigger smart placement:</property><property name="
++ "\"use_underline\">True</property><property name=\"mnemonic_widget\">pla"
++ "cement_ratio_scale</property></object><packing><property name=\"expand\""
++ ">False</property><property name=\"fill\">False</property><property name"
++ "=\"position\">0</property></packing></child><child><object class=\"GtkA"
++ "lignment\" id=\"alignment4\"><property name=\"visible\">True</property>"
++ "<property name=\"bottom_padding\">6</property><property name=\"left_pad"
++ "ding\">12</property><child><object class=\"GtkHBox\" id=\"hbox2\"><prop"
++ "erty name=\"visible\">True</property><property name=\"spacing\">12</pro"
++ "perty><child><object class=\"GtkLabel\" id=\"label9\"><property name=\""
++ "visible\">True</property><property name=\"label\" translatable=\"yes\" "
++ "comments=\"Smart placement size\">&lt;i&gt;Small&lt;/i&gt;</property><p"
++ "roperty name=\"use_markup\">True</property></object><packing><property "
++ "name=\"expand\">False</property><property name=\"fill\">False</property"
++ "><property name=\"position\">0</property></packing></child><child><obje"
++ "ct class=\"GtkHScale\" id=\"placement_ratio_scale\"><property name=\"vi"
++ "sible\">True</property><property name=\"can_focus\">True</property><pro"
++ "perty name=\"adjustment\">adjustment1</property><property name=\"restri"
++ "ct_to_fill_level\">False</property><property name=\"draw_value\">False<"
++ "/property></object><packing><property name=\"position\">1</property></p"
++ "acking></child><child><object class=\"GtkLabel\" id=\"label10\"><proper"
++ "ty name=\"visible\">True</property><property name=\"label\" translatabl"
++ "e=\"yes\" comments=\"Smart placement size\">&lt;i&gt;Large&lt;/i&gt;</p"
++ "roperty><property name=\"use_markup\">True</property></object><packing>"
++ "<property name=\"expand\">False</property><property name=\"position\">2"
++ "</property></packing></child></object></child></object><packing><proper"
++ "ty name=\"expand\">False</property><property name=\"fill\">False</prope"
++ "rty><property name=\"position\">1</property></packing></child><child><o"
++ "bject class=\"GtkVBox\" id=\"default_placement_box\"><property name=\"v"
++ "isible\">True</property><property name=\"orientation\">vertical</proper"
++ "ty><property name=\"spacing\">6</property><child><object class=\"GtkLab"
++ "el\" id=\"label27\"><property name=\"visible\">True</property><property"
++ " name=\"xalign\">0</property><property name=\"label\" translatable=\"ye"
++ "s\">By default, place windows:</property></object><packing><property na"
++ "me=\"position\">0</property></packing></child><child><object class=\"Gt"
++ "kAlignment\" id=\"alignment10\"><property name=\"visible\">True</proper"
++ "ty><property name=\"bottom_padding\">6</property><property name=\"left_"
++ "padding\">12</property><child><object class=\"GtkVBox\" id=\"vbox18\"><"
++ "property name=\"visible\">True</property><property name=\"border_width\""
++ ">6</property><property name=\"orientation\">vertical</property><propert"
++ "y name=\"spacing\">6</property><child><object class=\"GtkRadioButton\" "
++ "id=\"placement_center_option\"><property name=\"label\" translatable=\""
++ "yes\">At the _center of the screen</property><property name=\"visible\""
++ ">True</property><property name=\"can_focus\">True</property><property n"
++ "ame=\"receives_default\">False</property><property name=\"use_underline"
++ "\">True</property><property name=\"draw_indicator\">True</property></ob"
++ "ject><packing><property name=\"position\">0</property></packing></child"
++ "><child><object class=\"GtkRadioButton\" id=\"placement_mouse_option\">"
++ "<property name=\"label\" translatable=\"yes\">Under the mouse _pointer<"
++ "/property><property name=\"visible\">True</property><property name=\"ca"
++ "n_focus\">True</property><property name=\"receives_default\">False</pro"
++ "perty><property name=\"use_underline\">True</property><property name=\""
++ "active\">True</property><property name=\"draw_indicator\">True</propert"
++ "y><property name=\"group\">placement_center_option</property></object><"
++ "packing><property name=\"position\">1</property></packing></child></obj"
++ "ect></child></object><packing><property name=\"position\">1</property><"
++ "/packing></child></object><packing><property name=\"expand\">False</pro"
++ "perty><property name=\"fill\">False</property><property name=\"position"
++ "\">2</property></packing></child></object><packing><property name=\"pos"
++ "ition\">4</property></packing></child><child type=\"tab\"><object class"
++ "=\"GtkLabel\" id=\"label5\"><property name=\"visible\">True</property><"
++ "property name=\"label\" translatable=\"yes\">_Placement</property><prop"
++ "erty name=\"use_underline\">True</property></object><packing><property "
++ "name=\"position\">4</property><property name=\"tab_fill\">False</proper"
++ "ty></packing></child><child><object class=\"GtkVBox\" id=\"vbox7\"><pro"
++ "perty name=\"visible\">True</property><property name=\"border_width\">1"
++ "2</property><property name=\"orientation\">vertical</property><property"
++ " name=\"spacing\">6</property><child><object class=\"GtkCheckButton\" i"
++ "d=\"use_compositing_check\"><property name=\"label\" translatable=\"yes"
++ "\">_Enable display compositing</property><property name=\"visible\">Tru"
++ "e</property><property name=\"can_focus\">True</property><property name="
++ "\"receives_default\">False</property><property name=\"use_underline\">T"
++ "rue</property><property name=\"draw_indicator\">True</property></object"
++ "><packing><property name=\"expand\">False</property><property name=\"fi"
++ "ll\">False</property><property name=\"position\">0</property></packing>"
++ "</child><child><object class=\"GtkScrolledWindow\" id=\"use_compositing"
++ "_box\"><property name=\"visible\">True</property><property name=\"sensi"
++ "tive\">False</property><property name=\"can_focus\">True</property><pro"
++ "perty name=\"hscrollbar_policy\">never</property><property name=\"vscro"
++ "llbar_policy\">automatic</property><child><object class=\"GtkViewport\""
++ " id=\"viewport1\"><property name=\"visible\">True</property><property n"
++ "ame=\"resize_mode\">queue</property><property name=\"shadow_type\">none"
++ "</property><child><object class=\"GtkAlignment\" id=\"alignment3\"><pro"
++ "perty name=\"visible\">True</property><property name=\"bottom_padding\""
++ ">6</property><property name=\"left_padding\">12</property><child><objec"
++ "t class=\"GtkVBox\" id=\"vbox8\"><property name=\"visible\">True</prope"
++ "rty><property name=\"orientation\">vertical</property><property name=\""
++ "spacing\">6</property><child><object class=\"GtkCheckButton\" id=\"unre"
++ "direct_overlays_check\"><property name=\"label\" translatable=\"yes\">D"
++ "isplay _fullscreen overlay windows directly</property><property name=\""
++ "visible\">True</property><property name=\"can_focus\">True</property><p"
++ "roperty name=\"receives_default\">False</property><property name=\"use_"
++ "underline\">True</property><property name=\"draw_indicator\">True</prop"
++ "erty></object><packing><property name=\"expand\">False</property><prope"
++ "rty name=\"position\">0</property></packing></child><child><object clas"
++ "s=\"GtkCheckButton\" id=\"show_frame_shadow_check\"><property name=\"la"
++ "bel\" translatable=\"yes\">Show shadows under _regular windows</propert"
++ "y><property name=\"visible\">True</property><property name=\"can_focus\""
++ ">True</property><property name=\"receives_default\">False</property><pr"
++ "operty name=\"use_underline\">True</property><property name=\"draw_indi"
++ "cator\">True</property></object><packing><property name=\"expand\">Fals"
++ "e</property><property name=\"position\">1</property></packing></child><"
++ "child><object class=\"GtkCheckButton\" id=\"show_popup_shadow_check\"><"
++ "property name=\"label\" translatable=\"yes\">Show shadows under pop_up "
++ "windows</property><property name=\"visible\">True</property><property n"
++ "ame=\"can_focus\">True</property><property name=\"receives_default\">Fa"
++ "lse</property><property name=\"use_underline\">True</property><property"
++ " name=\"draw_indicator\">True</property></object><packing><property nam"
++ "e=\"expand\">False</property><property name=\"position\">2</property></"
++ "packing></child><child><object class=\"GtkCheckButton\" id=\"show_dock_"
++ "shadow_check\"><property name=\"label\" translatable=\"yes\">Show shado"
++ "ws under _dock windows</property><property name=\"visible\">True</prope"
++ "rty><property name=\"can_focus\">True</property><property name=\"receiv"
++ "es_default\">False</property><property name=\"use_underline\">True</pro"
++ "perty><property name=\"draw_indicator\">True</property></object><packin"
++ "g><property name=\"expand\">False</property><property name=\"position\""
++ ">3</property></packing></child><child><object class=\"GtkLabel\" id=\"l"
++ "abel12\"><property name=\"visible\">True</property><property name=\"xal"
++ "ign\">0</property><property name=\"label\" translatable=\"yes\">Opaci_t"
++ "y of window decorations:</property><property name=\"use_underline\">Tru"
++ "e</property><property name=\"mnemonic_widget\">frame_opacity_scale</pro"
++ "perty></object><packing><property name=\"expand\">False</property><prop"
++ "erty name=\"position\">4</property></packing></child><child><object cla"
++ "ss=\"GtkAlignment\" id=\"alignment5\"><property name=\"visible\">True</"
++ "property><property name=\"top_padding\">2</property><property name=\"le"
++ "ft_padding\">12</property><child><object class=\"GtkHBox\" id=\"hbox3\""
++ "><property name=\"visible\">True</property><child><object class=\"GtkLa"
++ "bel\" id=\"label17\"><property name=\"visible\">True</property><propert"
++ "y name=\"label\" translatable=\"yes\">&lt;i&gt;Transparent&lt;/i&gt;</p"
++ "roperty><property name=\"use_markup\">True</property></object><packing>"
++ "<property name=\"expand\">False</property><property name=\"fill\">False"
++ "</property><property name=\"position\">0</property></packing></child><c"
++ "hild><object class=\"GtkHScale\" id=\"frame_opacity_scale\"><property n"
++ "ame=\"visible\">True</property><property name=\"can_focus\">True</prope"
++ "rty><property name=\"update_policy\">discontinuous</property><property "
++ "name=\"adjustment\">adjustment2</property><property name=\"restrict_to_"
++ "fill_level\">False</property><property name=\"draw_value\">False</prope"
++ "rty></object><packing><property name=\"position\">1</property></packing"
++ "></child><child><object class=\"GtkLabel\" id=\"label18\"><property nam"
++ "e=\"visible\">True</property><property name=\"label\" translatable=\"ye"
++ "s\">&lt;i&gt;Opaque&lt;/i&gt;</property><property name=\"use_markup\">T"
++ "rue</property></object><packing><property name=\"expand\">False</proper"
++ "ty><property name=\"fill\">False</property><property name=\"position\">"
++ "2</property></packing></child></object></child></object><packing><prope"
++ "rty name=\"expand\">False</property><property name=\"fill\">False</prop"
++ "erty><property name=\"position\">5</property></packing></child><child><"
++ "object class=\"GtkLabel\" id=\"label13\"><property name=\"visible\">Tru"
++ "e</property><property name=\"xalign\">0</property><property name=\"labe"
++ "l\" translatable=\"yes\">Opacity of _inactive windows:</property><prope"
++ "rty name=\"use_underline\">True</property><property name=\"mnemonic_wid"
++ "get\">inactive_opacity_scale</property></object><packing><property name"
++ "=\"expand\">False</property><property name=\"fill\">False</property><pr"
++ "operty name=\"position\">6</property></packing></child><child><object c"
++ "lass=\"GtkAlignment\" id=\"alignment6\"><property name=\"visible\">True"
++ "</property><property name=\"top_padding\">2</property><property name=\""
++ "left_padding\">12</property><child><object class=\"GtkHBox\" id=\"hbox4"
++ "\"><property name=\"visible\">True</property><child><object class=\"Gtk"
++ "Label\" id=\"label19\"><property name=\"visible\">True</property><prope"
++ "rty name=\"label\" translatable=\"yes\">&lt;i&gt;Transparent&lt;/i&gt;<"
++ "/property><property name=\"use_markup\">True</property></object><packin"
++ "g><property name=\"expand\">False</property><property name=\"fill\">Fal"
++ "se</property><property name=\"position\">0</property></packing></child>"
++ "<child><object class=\"GtkHScale\" id=\"inactive_opacity_scale\"><prope"
++ "rty name=\"visible\">True</property><property name=\"can_focus\">True</"
++ "property><property name=\"update_policy\">discontinuous</property><prop"
++ "erty name=\"adjustment\">adjustment3</property><property name=\"restric"
++ "t_to_fill_level\">False</property><property name=\"draw_value\">False</"
++ "property></object><packing><property name=\"position\">1</property></pa"
++ "cking></child><child><object class=\"GtkLabel\" id=\"label20\"><propert"
++ "y name=\"visible\">True</property><property name=\"label\" translatable"
++ "=\"yes\">&lt;i&gt;Opaque&lt;/i&gt;</property><property name=\"use_marku"
++ "p\">True</property></object><packing><property name=\"expand\">False</p"
++ "roperty><property name=\"fill\">False</property><property name=\"positi"
++ "on\">2</property></packing></child></object></child></object><packing><"
++ "property name=\"expand\">False</property><property name=\"fill\">False<"
++ "/property><property name=\"position\">7</property></packing></child><ch"
++ "ild><object class=\"GtkLabel\" id=\"label14\"><property name=\"visible\""
++ ">True</property><property name=\"xalign\">0</property><property name=\""
++ "label\" translatable=\"yes\">Opacity of windows during _move:</property"
++ "><property name=\"use_underline\">True</property><property name=\"mnemo"
++ "nic_widget\">move_opacity_scale</property></object><packing><property n"
++ "ame=\"expand\">False</property><property name=\"fill\">False</property>"
++ "<property name=\"position\">8</property></packing></child><child><objec"
++ "t class=\"GtkAlignment\" id=\"alignment7\"><property name=\"visible\">T"
++ "rue</property><property name=\"top_padding\">2</property><property name"
++ "=\"left_padding\">12</property><child><object class=\"GtkHBox\" id=\"hb"
++ "ox5\"><property name=\"visible\">True</property><child><object class=\""
++ "GtkLabel\" id=\"label21\"><property name=\"visible\">True</property><pr"
++ "operty name=\"label\" translatable=\"yes\">&lt;i&gt;Transparent&lt;/i&g"
++ "t;</property><property name=\"use_markup\">True</property></object><pac"
++ "king><property name=\"expand\">False</property><property name=\"fill\">"
++ "False</property><property name=\"position\">0</property></packing></chi"
++ "ld><child><object class=\"GtkHScale\" id=\"move_opacity_scale\"><proper"
+ "ty name=\"visible\">True</property><property name=\"can_focus\">True</p"
+ "roperty><property name=\"update_policy\">discontinuous</property><prope"
+- "rty name=\"adjustment\">adjustment2</property><property name=\"restrict"
++ "rty name=\"adjustment\">adjustment4</property><property name=\"restrict"
+ "_to_fill_level\">False</property><property name=\"draw_value\">False</p"
+ "roperty></object><packing><property name=\"position\">1</property></pac"
+- "king></child><child><object class=\"GtkLabel\" id=\"label18\"><property"
++ "king></child><child><object class=\"GtkLabel\" id=\"label22\"><property"
+ " name=\"visible\">True</property><property name=\"label\" translatable="
+ "\"yes\">&lt;i&gt;Opaque&lt;/i&gt;</property><property name=\"use_markup"
+ "\">True</property></object><packing><property name=\"expand\">False</pr"
+ "operty><property name=\"fill\">False</property><property name=\"positio"
+ "n\">2</property></packing></child></object></child></object><packing><p"
+ "roperty name=\"expand\">False</property><property name=\"fill\">False</"
+- "property><property name=\"position\">5</property></packing></child><chi"
+- "ld><object class=\"GtkLabel\" id=\"label13\"><property name=\"visible\""
++ "property><property name=\"position\">9</property></packing></child><chi"
++ "ld><object class=\"GtkLabel\" id=\"label15\"><property name=\"visible\""
+ ">True</property><property name=\"xalign\">0</property><property name=\""
+- "label\" translatable=\"yes\">Opacity of _inactive windows:</property><p"
+- "roperty name=\"use_underline\">True</property><property name=\"mnemonic"
+- "_widget\">inactive_opacity_scale</property></object><packing><property "
+- "name=\"expand\">False</property><property name=\"fill\">False</property"
+- "><property name=\"position\">6</property></packing></child><child><obje"
+- "ct class=\"GtkAlignment\" id=\"alignment6\"><property name=\"visible\">"
+- "True</property><property name=\"top_padding\">2</property><property nam"
+- "e=\"left_padding\">12</property><child><object class=\"GtkHBox\" id=\"h"
+- "box4\"><property name=\"visible\">True</property><child><object class=\""
+- "GtkLabel\" id=\"label19\"><property name=\"visible\">True</property><pr"
+- "operty name=\"label\" translatable=\"yes\">&lt;i&gt;Transparent&lt;/i&g"
+- "t;</property><property name=\"use_markup\">True</property></object><pac"
+- "king><property name=\"expand\">False</property><property name=\"fill\">"
+- "False</property><property name=\"position\">0</property></packing></chi"
+- "ld><child><object class=\"GtkHScale\" id=\"inactive_opacity_scale\"><pr"
+- "operty name=\"visible\">True</property><property name=\"can_focus\">Tru"
+- "e</property><property name=\"update_policy\">discontinuous</property><p"
+- "roperty name=\"adjustment\">adjustment3</property><property name=\"rest"
+- "rict_to_fill_level\">False</property><property name=\"draw_value\">Fals"
+- "e</property></object><packing><property name=\"position\">1</property><"
+- "/packing></child><child><object class=\"GtkLabel\" id=\"label20\"><prop"
+- "erty name=\"visible\">True</property><property name=\"label\" translata"
+- "ble=\"yes\">&lt;i&gt;Opaque&lt;/i&gt;</property><property name=\"use_ma"
+- "rkup\">True</property></object><packing><property name=\"expand\">False"
+- "</property><property name=\"fill\">False</property><property name=\"pos"
+- "ition\">2</property></packing></child></object></child></object><packin"
+- "g><property name=\"expand\">False</property><property name=\"fill\">Fal"
+- "se</property><property name=\"position\">7</property></packing></child>"
+- "<child><object class=\"GtkLabel\" id=\"label14\"><property name=\"visib"
+- "le\">True</property><property name=\"xalign\">0</property><property nam"
+- "e=\"label\" translatable=\"yes\">Opacity of windows during _move:</prop"
+- "erty><property name=\"use_underline\">True</property><property name=\"m"
+- "nemonic_widget\">move_opacity_scale</property></object><packing><proper"
++ "label\" translatable=\"yes\">Opacity of windows during resi_ze:</proper"
++ "ty><property name=\"use_underline\">True</property><property name=\"mne"
++ "monic_widget\">resize_opacity_scale</property></object><packing><proper"
+ "ty name=\"expand\">False</property><property name=\"fill\">False</prope"
+- "rty><property name=\"position\">8</property></packing></child><child><o"
+- "bject class=\"GtkAlignment\" id=\"alignment7\"><property name=\"visible"
+- "\">True</property><property name=\"top_padding\">2</property><property "
+- "name=\"left_padding\">12</property><child><object class=\"GtkHBox\" id="
+- "\"hbox5\"><property name=\"visible\">True</property><child><object clas"
+- "s=\"GtkLabel\" id=\"label21\"><property name=\"visible\">True</property"
+- "><property name=\"label\" translatable=\"yes\">&lt;i&gt;Transparent&lt;"
+- "/i&gt;</property><property name=\"use_markup\">True</property></object>"
+- "<packing><property name=\"expand\">False</property><property name=\"fil"
+- "l\">False</property><property name=\"position\">0</property></packing><"
+- "/child><child><object class=\"GtkHScale\" id=\"move_opacity_scale\"><pr"
+- "operty name=\"visible\">True</property><property name=\"can_focus\">Tru"
+- "e</property><property name=\"update_policy\">discontinuous</property><p"
+- "roperty name=\"adjustment\">adjustment4</property><property name=\"rest"
+- "rict_to_fill_level\">False</property><property name=\"draw_value\">Fals"
+- "e</property></object><packing><property name=\"position\">1</property><"
+- "/packing></child><child><object class=\"GtkLabel\" id=\"label22\"><prop"
+- "erty name=\"visible\">True</property><property name=\"label\" translata"
+- "ble=\"yes\">&lt;i&gt;Opaque&lt;/i&gt;</property><property name=\"use_ma"
+- "rkup\">True</property></object><packing><property name=\"expand\">False"
+- "</property><property name=\"fill\">False</property><property name=\"pos"
+- "ition\">2</property></packing></child></object></child></object><packin"
+- "g><property name=\"expand\">False</property><property name=\"fill\">Fal"
+- "se</property><property name=\"position\">9</property></packing></child>"
+- "<child><object class=\"GtkLabel\" id=\"label15\"><property name=\"visib"
+- "le\">True</property><property name=\"xalign\">0</property><property nam"
+- "e=\"label\" translatable=\"yes\">Opacity of windows during resi_ze:</pr"
+- "operty><property name=\"use_underline\">True</property><property name=\""
+- "mnemonic_widget\">resize_opacity_scale</property></object><packing><pro"
+- "perty name=\"expand\">False</property><property name=\"fill\">False</pr"
+- "operty><property name=\"position\">10</property></packing></child><chil"
+- "d><object class=\"GtkAlignment\" id=\"alignment8\"><property name=\"vis"
+- "ible\">True</property><property name=\"top_padding\">2</property><prope"
+- "rty name=\"left_padding\">12</property><child><object class=\"GtkHBox\""
+- " id=\"hbox6\"><property name=\"visible\">True</property><child><object "
+- "class=\"GtkLabel\" id=\"label23\"><property name=\"visible\">True</prop"
+- "erty><property name=\"label\" translatable=\"yes\">&lt;i&gt;Transparent"
+- "&lt;/i&gt;</property><property name=\"use_markup\">True</property></obj"
+- "ect><packing><property name=\"expand\">False</property><property name=\""
+- "fill\">False</property><property name=\"position\">0</property></packin"
+- "g></child><child><object class=\"GtkHScale\" id=\"resize_opacity_scale\""
+- "><property name=\"visible\">True</property><property name=\"can_focus\""
+- ">True</property><property name=\"update_policy\">discontinuous</propert"
+- "y><property name=\"adjustment\">adjustment5</property><property name=\""
+- "restrict_to_fill_level\">False</property><property name=\"draw_value\">"
+- "False</property></object><packing><property name=\"position\">1</proper"
+- "ty></packing></child><child><object class=\"GtkLabel\" id=\"label24\"><"
+- "property name=\"visible\">True</property><property name=\"label\" trans"
+- "latable=\"yes\">&lt;i&gt;Opaque&lt;/i&gt;</property><property name=\"us"
+- "e_markup\">True</property></object><packing><property name=\"expand\">F"
+- "alse</property><property name=\"fill\">False</property><property name=\""
++ "rty><property name=\"position\">10</property></packing></child><child><"
++ "object class=\"GtkAlignment\" id=\"alignment8\"><property name=\"visibl"
++ "e\">True</property><property name=\"top_padding\">2</property><property"
++ " name=\"left_padding\">12</property><child><object class=\"GtkHBox\" id"
++ "=\"hbox6\"><property name=\"visible\">True</property><child><object cla"
++ "ss=\"GtkLabel\" id=\"label23\"><property name=\"visible\">True</propert"
++ "y><property name=\"label\" translatable=\"yes\">&lt;i&gt;Transparent&lt"
++ ";/i&gt;</property><property name=\"use_markup\">True</property></object"
++ "><packing><property name=\"expand\">False</property><property name=\"fi"
++ "ll\">False</property><property name=\"position\">0</property></packing>"
++ "</child><child><object class=\"GtkHScale\" id=\"resize_opacity_scale\">"
++ "<property name=\"visible\">True</property><property name=\"can_focus\">"
++ "True</property><property name=\"update_policy\">discontinuous</property"
++ "><property name=\"adjustment\">adjustment5</property><property name=\"r"
++ "estrict_to_fill_level\">False</property><property name=\"draw_value\">F"
++ "alse</property></object><packing><property name=\"position\">1</propert"
++ "y></packing></child><child><object class=\"GtkLabel\" id=\"label24\"><p"
++ "roperty name=\"visible\">True</property><property name=\"label\" transl"
++ "atable=\"yes\">&lt;i&gt;Opaque&lt;/i&gt;</property><property name=\"use"
++ "_markup\">True</property></object><packing><property name=\"expand\">Fa"
++ "lse</property><property name=\"fill\">False</property><property name=\""
+ "position\">2</property></packing></child></object></child></object><pac"
+ "king><property name=\"expand\">False</property><property name=\"fill\">"
+ "False</property><property name=\"position\">11</property></packing></ch"
+@@ -568,5 +576,5 @@ static const char tweaks_dialog_ui[] =
+ "et></action-widgets></object></interface>"
+ };
+
+-static const unsigned tweaks_dialog_ui_length = 37803u;
++static const unsigned tweaks_dialog_ui_length = 38338u;
+
+diff --git a/src/client.c b/src/client.c
+index 4e86808..b92c264 100644
+--- a/src/client.c
++++ b/src/client.c
+@@ -64,6 +64,8 @@
+ #include "xsync.h"
+ #include "event_filter.h"
+
++//#define TRACE(fmt, ...) printf(fmt"\n", ##__VA_ARGS__); fflush(stdout);
++
+ /* Event mask definition */
+
+ #define POINTER_EVENT_MASK \
+@@ -173,6 +175,7 @@ clientCreateTitleName (Client *c, gchar *name, gchar *hostname)
+ gchar *title;
+
+ g_return_val_if_fail (c != NULL, NULL);
++
+ TRACE ("entering clientCreateTitleName");
+
+ screen_info = c->screen_info;
+@@ -1729,6 +1732,7 @@ clientFrame (DisplayInfo *display_info, Window w, gboolean recapture)
+ clientGetInitialNetWmDesktop (c);
+ /* workarea will be updated when shown, no need to worry here */
+ clientGetNetStruts (c);
++ clientGetExtra (c);
+
+ /* Once we know the type of window, we can initialize window position */
+ if (!FLAG_TEST (c->xfwm_flags, XFWM_FLAG_SESSION_MANAGED))
+@@ -3137,6 +3141,8 @@ clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *rect, tilePositio
+ wc->width = full_w - frameLeft (c) - frameRight (c);
+ wc->height = full_h - frameTop (c) - frameBottom (c);
+
++ TRACE ("clientNewMaxSize %d %d %d %d", wc->x, wc->y, wc->width, wc->height);
++
+ return ((wc->width <= c->size->max_width) && (wc->height <= c->size->max_height));
+ }
+
+diff --git a/src/client.h b/src/client.h
+index e8bc4e3..b5e54df 100644
+--- a/src/client.h
++++ b/src/client.h
+@@ -161,6 +161,7 @@
+ #define CLIENT_FLAG_DEMANDS_ATTENTION (1L<<17)
+ #define CLIENT_FLAG_HAS_SHAPE (1L<<18)
+ #define CLIENT_FLAG_FULLSCREN_MONITORS (1L<<19)
++#define CLIENT_FLAG_TITLELESS_MAXIMIZE (1L<<20)
+
+ #define WM_FLAG_DELETE (1L<<0)
+ #define WM_FLAG_INPUT (1L<<1)
+diff --git a/src/display.c b/src/display.c
+index 00318d5..4f847f4 100644
+--- a/src/display.c
++++ b/src/display.c
+@@ -169,7 +169,8 @@ myDisplayInitAtoms (DisplayInfo *display_info)
+ "XFWM4_COMPOSITING_MANAGER",
+ "XFWM4_TIMESTAMP_PROP",
+ "_XROOTPMAP_ID",
+- "_XSETROOT_ID"
++ "_XSETROOT_ID",
++ "_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED"
+ };
+
+ g_assert (ATOM_COUNT == G_N_ELEMENTS (atom_names));
+diff --git a/src/display.h b/src/display.h
+index 8797237..a297cf2 100644
+--- a/src/display.h
++++ b/src/display.h
+@@ -265,6 +265,7 @@ enum
+ XFWM4_TIMESTAMP_PROP,
+ XROOTPMAP,
+ XSETROOT,
++ _GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED,
+ ATOM_COUNT
+ };
+
+diff --git a/src/events.c b/src/events.c
+index 4b49171..044cd11 100644
+--- a/src/events.c
++++ b/src/events.c
+@@ -1921,6 +1921,11 @@ handlePropertyNotify (DisplayInfo *display_info, XPropertyEvent * ev)
+ TRACE ("Window 0x%lx has NET_WM_SYNC_REQUEST_COUNTER set to 0x%lx", c->window, c->xsync_counter);
+ }
+ #endif /* HAVE_XSYNC */
++ else if (ev->atom == display_info->atoms[_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED])
++ {
++ TRACE ("Client \"%s\" Window 0x%lx has received GTK CRAP\n", c->name, c->window);
++ clientUpdateExtra (c);
++ }
+
+ return status;
+ }
+diff --git a/src/frame.c b/src/frame.c
+index 7f4cbd3..23c01cd 100644
+--- a/src/frame.c
++++ b/src/frame.c
+@@ -39,6 +39,8 @@
+ #include "frame.h"
+ #include "compositor.h"
+
++//#define TRACE(fmt, ...) printf(fmt"\n", ##__VA_ARGS__); fflush(stdout);
++
+ typedef struct
+ {
+ xfwmPixmap pm_title;
+@@ -121,7 +123,14 @@ frameTop (Client * c)
+
+ g_return_val_if_fail (c != NULL, 0);
+ if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER)
+- && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
++ && !(FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)
++ || (FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_VERT)
++ && (c->screen_info->params->titleless_maximize
++ || FLAG_TEST (c->flags, CLIENT_FLAG_TITLELESS_MAXIMIZE))
++ && c->screen_info->params->borderless_maximize
++ )
++ )
++ )
+ {
+ return c->screen_info->title[TITLE_3][ACTIVE].height;
+ }
+@@ -136,8 +145,13 @@ frameBottom (Client * c)
+ g_return_val_if_fail (c != NULL, 0);
+ if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER)
+ && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)
+- && (!FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED)
+- || !(c->screen_info->params->borderless_maximize)))
++ && !(FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED)
++ && (c->screen_info->params->borderless_maximize))
++ && !(FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_VERT)
++ && (c->screen_info->params->borderless_maximize)
++ && (c->screen_info->params->titleless_maximize
++ || FLAG_TEST (c->flags, CLIENT_FLAG_TITLELESS_MAXIMIZE)))
++ )
+ {
+ return c->screen_info->sides[SIDE_BOTTOM][ACTIVE].height;
+ }
+@@ -203,7 +217,14 @@ frameHeight (Client * c)
+ return frameTop (c) + frameBottom (c);
+ }
+ else if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER)
+- && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
++ && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)
++ && !(
++ FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_VERT)
++ && (c->screen_info->params->borderless_maximize)
++ && (c->screen_info->params->titleless_maximize
++ || FLAG_TEST (c->flags, CLIENT_FLAG_TITLELESS_MAXIMIZE))
++ ))
++
+ {
+ return c->height + frameTop (c) + frameBottom (c);
+ }
+@@ -882,6 +903,7 @@ frameDrawWin (Client * c)
+ gboolean requires_clearing;
+ gboolean width_changed;
+ gboolean height_changed;
++ gboolean vert_only;
+
+ TRACE ("entering frameDraw");
+ TRACE ("drawing frame for \"%s\" (0x%lx)", c->name, c->window);
+@@ -955,128 +977,152 @@ frameDrawWin (Client * c)
+ }
+
+ if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER)
+- && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
++ && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)
++ && !(FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED)
++ && (c->screen_info->params->borderless_maximize)
++ && (c->screen_info->params->titleless_maximize
++ || FLAG_TEST (c->flags, CLIENT_FLAG_TITLELESS_MAXIMIZE))
++ ))
+ {
+- /* First, hide the buttons that we don't have... */
+- for (i = 0; i < BUTTON_COUNT; i++)
++ vert_only = FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED_VERT)
++ && (c->screen_info->params->borderless_maximize) //only vertical decorations shown (titleless vertical maximize)
++ && (c->screen_info->params->titleless_maximize
++ || FLAG_TEST (c->flags, CLIENT_FLAG_TITLELESS_MAXIMIZE));
++
++ if (vert_only)
+ {
+- char b = getLetterFromButton (i, c);
+- if ((!b) || !strchr (screen_info->params->button_layout, b))
++ //hide all buttons
++ for (i = 0; i < BUTTON_COUNT; i++)
+ {
+ xfwmWindowHide (&c->buttons[i]);
+ }
++ xfwmWindowHide (&c->title);
++ xfwmWindowHide (&c->sides[SIDE_BOTTOM]);
++ xfwmWindowHide (&c->sides[SIDE_TOP]);
++ xfwmWindowHide (&c->corners[CORNER_TOP_LEFT]);
++ xfwmWindowHide (&c->corners[CORNER_TOP_RIGHT]);
++ xfwmWindowHide (&c->corners[CORNER_BOTTOM_LEFT]);
++ xfwmWindowHide (&c->corners[CORNER_BOTTOM_RIGHT]);
+ }
+-
+- /* Then, show the ones that we do have on left... */
+- x = frameLeft (c) + frameButtonOffset (c);
+- if (x < 0)
+- {
+- x = 0;
+- }
+- right = frameWidth (c) - frameRight (c) - frameButtonOffset (c);
+- for (i = 0; i < strlen (screen_info->params->button_layout); i++)
++ else
+ {
+- button = getButtonFromLetter (screen_info->params->button_layout[i], c);
+- if (button == TITLE_SEPARATOR)
++ /* First, hide the buttons that we don't have... */
++ for (i = 0; i < BUTTON_COUNT; i++)
+ {
+- break;
+- }
+- else if (button >= 0)
+- {
+- if (x + screen_info->buttons[button][state].width + screen_info->params->button_spacing < right)
+- {
+- my_pixmap = clientGetButtonPixmap (c, button, clientGetButtonState (c, button, state));
+- if (!xfwmPixmapNone(my_pixmap))
+- {
+- xfwmWindowSetBG (&c->buttons[button], my_pixmap);
+- }
+- xfwmWindowShow (&c->buttons[button], x,
+- (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2,
+- screen_info->buttons[button][state].width,
+- screen_info->buttons[button][state].height, TRUE);
+- button_x[button] = x;
+- x = x + screen_info->buttons[button][state].width +
+- screen_info->params->button_spacing;
+- }
+- else
++ char b = getLetterFromButton (i, c);
++ if ((!b) || !strchr (screen_info->params->button_layout, b))
+ {
+- xfwmWindowHide (&c->buttons[button]);
++ xfwmWindowHide (&c->buttons[i]);
+ }
+ }
+- }
+- left = x + screen_info->params->button_spacing;
+
+- /* and those that we do have on right... */
+- x = frameWidth (c) - frameRight (c) + screen_info->params->button_spacing -
+- frameButtonOffset (c);
+- for (j = strlen (screen_info->params->button_layout) - 1; j >= i; j--)
+- {
+- button = getButtonFromLetter (screen_info->params->button_layout[j], c);
+- if (button == TITLE_SEPARATOR)
++ /* Then, show the ones that we do have on left... */
++ x = frameLeft (c) + frameButtonOffset (c);
++ if (x < 0)
+ {
+- break;
++ x = 0;
+ }
+- else if (button >= 0)
++ right = frameWidth (c) - frameRight (c) - frameButtonOffset (c);
++ for (i = 0; i < strlen (screen_info->params->button_layout); i++)
+ {
+- if (x - screen_info->buttons[button][state].width - screen_info->params->button_spacing > left)
++ button = getButtonFromLetter (screen_info->params->button_layout[i], c);
++ if (button == TITLE_SEPARATOR)
+ {
+- my_pixmap = clientGetButtonPixmap (c, button, clientGetButtonState (c, button, state));
+- if (!xfwmPixmapNone(my_pixmap))
++ break;
++ }
++ else if (button >= 0)
++ {
++ if (x + screen_info->buttons[button][state].width + screen_info->params->button_spacing < right)
++ {
++ my_pixmap = clientGetButtonPixmap (c, button, clientGetButtonState (c, button, state));
++ if (!xfwmPixmapNone(my_pixmap))
++ {
++ xfwmWindowSetBG (&c->buttons[button], my_pixmap);
++ }
++ xfwmWindowShow (&c->buttons[button], x,
++ (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2,
++ screen_info->buttons[button][state].width,
++ screen_info->buttons[button][state].height, TRUE);
++ button_x[button] = x;
++ x = x + screen_info->buttons[button][state].width +
++ screen_info->params->button_spacing;
++ }
++ else
+ {
+- xfwmWindowSetBG (&c->buttons[button], my_pixmap);
++ xfwmWindowHide (&c->buttons[button]);
+ }
+- x = x - screen_info->buttons[button][state].width -
+- screen_info->params->button_spacing;
+- xfwmWindowShow (&c->buttons[button], x,
+- (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2,
+- screen_info->buttons[button][state].width,
+- screen_info->buttons[button][state].height, TRUE);
+- button_x[button] = x;
+ }
+- else
++ }
++ left = x + screen_info->params->button_spacing;
++
++ /* and those that we do have on right... */
++ x = frameWidth (c) - frameRight (c) + screen_info->params->button_spacing -
++ frameButtonOffset (c);
++ for (j = strlen (screen_info->params->button_layout) - 1; j >= i; j--)
++ {
++ button = getButtonFromLetter (screen_info->params->button_layout[j], c);
++ if (button == TITLE_SEPARATOR)
+ {
+- xfwmWindowHide (&c->buttons[button]);
++ break;
++ }
++ else if (button >= 0)
++ {
++ if (x - screen_info->buttons[button][state].width - screen_info->params->button_spacing > left)
++ {
++ my_pixmap = clientGetButtonPixmap (c, button, clientGetButtonState (c, button, state));
++ if (!xfwmPixmapNone(my_pixmap))
++ {
++ xfwmWindowSetBG (&c->buttons[button], my_pixmap);
++ }
++ x = x - screen_info->buttons[button][state].width -
++ screen_info->params->button_spacing;
++ xfwmWindowShow (&c->buttons[button], x,
++ (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2,
++ screen_info->buttons[button][state].width,
++ screen_info->buttons[button][state].height, TRUE);
++ button_x[button] = x;
++ }
++ else
++ {
++ xfwmWindowHide (&c->buttons[button]);
++ }
+ }
+ }
++ left = left - 2 * screen_info->params->button_spacing;
++ right = x;
++ xfwmPixmapInit (screen_info, &frame_pix.pm_title);
++ xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_TOP]);
++ xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM]);
++
++ top_width = frameWidth (c) - frameTopLeftWidth (c, state) - frameTopRightWidth (c, state);
++ bottom_width = frameWidth (c) -
++ screen_info->corners[CORNER_BOTTOM_LEFT][state].width -
++ screen_info->corners[CORNER_BOTTOM_RIGHT][state].width;
++
++ /* The title is almost always visible */
++ frameCreateTitlePixmap (c, state, left, right, &frame_pix.pm_title, &frame_pix.pm_sides[SIDE_TOP]);
++ xfwmWindowSetBG (&c->title, &frame_pix.pm_title);
++ xfwmWindowShow (&c->title,
++ frameTopLeftWidth (c, state), 0, top_width,
++ frameTop (c), (requires_clearing | width_changed));
++
++ /* Corners are never resized, we need to update them separately */
++ if (requires_clearing)
++ {
++ xfwmWindowSetBG (&c->corners[CORNER_TOP_LEFT],
++ &screen_info->corners[CORNER_TOP_LEFT][state]);
++ xfwmWindowSetBG (&c->corners[CORNER_TOP_RIGHT],
++ &screen_info->corners[CORNER_TOP_RIGHT][state]);
++ xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_LEFT],
++ &screen_info->corners[CORNER_BOTTOM_LEFT][state]);
++ xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_RIGHT],
++ &screen_info->corners[CORNER_BOTTOM_RIGHT][state]);
++ }
+ }
+- left = left - 2 * screen_info->params->button_spacing;
+- right = x;
+-
+- top_width = frameWidth (c) - frameTopLeftWidth (c, state) - frameTopRightWidth (c, state);
+- bottom_width = frameWidth (c) -
+- screen_info->corners[CORNER_BOTTOM_LEFT][state].width -
+- screen_info->corners[CORNER_BOTTOM_RIGHT][state].width;
+- left_height = frameHeight (c) - frameTop (c) -
+- screen_info->corners[CORNER_BOTTOM_LEFT][state].height;
+- right_height = frameHeight (c) - frameTop (c) -
+- screen_info->corners[CORNER_BOTTOM_RIGHT][state].height;
+-
+- xfwmPixmapInit (screen_info, &frame_pix.pm_title);
+- xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_TOP]);
+- xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM]);
++
+ xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_LEFT]);
+ xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_RIGHT]);
+
+- /* The title is always visible */
+- frameCreateTitlePixmap (c, state, left, right, &frame_pix.pm_title, &frame_pix.pm_sides[SIDE_TOP]);
+- xfwmWindowSetBG (&c->title, &frame_pix.pm_title);
+- xfwmWindowShow (&c->title,
+- frameTopLeftWidth (c, state), 0, top_width,
+- frameTop (c), (requires_clearing | width_changed));
+-
+- /* Corners are never resized, we need to update them separately */
+- if (requires_clearing)
+- {
+- xfwmWindowSetBG (&c->corners[CORNER_TOP_LEFT],
+- &screen_info->corners[CORNER_TOP_LEFT][state]);
+- xfwmWindowSetBG (&c->corners[CORNER_TOP_RIGHT],
+- &screen_info->corners[CORNER_TOP_RIGHT][state]);
+- xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_LEFT],
+- &screen_info->corners[CORNER_BOTTOM_LEFT][state]);
+- xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_RIGHT],
+- &screen_info->corners[CORNER_BOTTOM_RIGHT][state]);
+- }
+-
+ if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED)
+ && (c->screen_info->params->borderless_maximize))
+ {
+@@ -1091,6 +1137,18 @@ frameDrawWin (Client * c)
+ }
+ else
+ {
++ if (vert_only)
++ {
++ left_height = right_height = c->height;
++ }
++ else
++ {
++ left_height = frameHeight (c) - frameTop (c)
++ - screen_info->corners[CORNER_BOTTOM_LEFT][state].height;
++ right_height = frameHeight (c) - frameTop (c)
++ - screen_info->corners[CORNER_BOTTOM_RIGHT][state].height;
++ }
++
+ if (FLAG_TEST (c->flags, CLIENT_FLAG_SHADED))
+ {
+ xfwmWindowHide (&c->sides[SIDE_LEFT]);
+@@ -1120,63 +1178,69 @@ frameDrawWin (Client * c)
+ right_height, (requires_clearing | height_changed));
+ }
+
+- xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM],
+- bottom_width, frameBottom (c));
+- xfwmPixmapFill (&screen_info->sides[SIDE_BOTTOM][state],
+- &frame_pix.pm_sides[SIDE_BOTTOM],
+- 0, 0, bottom_width, frameBottom (c));
+- xfwmWindowSetBG (&c->sides[SIDE_BOTTOM],
+- &frame_pix.pm_sides[SIDE_BOTTOM]);
+- xfwmWindowShow (&c->sides[SIDE_BOTTOM],
+- screen_info->corners[CORNER_BOTTOM_LEFT][state].width,
+- frameHeight (c) - frameBottom (c), bottom_width, frameBottom (c),
+- (requires_clearing | width_changed));
+-
+- if (!xfwmPixmapNone(&frame_pix.pm_sides[SIDE_TOP]))
++ if (!vert_only)
+ {
+- xfwmWindowSetBG (&c->sides[SIDE_TOP], &frame_pix.pm_sides[SIDE_TOP]);
+- xfwmWindowShow (&c->sides[SIDE_TOP],
+- screen_info->corners[CORNER_TOP_LEFT][state].width,
+- 0, top_width, frame_pix.pm_sides[SIDE_TOP].height,
++ xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM],
++ bottom_width, frameBottom (c));
++ xfwmPixmapFill (&screen_info->sides[SIDE_BOTTOM][state],
++ &frame_pix.pm_sides[SIDE_BOTTOM],
++ 0, 0, bottom_width, frameBottom (c));
++ xfwmWindowSetBG (&c->sides[SIDE_BOTTOM],
++ &frame_pix.pm_sides[SIDE_BOTTOM]);
++ xfwmWindowShow (&c->sides[SIDE_BOTTOM],
++ screen_info->corners[CORNER_BOTTOM_LEFT][state].width,
++ frameHeight (c) - frameBottom (c), bottom_width, frameBottom (c),
+ (requires_clearing | width_changed));
+- }
+- else
+- {
+- xfwmWindowHide (&c->sides[SIDE_TOP]);
+- }
+
+- xfwmWindowShow (&c->corners[CORNER_TOP_LEFT], 0, 0,
+- frameTopLeftWidth (c, state),
+- screen_info->corners[CORNER_TOP_LEFT][state].height,
+- requires_clearing);
+-
+- xfwmWindowShow (&c->corners[CORNER_TOP_RIGHT],
+- frameWidth (c) - frameTopRightWidth (c, state),
+- 0, frameTopRightWidth (c, state),
+- screen_info->corners[CORNER_TOP_RIGHT][state].height,
+- requires_clearing);
+-
+- xfwmWindowShow (&c->corners[CORNER_BOTTOM_LEFT], 0,
+- frameHeight (c) -
+- screen_info->corners[CORNER_BOTTOM_LEFT][state].height,
+- screen_info->corners[CORNER_BOTTOM_LEFT][state].width,
+- screen_info->corners[CORNER_BOTTOM_LEFT][state].height,
+- requires_clearing);
+-
+- xfwmWindowShow (&c->corners[CORNER_BOTTOM_RIGHT],
+- frameWidth (c) -
+- screen_info->corners[CORNER_BOTTOM_RIGHT][state].width,
+- frameHeight (c) -
+- screen_info->corners[CORNER_BOTTOM_RIGHT][state].height,
+- screen_info->corners[CORNER_BOTTOM_RIGHT][state].width,
+- screen_info->corners[CORNER_BOTTOM_RIGHT][state].height,
+- requires_clearing);
++ if (!xfwmPixmapNone(&frame_pix.pm_sides[SIDE_TOP]))
++ {
++ xfwmWindowSetBG (&c->sides[SIDE_TOP], &frame_pix.pm_sides[SIDE_TOP]);
++ xfwmWindowShow (&c->sides[SIDE_TOP],
++ screen_info->corners[CORNER_TOP_LEFT][state].width,
++ 0, top_width, frame_pix.pm_sides[SIDE_TOP].height,
++ (requires_clearing | width_changed));
++ }
++ else
++ {
++ xfwmWindowHide (&c->sides[SIDE_TOP]);
++ }
++
++ xfwmWindowShow (&c->corners[CORNER_TOP_LEFT], 0, 0,
++ frameTopLeftWidth (c, state),
++ screen_info->corners[CORNER_TOP_LEFT][state].height,
++ requires_clearing);
++
++ xfwmWindowShow (&c->corners[CORNER_TOP_RIGHT],
++ frameWidth (c) - frameTopRightWidth (c, state),
++ 0, frameTopRightWidth (c, state),
++ screen_info->corners[CORNER_TOP_RIGHT][state].height,
++ requires_clearing);
++
++ xfwmWindowShow (&c->corners[CORNER_BOTTOM_LEFT], 0,
++ frameHeight (c) -
++ screen_info->corners[CORNER_BOTTOM_LEFT][state].height,
++ screen_info->corners[CORNER_BOTTOM_LEFT][state].width,
++ screen_info->corners[CORNER_BOTTOM_LEFT][state].height,
++ requires_clearing);
++
++ xfwmWindowShow (&c->corners[CORNER_BOTTOM_RIGHT],
++ frameWidth (c) -
++ screen_info->corners[CORNER_BOTTOM_RIGHT][state].width,
++ frameHeight (c) -
++ screen_info->corners[CORNER_BOTTOM_RIGHT][state].height,
++ screen_info->corners[CORNER_BOTTOM_RIGHT][state].width,
++ screen_info->corners[CORNER_BOTTOM_RIGHT][state].height,
++ requires_clearing);
++ }
+ }
+ frameSetShape (c, state, &frame_pix, button_x);
+
+- xfwmPixmapFree (&frame_pix.pm_title);
+- xfwmPixmapFree (&frame_pix.pm_sides[SIDE_TOP]);
+- xfwmPixmapFree (&frame_pix.pm_sides[SIDE_BOTTOM]);
++ if (!vert_only)
++ {
++ xfwmPixmapFree (&frame_pix.pm_title);
++ xfwmPixmapFree (&frame_pix.pm_sides[SIDE_TOP]);
++ xfwmPixmapFree (&frame_pix.pm_sides[SIDE_BOTTOM]);
++ }
+ xfwmPixmapFree (&frame_pix.pm_sides[SIDE_LEFT]);
+ xfwmPixmapFree (&frame_pix.pm_sides[SIDE_RIGHT]);
+ }
+diff --git a/src/netwm.c b/src/netwm.c
+index 1352f08..9e3647c 100644
+--- a/src/netwm.c
++++ b/src/netwm.c
+@@ -136,6 +136,44 @@ clientSetNetState (Client * c)
+ }
+
+ void
++clientGetExtra (Client *c)
++{
++ long val;
++ DisplayInfo *display_info;
++
++ display_info = c->screen_info->display_info;
++
++ getHint (display_info, c->window, _GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED, &val);
++ if (val)
++ FLAG_SET (c->flags, CLIENT_FLAG_TITLELESS_MAXIMIZE);
++}
++
++void
++clientUpdateExtra (Client *c)
++{
++ long val;
++ unsigned long maximization_flags = 0L;
++ DisplayInfo *display_info;
++
++ display_info = c->screen_info->display_info;
++
++ getHint (display_info, c->window, _GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED, &val);
++ if (val)
++ FLAG_SET (c->flags, CLIENT_FLAG_TITLELESS_MAXIMIZE);
++ else
++ FLAG_UNSET (c->flags, CLIENT_FLAG_TITLELESS_MAXIMIZE);
++
++ if (FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED))
++ {
++ maximization_flags = c->flags & CLIENT_FLAG_MAXIMIZED;
++
++ /* Force an update by clearing the internal flags */
++ FLAG_UNSET (c->flags, CLIENT_FLAG_MAXIMIZED_HORIZ | CLIENT_FLAG_MAXIMIZED_VERT);
++ clientToggleMaximized (c, maximization_flags, TRUE);
++ }
++}
++
++void
+ clientGetNetState (Client * c)
+ {
+ ScreenInfo *screen_info;
+diff --git a/src/placement.c b/src/placement.c
+index 01f2590..64719a7 100644
+--- a/src/placement.c
++++ b/src/placement.c
+@@ -38,7 +38,6 @@
+ #include "frame.h"
+ #include "netwm.h"
+
+-
+ /* Compute rectangle overlap area */
+
+ static inline unsigned long
+@@ -108,6 +107,8 @@ clientMaxSpace (ScreenInfo *screen_info, int *x, int *y, int *w, int *h)
+ g_return_if_fail (w != NULL);
+ g_return_if_fail (h != NULL);
+
++ TRACE ("entering clientMaxSpace");
++
+ screen_width = 0;
+ screen_height = 0;
+ delta = 0;
+@@ -157,6 +158,7 @@ clientMaxSpace (ScreenInfo *screen_info, int *x, int *y, int *w, int *h)
+ }
+ }
+ }
++ TRACE ("clientMaxSpace result %d %d %d %d", *x, *y, *w, *h);
+ }
+
+ gboolean
+diff --git a/src/settings.c b/src/settings.c
+index 607bb7b..37b6c2a 100644
+--- a/src/settings.c
++++ b/src/settings.c
+@@ -667,6 +667,7 @@ loadSettings (ScreenInfo *screen_info)
+ /* You can change the order of the following parameters */
+ {"activate_action", NULL, G_TYPE_STRING, TRUE},
+ {"borderless_maximize", NULL, G_TYPE_BOOLEAN, TRUE},
++ {"titleless_maximize", NULL, G_TYPE_BOOLEAN, TRUE},
+ {"box_move", NULL, G_TYPE_BOOLEAN, TRUE},
+ {"box_resize", NULL, G_TYPE_BOOLEAN, TRUE},
+ {"button_layout", NULL, G_TYPE_STRING, TRUE},
+@@ -753,6 +754,8 @@ loadSettings (ScreenInfo *screen_info)
+
+ screen_info->params->borderless_maximize =
+ getBoolValue ("borderless_maximize", rc);
++ screen_info->params->titleless_maximize =
++ getBoolValue ("titleless_maximize", rc);
+ screen_info->params->box_resize =
+ getBoolValue ("box_resize", rc);
+ screen_info->params->box_move =
+@@ -1261,6 +1264,11 @@ cb_xfwm4_channel_property_changed(XfconfChannel *channel, const gchar *property_
+ screen_info->params->borderless_maximize = g_value_get_boolean (value);
+ reloadScreenSettings (screen_info, UPDATE_MAXIMIZE);
+ }
++ else if (!strcmp (name, "titleless_maximize"))
++ {
++ screen_info->params->titleless_maximize = g_value_get_boolean (value);
++ reloadScreenSettings (screen_info, UPDATE_MAXIMIZE);
++ }
+ else if (!strcmp (name, "cycle_minimum"))
+ {
+ screen_info->params->cycle_minimum = g_value_get_boolean (value);
+diff --git a/src/settings.h b/src/settings.h
+index be01b6b..ea8b79b 100644
+--- a/src/settings.h
++++ b/src/settings.h
+@@ -197,6 +197,7 @@ struct _XfwmParams
+ int title_shadow[2];
+ int wrap_resistance;
+ gboolean borderless_maximize;
++ gboolean titleless_maximize;
+ gboolean box_move;
+ gboolean box_resize;
+ gboolean click_to_focus;
+--
+1.8.4
+
diff --git a/pcr/xfwm4-titleless/xfwm4.install b/pcr/xfwm4-titleless/xfwm4.install
new file mode 100644
index 000000000..e4f8fd06c
--- /dev/null
+++ b/pcr/xfwm4-titleless/xfwm4.install
@@ -0,0 +1,13 @@
+post_install() {
+ gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
+
+# vim:set ts=2 sw=2 et: