summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authormintsuki2022-06-01 08:14:20 +0200
committermintsuki2022-06-01 08:14:20 +0200
commit861ca1af8c57b067b0e49b83dcd7142e3c436f93 (patch)
tree8ddabccfad07c0aed0f62c79cb63bd278552d50f
downloadaur-861ca1af8c57b067b0e49b83dcd7142e3c436f93.tar.gz
Initial commit
-rw-r--r--.SRCINFO25
-rw-r--r--.gitignore6
-rw-r--r--PKGBUILD50
-rw-r--r--client-Handle-removal-of-GTK_FRAME_EXTENTS.patch53
-rw-r--r--gaps.patch99
5 files changed, 233 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..b9c20448f6c2
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,25 @@
+pkgbase = xfwm4-gaps
+ pkgdesc = Xfce's window manager - now with extra gaps
+ pkgver = 4.16.1
+ pkgrel = 1
+ url = https://docs.xfce.org/xfce/xfwm4/start
+ arch = x86_64
+ groups = xfce4
+ license = GPL2
+ makedepends = intltool
+ depends = libxfce4ui
+ depends = xfconf
+ depends = libwnck3
+ depends = libepoxy
+ depends = libxpresent
+ depends = hicolor-icon-theme
+ provides = xfwm4
+ conflicts = xfwm4
+ source = https://archive.xfce.org/src/xfce/xfwm4/4.16/xfwm4-4.16.1.tar.bz2
+ source = client-Handle-removal-of-GTK_FRAME_EXTENTS.patch
+ source = gaps.patch
+ sha256sums = b5b24ca04bd73c642db0a4b4df81d262381d758f01b51108257d48b391b8718c
+ sha256sums = SKIP
+ sha256sums = SKIP
+
+pkgname = xfwm4-gaps
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..7c83da3e722f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+*
+!PKGBUILD
+!.SRCINFO
+!client-Handle-removal-of-GTK_FRAME_EXTENTS.patch
+!gaps.patch
+!.gitignore
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..a6ea92ec3362
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,50 @@
+pkgname=xfwm4-gaps
+pkgver=4.16.1
+pkgrel=1
+pkgdesc="Xfce's window manager - now with extra gaps"
+arch=('x86_64')
+url="https://docs.xfce.org/xfce/xfwm4/start"
+license=('GPL2')
+groups=('xfce4')
+depends=('libxfce4ui' 'xfconf' 'libwnck3' 'libepoxy' 'libxpresent'
+ 'hicolor-icon-theme')
+makedepends=('intltool')
+provides=('xfwm4')
+conflicts=('xfwm4')
+source=(https://archive.xfce.org/src/xfce/xfwm4/${pkgver%.*}/xfwm4-$pkgver.tar.bz2
+ client-Handle-removal-of-GTK_FRAME_EXTENTS.patch
+ gaps.patch)
+sha256sums=('b5b24ca04bd73c642db0a4b4df81d262381d758f01b51108257d48b391b8718c'
+ SKIP
+ SKIP)
+
+prepare() {
+ cd "$srcdir/xfwm4-$pkgver"
+ # https://gitlab.xfce.org/xfce/xfwm4/-/issues/603
+ patch -Np1 -i ../client-Handle-removal-of-GTK_FRAME_EXTENTS.patch
+ patch -Np1 -i ../gaps.patch
+}
+
+build() {
+ cd "$srcdir/xfwm4-$pkgver"
+
+ ./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/xfwm4-$pkgver"
+ make DESTDIR="$pkgdir" install
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/client-Handle-removal-of-GTK_FRAME_EXTENTS.patch b/client-Handle-removal-of-GTK_FRAME_EXTENTS.patch
new file mode 100644
index 000000000000..c0d5b69817ac
--- /dev/null
+++ b/client-Handle-removal-of-GTK_FRAME_EXTENTS.patch
@@ -0,0 +1,53 @@
+From 488288f6e35d5d3dc077e87fe2ed83129692f62e Mon Sep 17 00:00:00 2001
+From: Olivier Fourdan <fourdan@xfce.org>
+Date: Sun, 14 Nov 2021 11:00:55 +0100
+Subject: [PATCH] client: Handle removal of GTK_FRAME_EXTENTS
+
+Chromium and GOOGLE Chrome have now support for GTK_FRAME_EXTENTS.
+
+When maximizing a window, Chromium/Chrome simply removes the property
+on its toplevel rather than setting all values to 0.
+
+xfwm4 would simply ignore the property change because it could not read
+the values and therefore apply the old, wrong values.
+
+Fix xfwm4 to handle the property removal like an actual property change
+to 0.
+
+Signed-off-by: Olivier Fourdan <fourdan@xfce.org>
+Closes: https://gitlab.xfce.org/xfce/xfwm4/-/issues/603
+---
+ src/client.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/client.c b/src/client.c
+index 4e6affcfd..310cf90aa 100644
+--- a/src/client.c
++++ b/src/client.c
+@@ -4200,6 +4200,7 @@ clientGetGtkFrameExtents (Client * c)
+ DisplayInfo *display_info;
+ gboolean value_changed = FALSE;
+ gulong *extents;
++ unsigned long old_value;
+ int nitems;
+ int i;
+
+@@ -4209,6 +4210,8 @@ clientGetGtkFrameExtents (Client * c)
+ screen_info = c->screen_info;
+ display_info = screen_info->display_info;
+ extents = NULL;
++
++ old_value = FLAG_TEST (c->flags, CLIENT_FLAG_HAS_FRAME_EXTENTS);
+ FLAG_UNSET (c->flags, CLIENT_FLAG_HAS_FRAME_EXTENTS);
+
+ if (getCardinalList (display_info, c->window, GTK_FRAME_EXTENTS, &extents, &nitems))
+@@ -4232,6 +4235,9 @@ clientGetGtkFrameExtents (Client * c)
+ XFree (extents);
+ }
+
++ /* Adding or removing the property also counts as a change */
++ value_changed |= (old_value ^ FLAG_TEST (c->flags, CLIENT_FLAG_HAS_FRAME_EXTENTS));
++
+ return value_changed;
+ }
+
diff --git a/gaps.patch b/gaps.patch
new file mode 100644
index 000000000000..744debb35964
--- /dev/null
+++ b/gaps.patch
@@ -0,0 +1,99 @@
+diff --git a/src/client.c b/src/client.c
+index 3923dd98b..009f3dd58 100644
+--- a/src/client.c
++++ b/src/client.c
+@@ -3296,6 +3296,9 @@ clientNewMaxState (Client *c, XWindowChanges *wc, int mode)
+ }
+ }
+
++// @gaps@
++#define GAPS_SIZE 25
++
+ static gboolean
+ clientNewTileSize (Client *c, XWindowChanges *wc, GdkRectangle *rect, tilePositionType tile)
+ {
+@@ -3331,36 +3334,72 @@ clientNewTileSize (Client *c, XWindowChanges *wc, GdkRectangle *rect, tilePositi
+ wc->y = full_y + frameExtentTop (c);
+ wc->width = full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+ wc->height = full_h - frameExtentTop (c) - frameExtentBottom (c);
++
++ wc->x += GAPS_SIZE;
++ wc->y += GAPS_SIZE;
++ wc->width -= GAPS_SIZE + (GAPS_SIZE / 2);
++ wc->height -= GAPS_SIZE * 2;
++
+ break;
+ case TILE_RIGHT:
+ wc->x = full_x + full_w / 2 + frameExtentLeft (c);
+ wc->y = full_y + frameExtentTop (c);
+ wc->width = full_w - full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+ wc->height = full_h - frameExtentTop (c) - frameExtentBottom (c);
++
++ wc->x += GAPS_SIZE / 2;
++ wc->y += GAPS_SIZE;
++ wc->width -= GAPS_SIZE + (GAPS_SIZE / 2);
++ wc->height -= GAPS_SIZE * 2;
++
+ break;
+ case TILE_DOWN_LEFT:
+ wc->x = full_x + frameExtentLeft (c);
+ wc->y = full_y + full_h / 2 + frameExtentTop (c);
+ wc->width = full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+ wc->height = full_h - full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
++
++ wc->x += GAPS_SIZE;
++ wc->y += GAPS_SIZE / 2;
++ wc->width -= GAPS_SIZE + (GAPS_SIZE / 2);
++ wc->height -= GAPS_SIZE + (GAPS_SIZE / 2);
++
+ break;
+ case TILE_DOWN_RIGHT:
+ wc->x = full_x + full_w /2 + frameExtentLeft (c);
+ wc->y = full_y + full_h / 2 + frameExtentTop (c);
+ wc->width = full_w - full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+ wc->height = full_h - full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
++
++ wc->x += GAPS_SIZE / 2;
++ wc->y += GAPS_SIZE / 2;
++ wc->width -= GAPS_SIZE + (GAPS_SIZE / 2);
++ wc->height -= GAPS_SIZE + (GAPS_SIZE / 2);
++
+ break;
+ case TILE_UP_LEFT:
+ wc->x = full_x + frameExtentLeft (c);
+ wc->y = full_y + frameExtentTop (c);
+ wc->width = full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+ wc->height = full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
++
++ wc->x += GAPS_SIZE;
++ wc->y += GAPS_SIZE;
++ wc->width -= GAPS_SIZE + (GAPS_SIZE / 2);
++ wc->height -= GAPS_SIZE + (GAPS_SIZE / 2);
++
+ break;
+ case TILE_UP_RIGHT:
+ wc->x = full_x + full_w /2 + frameExtentLeft (c);
+ wc->y = full_y + frameExtentTop (c);
+ wc->width = full_w - full_w / 2 - frameExtentLeft (c) - frameExtentRight (c);
+ wc->height = full_h / 2 - frameExtentTop (c) - frameExtentBottom (c);
++
++ wc->x += GAPS_SIZE / 2;
++ wc->y += GAPS_SIZE;
++ wc->width -= GAPS_SIZE + (GAPS_SIZE / 2);
++ wc->height -= GAPS_SIZE + (GAPS_SIZE / 2);
++
+ break;
+ default:
+ break;
+@@ -3400,6 +3439,11 @@ clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *rect)
+ wc->height = full_h - frameExtentTop (c) - frameExtentBottom (c);
+ }
+
++ wc->x += GAPS_SIZE;
++ wc->y += GAPS_SIZE;
++ wc->width -= GAPS_SIZE * 2;
++ wc->height -= GAPS_SIZE * 2;
++
+ return ((wc->height >= c->size->min_height) && (wc->height <= c->size->max_height) &&
+ (wc->width >= c->size->min_width) && (wc->width <= c->size->max_width));
+ }