diff options
41 files changed, 2542 insertions, 207 deletions
diff --git a/community/awesome/PKGBUILD b/community/awesome/PKGBUILD index d308ec13e..fc53a149f 100644 --- a/community/awesome/PKGBUILD +++ b/community/awesome/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 97098 2013-09-12 18:19:17Z seblu $ +# $Id: PKGBUILD 97620 2013-09-25 19:19:38Z seblu $ # Maintainer: Sébastien Luttringer # Contributor: xduugu # Contributor: Ronald van Haren <ronald.archlinux.org> @@ -6,7 +6,7 @@ pkgname=awesome pkgver=3.5.1 -pkgrel=2 +pkgrel=3 pkgdesc='Highly configurable framework window manager' arch=('i686' 'x86_64') url='http://awesome.naquadah.org/' @@ -42,6 +42,7 @@ optdepends=( 'vicious: widgets for the Awesome window manager' ) provides=('notification-daemon') +backup=('etc/xdg/awesome/rc.lua') source=("$url/download/$pkgname-$pkgver.tar.xz") md5sums=('f528f66ddcdb07f24e6f494837371702') diff --git a/community/freerdp/PKGBUILD b/community/freerdp/PKGBUILD index 7f6f85ca4..9bee67b95 100644 --- a/community/freerdp/PKGBUILD +++ b/community/freerdp/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 94879 2013-08-01 06:54:53Z bpiotrowski $ +# $Id: PKGBUILD 97610 2013-09-25 13:56:48Z spupykin $ # Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com> # Contributor: Stijn Segers <francesco dot borromini at gmail dot com> pkgname=freerdp pkgver=1.0.2 -pkgrel=3 +pkgrel=4 pkgdesc="Free RDP client" arch=('i686' 'x86_64') url="http://freerdp.sourceforge.net" @@ -16,13 +16,16 @@ conflicts=('freerdp-git') changelog=${pkgname}.changelog options=('!libtool') source=($pkgname-$pkgver.tar.gz::https://github.com/FreeRDP/FreeRDP/archive/$pkgver.tar.gz - ffmpeg2.0.patch) + ffmpeg2.0.patch + patch_numblock.patch) md5sums=('c260051a94caff590def5caa4fcf59d6' - '1260eecf01ea5212e2db8ac9c5e7fa6d') + '1260eecf01ea5212e2db8ac9c5e7fa6d' + 'ac581d445ded7cdbd59082a48d9c28ac') prepare() { cd $srcdir/FreeRDP-$pkgver patch -Np1 -i ../ffmpeg2.0.patch + patch -Np1 -i ../patch_numblock.patch } build() { diff --git a/community/freerdp/patch_numblock.patch b/community/freerdp/patch_numblock.patch new file mode 100644 index 000000000..62a23d582 --- /dev/null +++ b/community/freerdp/patch_numblock.patch @@ -0,0 +1,12 @@ +diff -u -r -N old/include/freerdp/kbd/vkcodes.h new/include/freerdp/kbd/vkcodes.h +--- old/include/freerdp/kbd/vkcodes.h 2013-09-19 12:46:07.124339712 +0200 ++++ new/include/freerdp/kbd/vkcodes.h 2013-09-19 12:45:51.621005583 +0200 +@@ -434,7 +434,7 @@ + { 0x00, 0, "VK_SEPARATOR" , NULL }, + { 0x4A, 0, "VK_SUBTRACT" , "KPSU" }, + { 0x53, 0, "VK_DECIMAL" , "KPDL" }, +- { 0x35, 0, "VK_DIVIDE" , "KPDV" }, ++ { 0x35, 1, "VK_DIVIDE" , "KPDV" }, + { 0x3B, 0, "VK_F1" , "FK01" }, + { 0x3C, 0, "VK_F2" , "FK02" }, + { 0x3D, 0, "VK_F3" , "FK03" }, diff --git a/community/libvirt/0001-Also-store-user-group-ID-values-in-virIdentity.patch b/community/libvirt/0001-Also-store-user-group-ID-values-in-virIdentity.patch new file mode 100644 index 000000000..70a613820 --- /dev/null +++ b/community/libvirt/0001-Also-store-user-group-ID-values-in-virIdentity.patch @@ -0,0 +1,156 @@ +From 02432e3afa32e9866fbf1317069b422ef552d1d4 Mon Sep 17 00:00:00 2001
+From: "Daniel P. Berrange" <berrange@redhat.com>
+Date: Thu, 22 Aug 2013 16:00:01 +0100
+Subject: [PATCH 1/3] Also store user & group ID values in virIdentity
+
+Future improvements to the polkit code will require access to
+the numeric user ID, not merely user name.
+
+Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
+---
+ src/rpc/virnetserverclient.c | 18 ++++++++++++++++++
+ src/util/viridentity.c | 23 +++++++++++++++++++----
+ src/util/viridentity.h | 2 ++
+ 3 files changed, 39 insertions(+), 4 deletions(-)
+
+diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
+index 83d5cf1..f30dd08 100644
+--- a/src/rpc/virnetserverclient.c
++++ b/src/rpc/virnetserverclient.c
+@@ -652,7 +652,9 @@ virNetServerClientCreateIdentity(virNetServerClientPtr client)
+ char *processid = NULL;
+ char *processtime = NULL;
+ char *username = NULL;
++ char *userid = NULL;
+ char *groupname = NULL;
++ char *groupid = NULL;
+ #if WITH_SASL
+ char *saslname = NULL;
+ #endif
+@@ -672,8 +674,12 @@ virNetServerClientCreateIdentity(virNetServerClientPtr client)
+
+ if (!(username = virGetUserName(uid)))
+ goto cleanup;
++ if (virAsprintf(&userid, "%d", uid) < 0)
++ goto cleanup;
+ if (!(groupname = virGetGroupName(gid)))
+ goto cleanup;
++ if (virAsprintf(&userid, "%d", gid) < 0)
++ goto cleanup;
+ if (virAsprintf(&processid, "%llu",
+ (unsigned long long)pid) < 0)
+ goto cleanup;
+@@ -710,11 +716,21 @@ virNetServerClientCreateIdentity(virNetServerClientPtr client)
+ VIR_IDENTITY_ATTR_UNIX_USER_NAME,
+ username) < 0)
+ goto error;
++ if (userid &&
++ virIdentitySetAttr(ret,
++ VIR_IDENTITY_ATTR_UNIX_USER_ID,
++ userid) < 0)
++ goto error;
+ if (groupname &&
+ virIdentitySetAttr(ret,
+ VIR_IDENTITY_ATTR_UNIX_GROUP_NAME,
+ groupname) < 0)
+ goto error;
++ if (groupid &&
++ virIdentitySetAttr(ret,
++ VIR_IDENTITY_ATTR_UNIX_GROUP_ID,
++ groupid) < 0)
++ goto error;
+ if (processid &&
+ virIdentitySetAttr(ret,
+ VIR_IDENTITY_ATTR_UNIX_PROCESS_ID,
+@@ -745,7 +761,9 @@ virNetServerClientCreateIdentity(virNetServerClientPtr client)
+
+ cleanup:
+ VIR_FREE(username);
++ VIR_FREE(userid);
+ VIR_FREE(groupname);
++ VIR_FREE(groupid);
+ VIR_FREE(processid);
+ VIR_FREE(processtime);
+ VIR_FREE(seccontext);
+diff --git a/src/util/viridentity.c b/src/util/viridentity.c
+index 781f660..03c375b 100644
+--- a/src/util/viridentity.c
++++ b/src/util/viridentity.c
+@@ -133,7 +133,9 @@ int virIdentitySetCurrent(virIdentityPtr ident)
+ virIdentityPtr virIdentityGetSystem(void)
+ {
+ char *username = NULL;
++ char *userid = NULL;
+ char *groupname = NULL;
++ char *groupid = NULL;
+ char *seccontext = NULL;
+ virIdentityPtr ret = NULL;
+ #if WITH_SELINUX
+@@ -147,8 +149,13 @@ virIdentityPtr virIdentityGetSystem(void)
+
+ if (!(username = virGetUserName(getuid())))
+ goto cleanup;
++ if (virAsprintf(&userid, "%d", (int)getuid()) < 0)
++ goto cleanup;
++
+ if (!(groupname = virGetGroupName(getgid())))
+ goto cleanup;
++ if (virAsprintf(&groupid, "%d", (int)getgid()) < 0)
++ goto cleanup;
+
+ #if WITH_SELINUX
+ if (getcon(&con) < 0) {
+@@ -166,16 +173,22 @@ virIdentityPtr virIdentityGetSystem(void)
+ if (!(ret = virIdentityNew()))
+ goto cleanup;
+
+- if (username &&
+- virIdentitySetAttr(ret,
++ if (virIdentitySetAttr(ret,
+ VIR_IDENTITY_ATTR_UNIX_USER_NAME,
+ username) < 0)
+ goto error;
+- if (groupname &&
+- virIdentitySetAttr(ret,
++ if (virIdentitySetAttr(ret,
++ VIR_IDENTITY_ATTR_UNIX_USER_ID,
++ userid) < 0)
++ goto error;
++ if (virIdentitySetAttr(ret,
+ VIR_IDENTITY_ATTR_UNIX_GROUP_NAME,
+ groupname) < 0)
+ goto error;
++ if (virIdentitySetAttr(ret,
++ VIR_IDENTITY_ATTR_UNIX_GROUP_ID,
++ groupid) < 0)
++ goto error;
+ if (seccontext &&
+ virIdentitySetAttr(ret,
+ VIR_IDENTITY_ATTR_SELINUX_CONTEXT,
+@@ -188,7 +201,9 @@ virIdentityPtr virIdentityGetSystem(void)
+
+ cleanup:
+ VIR_FREE(username);
++ VIR_FREE(userid);
+ VIR_FREE(groupname);
++ VIR_FREE(groupid);
+ VIR_FREE(seccontext);
+ VIR_FREE(processid);
+ return ret;
+diff --git a/src/util/viridentity.h b/src/util/viridentity.h
+index 4bae8d6..a240c2d 100644
+--- a/src/util/viridentity.h
++++ b/src/util/viridentity.h
+@@ -29,7 +29,9 @@ typedef virIdentity *virIdentityPtr;
+
+ typedef enum {
+ VIR_IDENTITY_ATTR_UNIX_USER_NAME,
++ VIR_IDENTITY_ATTR_UNIX_USER_ID,
+ VIR_IDENTITY_ATTR_UNIX_GROUP_NAME,
++ VIR_IDENTITY_ATTR_UNIX_GROUP_ID,
+ VIR_IDENTITY_ATTR_UNIX_PROCESS_ID,
+ VIR_IDENTITY_ATTR_UNIX_PROCESS_TIME,
+ VIR_IDENTITY_ATTR_SASL_USER_NAME,
+--
+1.8.3.1
+
diff --git a/community/libvirt/0002-Ensure-system-identity-includes-process-start-time.patch b/community/libvirt/0002-Ensure-system-identity-includes-process-start-time.patch new file mode 100644 index 000000000..1fba7d56c --- /dev/null +++ b/community/libvirt/0002-Ensure-system-identity-includes-process-start-time.patch @@ -0,0 +1,70 @@ +From f26b6e44bf0c3efe8167a528141224ccb7623b4a Mon Sep 17 00:00:00 2001
+From: "Daniel P. Berrange" <berrange@redhat.com>
+Date: Wed, 28 Aug 2013 15:22:05 +0100
+Subject: [PATCH 2/3] Ensure system identity includes process start time
+
+The polkit access driver will want to use the process start
+time field. This was already set for network identities, but
+not for the system identity.
+
+Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
+---
+ src/util/viridentity.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/src/util/viridentity.c b/src/util/viridentity.c
+index 03c375b..f681f85 100644
+--- a/src/util/viridentity.c
++++ b/src/util/viridentity.c
+@@ -35,6 +35,7 @@
+ #include "virthread.h"
+ #include "virutil.h"
+ #include "virstring.h"
++#include "virprocess.h"
+
+ #define VIR_FROM_THIS VIR_FROM_IDENTITY
+
+@@ -142,11 +143,20 @@ virIdentityPtr virIdentityGetSystem(void)
+ security_context_t con;
+ #endif
+ char *processid = NULL;
++ unsigned long long timestamp;
++ char *processtime = NULL;
+
+ if (virAsprintf(&processid, "%llu",
+ (unsigned long long)getpid()) < 0)
+ goto cleanup;
+
++ if (virProcessGetStartTime(getpid(), ×tamp) < 0)
++ goto cleanup;
++
++ if (timestamp != 0 &&
++ virAsprintf(&processtime, "%llu", timestamp) < 0)
++ goto cleanup;
++
+ if (!(username = virGetUserName(getuid())))
+ goto cleanup;
+ if (virAsprintf(&userid, "%d", (int)getuid()) < 0)
+@@ -198,6 +208,11 @@ virIdentityPtr virIdentityGetSystem(void)
+ VIR_IDENTITY_ATTR_UNIX_PROCESS_ID,
+ processid) < 0)
+ goto error;
++ if (processtime &&
++ virIdentitySetAttr(ret,
++ VIR_IDENTITY_ATTR_UNIX_PROCESS_TIME,
++ processtime) < 0)
++ goto error;
+
+ cleanup:
+ VIR_FREE(username);
+@@ -206,6 +221,7 @@ cleanup:
+ VIR_FREE(groupid);
+ VIR_FREE(seccontext);
+ VIR_FREE(processid);
++ VIR_FREE(processtime);
+ return ret;
+
+ error:
+--
+1.8.3.1
+
diff --git a/community/libvirt/0003-Add-support-for-using-3-arg-pkcheck-syntax-for-proce.patch b/community/libvirt/0003-Add-support-for-using-3-arg-pkcheck-syntax-for-proce.patch new file mode 100644 index 000000000..8882f1227 --- /dev/null +++ b/community/libvirt/0003-Add-support-for-using-3-arg-pkcheck-syntax-for-proce.patch @@ -0,0 +1,159 @@ +From 4a061ec8fe94857dd21acf401c66195ec51b1234 Mon Sep 17 00:00:00 2001
+From: "Daniel P. Berrange" <berrange@redhat.com>
+Date: Wed, 28 Aug 2013 15:25:40 +0100
+Subject: [PATCH 3/3] Add support for using 3-arg pkcheck syntax for process
+
+With the existing pkcheck (pid, start time) tuple for identifying
+the process, there is a race condition, where a process can make
+a libvirt RPC call and in another thread exec a setuid application,
+causing it to change to effective UID 0. This in turn causes polkit
+to do its permission check based on the wrong UID.
+
+To address this, libvirt must get the UID the caller had at time
+of connect() (from SO_PEERCRED) and pass a (pid, start time, uid)
+triple to the pkcheck program.
+
+Signed-off-by: Colin Walters <walters@redhat.com>
+Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
+---
+ configure.ac | 8 ++++++++
+ daemon/remote.c | 21 +++++++++++++++++---
+ src/access/viraccessdriverpolkit.c | 40 +++++++++++++++++++++++++++++++++-----
+ 3 files changed, 61 insertions(+), 8 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 94a2e19..3dfbb4d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1184,6 +1184,14 @@ if test "x$with_polkit" = "xyes" || test "x$with_polkit" = "xcheck"; then
+ AC_PATH_PROG([PKCHECK_PATH],[pkcheck], [], [/usr/sbin:$PATH])
+ if test "x$PKCHECK_PATH" != "x" ; then
+ AC_DEFINE_UNQUOTED([PKCHECK_PATH],["$PKCHECK_PATH"],[Location of pkcheck program])
++ AC_MSG_CHECKING([whether pkcheck supports uid value])
++ pkcheck_supports_uid=$($PKG_CONFIG --variable pkcheck_supports_uid polkit-gobject-1)
++ if test "x$pkcheck_supports_uid" = "xtrue"; then
++ AC_MSG_RESULT([yes])
++ AC_DEFINE_UNQUOTED([PKCHECK_SUPPORTS_UID], 1, [Pass uid to pkcheck])
++ else
++ AC_MSG_RESULT([no])
++ fi
+ AC_DEFINE_UNQUOTED([WITH_POLKIT], 1,
+ [use PolicyKit for UNIX socket access checks])
+ AC_DEFINE_UNQUOTED([WITH_POLKIT1], 1,
+diff --git a/daemon/remote.c b/daemon/remote.c
+index 03d5557..6132091 100644
+--- a/daemon/remote.c
++++ b/daemon/remote.c
+@@ -2731,10 +2731,12 @@ remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED,
+ int status = -1;
+ char *ident = NULL;
+ bool authdismissed = 0;
++ bool supportsuid = 0;
+ char *pkout = NULL;
+ struct daemonClientPrivate *priv =
+ virNetServerClientGetPrivateData(client);
+ virCommandPtr cmd = NULL;
++ static bool polkitInsecureWarned = false;
+
+ virMutexLock(&priv->lock);
+ action = virNetServerClientGetReadonly(client) ?
+@@ -2756,14 +2758,27 @@ remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED,
+ goto authfail;
+ }
+
++ if (timestamp == 0) {
++ VIR_WARN("Failing polkit auth due to missing client (pid=%lld) start time",
++ (long long)callerPid);
++ goto authfail;
++ }
++
+ VIR_INFO("Checking PID %lld running as %d",
+ (long long) callerPid, callerUid);
+
+ virCommandAddArg(cmd, "--process");
+- if (timestamp != 0) {
+- virCommandAddArgFormat(cmd, "%lld,%llu", (long long) callerPid, timestamp);
++# ifdef PKCHECK_SUPPORTS_UID
++ supportsuid = 1;
++# endif
++ if (supportsuid) {
++ virCommandAddArgFormat(cmd, "%lld,%llu,%lu", (long long) callerPid, timestamp, (unsigned long) callerUid);
+ } else {
+- virCommandAddArgFormat(cmd, "%lld", (long long) callerPid);
++ if (!polkitInsecureWarned) {
++ VIR_WARN("No support for caller UID with pkcheck. This deployment is known to be insecure.");
++ polkitInsecureWarned = true;
++ }
++ virCommandAddArgFormat(cmd, "%lld,%llu", (long long) callerPid, timestamp);
+ }
+ virCommandAddArg(cmd, "--allow-user-interaction");
+
+diff --git a/src/access/viraccessdriverpolkit.c b/src/access/viraccessdriverpolkit.c
+index 4c76e64..d980820 100644
+--- a/src/access/viraccessdriverpolkit.c
++++ b/src/access/viraccessdriverpolkit.c
+@@ -72,8 +72,12 @@ static char *
+ virAccessDriverPolkitFormatProcess(const char *actionid)
+ {
+ virIdentityPtr identity = virIdentityGetCurrent();
+- const char *process = NULL;
++ const char *callerPid = NULL;
++ const char *callerTime = NULL;
++ const char *callerUid = NULL;
+ char *ret = NULL;
++ bool supportsuid = 0;
++ static bool polkitInsecureWarned = false;
+
+ if (!identity) {
+ virAccessError(VIR_ERR_ACCESS_DENIED,
+@@ -81,17 +85,43 @@ virAccessDriverPolkitFormatProcess(const char *actionid)
+ actionid);
+ return NULL;
+ }
+- if (virIdentityGetAttr(identity, VIR_IDENTITY_ATTR_UNIX_PROCESS_ID, &process) < 0)
++ if (virIdentityGetAttr(identity, VIR_IDENTITY_ATTR_UNIX_PROCESS_ID, &callerPid) < 0)
++ goto cleanup;
++ if (virIdentityGetAttr(identity, VIR_IDENTITY_ATTR_UNIX_PROCESS_TIME, &callerTime) < 0)
++ goto cleanup;
++ if (virIdentityGetAttr(identity, VIR_IDENTITY_ATTR_UNIX_USER_ID, &callerUid) < 0)
+ goto cleanup;
+
+- if (!process) {
++ if (!callerPid) {
+ virAccessError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("No UNIX process ID available"));
+ goto cleanup;
+ }
+-
+- if (VIR_STRDUP(ret, process) < 0)
++ if (!callerTime) {
++ virAccessError(VIR_ERR_INTERNAL_ERROR, "%s",
++ _("No UNIX process start time available"));
++ goto cleanup;
++ }
++ if (!callerUid) {
++ virAccessError(VIR_ERR_INTERNAL_ERROR, "%s",
++ _("No UNIX caller UID available"));
+ goto cleanup;
++ }
++
++#ifdef PKCHECK_SUPPORTS_UID
++ supportsuid = 1;
++#endif
++ if (supportsuid) {
++ if (virAsprintf(&ret, "%s,%s,%s", callerPid, callerTime, callerUid) < 0)
++ goto cleanup;
++ } else {
++ if (!polkitInsecureWarned) {
++ VIR_WARN("No support for caller UID with pkcheck. This deployment is known to be insecure.");
++ polkitInsecureWarned = true;
++ }
++ if (virAsprintf(&ret, "%s,%s", callerPid, callerTime) < 0)
++ goto cleanup;
++ }
+
+ cleanup:
+ virObjectUnref(identity);
+--
+1.8.3.1
+
diff --git a/community/libvirt/PKGBUILD b/community/libvirt/PKGBUILD index bb7d38bc7..cfeb7738b 100644 --- a/community/libvirt/PKGBUILD +++ b/community/libvirt/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 96612 2013-09-02 10:46:37Z spupykin $ +# $Id: PKGBUILD 97608 2013-09-25 13:45:00Z spupykin $ # Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com> # Contributor: Jonathan Wiersma <archaur at jonw dot org> pkgname=libvirt pkgver=1.1.2 -pkgrel=1 +pkgrel=2 pkgdesc="API for controlling virtualization engines (openvz,kvm,qemu,virtualbox,xen,etc)" arch=('i686' 'x86_64') url="http://libvirt.org/" @@ -32,11 +32,25 @@ install="libvirt.install" source=("http://libvirt.org/sources/$pkgname-$pkgver.tar.gz" libvirtd.conf.d libvirtd-guests.conf.d - libvirt.tmpfiles.d) + libvirt.tmpfiles.d + 0001-Also-store-user-group-ID-values-in-virIdentity.patch + 0002-Ensure-system-identity-includes-process-start-time.patch + 0003-Add-support-for-using-3-arg-pkcheck-syntax-for-proce.patch) md5sums=('1835bbfa492099bce12e2934870e5611' '3ed0e24f5b5e25bf553f5427d64915e6' '0a96ed876ffb1fcb9dff5a9b3a609c1e' - '020971887442ebbf1b6949e031c8dd3f') + '020971887442ebbf1b6949e031c8dd3f' + '60912fc049f0e8cf8d89c919ea619415' + 'a42387495f75dd918a6c25b36eb3b428' + '2dba51f17f37f59585852092e4c86e44') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + patch -p1 <$srcdir/0001-Also-store-user-group-ID-values-in-virIdentity.patch + patch -p1 <$srcdir/0002-Ensure-system-identity-includes-process-start-time.patch + patch -p1 <$srcdir/0003-Add-support-for-using-3-arg-pkcheck-syntax-for-proce.patch + autoreconf +} build() { cd "$srcdir/$pkgname-$pkgver" diff --git a/community/nodejs/PKGBUILD b/community/nodejs/PKGBUILD index c17656108..1f5b7434a 100644 --- a/community/nodejs/PKGBUILD +++ b/community/nodejs/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 96776 2013-09-04 21:38:52Z bpiotrowski $ +# $Id: PKGBUILD 97596 2013-09-25 06:59:41Z bpiotrowski $ # Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl> # Contributor: Thomas Dziedzic < gostrc at gmail > # Contributor: James Campos <james.r.campos@gmail.com> @@ -8,7 +8,7 @@ # Contributor: TIanyi Cui <tianyicui@gmail.com> pkgname=nodejs -pkgver=0.10.18 +pkgver=0.10.19 pkgrel=1 pkgdesc='Evented I/O for V8 javascript' arch=('i686' 'x86_64') @@ -19,7 +19,7 @@ makedepends=('python2') checkdepends=('curl') options=('!emptydirs') source=(http://nodejs.org/dist/v$pkgver/node-v$pkgver.tar.gz) -sha256sums=('3ee4436473869d4d84bb5cad4352b09ace00656467eca7d6db7cd7da5b8c5495') +sha256sums=('e50787672cdf6afa6caeef9345ca40c4a69f96a31829a0884ea6ed63dfdde21e') prepare() { cd node-v$pkgver diff --git a/community/tint2/PKGBUILD b/community/tint2/PKGBUILD index 09bc4aff4..2571b8dee 100644 --- a/community/tint2/PKGBUILD +++ b/community/tint2/PKGBUILD @@ -1,43 +1,50 @@ -# $Id: PKGBUILD 64903 2012-02-18 20:04:04Z bpiotrowski $ +# $Id: PKGBUILD 97618 2013-09-25 18:19:34Z bpiotrowski $ # Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl> # Contributor: Blue Peppers <bluepeppers@archlinux.us> # Contributor: Stefan Husmann< stefan-husmann@t-online.de> pkgname=tint2 pkgver=0.11 -pkgrel=5 -pkgdesc="A basic, good-looking task manager for WMs" +pkgrel=6 +pkgdesc='Basic, good-looking task manager for WMs' arch=('i686' 'x86_64') url="http://code.google.com/p/tint2/" license=('GPL2') conflicts=('ttm-svn' 'tint') replaces=('tint') depends=('gtk2' 'imlib2') -optdepends=('pygtk: for using tint2conf') +optdepends=('pygtk: for tint2wizard') makedepends=('pygtk' 'cmake') provides=('tint') -source=("http://$pkgname.googlecode.com/files/$pkgname-${pkgver}.tar.bz2" - 'add-power-now-support.patch') +source=(http://tint2.googlecode.com/files/tint2-$pkgver.tar.bz2 + add-power-now-support.patch + fix_defunct_processes.patch + middle_click_on_clock.patch) md5sums=('6fc5731e7425125fa84a2add5cef4bff' - '6cfcad028f1bd2f69812167f5395f890') + '6cfcad028f1bd2f69812167f5395f890' + 'b3d052ac5ada81c56e36133b1ecdee8c' + 'f7918d29a87422aab6fb9d922867d8f8') -build() { - cd "$srcdir/$pkgname-${pkgver}" +prepare() { + cd $pkgname-$pkgver - # add support for power_now battery attribute (fixes FS#21954) patch -Np0 -i ../add-power-now-support.patch + patch -Np0 -i ../fix_defunct_processes.patch + patch -Np0 -i ../middle_click_on_clock.patch # python2 fix sed -i 's_#!/usr/bin/env python_#!/usr/bin/env python2_' src/tint2conf/tintwizard.py sed -i 's_python _python2 _' src/tint2conf/main.c +} + +build() { + cd $pkgname-$pkgver - [ -d build ] || mkdir build - cd build - cmake -DCMAKE_INSTALL_PREFIX=/usr ../ + cmake -DCMAKE_INSTALL_PREFIX=/usr . make } package() { - cd "$srcdir/$pkgname-${pkgver}/build" + cd $pkgname-$pkgver make DESTDIR="$pkgdir" install } diff --git a/community/tint2/fix_defunct_processes.patch b/community/tint2/fix_defunct_processes.patch new file mode 100644 index 000000000..28ea6c27a --- /dev/null +++ b/community/tint2/fix_defunct_processes.patch @@ -0,0 +1,31 @@ +http://code.google.com/p/tint2/issues/detail?id=430 +Submitted By: David B. Cortarello (Nomius) <dcortarello at gmail dot com> +Date: 18-05-2013 +Initial Package Version: subversion trunk (revision 652) +Description: Fix zombie (defunct) processes created in clock_action. +This patch provides the following bugfixes: + * This patch uses waitpid with WNOHANG to eliminate all zombie processes created by tint2 (in particular by the clock -right or left- click). This is done by a small hack in the update_clocks_min, called to "redraw" that area. + +--- src/clock/clock.c (revision 652) ++++ src/clock/clock.c (working copy) +@@ -23,6 +23,8 @@ + #include <cairo-xlib.h> + #include <pango/pangocairo.h> + #include <stdlib.h> ++#include <sys/types.h> ++#include <sys/wait.h> + + #include "window.h" + #include "server.h" +@@ -98,6 +103,10 @@ + // remember old_sec because after suspend/hibernate the clock should be updated directly, and not + // on next minute change + time_t old_sec = time_clock.tv_sec; ++ ++ // Little hack to wait executed commands in clock_action avoiding zombies ++ waitpid(-1, NULL, WNOHANG); ++ + gettimeofday(&time_clock, 0); + if (time_clock.tv_sec % 60 == 0 || time_clock.tv_sec - old_sec > 60) { + int i; + diff --git a/community/tint2/middle_click_on_clock.patch b/community/tint2/middle_click_on_clock.patch new file mode 100644 index 000000000..800c15c44 --- /dev/null +++ b/community/tint2/middle_click_on_clock.patch @@ -0,0 +1,75 @@ +http://code.google.com/p/tint2/issues/detail?id=430 +Submitted By: David B. Cortarello (Nomius) <dcortarello at gmail dot com> +Date: 18-05-2013 +Initial Package Version: subversion trunk (revision 652) +Description: Implemented middle click mouse button in the clock to execute tasks. +* Implemented middle click mouse button over the clock by accepting the button 2 in the clock_action. +* A new configuration parameter was created called clock_mclick_command, which works in the same way +* clock_lclick_command and clock_rclick_command does. + +Index: src/clock/clock.c +=================================================================== +--- src/clock/clock.c (revision 652) ++++ src/clock/clock.c (working copy) +@@ -39,6 +41,7 @@ + char *time_tooltip_format; + char *time_tooltip_timezone; + char *clock_lclick_command; ++char *clock_mclick_command; + char *clock_rclick_command; + struct timeval time_clock; + PangoFontDescription *time1_font_desc; +@@ -61,6 +64,7 @@ + time_tooltip_format = 0; + time_tooltip_timezone = 0; + clock_lclick_command = 0; ++ clock_mclick_command = 0; + clock_rclick_command = 0; + time1_font_desc = 0; + time2_font_desc = 0; +@@ -77,6 +81,7 @@ + if (time2_timezone) g_free(time2_timezone); + if (time_tooltip_timezone) g_free(time_tooltip_timezone); + if (clock_lclick_command) g_free(clock_lclick_command); ++ if (clock_mclick_command) g_free(clock_mclick_command); + if (clock_rclick_command) g_free(clock_rclick_command); + if (clock_timeout) stop_timeout(clock_timeout); + } +@@ -254,6 +263,9 @@ + case 1: + command = clock_lclick_command; + break; ++ case 2: ++ command = clock_mclick_command; ++ break; + case 3: + command = clock_rclick_command; + break; +Index: src/clock/clock.h +=================================================================== +--- src/clock/clock.h (revision 652) ++++ src/clock/clock.h (working copy) +@@ -33,6 +33,7 @@ + extern PangoFontDescription *time1_font_desc; + extern PangoFontDescription *time2_font_desc; + extern char *clock_lclick_command; ++extern char *clock_mclick_command; + extern char *clock_rclick_command; + extern int clock_enabled; + +Index: src/config.c +=================================================================== +--- src/config.c (revision 652) ++++ src/config.c (working copy) +@@ -396,6 +396,10 @@ + if (strlen(value) > 0) + clock_lclick_command = strdup(value); + } ++ else if (strcmp(key, "clock_mclick_command") == 0) { ++ if (strlen(value) > 0) ++ clock_mclick_command = strdup(value); ++ } + else if (strcmp(key, "clock_rclick_command") == 0) { + if (strlen(value) > 0) + clock_rclick_command = strdup(value); + diff --git a/community/virtualbox-modules-lts/PKGBUILD b/community/virtualbox-modules-lts/PKGBUILD index 22476422e..85bee4fb0 100644 --- a/community/virtualbox-modules-lts/PKGBUILD +++ b/community/virtualbox-modules-lts/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 97440 2013-09-20 06:39:24Z bpiotrowski $ +# $Id: PKGBUILD 97616 2013-09-25 18:03:31Z bpiotrowski $ # Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl> # Contributor: Ionut Biru <ibiru@archlinux.org> # Contributor: Sébastien Luttringer @@ -6,7 +6,7 @@ pkgbase=virtualbox-modules-lts pkgname=('virtualbox-host-modules-lts' 'virtualbox-guest-modules-lts') pkgver=4.2.18 -pkgrel=2 +pkgrel=3 arch=('i686' 'x86_64') url='http://virtualbox.org' license=('GPL') @@ -53,7 +53,7 @@ package_virtualbox-guest-modules-lts(){ depends=('linux-lts>=3.10' 'linux-lts<3.11') replaces=('virtualbox-archlinux-modules-lts') conflicts=('virtualbox-archlinux-modules-lts') - provides=("virtualbox-host-modules=$pkgver") + provides=("virtualbox-guest-modules=$pkgver") install=virtualbox-guest-modules-lts.install cd "dkms/vboxguest/$pkgver/$_kernver/$CARCH/module" diff --git a/community/xboard/PKGBUILD b/community/xboard/PKGBUILD index 13c602417..f9687dc57 100644 --- a/community/xboard/PKGBUILD +++ b/community/xboard/PKGBUILD @@ -1,11 +1,11 @@ -# $Id: PKGBUILD 97535 2013-09-23 16:17:42Z spupykin $ +# $Id: PKGBUILD 97605 2013-09-25 13:39:22Z spupykin $ # Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com> # Contributor: Jason Chu <jason@archlinux.org> # Contributor: Tom Newsom <Jeepster@gmx.co.uk> pkgname=xboard pkgver=4.7.2 -pkgrel=1 +pkgrel=2 pkgdesc="Graphical user interfaces for chess" arch=('i686' 'x86_64') url="http://www.gnu.org/software/xboard/" @@ -29,7 +29,8 @@ build() { --prefix=/usr \ --mandir=/usr/share/man \ --sysconfdir=/etc \ - --with-gtk + --with-gtk \ + --enable-zippy make } diff --git a/extra/dovecot/PKGBUILD b/extra/dovecot/PKGBUILD index 4c7da1644..faec2395f 100644 --- a/extra/dovecot/PKGBUILD +++ b/extra/dovecot/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 192152 2013-08-06 14:10:47Z andyrtr $ +# $Id: PKGBUILD 195140 2013-09-25 15:41:44Z andyrtr $ # Maintainer: Andreas Radke <andyrtr@archlinux.org> # Contributor: Paul Mattal <paul@mattal.com> # Contributor: Federico Quagliata (quaqo) <quaqo@despammed.com> @@ -8,7 +8,7 @@ # --->>> remember to rebuild/bump pigeonhole in one step <<<--- pkgname=dovecot -pkgver=2.2.5 +pkgver=2.2.6 pkgrel=1 pkgdesc="An IMAP and POP3 server written with security primarily in mind" arch=('i686' 'x86_64') @@ -24,7 +24,7 @@ options=('!libtool') install=$pkgname.install source=(http://dovecot.org/releases/2.2/${pkgname}-${pkgver}.tar.gz{,.sig} dovecot.tmpfilesd) -md5sums=('0096442e2a1739b1b7997a833248a263' +md5sums=('db65988ef2e6889dd8b49c132b21fc8f' 'SKIP' '342a28251d40f983c98c0d1f1bf3d07d') @@ -32,7 +32,7 @@ build() { cd ${srcdir}/$pkgname-$pkgver # fix build with recent clucene (FC) - sed -i '/DEFAULT_INCLUDES *=/s|$| '"$(pkg-config --cflags libclucene-core)|" src/plugins/fts-lucene/Makefile.in +# sed -i '/DEFAULT_INCLUDES *=/s|$| '"$(pkg-config --cflags libclucene-core)|" src/plugins/fts-lucene/Makefile.in # fix path in helper script sed -i 's:OPENSSLCONFIG=${OPENSSLCONFIG-dovecot-openssl.cnf}:OPENSSLCONFIG=${OPENSSLCONFIG- /etc/ssl/dovecot-openssl.cnf}:' doc/mkcert.sh diff --git a/extra/kdesdk-poxml/PKGBUILD b/extra/kdesdk-poxml/PKGBUILD index 70346c1a9..7ac28eecf 100644 --- a/extra/kdesdk-poxml/PKGBUILD +++ b/extra/kdesdk-poxml/PKGBUILD @@ -3,14 +3,14 @@ pkgname=kdesdk-poxml pkgver=4.11.1 -pkgrel=1 +pkgrel=2 pkgdesc='Translates DocBook XML files using gettext po files' url='https://projects.kde.org/projects/kde/kdesdk/poxml' arch=('i686' 'x86_64') license=('GPL' 'LGPL' 'FDL') groups=('kde' 'kdesdk') depends=('kdelibs') -makedepends=('cmake' 'automoc4') +makedepends=('cmake' 'automoc4' 'antlr2') optdepends=('antlr2: required for po2xml and swappo tool') source=("http://download.kde.org/stable/${pkgver}/src/poxml-${pkgver}.tar.xz") sha1sums=('5c43a53f4106d80826865590a218ea63aa6c15c7') diff --git a/extra/mariadb/PKGBUILD b/extra/mariadb/PKGBUILD index 25560318d..1125dfc74 100644 --- a/extra/mariadb/PKGBUILD +++ b/extra/mariadb/PKGBUILD @@ -1,30 +1,35 @@ -# $Id: PKGBUILD 193074 2013-08-15 15:18:16Z bpiotrowski $ +# $Id: PKGBUILD 195113 2013-09-25 07:07:22Z bpiotrowski $ # Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl> pkgbase=mariadb -pkgname=('libmariadbclient' 'mariadb-clients' 'mariadb') -pkgver=5.5.32 -pkgrel=2 +pkgname=('libmariadbclient' 'mariadb-clients' 'mytop' 'mariadb') +pkgver=5.5.33.a +_pkgver=${pkgver/.a/a} +pkgrel=1 arch=('i686' 'x86_64') license=('GPL') url='http://mariadb.org/' makedepends=('cmake' 'openssl' 'zlib') options=('!libtool') -source=(http://mirrors.supportex.net/$pkgbase/$pkgbase-$pkgver/kvm-tarbake-jaunty-x86/$pkgbase-$pkgver.tar.gz +source=(http://mirrors.supportex.net/$pkgbase/$pkgbase-$_pkgver/kvm-tarbake-jaunty-x86/$pkgbase-$_pkgver.tar.gz mariadb.service mariadb-post.sh mariadb-tmpfile.conf) -sha256sums=('cc76d143c60d9f24b551adaf80f694ef9beb4a6a9032c115a06f7b5c5d0ee468' +sha256sums=('adf4d04087177fde6568082c3fee77e52e84dc3ae4eb5b994d5defaaa8c83d5b' 'a6cf5446159fff16598d0d787dd3a3c30a53a656a5f876ddb608bc60e234d334' '368f9fd2454d80eb32abb8f29f703d1cf9553353fb9e1ae4529c4b851cb8c5dd' '2af318c52ae0fe5428e8a9245d1b0fc3bc5ce153842d1563329ceb1edfa83ddd') +prepare() { + cd $pkgbase-$_pkgver + sed -i '63d' storage/tokudb/ft-index/cmake_modules/TokuSetupCTest.cmake +} + build() { - cd $srcdir mkdir build cd build - cmake ../$pkgbase-$pkgver \ + cmake ../$pkgbase-$_pkgver \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ -DSYSCONFDIR=/etc/mysql \ @@ -53,6 +58,7 @@ build() { -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ + -DWITH_TOKUDB_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \ -DWITHOUT_PBXT_STORAGE_ENGINE=1 \ @@ -70,16 +76,15 @@ package_libmariadbclient() { conflicts=('libmysqlclient') provides=("libmysqlclient=$pkgver") - cd "$srcdir"/build + cd build for dir in include libmysql libmysqld libservices; do make -C $dir DESTDIR="$pkgdir" install done - install -d "$pkgdir"/usr/bin - install -m755 scripts/mysql_config "$pkgdir"/usr/bin/ + install -Dm755 scripts/mysql_config "$pkgdir"/usr/bin/mysql_config install -d "$pkgdir"/usr/share/man/man1 for man in mysql_config mysql_client_test_embedded mysqltest_embedded; do - install -m644 "$srcdir"/$pkgbase-$pkgver/man/$man.1 "$pkgdir"/usr/share/man/man1/$man.1 + install -m644 "$srcdir"/$pkgbase-$_pkgver/man/$man.1 "$pkgdir"/usr/share/man/man1/$man.1 done } @@ -89,17 +94,26 @@ package_mariadb-clients() { conflicts=('mysql-clients') provides=("mysql-clients=$pkgver") - cd "$srcdir"/build + cd build make -C client DESTDIR="$pkgdir" install # install man pages install -d "$pkgdir"/usr/share/man/man1 for man in mysql mysqladmin mysqlcheck mysqldump mysqlimport mysqlshow mysqlslap; do - install -m644 "$srcdir"/$pkgbase-$pkgver/man/$man.1 "$pkgdir"/usr/share/man/man1/$man.1 + install -m644 "$srcdir"/$pkgbase-$_pkgver/man/$man.1 "$pkgdir"/usr/share/man/man1/$man.1 done # provided by mariadb rm "$pkgdir"/usr/bin/{mysql_{plugin,upgrade},mysqlbinlog,mysqltest} + +} + +package_mytop() { + pkgdesc='Top clone for MariaDB' + depends=('perl-dbd-mysql' 'perl-term-readkey') + + cd build + install -Dm755 scripts/mytop "$pkgdir"/usr/bin/mytop } package_mariadb() { @@ -107,31 +121,33 @@ package_mariadb() { backup=('etc/mysql/my.cnf') install=mariadb.install depends=('mariadb-clients' 'inetutils') - conflicts=('mysql' 'mytop') - provides=("mysql=$pkgver" 'mytop') - optdepends=('perl-dbd-mysql: mytop dependency' - 'perl-term-readkey: mytop dependency') + conflicts=('mysql') + provides=("mysql=$pkgver") options=('emptydirs') - cd "$srcdir"/build + cd build make DESTDIR="$pkgdir" install install -Dm644 "$pkgdir"/usr/share/mysql/my-medium.cnf "$pkgdir"/etc/mysql/my.cnf - install -Dm755 "$srcdir"/mariadb-post.sh "$pkgdir"/usr/bin/mysqld-post - install -Dm644 "$srcdir"/mariadb.service "$pkgdir"/usr/lib/systemd/system/mysqld.service - install -Dm644 "$srcdir"/mariadb-tmpfile.conf "$pkgdir"/usr/lib/tmpfiles.d/mysql.conf + install -Dm755 ../mariadb-post.sh "$pkgdir"/usr/bin/mysqld-post + install -Dm644 ../mariadb.service "$pkgdir"/usr/lib/systemd/system/mysqld.service + install -Dm644 ../mariadb-tmpfile.conf "$pkgdir"/usr/lib/tmpfiles.d/mysql.conf # provided by libmariadbclient - rm "$pkgdir"/usr/bin/{mysql_config,mysql_client_test_embedded,mysqltest_embedded} - rm "$pkgdir"/usr/lib/libmysql* - rm -r "$pkgdir"/usr/include/ - rm "$pkgdir"/usr/share/man/man1/{mysql_config,mysql_client_test_embedded,mysqltest_embedded}.1 + cd "$pkgdir" + rm usr/bin/{mysql_config,mysql_client_test_embedded,mysqltest_embedded} + rm usr/lib/libmysql* + rm -r usr/include/ + rm usr/share/man/man1/{mysql_config,mysql_client_test_embedded,mysqltest_embedded}.1 # provided by mariadb-clients - rm "$pkgdir"/usr/bin/{mysql,mysqladmin,mysqlcheck,mysqldump,mysqlimport,mysqlshow,mysqlslap} - rm "$pkgdir"/usr/share/man/man1/{mysql,mysqladmin,mysqlcheck,mysqldump,mysqlimport,mysqlshow,mysqlslap}.1 + rm usr/bin/{mysql,mysqladmin,mysqlcheck,mysqldump,mysqlimport,mysqlshow,mysqlslap} + rm usr/share/man/man1/{mysql,mysqladmin,mysqlcheck,mysqldump,mysqlimport,mysqlshow,mysqlslap}.1 + + # provided by mytop + rm usr/bin/mytop # not needed - rm -r "$pkgdir"/usr/{data,mysql-test,sql-bench} - rm "$pkgdir"/usr/share/man/man1/mysql-test-run.pl.1 + rm -r usr/{data,mysql-test,sql-bench} + rm usr/share/man/man1/mysql-test-run.pl.1 } diff --git a/extra/php-xcache/PKGBUILD b/extra/php-xcache/PKGBUILD index 37b93da0d..a995f2197 100644 --- a/extra/php-xcache/PKGBUILD +++ b/extra/php-xcache/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 194213 2013-09-10 15:28:33Z pierre $ +# $Id: PKGBUILD 195126 2013-09-25 11:18:14Z pierre $ # Maintainer: Pierre Schmitz <pierre@archlinux.de> pkgname=php-xcache pkgver=3.1.0dev -_svnrev=1368 -pkgrel=13 +_svnrev=1394 +pkgrel=14 arch=('i686' 'x86_64') pkgdesc='A PHP opcode cacher' url='http://xcache.lighttpd.net/' diff --git a/extra/pigeonhole/PKGBUILD b/extra/pigeonhole/PKGBUILD index 34046030f..1d1fd930e 100644 --- a/extra/pigeonhole/PKGBUILD +++ b/extra/pigeonhole/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 192153 2013-08-06 14:10:47Z andyrtr $ +# $Id: PKGBUILD 195141 2013-09-25 15:41:45Z andyrtr $ # Maintainer: Andreas Radke <andyrtr@archlinux.org> # Contributorr: Peter Lewis <plewis@aur.archlinux.org> @@ -7,12 +7,12 @@ # This must be built against the version of dovecot being used, # else mail delivery will fail. # Specify the version of dovecot to be used here: -_dcpkgver=2.2.5 +_dcpkgver=2.2.6 # Make sure to bump pkgrel if changing this. pkgname=pigeonhole pkgver=0.4.1 -pkgrel=2 +pkgrel=3 pkgdesc="Sieve implementation for Dovecot" arch=('i686' 'x86_64') url="http://pigeonhole.dovecot.org/" diff --git a/extra/ruby/0001-remove-db-support.patch b/extra/ruby/0001-remove-db-support.patch new file mode 100644 index 000000000..bdd7e5871 --- /dev/null +++ b/extra/ruby/0001-remove-db-support.patch @@ -0,0 +1,35 @@ +From b653d6ffe9ec25c203fc0cbbbdd72e9b42546283 Mon Sep 17 00:00:00 2001 +From: Thomas Dziedzic <gostrc@gmail.com> +Date: Sat, 10 Aug 2013 10:50:16 -0700 +Subject: [PATCH] remove db support + +--- + ext/dbm/extconf.rb | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +diff --git a/ext/dbm/extconf.rb b/ext/dbm/extconf.rb +index 32a9446..2412404 100644 +--- a/ext/dbm/extconf.rb ++++ b/ext/dbm/extconf.rb +@@ -5,17 +5,11 @@ dir_config("dbm") + if dblib = with_config("dbm-type", nil) + dblib = dblib.split(/[ ,]+/) + else +- dblib = %w(libc db db2 db1 db5 db4 db3 gdbm_compat gdbm qdbm) ++ dblib = %w(libc gdbm_compat gdbm qdbm) + end + + headers = { + "libc" => ["ndbm.h"], # 4.3BSD original ndbm, Berkeley DB 1 in 4.4BSD libc. +- "db" => ["db.h"], +- "db1" => ["db1/ndbm.h", "db1.h", "ndbm.h"], +- "db2" => ["db2/db.h", "db2.h", "db.h"], +- "db3" => ["db3/db.h", "db3.h", "db.h"], +- "db4" => ["db4/db.h", "db4.h", "db.h"], +- "db5" => ["db5/db.h", "db5.h", "db.h"], + "gdbm_compat" => ["gdbm-ndbm.h", "gdbm/ndbm.h", "ndbm.h"], # GDBM since 1.8.1 + "gdbm" => ["gdbm-ndbm.h", "gdbm/ndbm.h", "ndbm.h"], # GDBM until 1.8.0 + "qdbm" => ["qdbm/relic.h", "relic.h"], +-- +1.8.3.4 + diff --git a/extra/ruby/PKGBUILD b/extra/ruby/PKGBUILD index 2446d2a73..5737c5a6a 100644 --- a/extra/ruby/PKGBUILD +++ b/extra/ruby/PKGBUILD @@ -5,20 +5,25 @@ pkgname=('ruby' 'ruby-docs') pkgver=2.0.0_p247 -pkgrel=1 +pkgrel=3 arch=('i686' 'x86_64') url='http://www.ruby-lang.org/en/' license=('BSD' 'custom') -makedepends=('openssl' 'tk' 'libffi' 'doxygen' 'graphviz' 'libyaml') +makedepends=('gdbm' 'openssl' 'tk' 'libffi' 'doxygen' 'graphviz' 'libyaml') options=('!emptydirs' '!makeflags') source=("ftp://ftp.ruby-lang.org/pub/ruby/${pkgver%.*}/ruby-${pkgver//_/-}.tar.bz2" - 'gemrc') + 'gemrc' + '0001-remove-db-support.patch') md5sums=('60913f3eec0c4071f44df42600be2604' - '6fb8e7a09955e0f64be3158fb4a27e7a') + '6fb8e7a09955e0f64be3158fb4a27e7a' + 'b93ff50214a3da26525244cf37b71a8f') build() { cd ruby-${pkgver//_/-} + # use gdbm because db v6 changed the license to AGPL + patch -Np1 -i ${srcdir}/0001-remove-db-support.patch + PKG_CONFIG=/usr/bin/pkg-config ./configure \ --prefix=/usr \ --sysconfdir=/etc \ @@ -37,7 +42,7 @@ check() { package_ruby() { pkgdesc='An object-oriented language for quick and easy programming' - depends=('openssl' 'libffi' 'libyaml') + depends=('gdbm' 'openssl' 'libffi' 'libyaml') optdepends=('tk: for Ruby/TK' 'ruby-docs: Ruby documentation') provides=('rubygems' 'rake') diff --git a/extra/udisks2/PKGBUILD b/extra/udisks2/PKGBUILD index 3ad4e5588..53aa1d3d4 100644 --- a/extra/udisks2/PKGBUILD +++ b/extra/udisks2/PKGBUILD @@ -1,9 +1,9 @@ -# $Id: PKGBUILD 194551 2013-09-18 12:53:28Z tomegun $ +# $Id: PKGBUILD 195132 2013-09-25 13:30:53Z jgc $ # Maintainer: Ionut Biru <ibiru@archlinux.org> pkgname=udisks2 pkgver=2.1.1 -pkgrel=1 +pkgrel=3 pkgdesc="Disk Management Service, version 2" arch=('i686' 'x86_64') url="http://www.freedesktop.org/wiki/Software/udisks" @@ -11,7 +11,9 @@ license=('GPL2') depends=('glib2' 'systemd' 'polkit' 'libatasmart' 'util-linux') makedepends=('intltool' 'docbook-xsl' 'gobject-introspection' 'python') optdepends=('parted: partition management' - 'gptfdisk: GUID partition table support') + 'gptfdisk: GUID partition table support' + 'ntfs-3g: NTFS filesystem management support' + 'dosfstools: VFAT filesystem management support') options=(!libtool) source=(http://udisks.freedesktop.org/releases/udisks-$pkgver.tar.bz2) sha256sums=('013b09ff38aa256b89c01525771f4565cb088724d5c8c79b32e9f811e88086fb') diff --git a/extra/xf86-video-fbdev/PKGBUILD b/extra/xf86-video-fbdev/PKGBUILD index 6d7cec9fe..ec16a2fea 100644 --- a/extra/xf86-video-fbdev/PKGBUILD +++ b/extra/xf86-video-fbdev/PKGBUILD @@ -1,9 +1,9 @@ -# $Id: PKGBUILD 180197 2013-03-18 16:09:06Z andyrtr $ +# $Id: PKGBUILD 195144 2013-09-25 17:08:11Z andyrtr $ #Maintainer: Jan de Groot <jgc@archlinux.org> pkgname=xf86-video-fbdev -pkgver=0.4.3 -pkgrel=3 +pkgver=0.4.4 +pkgrel=1 pkgdesc="X.org framebuffer video driver" arch=(i686 x86_64) license=('custom') @@ -13,19 +13,17 @@ makedepends=('xorg-server-devel' 'X-ABI-VIDEODRV_VERSION=14' 'resourceproto' 'sc conflicts=('xorg-server<1.14.0' 'X-ABI-VIDEODRV_VERSION<14' 'X-ABI-VIDEODRV_VERSION>=15') groups=('xorg-drivers' 'xorg') options=('!libtool') -source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2 git-fix.diff) -sha256sums=('ff7b037ad110040a4e2db5c84e9741125dbbaf3a08107db47760f3e11f9c4831' - '4eb30cc4db5d1789429861d2d8f15238b21204d4311763ab7a1f4f32ff2b0321') +source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2) +sha256sums=('9dd4b326498223abbfdf786089a46ea3db4fa6bbd341308eb48a9e00bc3fd51b') build() { - cd "${srcdir}/${pkgname}-${pkgver}" - patch -Np1 -i ${srcdir}/git-fix.diff + cd ${pkgname}-${pkgver} ./configure --prefix=/usr make } package() { - cd "${srcdir}/${pkgname}-${pkgver}" + cd ${pkgname}-${pkgver} make DESTDIR="${pkgdir}" install install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/" diff --git a/extra/xf86-video-fbdev/git-fix.diff b/extra/xf86-video-fbdev/git-fix.diff deleted file mode 100644 index 138d5bc2a..000000000 --- a/extra/xf86-video-fbdev/git-fix.diff +++ /dev/null @@ -1,29 +0,0 @@ -From ac293412a01d87f87eb61f4adb9db7486a75d3fc Mon Sep 17 00:00:00 2001 -From: Adam Jackson <ajax@redhat.com> -Date: Tue, 25 Sep 2012 12:54:37 +0000 -Subject: Remove mibstore.h - -Signed-off-by: Adam Jackson <ajax@redhat.com> ---- -diff --git a/src/fbdev.c b/src/fbdev.c -index cd7ebc5..f5a7378 100644 ---- a/src/fbdev.c -+++ b/src/fbdev.c -@@ -14,7 +14,6 @@ - #include "xf86_OSproc.h" - - #include "mipointer.h" --#include "mibstore.h" - #include "micmap.h" - #include "colormapst.h" - #include "xf86cmap.h" -@@ -845,7 +844,6 @@ FBDevScreenInit(SCREEN_INIT_ARGS_DECL) - } - - xf86SetBlackWhitePixels(pScreen); -- miInitializeBackingStore(pScreen); - xf86SetBackingStore(pScreen); - - /* software cursor */ --- -cgit v0.9.0.2-2-gbebe diff --git a/extra/xf86-video-savage/PKGBUILD b/extra/xf86-video-savage/PKGBUILD index d5f9a2eea..08158f8fc 100644 --- a/extra/xf86-video-savage/PKGBUILD +++ b/extra/xf86-video-savage/PKGBUILD @@ -1,9 +1,9 @@ -# $Id: PKGBUILD 181070 2013-03-31 08:09:15Z andyrtr $ +# $Id: PKGBUILD 195146 2013-09-25 17:11:53Z andyrtr $ # Maintainer: Jan de Groot <jgc@archlinux.org> pkgname=xf86-video-savage -pkgver=2.3.6 -pkgrel=4 +pkgver=2.3.7 +pkgrel=1 pkgdesc="X.org savage video driver" arch=(i686 x86_64) url="http://xorg.freedesktop.org/" @@ -14,21 +14,17 @@ conflicts=('xorg-server<1.14.0' 'X-ABI-VIDEODRV_VERSION<14' 'X-ABI-VIDEODRV_VERS optdepends=('savage-dri: DRI1 support from community repo') options=(!libtool) groups=('xorg-drivers' 'xorg') -source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2 - git_fixes.diff) -sha256sums=('48813ed8f4a08858e8c2466fd2dc810ea31f86842025fa39ec949d44f9ad63d6' - 'b415bab5bbad890365c649fe3daa47db23428e92b4a4d8e5aa685e9d78de668d') +source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2) +sha256sums=('041d4205c9222c1780fba6e0e397a559aed393b7a7991b58fa79ba8cccc54a44') build() { - cd "${srcdir}/${pkgname}-${pkgver}" - patch -Np1 -i ${srcdir}/git_fixes.diff + cd ${pkgname}-${pkgver} ./configure --prefix=/usr make } package() { - #cd "${srcdir}/${pkgname}-${pkgver}" - cd ${srcdir}/${pkgname}* + cd ${pkgname}-${pkgver} make DESTDIR="${pkgdir}" install install -d -m755 "${pkgdir}/usr/share/licenses/${pkgname}" diff --git a/extra/xf86-video-savage/git_fixes.diff b/extra/xf86-video-savage/git_fixes.diff deleted file mode 100644 index 8d5ef49b0..000000000 --- a/extra/xf86-video-savage/git_fixes.diff +++ /dev/null @@ -1,64 +0,0 @@ -From 3d181030a6ba2205a57ef4665e53aed0251ccaa6 Mon Sep 17 00:00:00 2001 -From: Dave Airlie <airlied@gmail.com> -Date: Wed, 18 Jul 2012 08:52:38 +0000 -Subject: savage: move compat-api.h down to proper place. - -This screws up when DRI isn't enabled. - -Signed-off-by: Dave Airlie <airlied@redhat.com> ---- -diff --git a/src/savage_driver.h b/src/savage_driver.h -index b604292..ec4b1ea 100644 ---- a/src/savage_driver.h -+++ b/src/savage_driver.h -@@ -85,8 +85,6 @@ - #include "GL/glxint.h" - #include "xf86drm.h" - --#include "compat-api.h" -- - /* Totals 2 Mbytes which equals 2^16 32-byte vertices divided among up - * to 32 clients. */ - #define SAVAGE_NUM_BUFFERS 32 -@@ -153,6 +151,8 @@ typedef struct _server{ - - #endif - -+#include "compat-api.h" -+ - typedef enum { - MT_NONE, - MT_CRT, --- -cgit v0.9.0.2-2-gbebe -From ca9718a887ecbc59b76869af673791ab591b849b Mon Sep 17 00:00:00 2001 -From: Dave Airlie <airlied@gmail.com> -Date: Sat, 22 Dec 2012 10:00:00 +0000 -Subject: savage: fix default accel arch when built with no XAA - -Signed-off-by: Dave Airlie <airlied@redhat.com> ---- -diff --git a/src/savage_driver.c b/src/savage_driver.c -index 026bf5c..5b49e60 100644 ---- a/src/savage_driver.c -+++ b/src/savage_driver.c -@@ -1267,6 +1267,7 @@ static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags) - from = X_DEFAULT; - char *strptr; - if((strptr = (char *)xf86GetOptValString(psav->Options, OPTION_ACCELMETHOD))) { -+#ifdef HAVE_XAA_H - if(!xf86NameCmp(strptr,"XAA")) { - from = X_CONFIG; - psav->useEXA = FALSE; -@@ -1274,6 +1275,9 @@ static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags) - from = X_CONFIG; - psav->useEXA = TRUE; - } -+#else -+ psav->useEXA = TRUE; -+#endif - } - xf86DrvMsg(pScrn->scrnIndex, from, "Using %s acceleration architecture\n", - psav->useEXA ? "EXA" : "XAA"); --- -cgit v0.9.0.2-2-gbebe diff --git a/kernels/linux-libre-pae/3.11-haswell-intel_pstate.patch b/kernels/linux-libre-pae/3.11-haswell-intel_pstate.patch new file mode 100644 index 000000000..1f376b518 --- /dev/null +++ b/kernels/linux-libre-pae/3.11-haswell-intel_pstate.patch @@ -0,0 +1,32 @@ +From 6cdcdb793791f776ea9408581b1242b636d43b37 Mon Sep 17 00:00:00 2001 +From: Nell Hardcastle <nell@spicious.com> +Date: Sun, 30 Jun 2013 22:58:57 +0000 +Subject: intel_pstate: Add Haswell CPU models + +Enable the intel_pstate driver for Haswell CPUs. One missing Ivy Bridge +model (0x3E) is also included. Models referenced from +tools/power/x86/turbostat/turbostat.c:has_nehalem_turbo_ratio_limit + +Signed-off-by: Nell Hardcastle <nell@spicious.com> +Acked-by: Viresh Kumar <viresh.kumar@linaro.org> +Acked-by: Dirk Brandewie <dirk.j.brandewie@intel.com> +Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> +--- +diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c +index 6efd96c..9733f29 100644 +--- a/drivers/cpufreq/intel_pstate.c ++++ b/drivers/cpufreq/intel_pstate.c +@@ -522,6 +522,11 @@ static const struct x86_cpu_id intel_pstate_cpu_ids[] = { + ICPU(0x2a, default_policy), + ICPU(0x2d, default_policy), + ICPU(0x3a, default_policy), ++ ICPU(0x3c, default_policy), ++ ICPU(0x3e, default_policy), ++ ICPU(0x3f, default_policy), ++ ICPU(0x45, default_policy), ++ ICPU(0x46, default_policy), + {} + }; + MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids); +-- +cgit v0.9.2 diff --git a/kernels/linux-libre-pae/3.11.1-fix-skge.patch b/kernels/linux-libre-pae/3.11.1-fix-skge.patch new file mode 100644 index 000000000..26d90e080 --- /dev/null +++ b/kernels/linux-libre-pae/3.11.1-fix-skge.patch @@ -0,0 +1,34 @@ +--- a/drivers/net/ethernet/marvell/skge.c 2013-09-02 16:46:10.000000000 -0400 ++++ b/drivers/net/ethernet/marvell/skge.c 2013-09-22 11:14:10.232067541 -0400 +@@ -3086,23 +3086,27 @@ + PCI_DMA_FROMDEVICE); + skge_rx_reuse(e, skge->rx_buf_size); + } else { ++ struct skge_element ee; + struct sk_buff *nskb; + + nskb = netdev_alloc_skb_ip_align(dev, skge->rx_buf_size); + if (!nskb) + goto resubmit; + ++ ee = *e; ++ ++ skb = ee.skb; ++ prefetch(skb->data); ++ + if (skge_rx_setup(skge, e, nskb, skge->rx_buf_size) < 0) { + dev_kfree_skb(nskb); + goto resubmit; + } + + pci_unmap_single(skge->hw->pdev, +- dma_unmap_addr(e, mapaddr), +- dma_unmap_len(e, maplen), ++ dma_unmap_addr(&ee, mapaddr), ++ dma_unmap_len(&ee, maplen), + PCI_DMA_FROMDEVICE); +- skb = e->skb; +- prefetch(skb->data); + } + + skb_put(skb, len); diff --git a/kernels/linux-libre-pae/PKGBUILD b/kernels/linux-libre-pae/PKGBUILD index 2ca4cb45f..73b12e493 100644 --- a/kernels/linux-libre-pae/PKGBUILD +++ b/kernels/linux-libre-pae/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 194378 2013-09-15 09:16:34Z tpowa $ +# $Id: PKGBUILD 195142 2013-09-25 15:58:07Z tpowa $ # Contributor: Tobias Powalowski <tpowa@archlinux.org> # Contributor: Thomas Baechler <thomas@archlinux.org> # Maintainer (Parabola): André Silva <emulatorman@lavabit.com> @@ -7,7 +7,7 @@ pkgbase=linux-libre-pae # Build stock -LIBRE-PAE kernel #pkgbase=linux-libre-custom # Build kernel with a different name _basekernel=3.11 pkgver=${_basekernel}.1 -pkgrel=1 +pkgrel=3 arch=('i686') url="http://linux-libre.fsfla.org/" license=('GPL2') @@ -21,14 +21,18 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn "${pkgbase}.preset" 'boot-logo.patch' 'change-default-console-loglevel.patch' - 'criu-no-expert.patch') + 'criu-no-expert.patch' + '3.11.1-fix-skge.patch' + '3.11-haswell-intel_pstate.patch') md5sums=('7ec84223c7adcf01a5287eb7af96b7e7' '7b051faf375c76d4763a24048c52600b' 'bef7b3ced683c4dc9361f8739ec9f566' 'f302c931bd85309da9d9792b4cc96467' '36e90334b12b2e9d53fd92129ee98f5b' '98beb36f9b8cf16e58de2483ea9985e3' - 'd50c1ac47394e9aec637002ef3392bd1') + 'd50c1ac47394e9aec637002ef3392bd1' + '4fcee2b4485492dcfdead632275198eb' + '1040ae6c10d4a68f89899f94a2318a17') _kernelname=${pkgbase#linux-libre} _localversionname=-LIBRE-PAE @@ -48,6 +52,14 @@ prepare() { # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch" + # #36865 fix broken skge network module + patch -Np1 -i "${srcdir}/3.11.1-fix-skge.patch" + + # add intel haswell support to intel_pstate + # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=6cdcdb793791f776ea9408581b1242b636d43b37 + # will be in 3.12 + patch -Np1 -i "${srcdir}/3.11-haswell-intel_pstate.patch" + # allow criu without expert option set # patch from fedora patch -Np1 -i "${srcdir}/criu-no-expert.patch" diff --git a/kernels/linux-libre-xen/3.11-haswell-intel_pstate.patch b/kernels/linux-libre-xen/3.11-haswell-intel_pstate.patch new file mode 100644 index 000000000..1f376b518 --- /dev/null +++ b/kernels/linux-libre-xen/3.11-haswell-intel_pstate.patch @@ -0,0 +1,32 @@ +From 6cdcdb793791f776ea9408581b1242b636d43b37 Mon Sep 17 00:00:00 2001 +From: Nell Hardcastle <nell@spicious.com> +Date: Sun, 30 Jun 2013 22:58:57 +0000 +Subject: intel_pstate: Add Haswell CPU models + +Enable the intel_pstate driver for Haswell CPUs. One missing Ivy Bridge +model (0x3E) is also included. Models referenced from +tools/power/x86/turbostat/turbostat.c:has_nehalem_turbo_ratio_limit + +Signed-off-by: Nell Hardcastle <nell@spicious.com> +Acked-by: Viresh Kumar <viresh.kumar@linaro.org> +Acked-by: Dirk Brandewie <dirk.j.brandewie@intel.com> +Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> +--- +diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c +index 6efd96c..9733f29 100644 +--- a/drivers/cpufreq/intel_pstate.c ++++ b/drivers/cpufreq/intel_pstate.c +@@ -522,6 +522,11 @@ static const struct x86_cpu_id intel_pstate_cpu_ids[] = { + ICPU(0x2a, default_policy), + ICPU(0x2d, default_policy), + ICPU(0x3a, default_policy), ++ ICPU(0x3c, default_policy), ++ ICPU(0x3e, default_policy), ++ ICPU(0x3f, default_policy), ++ ICPU(0x45, default_policy), ++ ICPU(0x46, default_policy), + {} + }; + MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids); +-- +cgit v0.9.2 diff --git a/kernels/linux-libre-xen/3.11.1-fix-skge.patch b/kernels/linux-libre-xen/3.11.1-fix-skge.patch new file mode 100644 index 000000000..26d90e080 --- /dev/null +++ b/kernels/linux-libre-xen/3.11.1-fix-skge.patch @@ -0,0 +1,34 @@ +--- a/drivers/net/ethernet/marvell/skge.c 2013-09-02 16:46:10.000000000 -0400 ++++ b/drivers/net/ethernet/marvell/skge.c 2013-09-22 11:14:10.232067541 -0400 +@@ -3086,23 +3086,27 @@ + PCI_DMA_FROMDEVICE); + skge_rx_reuse(e, skge->rx_buf_size); + } else { ++ struct skge_element ee; + struct sk_buff *nskb; + + nskb = netdev_alloc_skb_ip_align(dev, skge->rx_buf_size); + if (!nskb) + goto resubmit; + ++ ee = *e; ++ ++ skb = ee.skb; ++ prefetch(skb->data); ++ + if (skge_rx_setup(skge, e, nskb, skge->rx_buf_size) < 0) { + dev_kfree_skb(nskb); + goto resubmit; + } + + pci_unmap_single(skge->hw->pdev, +- dma_unmap_addr(e, mapaddr), +- dma_unmap_len(e, maplen), ++ dma_unmap_addr(&ee, mapaddr), ++ dma_unmap_len(&ee, maplen), + PCI_DMA_FROMDEVICE); +- skb = e->skb; +- prefetch(skb->data); + } + + skb_put(skb, len); diff --git a/kernels/linux-libre-xen/PKGBUILD b/kernels/linux-libre-xen/PKGBUILD index 7ff630c05..437c48670 100644 --- a/kernels/linux-libre-xen/PKGBUILD +++ b/kernels/linux-libre-xen/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 194378 2013-09-15 09:16:34Z tpowa $ +# $Id: PKGBUILD 195142 2013-09-25 15:58:07Z tpowa $ # Contributor: Tobias Powalowski <tpowa@archlinux.org> # Contributor: Thomas Baechler <thomas@archlinux.org> # Maintainer (Parabola): André Silva <emulatorman@lavabit.com> @@ -7,7 +7,7 @@ pkgbase=linux-libre-xen # Build stock -LIBRE-XEN kernel #pkgbase=linux-libre-custom # Build kernel with a different name _basekernel=3.11 pkgver=${_basekernel}.1 -pkgrel=1 +pkgrel=3 arch=('i686') url="http://linux-libre.fsfla.org/" license=('GPL2') @@ -21,14 +21,18 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn "${pkgbase}.preset" 'boot-logo.patch' 'change-default-console-loglevel.patch' - 'criu-no-expert.patch') + 'criu-no-expert.patch' + '3.11.1-fix-skge.patch' + '3.11-haswell-intel_pstate.patch') md5sums=('7ec84223c7adcf01a5287eb7af96b7e7' '7b051faf375c76d4763a24048c52600b' '212338fa662436f9590026c9a71d82f7' 'b7c2805bb287a644c0a303bf7721e534' '36e90334b12b2e9d53fd92129ee98f5b' '98beb36f9b8cf16e58de2483ea9985e3' - 'd50c1ac47394e9aec637002ef3392bd1') + 'd50c1ac47394e9aec637002ef3392bd1' + '4fcee2b4485492dcfdead632275198eb' + '1040ae6c10d4a68f89899f94a2318a17') _kernelname=${pkgbase#linux-libre} _localversionname=-LIBRE-XEN @@ -48,6 +52,14 @@ prepare() { # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch" + # #36865 fix broken skge network module + patch -Np1 -i "${srcdir}/3.11.1-fix-skge.patch" + + # add intel haswell support to intel_pstate + # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=6cdcdb793791f776ea9408581b1242b636d43b37 + # will be in 3.12 + patch -Np1 -i "${srcdir}/3.11-haswell-intel_pstate.patch" + # allow criu without expert option set # patch from fedora patch -Np1 -i "${srcdir}/criu-no-expert.patch" diff --git a/libre/linux-libre/3.11-haswell-intel_pstate.patch b/libre/linux-libre/3.11-haswell-intel_pstate.patch new file mode 100644 index 000000000..1f376b518 --- /dev/null +++ b/libre/linux-libre/3.11-haswell-intel_pstate.patch @@ -0,0 +1,32 @@ +From 6cdcdb793791f776ea9408581b1242b636d43b37 Mon Sep 17 00:00:00 2001 +From: Nell Hardcastle <nell@spicious.com> +Date: Sun, 30 Jun 2013 22:58:57 +0000 +Subject: intel_pstate: Add Haswell CPU models + +Enable the intel_pstate driver for Haswell CPUs. One missing Ivy Bridge +model (0x3E) is also included. Models referenced from +tools/power/x86/turbostat/turbostat.c:has_nehalem_turbo_ratio_limit + +Signed-off-by: Nell Hardcastle <nell@spicious.com> +Acked-by: Viresh Kumar <viresh.kumar@linaro.org> +Acked-by: Dirk Brandewie <dirk.j.brandewie@intel.com> +Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> +--- +diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c +index 6efd96c..9733f29 100644 +--- a/drivers/cpufreq/intel_pstate.c ++++ b/drivers/cpufreq/intel_pstate.c +@@ -522,6 +522,11 @@ static const struct x86_cpu_id intel_pstate_cpu_ids[] = { + ICPU(0x2a, default_policy), + ICPU(0x2d, default_policy), + ICPU(0x3a, default_policy), ++ ICPU(0x3c, default_policy), ++ ICPU(0x3e, default_policy), ++ ICPU(0x3f, default_policy), ++ ICPU(0x45, default_policy), ++ ICPU(0x46, default_policy), + {} + }; + MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids); +-- +cgit v0.9.2 diff --git a/libre/linux-libre/3.11.1-fix-skge.patch b/libre/linux-libre/3.11.1-fix-skge.patch new file mode 100644 index 000000000..26d90e080 --- /dev/null +++ b/libre/linux-libre/3.11.1-fix-skge.patch @@ -0,0 +1,34 @@ +--- a/drivers/net/ethernet/marvell/skge.c 2013-09-02 16:46:10.000000000 -0400 ++++ b/drivers/net/ethernet/marvell/skge.c 2013-09-22 11:14:10.232067541 -0400 +@@ -3086,23 +3086,27 @@ + PCI_DMA_FROMDEVICE); + skge_rx_reuse(e, skge->rx_buf_size); + } else { ++ struct skge_element ee; + struct sk_buff *nskb; + + nskb = netdev_alloc_skb_ip_align(dev, skge->rx_buf_size); + if (!nskb) + goto resubmit; + ++ ee = *e; ++ ++ skb = ee.skb; ++ prefetch(skb->data); ++ + if (skge_rx_setup(skge, e, nskb, skge->rx_buf_size) < 0) { + dev_kfree_skb(nskb); + goto resubmit; + } + + pci_unmap_single(skge->hw->pdev, +- dma_unmap_addr(e, mapaddr), +- dma_unmap_len(e, maplen), ++ dma_unmap_addr(&ee, mapaddr), ++ dma_unmap_len(&ee, maplen), + PCI_DMA_FROMDEVICE); +- skb = e->skb; +- prefetch(skb->data); + } + + skb_put(skb, len); diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index 70d9f739b..1f0e471eb 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 194378 2013-09-15 09:16:34Z tpowa $ +# $Id: PKGBUILD 195142 2013-09-25 15:58:07Z tpowa $ # Maintainer: Tobias Powalowski <tpowa@archlinux.org> # Maintainer: Thomas Baechler <thomas@archlinux.org> # Maintainer (Parabola): André Silva <emulatorman@lavabit.com> @@ -12,8 +12,8 @@ pkgbase=linux-libre # Build stock -LIBRE kernel _basekernel=3.11 _sublevel=1 pkgver=${_basekernel}.${_sublevel} -pkgrel=1 -_lxopkgver=${_basekernel}.0 # nearly always the same as pkgver +pkgrel=3 +_lxopkgver=${_basekernel}.1 # nearly always the same as pkgver arch=('i686' 'x86_64' 'mips64el') url="http://linux-libre.fsfla.org/" license=('GPL2') @@ -30,6 +30,8 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn 'boot-logo.patch' 'change-default-console-loglevel.patch' 'criu-no-expert.patch' + '3.11.1-fix-skge.patch' + '3.11-haswell-intel_pstate.patch' "http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2") md5sums=('7ec84223c7adcf01a5287eb7af96b7e7' '7b051faf375c76d4763a24048c52600b' @@ -41,6 +43,8 @@ md5sums=('7ec84223c7adcf01a5287eb7af96b7e7' '36e90334b12b2e9d53fd92129ee98f5b' '98beb36f9b8cf16e58de2483ea9985e3' 'd50c1ac47394e9aec637002ef3392bd1' + '4fcee2b4485492dcfdead632275198eb' + '1040ae6c10d4a68f89899f94a2318a17' '135ff203ec680a91e87eed4df72f453d') if [ "$CARCH" != "mips64el" ]; then # don't use the Loongson-specific patches on non-mips64el arches. @@ -66,6 +70,14 @@ prepare() { # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch" + # #36865 fix broken skge network module + patch -Np1 -i "${srcdir}/3.11.1-fix-skge.patch" + + # add intel haswell support to intel_pstate + # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=6cdcdb793791f776ea9408581b1242b636d43b37 + # will be in 3.12 + patch -Np1 -i "${srcdir}/3.11-haswell-intel_pstate.patch" + # allow criu without expert option set # patch from fedora patch -Np1 -i "${srcdir}/criu-no-expert.patch" diff --git a/pcr/dratmenu/PKGBUILD b/pcr/dratmenu/PKGBUILD new file mode 100644 index 000000000..8d6a2b357 --- /dev/null +++ b/pcr/dratmenu/PKGBUILD @@ -0,0 +1,36 @@ +# Contributor: ivoarch <ivkuzev@gmail.com> +# Maintainer : Parabola Aurélien DESBRIÈRES <aurelien@replicant.io> + +pkgname=dratmenu +pkgver=20121218 +pkgrel=1 +pkgdesc="ratpoison window dmenu" +arch=('any') +url="https://github.com/dimatura/dratmenu.git" +license=('GPL') +depends=('dmenu' 'python2') +makedepends=('git') + +_gitroot="https://github.com/dimatura/dratmenu.git" +_gitname="master" + +build() { + cd $srcdir + + if [ -d $srcdir/$pkgname ] ; then + msg "update git" + cd $pkgname && git pull origin + else + msg "clone git" + git clone $_gitroot + fi +} + +package() { + mkdir -p $pkgdir/usr/lib/python2.7/site-packages + cp -r $srcdir/$pkgname $pkgdir/usr/lib/python2.7/site-packages + mkdir -p $pkgdir/usr/bin + echo "#!/bin/bash + python2 /usr/lib/python2.7/site-packages/$pkgname/dratmenu.py" > $pkgdir/usr/bin/dratmenu + chmod +x $pkgdir/usr/bin/dratmenu +} diff --git a/pcr/python-jedi/PKGBUILD b/pcr/python-jedi/PKGBUILD new file mode 100644 index 000000000..d34823097 --- /dev/null +++ b/pcr/python-jedi/PKGBUILD @@ -0,0 +1,23 @@ +# Contributor: Jesus Alvarez +# Contributor: Danilo Bargen <gezuru@gmail.com> +# Maintainer : Parabola Aurélien DESBRIÈRES <aurelien@replicant.io> +pkgname=python-jedi +pkgver=0.7.0 +pkgrel=1 +pkgdesc="Awesome autocompletion for python. Official PKGBUILD." +arch=('any') +url="https://github.com/davidhalter/jedi" +license=('LGPL3') +depends=('python') +makedepends=('python-distribute') +conflicts=('jedi-git' 'python3-jedi-git') +options=(!emptydirs) +source=("https://pypi.python.org/packages/source/j/jedi/jedi-${pkgver}.tar.gz") + + +package() { + cd "$srcdir/jedi-$pkgver" + python setup.py install --root="$pkgdir/" --optimize=1 +} + +# vim:set ts=2 sw=2 et: diff --git a/pcr/ttf-font-awesome/PKGBUILD b/pcr/ttf-font-awesome/PKGBUILD new file mode 100644 index 000000000..abb63b8a6 --- /dev/null +++ b/pcr/ttf-font-awesome/PKGBUILD @@ -0,0 +1,19 @@ +#Contributer: UNKNOWN o_O +#Maintainer : Parabola Aurélien DESBRIÈRES <aurelien@replicant.io> + +pkgname=ttf-font-awesome +pkgver=3.2.1 +pkgrel=2 +pkgdesc="Iconic font designed for Bootstrap" +url="http://fortawesome.github.io/Font-Awesome/" +license=('CCPL') +depends=('fontconfig' 'xorg-font-utils') +options=("!strip") +install=$pkgname.install +arch=('any') +source=('http://fortawesome.github.io/Font-Awesome/assets/font-awesome.zip') + +package() { + install -d "$pkgdir/usr/share/fonts/TTF" + cp -dpr --no-preserve=ownership "$srcdir/font-awesome/font/"*.ttf "$pkgdir/usr/share/fonts/TTF/" +} diff --git a/pcr/ttf-font-awesome/ttf-font-awesome.install b/pcr/ttf-font-awesome/ttf-font-awesome.install new file mode 100644 index 000000000..56632d242 --- /dev/null +++ b/pcr/ttf-font-awesome/ttf-font-awesome.install @@ -0,0 +1,20 @@ +post_install() { + echo -n "Updating font cache..." + fc-cache -f > /dev/null + mkfontscale /usr/share/fonts/TTF + mkfontdir /usr/share/fonts/TTF + echo "done." +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + post_install $1 +} + +op=$1 +shift + +$op $* 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: |