diff options
-rw-r--r-- | pcr/xfwm4-titleless/PKGBUILD | 46 | ||||
-rw-r--r-- | pcr/xfwm4-titleless/xfwm4-hide-titlebar-when-maximized.patch | 1456 | ||||
-rw-r--r-- | pcr/xfwm4-titleless/xfwm4.install | 13 |
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\"><i>Small</i></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\"><i>Large</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\"><i>Transparent</i>" +- ";</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\"><i>Small</i></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\"><i>Large</i></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\"><i>Transparent</i></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\"><i>Opaque</i></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\"><i>Transparent</i><" ++ "/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\"><i>Opaque</i></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\"><i>Transparent</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\"><i>Opaque</i></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\"><i>Transparent</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\"><i>Opaque</i></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\"><i>Transparent<" +- "/i></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\"><i>Opaque</i></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\"><i>Transparent" +- "</i></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\"><i>Opaque</i></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\"><i>Transparent<" ++ ";/i></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\"><i>Opaque</i></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: |