aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Falsi <madpilot@FreeBSD.org>2022-12-16 14:55:57 +0000
committerGuido Falsi <madpilot@FreeBSD.org>2022-12-16 14:55:57 +0000
commitaac41c1d6719790f71e5a3123ad9afdcbfb46e8e (patch)
treee51f1df0adec490936f687e2ef0a3b2ae43d0325
parentbaa66e312b196b173af8edbcbc6e81f01fb9c758 (diff)
downloadports-aac41c1d6719790f71e5a3123ad9afdcbfb46e8e.tar.gz
ports-aac41c1d6719790f71e5a3123ad9afdcbfb46e8e.zip
Welcome XFCE 4.18 to the FreeBSD ports tree!
Upstream announce: https://xfce.org/about/news/?post=1671062400 Some notes: - Updated pkg-descr for various packages - Added some missing dependencies (reported by poudriere Q/A tests) - Removed patches now included upstream
-rw-r--r--deskutils/xfce4-tumbler/Makefile4
-rw-r--r--deskutils/xfce4-tumbler/distinfo6
-rw-r--r--deskutils/xfce4-tumbler/files/patch-tumblerd_Makefile.in11
-rw-r--r--deskutils/xfce4-tumbler/files/patch-tumblerd__tumbler.rc20
-rw-r--r--deskutils/xfce4-tumbler/files/patch-tumblerd_tumbler.rc20
-rw-r--r--deskutils/xfce4-tumbler/pkg-descr5
-rw-r--r--deskutils/xfce4-tumbler/pkg-plist2
-rw-r--r--devel/xfce4-dev-tools/Makefile2
-rw-r--r--devel/xfce4-dev-tools/distinfo6
-rw-r--r--devel/xfce4-dev-tools/pkg-descr4
-rw-r--r--misc/xfce4-appfinder/Makefile2
-rw-r--r--misc/xfce4-appfinder/distinfo6
-rw-r--r--misc/xfce4-appfinder/pkg-descr5
-rw-r--r--sysutils/garcon/Makefile5
-rw-r--r--sysutils/garcon/distinfo6
-rw-r--r--sysutils/garcon/pkg-descr5
-rw-r--r--sysutils/garcon/pkg-plist1
-rw-r--r--sysutils/xfce4-cpugraph-plugin/Makefile2
-rw-r--r--sysutils/xfce4-cpugraph-plugin/distinfo6
-rw-r--r--sysutils/xfce4-power-manager/Makefile7
-rw-r--r--sysutils/xfce4-power-manager/distinfo6
-rw-r--r--sysutils/xfce4-settings/Makefile2
-rw-r--r--sysutils/xfce4-settings/distinfo6
-rw-r--r--sysutils/xfce4-settings/files/patch-dialogs_appearance-settings_appearance-install-theme10
-rw-r--r--sysutils/xfce4-settings/pkg-descr4
-rw-r--r--sysutils/xfce4-settings/pkg-plist5
-rw-r--r--sysutils/xfce4-systemload-plugin/Makefile2
-rw-r--r--sysutils/xfce4-systemload-plugin/distinfo6
-rw-r--r--x11-fm/thunar/Makefile5
-rw-r--r--x11-fm/thunar/distinfo6
-rw-r--r--x11-fm/thunar/pkg-descr7
-rw-r--r--x11-fm/thunar/pkg-plist114
-rw-r--r--x11-wm/xfce4-desktop/Makefile7
-rw-r--r--x11-wm/xfce4-desktop/distinfo6
-rw-r--r--x11-wm/xfce4-desktop/pkg-descr2
-rw-r--r--x11-wm/xfce4-desktop/pkg-plist3
-rw-r--r--x11-wm/xfce4-panel/Makefile2
-rw-r--r--x11-wm/xfce4-panel/distinfo6
-rw-r--r--x11-wm/xfce4-panel/files/patch-plugins_pager_pager.c16
-rw-r--r--x11-wm/xfce4-panel/pkg-descr2
-rw-r--r--x11-wm/xfce4-session/Makefile5
-rw-r--r--x11-wm/xfce4-session/distinfo6
-rw-r--r--x11-wm/xfce4-session/files/patch-scripts_xflock418
-rw-r--r--x11-wm/xfce4-session/pkg-plist2
-rw-r--r--x11-wm/xfce4-wm/Makefile8
-rw-r--r--x11-wm/xfce4-wm/distinfo6
-rw-r--r--x11-wm/xfce4-wm/files/patch-src_icons.c46
-rw-r--r--x11-wm/xfce4-wm/pkg-descr6
-rw-r--r--x11-wm/xfce4/Makefile2
-rw-r--r--x11/libexo/Makefile2
-rw-r--r--x11/libexo/distinfo6
-rw-r--r--x11/libexo/pkg-descr8
-rw-r--r--x11/libexo/pkg-plist136
-rw-r--r--x11/libxfce4menu/Makefile7
-rw-r--r--x11/libxfce4menu/distinfo6
-rw-r--r--x11/libxfce4menu/files/patch-shortcuts-grabber-fix-PR271324
-rw-r--r--x11/libxfce4menu/pkg-plist3
-rw-r--r--x11/libxfce4util/Makefile2
-rw-r--r--x11/libxfce4util/distinfo6
-rw-r--r--x11/libxfce4util/pkg-descr3
-rw-r--r--x11/libxfce4util/pkg-plist4
-rw-r--r--x11/xfce4-conf/Makefile2
-rw-r--r--x11/xfce4-conf/distinfo6
-rw-r--r--x11/xfce4-conf/pkg-descr3
-rw-r--r--x11/xfce4-conf/pkg-plist2
-rw-r--r--x11/xfce4-goodies/Makefile3
66 files changed, 354 insertions, 1610 deletions
diff --git a/deskutils/xfce4-tumbler/Makefile b/deskutils/xfce4-tumbler/Makefile
index 2b725d749e8d..09cdbdb417a4 100644
--- a/deskutils/xfce4-tumbler/Makefile
+++ b/deskutils/xfce4-tumbler/Makefile
@@ -1,6 +1,5 @@
PORTNAME= tumbler
-PORTVERSION= 4.16.1
-PORTREVISION= 4
+PORTVERSION= 4.18.0
CATEGORIES= deskutils xfce
MASTER_SITES= XFCE
PKGNAMEPREFIX= xfce4-
@@ -19,6 +18,7 @@ LIB_DEPENDS= libpng.so:graphics/png
USES= compiler:c11 gettext-tools gmake gnome libtool \
localbase:ldflags pathfix pkgconfig tar:bzip2 xfce
USE_GNOME= cairo gdkpixbuf2 glib20 intltool libgsf librsvg2
+USE_XFCE= libutil
USE_LDCONFIG= yes
GNU_CONFIGURE= yes
diff --git a/deskutils/xfce4-tumbler/distinfo b/deskutils/xfce4-tumbler/distinfo
index cbe54428bf9e..8e5546b59f02 100644
--- a/deskutils/xfce4-tumbler/distinfo
+++ b/deskutils/xfce4-tumbler/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1660252887
-SHA256 (xfce4/tumbler-4.16.1.tar.bz2) = 852bbffa13f35b48ce92e243a03a118e32037c03e68297335c2bc4578e39273e
-SIZE (xfce4/tumbler-4.16.1.tar.bz2) = 593122
+TIMESTAMP = 1671097562
+SHA256 (xfce4/tumbler-4.18.0.tar.bz2) = 4087f3af4ef31271d3f315421a2f1fe67e4fda7ad60bbab1f073627914dfcf00
+SIZE (xfce4/tumbler-4.18.0.tar.bz2) = 609664
diff --git a/deskutils/xfce4-tumbler/files/patch-tumblerd_Makefile.in b/deskutils/xfce4-tumbler/files/patch-tumblerd_Makefile.in
new file mode 100644
index 000000000000..0996dfd37445
--- /dev/null
+++ b/deskutils/xfce4-tumbler/files/patch-tumblerd_Makefile.in
@@ -0,0 +1,11 @@
+--- tumblerd/Makefile.in.orig 2022-06-19 06:51:39 UTC
++++ tumblerd/Makefile.in
+@@ -1123,7 +1123,7 @@ install-data-am: install-confDATA install-serviceDATA
+ info-am:
+
+ install-data-am: install-confDATA install-serviceDATA \
+- install-systemd_userDATA install-tumblerdPROGRAMS
++ install-tumblerdPROGRAMS
+
+ install-dvi: install-dvi-am
+
diff --git a/deskutils/xfce4-tumbler/files/patch-tumblerd__tumbler.rc b/deskutils/xfce4-tumbler/files/patch-tumblerd__tumbler.rc
deleted file mode 100644
index 783d00df99ea..000000000000
--- a/deskutils/xfce4-tumbler/files/patch-tumblerd__tumbler.rc
+++ /dev/null
@@ -1,20 +0,0 @@
---- tumblerd/tumbler.rc.orig 2017-05-28 10:17:58 UTC
-+++ tumblerd/tumbler.rc
-@@ -37,7 +37,7 @@ MaxFileSize=0
-
- # RAW image files using libopenraw
- [RawThumbnailer]
--Disabled=false
-+Disabled=true
- Priority=1
- Locations=
- MaxFileSize=0
-@@ -58,7 +58,7 @@ MaxFileSize=0
-
- # ffmpegthumbnailer plugin
- [FfmpegThumbnailer]
--Disabled=false
-+Disabled=true
- Priority=2
- Locations=
- MaxFileSize=0
diff --git a/deskutils/xfce4-tumbler/files/patch-tumblerd_tumbler.rc b/deskutils/xfce4-tumbler/files/patch-tumblerd_tumbler.rc
new file mode 100644
index 000000000000..48f55a83b9de
--- /dev/null
+++ b/deskutils/xfce4-tumbler/files/patch-tumblerd_tumbler.rc
@@ -0,0 +1,20 @@
+--- tumblerd/tumbler.rc.orig 2022-03-29 08:54:49 UTC
++++ tumblerd/tumbler.rc
+@@ -36,7 +36,7 @@ MaxFileSize=0
+ # RAW image files using libopenraw (the libopenraw pixbuf loader is kind of
+ # broken, hence the priority)
+ [RawThumbnailer]
+-Disabled=false
++Disabled=true
+ Priority=3
+ Locations=
+ Excludes=
+@@ -67,7 +67,7 @@ MaxFileSize=0
+
+ # ffmpegthumbnailer plugin
+ [FfmpegThumbnailer]
+-Disabled=false
++Disabled=true
+ Priority=2
+ Locations=
+ Excludes=
diff --git a/deskutils/xfce4-tumbler/pkg-descr b/deskutils/xfce4-tumbler/pkg-descr
index 8f476a66a2f8..e7cf43c973d5 100644
--- a/deskutils/xfce4-tumbler/pkg-descr
+++ b/deskutils/xfce4-tumbler/pkg-descr
@@ -1,2 +1,3 @@
-Tumbler, is thumbnail service implementing the thumbnail management D-BUS
-specification.
+Tumbler is a D-Bus service for applications to request thumbnails
+for various URI schemes and MIME types. It is an implementation of
+the thumbnail management D-Bus specification.
diff --git a/deskutils/xfce4-tumbler/pkg-plist b/deskutils/xfce4-tumbler/pkg-plist
index b461c7479f01..93a768ce3df8 100644
--- a/deskutils/xfce4-tumbler/pkg-plist
+++ b/deskutils/xfce4-tumbler/pkg-plist
@@ -6,7 +6,6 @@ include/tumbler-1/tumbler/tumbler-config.h
include/tumbler-1/tumbler/tumbler-enum-types.h
include/tumbler-1/tumbler/tumbler-error.h
include/tumbler-1/tumbler/tumbler-file-info.h
-include/tumbler-1/tumbler/tumbler-glib-extensions.h
include/tumbler-1/tumbler/tumbler-marshal.h
include/tumbler-1/tumbler/tumbler-provider-factory.h
include/tumbler-1/tumbler/tumbler-provider-plugin.h
@@ -65,6 +64,7 @@ share/icons/hicolor/32x32/apps/org.xfce.tumbler.png
%%NLS%%share/locale/is/LC_MESSAGES/tumbler.mo
%%NLS%%share/locale/it/LC_MESSAGES/tumbler.mo
%%NLS%%share/locale/ja/LC_MESSAGES/tumbler.mo
+%%NLS%%share/locale/kab/LC_MESSAGES/tumbler.mo
%%NLS%%share/locale/kk/LC_MESSAGES/tumbler.mo
%%NLS%%share/locale/ko/LC_MESSAGES/tumbler.mo
%%NLS%%share/locale/lt/LC_MESSAGES/tumbler.mo
diff --git a/devel/xfce4-dev-tools/Makefile b/devel/xfce4-dev-tools/Makefile
index 0833d132f07d..d941e590ebde 100644
--- a/devel/xfce4-dev-tools/Makefile
+++ b/devel/xfce4-dev-tools/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce4-dev-tools
-PORTVERSION= 4.16.0
+PORTVERSION= 4.18.0
CATEGORIES= devel xfce
MASTER_SITES= XFCE
DIST_SUBDIR= xfce4
diff --git a/devel/xfce4-dev-tools/distinfo b/devel/xfce4-dev-tools/distinfo
index 34156e8dc7fd..5ea679c20d3f 100644
--- a/devel/xfce4-dev-tools/distinfo
+++ b/devel/xfce4-dev-tools/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1608682203
-SHA256 (xfce4/xfce4-dev-tools-4.16.0.tar.bz2) = f50b3070e66f3ebdf331744dd1ec5e1af5de333965d491e15ce05545e8eb4f04
-SIZE (xfce4/xfce4-dev-tools-4.16.0.tar.bz2) = 340107
+TIMESTAMP = 1671102951
+SHA256 (xfce4/xfce4-dev-tools-4.18.0.tar.bz2) = eedb4fc955f0e3459c46864ff98579295db2b900743e0ff69cad5970ba76be37
+SIZE (xfce4/xfce4-dev-tools-4.18.0.tar.bz2) = 349125
diff --git a/devel/xfce4-dev-tools/pkg-descr b/devel/xfce4-dev-tools/pkg-descr
index 9e2a527001c8..ea47abf11f96 100644
--- a/devel/xfce4-dev-tools/pkg-descr
+++ b/devel/xfce4-dev-tools/pkg-descr
@@ -1,2 +1,2 @@
-The Xfce development tools are a collection of tools and macros for
-Xfce developers and people that want to build Xfce from Git.
+The Xfce Development Tools are a set of scripts and m4/autoconf
+macros that ease build system maintenance.
diff --git a/misc/xfce4-appfinder/Makefile b/misc/xfce4-appfinder/Makefile
index bff431565205..a3bed28bb4b8 100644
--- a/misc/xfce4-appfinder/Makefile
+++ b/misc/xfce4-appfinder/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce4-appfinder
-PORTVERSION= 4.16.1
+PORTVERSION= 4.18.0
CATEGORIES= misc xfce
MASTER_SITES= XFCE
DIST_SUBDIR= xfce4
diff --git a/misc/xfce4-appfinder/distinfo b/misc/xfce4-appfinder/distinfo
index d658612b6f73..7c86814afb1f 100644
--- a/misc/xfce4-appfinder/distinfo
+++ b/misc/xfce4-appfinder/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1610956327
-SHA256 (xfce4/xfce4-appfinder-4.16.1.tar.bz2) = bfe3e9bd92695014ee74a2fbb7f5fd1b4c29cf043c4a11598b8958324c81e7ec
-SIZE (xfce4/xfce4-appfinder-4.16.1.tar.bz2) = 579984
+TIMESTAMP = 1671101646
+SHA256 (xfce4/xfce4-appfinder-4.18.0.tar.bz2) = 962a98d7b327d2073ed4cd0f78bce7945ed51b97d52fd60196e8b02ef819c18c
+SIZE (xfce4/xfce4-appfinder-4.18.0.tar.bz2) = 562219
diff --git a/misc/xfce4-appfinder/pkg-descr b/misc/xfce4-appfinder/pkg-descr
index 6b61e7bd42fe..36b309ab4bc6 100644
--- a/misc/xfce4-appfinder/pkg-descr
+++ b/misc/xfce4-appfinder/pkg-descr
@@ -1,2 +1,3 @@
-This application allows you to search, launch and find information about
-applications installed on your system.
+The Xfce application finder is a program that searches your file
+system for .desktop files, and displays a categorized list of all
+the GUI applications on your system.
diff --git a/sysutils/garcon/Makefile b/sysutils/garcon/Makefile
index 86e7b6c1b450..93db9989d3a0 100644
--- a/sysutils/garcon/Makefile
+++ b/sysutils/garcon/Makefile
@@ -1,5 +1,5 @@
PORTNAME= garcon
-PORTVERSION= 4.16.1
+PORTVERSION= 4.18.0
CATEGORIES= sysutils xfce
MASTER_SITES= XFCE
DIST_SUBDIR= xfce4
@@ -13,7 +13,8 @@ WWW= https://www.xfce.org/
LICENSE= GPLv2
LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig \
- libfreetype.so:print/freetype2
+ libfreetype.so:print/freetype2 \
+ libharfbuzz.so:print/harfbuzz
USES= compiler:c11 gettext-tools gmake gnome libtool pathfix \
pkgconfig tar:bzip2 xfce
diff --git a/sysutils/garcon/distinfo b/sysutils/garcon/distinfo
index ae2f8e3e7200..7b810e9212c7 100644
--- a/sysutils/garcon/distinfo
+++ b/sysutils/garcon/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1610727771
-SHA256 (xfce4/garcon-4.16.1.tar.bz2) = 84914927a2c1fda167f67af26a6640630a744a22940df508aa6c752cdbd3d21d
-SIZE (xfce4/garcon-4.16.1.tar.bz2) = 520220
+TIMESTAMP = 1671096826
+SHA256 (xfce4/garcon-4.18.0.tar.bz2) = 54633487566a8b8502b71c11a7f719efe27c069bd5773cc95f11ff4ea8f11a14
+SIZE (xfce4/garcon-4.18.0.tar.bz2) = 550674
diff --git a/sysutils/garcon/pkg-descr b/sysutils/garcon/pkg-descr
index 2102f39096e4..3341c102e607 100644
--- a/sysutils/garcon/pkg-descr
+++ b/sysutils/garcon/pkg-descr
@@ -1,3 +1,4 @@
Garcon is an implementation of the freedesktop.org menu specification
-replacing the former Xfce menu library libxfce4menu. It is based on
-GLib/GIO only and aims at covering the entire specification.
+replacing the former Xfce menu library libxfce4menu. It is based
+on GLib/GIO only and aims at covering the entire specification
+except for legacy menus.
diff --git a/sysutils/garcon/pkg-plist b/sysutils/garcon/pkg-plist
index 7b8801cbc6ca..e83e082b54db 100644
--- a/sysutils/garcon/pkg-plist
+++ b/sysutils/garcon/pkg-plist
@@ -38,6 +38,7 @@ share/desktop-directories/xfce-network.directory
share/desktop-directories/xfce-office.directory
share/desktop-directories/xfce-other.directory
share/desktop-directories/xfce-personal.directory
+share/desktop-directories/xfce-science.directory
share/desktop-directories/xfce-screensavers.directory
share/desktop-directories/xfce-settings.directory
share/desktop-directories/xfce-system.directory
diff --git a/sysutils/xfce4-cpugraph-plugin/Makefile b/sysutils/xfce4-cpugraph-plugin/Makefile
index 2b6d6b76cbc8..fd906be0aa45 100644
--- a/sysutils/xfce4-cpugraph-plugin/Makefile
+++ b/sysutils/xfce4-cpugraph-plugin/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce4-cpugraph-plugin
-PORTVERSION= 1.2.6
+PORTVERSION= 1.2.7
CATEGORIES= sysutils xfce
MASTER_SITES= XFCE/panel-plugins
DIST_SUBDIR= xfce4
diff --git a/sysutils/xfce4-cpugraph-plugin/distinfo b/sysutils/xfce4-cpugraph-plugin/distinfo
index 7ad4050beb9b..89e8decd895c 100644
--- a/sysutils/xfce4-cpugraph-plugin/distinfo
+++ b/sysutils/xfce4-cpugraph-plugin/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1643788330
-SHA256 (xfce4/xfce4-cpugraph-plugin-1.2.6.tar.bz2) = 773246f57c1824a85468d4119c17aeb07170ed1ebace8fa406c7fbcf5b47af99
-SIZE (xfce4/xfce4-cpugraph-plugin-1.2.6.tar.bz2) = 458058
+TIMESTAMP = 1667553246
+SHA256 (xfce4/xfce4-cpugraph-plugin-1.2.7.tar.bz2) = 68a651e278ed7186964e455b69b15da77f8d56257e5c3d6adf783b3ee9337405
+SIZE (xfce4/xfce4-cpugraph-plugin-1.2.7.tar.bz2) = 438674
diff --git a/sysutils/xfce4-power-manager/Makefile b/sysutils/xfce4-power-manager/Makefile
index 4594e2ce8fb4..d6bce6f210d3 100644
--- a/sysutils/xfce4-power-manager/Makefile
+++ b/sysutils/xfce4-power-manager/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce4-power-manager
-PORTVERSION= 4.16.0
+PORTVERSION= 4.18.0
CATEGORIES= sysutils xfce
MASTER_SITES= XFCE
DIST_SUBDIR= xfce4
@@ -11,11 +11,12 @@ WWW= https://goodies.xfce.org/projects/applications/xfce4-power-manager
LICENSE= GPLv2
LIB_DEPENDS= libnotify.so:devel/libnotify \
- libupower-glib.so:sysutils/upower
+ libupower-glib.so:sysutils/upower \
+ libharfbuzz.so:print/harfbuzz
USES= compiler:c11 gettext-tools gmake gnome libtool pkgconfig \
tar:bzip2 xfce xorg
-USE_GNOME= cairo glib20 gtk30 intltool
+USE_GNOME= cairo gdkpixbuf2 glib20 gtk30 intltool
USE_XFCE= panel
USE_XORG= ice sm xrandr x11 xext xtst xscrnsaver
diff --git a/sysutils/xfce4-power-manager/distinfo b/sysutils/xfce4-power-manager/distinfo
index a994126e5352..1cb2a456741f 100644
--- a/sysutils/xfce4-power-manager/distinfo
+++ b/sysutils/xfce4-power-manager/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1608682877
-SHA256 (xfce4/xfce4-power-manager-4.16.0.tar.bz2) = eb9c587c01b502fa45a32e7fc2aba98fa6d8391475133883654f77e562c43bf3
-SIZE (xfce4/xfce4-power-manager-4.16.0.tar.bz2) = 1234968
+TIMESTAMP = 1671101831
+SHA256 (xfce4/xfce4-power-manager-4.18.0.tar.bz2) = 2eee467886252f9fa704c978ec67dafad5274ede93e59b092a688faa7e72c39a
+SIZE (xfce4/xfce4-power-manager-4.18.0.tar.bz2) = 1239515
diff --git a/sysutils/xfce4-settings/Makefile b/sysutils/xfce4-settings/Makefile
index ec50c3c6b821..d298c481b932 100644
--- a/sysutils/xfce4-settings/Makefile
+++ b/sysutils/xfce4-settings/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce4-settings
-PORTVERSION= 4.16.5
+PORTVERSION= 4.18.0
CATEGORIES= sysutils xfce
MASTER_SITES= XFCE
DIST_SUBDIR= xfce4
diff --git a/sysutils/xfce4-settings/distinfo b/sysutils/xfce4-settings/distinfo
index 2f7bdb7d0c42..43159a36aa8b 100644
--- a/sysutils/xfce4-settings/distinfo
+++ b/sysutils/xfce4-settings/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1668331180
-SHA256 (xfce4/xfce4-settings-4.16.5.tar.bz2) = 7a4f74802486d7e77a1c9fa4fda19b13fc8a8dec3e5074f367e34fa82b40d28e
-SIZE (xfce4/xfce4-settings-4.16.5.tar.bz2) = 1498988
+TIMESTAMP = 1671101537
+SHA256 (xfce4/xfce4-settings-4.18.0.tar.bz2) = ed3f75837cb33cd694610fc87cd569c4782b7ac4e099143a3dbe8fff1f1c6a9d
+SIZE (xfce4/xfce4-settings-4.18.0.tar.bz2) = 1517874
diff --git a/sysutils/xfce4-settings/files/patch-dialogs_appearance-settings_appearance-install-theme b/sysutils/xfce4-settings/files/patch-dialogs_appearance-settings_appearance-install-theme
deleted file mode 100644
index 2bac50f627ad..000000000000
--- a/sysutils/xfce4-settings/files/patch-dialogs_appearance-settings_appearance-install-theme
+++ /dev/null
@@ -1,10 +0,0 @@
---- dialogs/appearance-settings/appearance-install-theme.orig 2015-08-01 08:43:16 UTC
-+++ dialogs/appearance-settings/appearance-install-theme
-@@ -104,6 +104,7 @@ fi
- # we try $XDG_CACHE_HOME because it is more likely this is on the
- # same partition, so moving the theme after extract is faster
- if test x"`which mktemp 2>/dev/null`" != x""; then
-+ TMPDIR="${TMPDIR:-/tmp}"
- tmpdir=`TMPDIR="${XDG_CACHE_HOME:-$TMPDIR}" mktemp -d`
- else
- tmpdir="/tmp/tmp.$$.$RANDOM"
diff --git a/sysutils/xfce4-settings/pkg-descr b/sysutils/xfce4-settings/pkg-descr
index 51cd18880cd2..62995f945c07 100644
--- a/sysutils/xfce4-settings/pkg-descr
+++ b/sysutils/xfce4-settings/pkg-descr
@@ -1,2 +1,2 @@
-The settings manager allows you to configure every detail of your desktop
-environment.
+Xfce settings manager allows you to configure every detail of your
+desktop environment.
diff --git a/sysutils/xfce4-settings/pkg-plist b/sysutils/xfce4-settings/pkg-plist
index 5ba1ba6d8583..9ec29e11c4f7 100644
--- a/sysutils/xfce4-settings/pkg-plist
+++ b/sysutils/xfce4-settings/pkg-plist
@@ -112,7 +112,7 @@ share/icons/hicolor/scalable/apps/org.xfce.settings.manager.svg
share/icons/hicolor/scalable/apps/org.xfce.settings.mouse.svg
share/icons/hicolor/scalable/apps/org.xfce.terminalemulator.svg
share/icons/hicolor/scalable/apps/org.xfce.webbrowser.svg
-share/xfce4/helpers/thunar.desktop
+share/xfce4/helpers/alacritty.desktop
share/xfce4/helpers/aterm.desktop
share/xfce4/helpers/balsa.desktop
share/xfce4/helpers/brave.desktop
@@ -134,6 +134,7 @@ share/xfce4/helpers/icecat.desktop
share/xfce4/helpers/icedove.desktop
share/xfce4/helpers/iceweasel.desktop
share/xfce4/helpers/jumanji.desktop
+share/xfce4/helpers/kitty.desktop
share/xfce4/helpers/kmail.desktop
share/xfce4/helpers/konqueror.desktop
share/xfce4/helpers/links.desktop
@@ -158,6 +159,7 @@ share/xfce4/helpers/surf.desktop
share/xfce4/helpers/sylpheed-claws.desktop
share/xfce4/helpers/sylpheed.desktop
share/xfce4/helpers/terminator.desktop
+share/xfce4/helpers/thunar.desktop
share/xfce4/helpers/thunderbird.desktop
share/xfce4/helpers/urxvt.desktop
share/xfce4/helpers/vimprobable2.desktop
@@ -196,6 +198,7 @@ share/xfce4/helpers/xterm.desktop
%%NLS%%share/locale/is/LC_MESSAGES/xfce4-settings.mo
%%NLS%%share/locale/it/LC_MESSAGES/xfce4-settings.mo
%%NLS%%share/locale/ja/LC_MESSAGES/xfce4-settings.mo
+%%NLS%%share/locale/ka/LC_MESSAGES/xfce4-settings.mo
%%NLS%%share/locale/kab/LC_MESSAGES/xfce4-settings.mo
%%NLS%%share/locale/kk/LC_MESSAGES/xfce4-settings.mo
%%NLS%%share/locale/ko/LC_MESSAGES/xfce4-settings.mo
diff --git a/sysutils/xfce4-systemload-plugin/Makefile b/sysutils/xfce4-systemload-plugin/Makefile
index ab14a337d565..c6ec96b7312f 100644
--- a/sysutils/xfce4-systemload-plugin/Makefile
+++ b/sysutils/xfce4-systemload-plugin/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce4-systemload-plugin
-PORTVERSION= 1.3.1
+PORTVERSION= 1.3.2
CATEGORIES= sysutils xfce
MASTER_SITES= XFCE/panel-plugins
DIST_SUBDIR= xfce4
diff --git a/sysutils/xfce4-systemload-plugin/distinfo b/sysutils/xfce4-systemload-plugin/distinfo
index a363e3de653b..822a54ffd926 100644
--- a/sysutils/xfce4-systemload-plugin/distinfo
+++ b/sysutils/xfce4-systemload-plugin/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1616488989
-SHA256 (xfce4/xfce4-systemload-plugin-1.3.1.tar.bz2) = 56d1007801d52d7c2b5a13bb54745f6d7f06fda28b49ce936145633068817652
-SIZE (xfce4/xfce4-systemload-plugin-1.3.1.tar.bz2) = 417959
+TIMESTAMP = 1667553309
+SHA256 (xfce4/xfce4-systemload-plugin-1.3.2.tar.bz2) = bb303fc3020e053ad1fa0b8fcbf0d7681c5563bb8f649357d6a95a577802b072
+SIZE (xfce4/xfce4-systemload-plugin-1.3.2.tar.bz2) = 409767
diff --git a/x11-fm/thunar/Makefile b/x11-fm/thunar/Makefile
index 266e3a6bedf6..bb41edeb429e 100644
--- a/x11-fm/thunar/Makefile
+++ b/x11-fm/thunar/Makefile
@@ -1,5 +1,5 @@
PORTNAME= thunar
-DISTVERSION= 4.16.11
+DISTVERSION= 4.18.0
CATEGORIES= x11-fm xfce
MASTER_SITES= XFCE
DIST_SUBDIR= xfce4
@@ -14,7 +14,8 @@ LICENSE_FILE_GPLv2= ${WRKSRC}/COPYING
LICENSE_FILE_LGPL20= ${WRKSRC}/COPYING.LIB
LIB_DEPENDS= libtumbler-1.so:deskutils/xfce4-tumbler \
- libharfbuzz.so:print/harfbuzz
+ libharfbuzz.so:print/harfbuzz \
+ libpcre2-8.so:devel/pcre2
RUN_DEPENDS= pkexec:sysutils/polkit
USES= compiler:c11 cpe desktop-file-utils gettext-tools gmake gnome \
diff --git a/x11-fm/thunar/distinfo b/x11-fm/thunar/distinfo
index c480d0e9508c..1b5284e75d1e 100644
--- a/x11-fm/thunar/distinfo
+++ b/x11-fm/thunar/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1648939402
-SHA256 (xfce4/thunar-4.16.11.tar.bz2) = f47dde90b2e5e3e31920a4f57ddd3670282d0a90870a45e89148fce41b2a8a1b
-SIZE (xfce4/thunar-4.16.11.tar.bz2) = 2326592
+TIMESTAMP = 1671101927
+SHA256 (xfce4/thunar-4.18.0.tar.bz2) = d1f4b080c97b9e390eff199aaaac7562fb20f031686f8d5ee5207e953bfc2feb
+SIZE (xfce4/thunar-4.18.0.tar.bz2) = 2802858
diff --git a/x11-fm/thunar/pkg-descr b/x11-fm/thunar/pkg-descr
index b7ab20bf5539..a860a702f38a 100644
--- a/x11-fm/thunar/pkg-descr
+++ b/x11-fm/thunar/pkg-descr
@@ -1 +1,6 @@
-Thunar is a new modern file manager for the Xfce Desktop Environment.
+Thunar is a modern file manager for the Xfce Desktop Environment.
+It has been designed from the ground up to be fast and easy-to-use.
+Its user interface is clean and intuitive, and does not include any
+confusing or useless options. Thunar is fast and responsive with a
+good start up time and directory load time. Thunar is accessible
+using Assistive Technologies and is fully standards compliant.
diff --git a/x11-fm/thunar/pkg-plist b/x11-fm/thunar/pkg-plist
index 8da6916aefec..cf11d558b0c0 100644
--- a/x11-fm/thunar/pkg-plist
+++ b/x11-fm/thunar/pkg-plist
@@ -37,6 +37,120 @@ share/dbus-1/services/org.xfce.FileManager.service
share/dbus-1/services/org.xfce.Thunar.service
%%DOCSDIR%%/README.gtkrc
%%GIR%%share/gir-1.0/Thunarx-3.0.gir
+share/gtk-doc/html/thunar/ThunarAbstractDialog.html
+share/gtk-doc/html/thunar/ThunarAbstractIconView.html
+share/gtk-doc/html/thunar/ThunarActionManager.html
+share/gtk-doc/html/thunar/ThunarApplication.html
+share/gtk-doc/html/thunar/ThunarBrowser.html
+share/gtk-doc/html/thunar/ThunarChooserButton.html
+share/gtk-doc/html/thunar/ThunarChooserDialog.html
+share/gtk-doc/html/thunar/ThunarChooserModel.html
+share/gtk-doc/html/thunar/ThunarClipboardManager.html
+share/gtk-doc/html/thunar/ThunarColumnEditor.html
+share/gtk-doc/html/thunar/ThunarColumnModel.html
+share/gtk-doc/html/thunar/ThunarCompactView.html
+share/gtk-doc/html/thunar/ThunarComponent.html
+share/gtk-doc/html/thunar/ThunarDBusService.html
+share/gtk-doc/html/thunar/ThunarDeepCountJob.html
+share/gtk-doc/html/thunar/ThunarDetailsView.html
+share/gtk-doc/html/thunar/ThunarDevice.html
+share/gtk-doc/html/thunar/ThunarDeviceMonitor.html
+share/gtk-doc/html/thunar/ThunarEmblemChooser.html
+share/gtk-doc/html/thunar/ThunarFile.html
+share/gtk-doc/html/thunar/ThunarFileMonitor.html
+share/gtk-doc/html/thunar/ThunarFolder.html
+share/gtk-doc/html/thunar/ThunarHistory.html
+share/gtk-doc/html/thunar/ThunarIconFactory.html
+share/gtk-doc/html/thunar/ThunarIconRenderer.html
+share/gtk-doc/html/thunar/ThunarIconView.html
+share/gtk-doc/html/thunar/ThunarImage.html
+share/gtk-doc/html/thunar/ThunarJob.html
+share/gtk-doc/html/thunar/ThunarJobOperation.html
+share/gtk-doc/html/thunar/ThunarJobOperationHistory.html
+share/gtk-doc/html/thunar/ThunarListModel.html
+share/gtk-doc/html/thunar/ThunarLocationBar.html
+share/gtk-doc/html/thunar/ThunarLocationButton.html
+share/gtk-doc/html/thunar/ThunarLocationButtons.html
+share/gtk-doc/html/thunar/ThunarLocationEntry.html
+share/gtk-doc/html/thunar/ThunarMenu.html
+share/gtk-doc/html/thunar/ThunarNavigator.html
+share/gtk-doc/html/thunar/ThunarPathEntry.html
+share/gtk-doc/html/thunar/ThunarPermissionsChooser.html
+share/gtk-doc/html/thunar/ThunarPreferences.html
+share/gtk-doc/html/thunar/ThunarPreferencesDialog.html
+share/gtk-doc/html/thunar/ThunarProgressDialog.html
+share/gtk-doc/html/thunar/ThunarProgressView.html
+share/gtk-doc/html/thunar/ThunarPropertiesDialog.html
+share/gtk-doc/html/thunar/ThunarRenamerDialog.html
+share/gtk-doc/html/thunar/ThunarRenamerModel.html
+share/gtk-doc/html/thunar/ThunarRenamerProgress.html
+share/gtk-doc/html/thunar/ThunarSendtoModel.html
+share/gtk-doc/html/thunar/ThunarSessionClient.html
+share/gtk-doc/html/thunar/ThunarShortcutsIconRenderer.html
+share/gtk-doc/html/thunar/ThunarShortcutsModel.html
+share/gtk-doc/html/thunar/ThunarShortcutsPane.html
+share/gtk-doc/html/thunar/ThunarShortcutsView.html
+share/gtk-doc/html/thunar/ThunarSidePane.html
+share/gtk-doc/html/thunar/ThunarSimpleJob.html
+share/gtk-doc/html/thunar/ThunarSizeLabel.html
+share/gtk-doc/html/thunar/ThunarStandardView.html
+share/gtk-doc/html/thunar/ThunarStatusbar.html
+share/gtk-doc/html/thunar/ThunarTransferJob.html
+share/gtk-doc/html/thunar/ThunarTreeModel.html
+share/gtk-doc/html/thunar/ThunarTreePane.html
+share/gtk-doc/html/thunar/ThunarTreeView.html
+share/gtk-doc/html/thunar/ThunarUserManager.html
+share/gtk-doc/html/thunar/ThunarView.html
+share/gtk-doc/html/thunar/ThunarWindow.html
+share/gtk-doc/html/thunar/annotation-glossary.html
+share/gtk-doc/html/thunar/ch01.html
+share/gtk-doc/html/thunar/ch02.html
+share/gtk-doc/html/thunar/ch03.html
+share/gtk-doc/html/thunar/ch04.html
+share/gtk-doc/html/thunar/ch05.html
+share/gtk-doc/html/thunar/ch06.html
+share/gtk-doc/html/thunar/ch07.html
+share/gtk-doc/html/thunar/ch08.html
+share/gtk-doc/html/thunar/ch09.html
+share/gtk-doc/html/thunar/ch10.html
+share/gtk-doc/html/thunar/ch11.html
+share/gtk-doc/html/thunar/ch12.html
+share/gtk-doc/html/thunar/ch13.html
+share/gtk-doc/html/thunar/ch14.html
+share/gtk-doc/html/thunar/ch15.html
+share/gtk-doc/html/thunar/ch16.html
+share/gtk-doc/html/thunar/ch17.html
+share/gtk-doc/html/thunar/ch18.html
+share/gtk-doc/html/thunar/ch19.html
+share/gtk-doc/html/thunar/glib-gtk-extensions.html
+share/gtk-doc/html/thunar/home.png
+share/gtk-doc/html/thunar/index.html
+share/gtk-doc/html/thunar/left-insensitive.png
+share/gtk-doc/html/thunar/left.png
+share/gtk-doc/html/thunar/right-insensitive.png
+share/gtk-doc/html/thunar/right.png
+share/gtk-doc/html/thunar/style.css
+share/gtk-doc/html/thunar/thunar-objects.html
+share/gtk-doc/html/thunar/thunar-thunar-dialogs.html
+share/gtk-doc/html/thunar/thunar-thunar-dnd.html
+share/gtk-doc/html/thunar/thunar-thunar-enum-types.html
+share/gtk-doc/html/thunar/thunar-thunar-gdk-extensions.html
+share/gtk-doc/html/thunar/thunar-thunar-gio-extensions.html
+share/gtk-doc/html/thunar/thunar-thunar-gobject-extensions.html
+share/gtk-doc/html/thunar/thunar-thunar-gtk-extensions.html
+share/gtk-doc/html/thunar/thunar-thunar-ice.html
+share/gtk-doc/html/thunar/thunar-thunar-io-jobs-util.html
+share/gtk-doc/html/thunar/thunar-thunar-io-jobs.html
+share/gtk-doc/html/thunar/thunar-thunar-io-scan-directory.html
+share/gtk-doc/html/thunar/thunar-thunar-notify.html
+share/gtk-doc/html/thunar/thunar-thunar-pango-extensions.html
+share/gtk-doc/html/thunar/thunar-thunar-renamer-pair.html
+share/gtk-doc/html/thunar/thunar-thunar-util.html
+share/gtk-doc/html/thunar/thunar-view.html
+share/gtk-doc/html/thunar/thunar-widgets.html
+share/gtk-doc/html/thunar/thunar.devhelp2
+share/gtk-doc/html/thunar/up-insensitive.png
+share/gtk-doc/html/thunar/up.png
share/gtk-doc/html/thunarx/ThunarxFileInfo.html
share/gtk-doc/html/thunarx/ThunarxMenu.html
share/gtk-doc/html/thunarx/ThunarxMenuItem.html
diff --git a/x11-wm/xfce4-desktop/Makefile b/x11-wm/xfce4-desktop/Makefile
index ccfa29a6c37c..430917a22e84 100644
--- a/x11-wm/xfce4-desktop/Makefile
+++ b/x11-wm/xfce4-desktop/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce4-desktop
-PORTVERSION= 4.16.1
+PORTVERSION= 4.18.0
CATEGORIES= x11-wm xfce
MASTER_SITES= XFCE
DISTNAME= xfdesktop-${DISTVERSIONFULL}
@@ -12,11 +12,12 @@ WWW= https://www.xfce.org/
LICENSE= GPLv2
LICENSE_FILE= ${WRKSRC}/COPYING
-LIB_DEPENDS= libnotify.so:devel/libnotify
+LIB_DEPENDS= libnotify.so:devel/libnotify \
+ libharfbuzz.so:print/harfbuzz
USES= compiler:c11 gettext-tools gmake gnome pkgconfig tar:bzip2 \
xfce xorg
-USE_GNOME= cairo glib20 gtk30 intltool libwnck3
+USE_GNOME= cairo glib20 gdkpixbuf2 gtk30 intltool libwnck3
USE_XFCE= garcon libexo
USE_XORG= ice sm x11
diff --git a/x11-wm/xfce4-desktop/distinfo b/x11-wm/xfce4-desktop/distinfo
index 51d5353f33f2..69c443a80e6e 100644
--- a/x11-wm/xfce4-desktop/distinfo
+++ b/x11-wm/xfce4-desktop/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1661013041
-SHA256 (xfce4/xfdesktop-4.16.1.tar.bz2) = e31dcb0008ae55e99e42128a4694002203305287434a8ee0f9937e7298a4bd11
-SIZE (xfce4/xfdesktop-4.16.1.tar.bz2) = 1942859
+TIMESTAMP = 1671101408
+SHA256 (xfce4/xfdesktop-4.18.0.tar.bz2) = 661783e7e6605459926d80bca46d25ce2197c221456457a863ea9d0252120d14
+SIZE (xfce4/xfdesktop-4.18.0.tar.bz2) = 2136039
diff --git a/x11-wm/xfce4-desktop/pkg-descr b/x11-wm/xfce4-desktop/pkg-descr
index 800e836b5aeb..04d26547dec8 100644
--- a/x11-wm/xfce4-desktop/pkg-descr
+++ b/x11-wm/xfce4-desktop/pkg-descr
@@ -1,2 +1,2 @@
-The desktop manager sets the background image, and provides a root
+Xfce desktop manager sets the background image, and provides a root
window menu, desktop icons or minimized icons and windows list.
diff --git a/x11-wm/xfce4-desktop/pkg-plist b/x11-wm/xfce4-desktop/pkg-plist
index cf37b60c60d1..9eaafdb05d25 100644
--- a/x11-wm/xfce4-desktop/pkg-plist
+++ b/x11-wm/xfce4-desktop/pkg-plist
@@ -3,6 +3,9 @@ bin/xfdesktop-settings
man/man1/xfdesktop.1.gz
share/applications/xfce-backdrop-settings.desktop
share/backgrounds/xfce/xfce-blue.jpg
+share/backgrounds/xfce/xfce-flower.svg
+share/backgrounds/xfce/xfce-leaves.svg
+share/backgrounds/xfce/xfce-shapes.svg
share/backgrounds/xfce/xfce-stripes.png
share/backgrounds/xfce/xfce-teal.jpg
share/backgrounds/xfce/xfce-verticals.png
diff --git a/x11-wm/xfce4-panel/Makefile b/x11-wm/xfce4-panel/Makefile
index 1245310b1796..504c5645dc6c 100644
--- a/x11-wm/xfce4-panel/Makefile
+++ b/x11-wm/xfce4-panel/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce4-panel
-PORTVERSION= 4.16.5
+PORTVERSION= 4.18.0
CATEGORIES= x11-wm xfce
MASTER_SITES= XFCE
DIST_SUBDIR= xfce4
diff --git a/x11-wm/xfce4-panel/distinfo b/x11-wm/xfce4-panel/distinfo
index e8e457ebbb7e..c1c324d8fdc5 100644
--- a/x11-wm/xfce4-panel/distinfo
+++ b/x11-wm/xfce4-panel/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1661013254
-SHA256 (xfce4/xfce4-panel-4.16.5.tar.bz2) = 096693e2bc76cf760cfe00dc76ec121c4d23f9166aa29945ae41616e8ec78230
-SIZE (xfce4/xfce4-panel-4.16.5.tar.bz2) = 1386556
+TIMESTAMP = 1671097747
+SHA256 (xfce4/xfce4-panel-4.18.0.tar.bz2) = be80023fd546587831bab25ded15ae4c9e346289a75744b6ba4cf4ee53794710
+SIZE (xfce4/xfce4-panel-4.18.0.tar.bz2) = 1451719
diff --git a/x11-wm/xfce4-panel/files/patch-plugins_pager_pager.c b/x11-wm/xfce4-panel/files/patch-plugins_pager_pager.c
deleted file mode 100644
index 60998ddca727..000000000000
--- a/x11-wm/xfce4-panel/files/patch-plugins_pager_pager.c
+++ /dev/null
@@ -1,16 +0,0 @@
-From 88d469cb47e58865370b26e6a4d6a7f8891d2949 Mon Sep 17 00:00:00 2001
-From: Andre Miranda <andreldm@xfce.org>
-Date: Sun, 25 Aug 2019 19:16:03 -0300
-Subject: [PATCH] pager: Override WnckPager scroll-event handler (Bug #15886)
-
---- plugins/pager/pager.c.orig 2020-12-10 23:14:07 UTC
-+++ plugins/pager/pager.c
-@@ -482,6 +482,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS
- G_CALLBACK (pager_plugin_drag_begin_event), plugin);
- g_signal_connect_after (G_OBJECT (plugin->pager), "drag-end",
- G_CALLBACK (pager_plugin_drag_end_event), plugin);
-+ g_signal_connect_swapped (G_OBJECT (plugin->pager), "scroll-event",
-+ G_CALLBACK (pager_plugin_scroll_event), plugin);
- }
- else
- {
diff --git a/x11-wm/xfce4-panel/pkg-descr b/x11-wm/xfce4-panel/pkg-descr
index d70a7b32c617..730bc7d02039 100644
--- a/x11-wm/xfce4-panel/pkg-descr
+++ b/x11-wm/xfce4-panel/pkg-descr
@@ -1,2 +1,2 @@
-The panel supports multiple panels, with many options for their
+Xfce panel supports multiple panels, with many options for their
position, appearance, transparency and behavior.
diff --git a/x11-wm/xfce4-session/Makefile b/x11-wm/xfce4-session/Makefile
index 379da3f79537..b6dc9292f5e9 100644
--- a/x11-wm/xfce4-session/Makefile
+++ b/x11-wm/xfce4-session/Makefile
@@ -1,6 +1,5 @@
PORTNAME= xfce4-session
-PORTVERSION= 4.16.0
-PORTREVISION= 1
+PORTVERSION= 4.18.0
CATEGORIES= x11-wm xfce
MASTER_SITES= XFCE
DIST_SUBDIR= xfce4
@@ -20,7 +19,7 @@ LIB_DEPENDS= libupower-glib.so:sysutils/upower \
USES= compiler:c11 gettext-tools gmake gnome libtool pathfix \
pkgconfig tar:bzip2 xfce xorg
-USE_GNOME= cairo gtk30 glib20 intltool libwnck3
+USE_GNOME= cairo gdkpixbuf2 gtk30 glib20 intltool libwnck3
USE_XFCE= libexo xfconf
USE_XORG= ice sm x11
diff --git a/x11-wm/xfce4-session/distinfo b/x11-wm/xfce4-session/distinfo
index dbb9487151d3..e7f5f2b0745b 100644
--- a/x11-wm/xfce4-session/distinfo
+++ b/x11-wm/xfce4-session/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1608682710
-SHA256 (xfce4/xfce4-session-4.16.0.tar.bz2) = 22f273f212481d71e0b5618c62710cd85f69aea74f5ea5c0093f7918b07d17b7
-SIZE (xfce4/xfce4-session-4.16.0.tar.bz2) = 875504
+TIMESTAMP = 1671101736
+SHA256 (xfce4/xfce4-session-4.18.0.tar.bz2) = 38badb500b272012f494543a60a9c0563c381647cc95bed73b68aec0b0b89a7f
+SIZE (xfce4/xfce4-session-4.18.0.tar.bz2) = 853627
diff --git a/x11-wm/xfce4-session/files/patch-scripts_xflock4 b/x11-wm/xfce4-session/files/patch-scripts_xflock4
deleted file mode 100644
index 32cedb702b8a..000000000000
--- a/x11-wm/xfce4-session/files/patch-scripts_xflock4
+++ /dev/null
@@ -1,18 +0,0 @@
---- scripts/xflock4.orig 2019-05-10 20:05:58 UTC
-+++ scripts/xflock4
-@@ -39,12 +39,14 @@ done
- # else run another access locking utility, if installed
- for lock_cmd in \
- "xlock -mode blank" \
-- "slock"
-+ "slock" \
-+ "i3lock -c 000000"
- do
- set -- $lock_cmd
- if command -v -- $1 >/dev/null 2>&1; then
- $lock_cmd >/dev/null 2>&1 &
- # turn off display backlight:
-+ sleep 1
- xset dpms force off
- exit
- fi
diff --git a/x11-wm/xfce4-session/pkg-plist b/x11-wm/xfce4-session/pkg-plist
index a9507749271f..0e7a9b38b819 100644
--- a/x11-wm/xfce4-session/pkg-plist
+++ b/x11-wm/xfce4-session/pkg-plist
@@ -35,6 +35,7 @@ share/icons/hicolor/scalable/apps/org.xfce.session.svg
%%NLS%%share/locale/am/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/ar/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/ast/LC_MESSAGES/xfce4-session.mo
+%%NLS%%share/locale/az/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/be/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/be@tarask/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/bg/LC_MESSAGES/xfce4-session.mo
@@ -51,6 +52,7 @@ share/icons/hicolor/scalable/apps/org.xfce.session.svg
%%NLS%%share/locale/es/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/et/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/eu/LC_MESSAGES/xfce4-session.mo
+%%NLS%%share/locale/fa_IR/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/fi/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/fr/LC_MESSAGES/xfce4-session.mo
%%NLS%%share/locale/gl/LC_MESSAGES/xfce4-session.mo
diff --git a/x11-wm/xfce4-wm/Makefile b/x11-wm/xfce4-wm/Makefile
index bb09f4fa0247..e4296b7e3115 100644
--- a/x11-wm/xfce4-wm/Makefile
+++ b/x11-wm/xfce4-wm/Makefile
@@ -1,6 +1,5 @@
PORTNAME= xfce4-wm
-PORTVERSION= 4.16.1
-PORTREVISION= 1
+PORTVERSION= 4.18.0
CATEGORIES= x11-wm xfce
MASTER_SITES= XFCE
DISTNAME= xfwm4-${DISTVERSIONFULL}
@@ -12,11 +11,12 @@ WWW= https://xfce.org/
LICENSE= GPLv2
-LIB_DEPENDS= libepoxy.so:graphics/libepoxy
+LIB_DEPENDS= libepoxy.so:graphics/libepoxy \
+ libharfbuzz.so:print/harfbuzz
USES= compiler:c11 gettext-tools gmake gnome pkgconfig tar:bzip2 \
xfce xorg
-USE_GNOME= cairo gtk30 intltool libwnck3
+USE_GNOME= cairo gdkpixbuf2 gtk30 intltool libwnck3
USE_XFCE= libmenu xfconf
USE_XORG= ice sm x11 xcomposite xdamage xext xfixes xi xinerama \
xorgproto xpresent xrandr xrender xres
diff --git a/x11-wm/xfce4-wm/distinfo b/x11-wm/xfce4-wm/distinfo
index d29af699a51b..cf3a0c882343 100644
--- a/x11-wm/xfce4-wm/distinfo
+++ b/x11-wm/xfce4-wm/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1610219439
-SHA256 (xfce4/xfwm4-4.16.1.tar.bz2) = b5b24ca04bd73c642db0a4b4df81d262381d758f01b51108257d48b391b8718c
-SIZE (xfce4/xfwm4-4.16.1.tar.bz2) = 1201722
+TIMESTAMP = 1671100717
+SHA256 (xfce4/xfwm4-4.18.0.tar.bz2) = 92cd1b889bb25cb4bc06c1c6736c238d96e79c1e706b9f77fad0a89d6e5fc13f
+SIZE (xfce4/xfwm4-4.18.0.tar.bz2) = 1220901
diff --git a/x11-wm/xfce4-wm/files/patch-src_icons.c b/x11-wm/xfce4-wm/files/patch-src_icons.c
deleted file mode 100644
index 564d90fd25fd..000000000000
--- a/x11-wm/xfce4-wm/files/patch-src_icons.c
+++ /dev/null
@@ -1,46 +0,0 @@
---- src/icons.c.orig 2021-01-05 08:18:20 UTC
-+++ src/icons.c
-@@ -295,16 +295,26 @@ static void
- }
-
- static void
--get_pixmap_geometry (Display *dpy, Pixmap pixmap, guint *out_width, guint *out_height, guint *out_depth)
-+get_pixmap_geometry (ScreenInfo *screen_info, Pixmap pixmap, guint *out_width, guint *out_height, guint *out_depth)
- {
- Window root;
- guint border_width;
- gint x, y;
- guint width, height;
- guint depth;
-+ Status rc;
-+ int result;
-
-- XGetGeometry (dpy, pixmap, &root, &x, &y, &width, &height, &border_width, &depth);
-+ myDisplayErrorTrapPush (screen_info->display_info);
-+ rc = XGetGeometry (myScreenGetXDisplay(screen_info), pixmap, &root,
-+ &x, &y, &width, &height, &border_width, &depth);
-+ result = myDisplayErrorTrapPop (screen_info->display_info);
-
-+ if ((rc != Success) || (result != Success))
-+ {
-+ return;
-+ }
-+
- if (out_width != NULL)
- {
- *out_width = width;
-@@ -371,12 +381,12 @@ try_pixmap_and_mask (ScreenInfo *screen_info, Pixmap s
- return NULL;
- }
-
-- get_pixmap_geometry (myScreenGetXDisplay(screen_info), src_pixmap, &w, &h, &depth);
-+ get_pixmap_geometry (screen_info, src_pixmap, &w, &h, &depth);
- surface = get_surface_from_pixmap (screen_info, src_pixmap, w, h, depth);
-
- if (surface && src_mask != None)
- {
-- get_pixmap_geometry (myScreenGetXDisplay(screen_info), src_mask, &w, &h, &depth);
-+ get_pixmap_geometry (screen_info, src_mask, &w, &h, &depth);
- mask_surface = get_surface_from_pixmap (screen_info, src_mask, w, h, depth);
- }
- else
diff --git a/x11-wm/xfce4-wm/pkg-descr b/x11-wm/xfce4-wm/pkg-descr
index 0f8a3c7132e7..0f31d682df72 100644
--- a/x11-wm/xfce4-wm/pkg-descr
+++ b/x11-wm/xfce4-wm/pkg-descr
@@ -1,3 +1,3 @@
-The Xfce 4 window manager manages the placement of application windows
-on the screen, provides window decorations, and manages work-
-spaces or virtual desktops.
+The Xfce 4 window manager manages the placement of application
+windows on the screen, provides window decorations, and manages
+workspaces or virtual desktops.
diff --git a/x11-wm/xfce4/Makefile b/x11-wm/xfce4/Makefile
index bcdd0d855fc9..4ee604b7eebc 100644
--- a/x11-wm/xfce4/Makefile
+++ b/x11-wm/xfce4/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce
-PORTVERSION= 4.16
+PORTVERSION= 4.18
CATEGORIES= x11-wm xfce
MAINTAINER= xfce@FreeBSD.org
diff --git a/x11/libexo/Makefile b/x11/libexo/Makefile
index c0eebc4bf54c..5d0872a53091 100644
--- a/x11/libexo/Makefile
+++ b/x11/libexo/Makefile
@@ -1,5 +1,5 @@
PORTNAME= libexo
-PORTVERSION= 4.16.4
+PORTVERSION= 4.18.0
CATEGORIES= x11 xfce
MASTER_SITES= XFCE
DISTNAME= exo-${DISTVERSIONFULL}
diff --git a/x11/libexo/distinfo b/x11/libexo/distinfo
index fcac81df4508..dad12aa01c93 100644
--- a/x11/libexo/distinfo
+++ b/x11/libexo/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1654934890
-SHA256 (xfce4/exo-4.16.4.tar.bz2) = 82a50c67e78f1e5c420b7615515bcca759b86eeab99224ab8eca4306b89d2eca
-SIZE (xfce4/exo-4.16.4.tar.bz2) = 876080
+TIMESTAMP = 1671097667
+SHA256 (xfce4/exo-4.18.0.tar.bz2) = 4f2c61d045a888cdb64297fd0ae20cc23da9b97ffb82562ed12806ed21da7d55
+SIZE (xfce4/exo-4.18.0.tar.bz2) = 896849
diff --git a/x11/libexo/pkg-descr b/x11/libexo/pkg-descr
index 140fe10c3cbd..77c6a4a46308 100644
--- a/x11/libexo/pkg-descr
+++ b/x11/libexo/pkg-descr
@@ -1,4 +1,4 @@
-Exo is an Xfce library targeted at application development. It contains
-various custom widgets and APIs extending the functionality of GLib and
-GTK+. It also ships utilities for defining preferred applications,
-mounting storage devices and more.
+Exo is an Xfce library targeted at application development. It
+contains various custom widgets and APIs extending the functionality
+of GLib and GTK. It also ships utilities for defining preferred
+applications, mounting storage devices and more.
diff --git a/x11/libexo/pkg-plist b/x11/libexo/pkg-plist
index 885a5032e0e2..f176ac2e70b2 100644
--- a/x11/libexo/pkg-plist
+++ b/x11/libexo/pkg-plist
@@ -24,71 +24,73 @@ lib/libexo-2.so.0
lib/libexo-2.so.0.1.0
libdata/pkgconfig/exo-2.pc
man/man1/exo-open.1.gz
-share/icons/hicolor/24x24/apps/preferences-desktop-default-applications.png
-share/icons/hicolor/48x48/apps/preferences-desktop-default-applications.png
-%%NLS%%share/locale/am/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ar/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ast/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/be/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/bg/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/bn/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ca/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/cs/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/da/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/de/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/el/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/en_AU/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/en_GB/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/es/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/et/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/eu/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/fa_IR/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/fi/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/fr/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/gl/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/he/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/hr/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/hu/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/hy/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/hy_AM/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/hye/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/id/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ie/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/is/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/it/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ja/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/kab/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/kk/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/kn/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ko/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/lt/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/lv/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ms/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/nb/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/nl/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/nn/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/oc/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/pa/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/pl/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/pt/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/pt_BR/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ro/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ru/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/si/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/sk/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/sl/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/sq/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/sr/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/sv/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/te/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/th/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/tr/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ug/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/uk/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ur/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/ur_PK/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/vi/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/zh_CN/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/zh_HK/LC_MESSAGES/exo-2.mo
-%%NLS%%share/locale/zh_TW/LC_MESSAGES/exo-2.mo
+%%NLS%%share/locale/am/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ar/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ast/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/az/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/az_AZ/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/be/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/bg/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/bn/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ca/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/cs/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/cy/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/da/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/de/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/el/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/en_AU/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/en_GB/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/es/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/et/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/eu/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/fa_IR/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/fi/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/fr/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/gl/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/he/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/hr/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/hu/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/hy/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/hy_AM/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/hye/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/id/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ie/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/is/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/it/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ja/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ka/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/kab/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/kk/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/kn/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ko/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/lt/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/lv/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ms/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/nb/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/nl/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/nn/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/oc/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/pa/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/pl/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/pt/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/pt_BR/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ro/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ru/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/si/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/sk/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/sl/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/sq/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/sr/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/sv/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/te/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/th/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/tr/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ug/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/uk/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ur/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/ur_PK/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/vi/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/zh_CN/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/zh_HK/LC_MESSAGES/exo.mo
+%%NLS%%share/locale/zh_TW/LC_MESSAGES/exo.mo
share/pixmaps/exo/exo-thumbnail-frame.png
diff --git a/x11/libxfce4menu/Makefile b/x11/libxfce4menu/Makefile
index 057f115839df..9563296040f4 100644
--- a/x11/libxfce4menu/Makefile
+++ b/x11/libxfce4menu/Makefile
@@ -1,5 +1,5 @@
PORTNAME= libxfce4menu
-PORTVERSION= 4.16.1
+PORTVERSION= 4.18.0
CATEGORIES= x11 xfce
MASTER_SITES= XFCE
DISTNAME= libxfce4ui-${DISTVERSIONFULL}
@@ -14,11 +14,12 @@ LICENSE= GPLv2
LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig \
libfreetype.so:print/freetype2 \
libepoxy.so:graphics/libepoxy \
- libgtop-2.0.so:devel/libgtop
+ libgtop-2.0.so:devel/libgtop \
+ libharfbuzz.so:print/harfbuzz
USES= compiler:c11 gettext-tools gmake gnome libtool pathfix \
pkgconfig tar:bzip2 xfce xorg
-USE_GNOME= cairo glib20 gtk30 intltool
+USE_GNOME= cairo gdkpixbuf2 glib20 gtk30 intltool
USE_LDCONFIG= yes
USE_XFCE= xfconf
USE_XORG= ice sm x11
diff --git a/x11/libxfce4menu/distinfo b/x11/libxfce4menu/distinfo
index d42ad719d279..d2eb686bb909 100644
--- a/x11/libxfce4menu/distinfo
+++ b/x11/libxfce4menu/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1630881123
-SHA256 (xfce4/libxfce4ui-4.16.1.tar.bz2) = d96946ae5af6bf078dda415419e0021909f763ee0020b42f3e26f603e51585f6
-SIZE (xfce4/libxfce4ui-4.16.1.tar.bz2) = 785811
+TIMESTAMP = 1671097021
+SHA256 (xfce4/libxfce4ui-4.18.0.tar.bz2) = 532247c4387c17bb9ef94a73147039b8d013c3131c95cdbd2fa85fbcc848d06b
+SIZE (xfce4/libxfce4ui-4.18.0.tar.bz2) = 896351
diff --git a/x11/libxfce4menu/files/patch-shortcuts-grabber-fix-PR27 b/x11/libxfce4menu/files/patch-shortcuts-grabber-fix-PR27
deleted file mode 100644
index c50922d4a68a..000000000000
--- a/x11/libxfce4menu/files/patch-shortcuts-grabber-fix-PR27
+++ /dev/null
@@ -1,1324 +0,0 @@
-From 7c1e0e71899d13f75fe4177454656049d3f35d54 Mon Sep 17 00:00:00 2001
-From: Jan Ziak <0xe2.0x9a.0x9b@gmail.com>
-Date: Mon, 4 Jan 2021 17:01:04 +0100
-Subject: [PATCH 1/5] shortcuts-grabber: Record xkb state group (Bug #33)
-
-XkbGroupForCoreState(xevent->xkey.state) returns 0 even after a keyboard
-layout switch. Instead of using the XkbGroupForCoreState() function, this
-patch watches for XkbStateNotify events from which it obtains the xkb state
-group.
-
-Closes: https://gitlab.xfce.org/xfce/libxfce4ui/-/issues/33
-See also: https://gitlab.xfce.org/xfce/libxfce4ui/-/merge_requests/33
----
- libxfce4kbd-private/xfce-shortcuts-grabber.c | 38 ++++++++++++++++----
- 1 file changed, 31 insertions(+), 7 deletions(-)
-
-diff --git a/libxfce4kbd-private/xfce-shortcuts-grabber.c b/libxfce4kbd-private/xfce-shortcuts-grabber.c
-index 60ddfd7..9df45c3 100644
---- libxfce4kbd-private/xfce-shortcuts-grabber.c
-+++ libxfce4kbd-private/xfce-shortcuts-grabber.c
-@@ -61,13 +61,14 @@ static void xfce_shortcuts_grabber_grab (XfceShortcutsGra
- gboolean grab);
- static GdkFilterReturn xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
- GdkEvent *event,
-- XfceShortcutsGrabber *grabber);
-+ gpointer data);
-
-
-
- struct _XfceShortcutsGrabberPrivate
- {
- GHashTable *keys;
-+ gint xkbEventType, xkbStateGroup;
- };
-
- typedef enum
-@@ -141,20 +142,26 @@ static void
- xfce_shortcuts_grabber_constructed (GObject *object)
- {
- GdkDisplay *display;
-+ Display *xdisplay;
- GdkKeymap *keymap;
-
- XfceShortcutsGrabber *grabber = XFCE_SHORTCUTS_GRABBER (object);
-
- display = gdk_display_get_default ();
-+ xdisplay = GDK_DISPLAY_XDISPLAY (display);
- keymap = gdk_keymap_get_for_display (display);
- g_signal_connect (keymap, "keys-changed", G_CALLBACK (xfce_shortcuts_grabber_keys_changed),
- grabber);
-
-+ if (G_UNLIKELY (!XkbQueryExtension (xdisplay, 0, &grabber->priv->xkbEventType, 0, 0, 0)))
-+ grabber->priv->xkbEventType = -1;
-+ grabber->priv->xkbStateGroup = -1;
-+
- /* Flush events before adding the event filter */
-- XAllowEvents (GDK_DISPLAY_XDISPLAY (display), AsyncBoth, CurrentTime);
-+ XAllowEvents (xdisplay, AsyncBoth, CurrentTime);
-
- /* Add event filter */
-- gdk_window_add_filter (NULL, (GdkFilterFunc) xfce_shortcuts_grabber_event_filter, grabber);
-+ gdk_window_add_filter (NULL, xfce_shortcuts_grabber_event_filter, grabber);
- }
-
-
-@@ -417,10 +424,11 @@ find_event_key (const gchar *shortcut,
-
-
- static GdkFilterReturn
--xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
-- GdkEvent *event,
-- XfceShortcutsGrabber *grabber)
-+xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
-+ GdkEvent *event,
-+ gpointer data)
- {
-+ XfceShortcutsGrabber *const grabber = data;
- struct EventKeyFindContext context;
- GdkKeymap *keymap;
- GdkModifierType consumed, modifiers;
-@@ -434,6 +442,22 @@ xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
-
- xevent = (XEvent *) gdk_xevent;
-
-+ if (xevent->type == grabber->priv->xkbEventType)
-+ {
-+ const XkbEvent *e = (const XkbEvent*) xevent;
-+ TRACE ("xkb event: any.xkb_type=%d", e->any.xkb_type);
-+ if (e->any.xkb_type == XkbStateNotify)
-+ {
-+ TRACE ("xkb event: any.xkb_type=XkbStateNotify, state.group=%d", e->state.group);
-+ if (grabber->priv->xkbStateGroup != e->state.group)
-+ {
-+ grabber->priv->xkbStateGroup = e->state.group;
-+ xfce_shortcuts_grabber_ungrab_all (grabber);
-+ xfce_shortcuts_grabber_grab_all (grabber);
-+ }
-+ }
-+ }
-+
- if (xevent->type != KeyPress)
- return GDK_FILTER_CONTINUE;
-
-@@ -450,7 +474,7 @@ xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
-
- gdk_keymap_translate_keyboard_state (keymap, xevent->xkey.keycode,
- modifiers,
-- XkbGroupForCoreState (xevent->xkey.state),
-+ grabber->priv->xkbStateGroup,
- &keyval, NULL, NULL, &consumed);
-
- /* We want Alt + Print to be Alt + Print not SysReq. See bug #7897 */
---
-GitLab
-
-
-From 5d34aac693e160de3d22d1700b89664dcac12394 Mon Sep 17 00:00:00 2001
-From: Jan Ziak <0xe2.0x9a.0x9b@gmail.com>
-Date: Fri, 26 Feb 2021 05:27:16 +0100
-Subject: [PATCH 2/5] shortcuts: Fix a memory leak
-
----
- libxfce4kbd-private/xfce-shortcuts-provider.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/libxfce4kbd-private/xfce-shortcuts-provider.c b/libxfce4kbd-private/xfce-shortcuts-provider.c
-index b7f7a47..83ab6c0 100644
---- libxfce4kbd-private/xfce-shortcuts-provider.c
-+++ libxfce4kbd-private/xfce-shortcuts-provider.c
-@@ -711,6 +711,7 @@ void
- xfce_shortcuts_free (GList *shortcuts)
- {
- g_list_foreach (shortcuts, (GFunc) (void (*)(void)) xfce_shortcut_free, NULL);
-+ g_list_free (shortcuts);
- }
-
-
---
-GitLab
-
-
-From c18f068ab2bd69647af6519e389d76728c1f924e Mon Sep 17 00:00:00 2001
-From: Jan Ziak <0xe2.0x9a.0x9b@gmail.com>
-Date: Fri, 26 Feb 2021 05:57:42 +0100
-Subject: [PATCH 3/5] shortcuts-grabber: Stop search when the first match is
- found
-
----
- libxfce4kbd-private/xfce-shortcuts-grabber.c | 14 ++++++--------
- 1 file changed, 6 insertions(+), 8 deletions(-)
-
-diff --git a/libxfce4kbd-private/xfce-shortcuts-grabber.c b/libxfce4kbd-private/xfce-shortcuts-grabber.c
-index 9df45c3..61f8ef8 100644
---- libxfce4kbd-private/xfce-shortcuts-grabber.c
-+++ libxfce4kbd-private/xfce-shortcuts-grabber.c
-@@ -391,10 +391,9 @@ xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber,
-
- struct EventKeyFindContext
- {
-- XfceShortcutsGrabber *grabber;
-- GdkModifierType modifiers;
-- guint keyval;
-- const gchar *result;
-+ GdkModifierType modifiers;
-+ guint keyval;
-+ const gchar *result;
- };
-
-
-@@ -461,7 +460,6 @@ xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
- if (xevent->type != KeyPress)
- return GDK_FILTER_CONTINUE;
-
-- context.grabber = grabber;
- context.result = NULL;
- timestamp = xevent->xkey.time;
-
-@@ -520,9 +518,9 @@ xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
- TRACE ("Looking for %s", raw_shortcut_name);
- g_free (raw_shortcut_name);
-
-- g_hash_table_foreach (grabber->priv->keys,
-- (GHFunc) (void (*)(void)) find_event_key,
-- &context);
-+ g_hash_table_find (grabber->priv->keys,
-+ (GHRFunc) (void (*)(void)) find_event_key,
-+ &context);
-
- if (G_LIKELY (context.result != NULL))
- /* We had a positive match */
---
-GitLab
-
-
-From 51deff8231b94f040060f663bcdb1c65d090884e Mon Sep 17 00:00:00 2001
-From: Jan Ziak <0xe2.0x9a.0x9b@gmail.com>
-Date: Fri, 26 Feb 2021 06:52:04 +0100
-Subject: [PATCH 4/5] shortcuts-grabber: Redesign shortcut regrabbing (Bug #33)
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This patch hopes to fix shortcut grabbing issues related to keyboard
-layouts while maintaining high performance.
-
-The implementation uses a new hash-table for tracking the keycodes grabbed
-from the X server. The grabbed X11/Xorg keys are reference counted:
-X11 XGrabKey() is called once per a keycode+modifiers combination and
-X11 XUngrabKey() is called when the reference count of the combination
-drops to zero. It is common for the reference counts to, for example,
-reach the value of 4 if the user is using 4 keyboard layouts, in which
-case the new implementation will use a single XGrabKey() call compared
-to 4 such calls in previous implementations.
-
-The grab_all() function has been removed and has been replaced by an
-optimized regrab_all() function which is more efficient than the sequence
-ungrab_all()+grab_all().
-
-Tested keyboard layouts:
- - English
- - English (Colemak)
- - French (BÉPO)
- - Slovak (QWERTY)
-
-Test environments:
- - Arch Linux (FR-BÉPO)
- - FreeBSD (basic testing)
- - Gentoo Linux (EN, EN-Colemak, SK-QWERTY)
- - Xubuntu (basic testing)
-
-Closes: https://gitlab.xfce.org/xfce/libxfce4ui/-/issues/33
----
- libxfce4kbd-private/xfce-shortcuts-grabber.c | 598 ++++++++++++++-----
- 1 file changed, 449 insertions(+), 149 deletions(-)
-
-diff --git a/libxfce4kbd-private/xfce-shortcuts-grabber.c b/libxfce4kbd-private/xfce-shortcuts-grabber.c
-index 61f8ef8..1de5929 100644
---- libxfce4kbd-private/xfce-shortcuts-grabber.c
-+++ libxfce4kbd-private/xfce-shortcuts-grabber.c
-@@ -54,11 +54,13 @@ static void xfce_shortcuts_grabber_constructed (GObject
- static void xfce_shortcuts_grabber_finalize (GObject *object);
- static void xfce_shortcuts_grabber_keys_changed (GdkKeymap *keymap,
- XfceShortcutsGrabber *grabber);
--static void xfce_shortcuts_grabber_grab_all (XfceShortcutsGrabber *grabber);
-+static void xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber);
- static void xfce_shortcuts_grabber_ungrab_all (XfceShortcutsGrabber *grabber);
- static void xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber,
-+ XfceKey *key);
-+static void xfce_shortcuts_grabber_ungrab (XfceShortcutsGrabber *grabber,
- XfceKey *key,
-- gboolean grab);
-+ gboolean trace);
- static GdkFilterReturn xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
- GdkEvent *event,
- gpointer data);
-@@ -67,25 +69,37 @@ static GdkFilterReturn xfce_shortcuts_grabber_event_filter (GdkXEvent
-
- struct _XfceShortcutsGrabberPrivate
- {
-+ /* Maps a shortcut string to a pointer to XfceKey */
- GHashTable *keys;
-- gint xkbEventType, xkbStateGroup;
--};
-
--typedef enum
--{
-- UNDEFINED_GRAB_STATE = 0, /* Initial value after g_new0(XfceKey) */
-- NOT_GRABBED,
-- GRABBED,
--} XfceKeyGrabState;
-+ /* Maps an XfceXGrab to a reference count.
-+ * The reference count tracks the number of shortcuts that grab the XfceXGrab. */
-+ GHashTable *grabbed_keycodes;
-+
-+ gint xkbEventType, xkbStateGroup;
-+};
-
- struct _XfceKey
- {
- guint keyval;
-- guint modifiers;
-- GArray *keycodes;
-- XfceKeyGrabState grab_state;
-+ GdkModifierType modifiers;
-+
-+ /* Information about how the key has been grabbed */
-+ guint n_keys; /* Equals 0 if the key isn't grabbed */
-+ GdkKeymapKey *keys;
-+ GdkModifierType non_virtual_modifiers;
-+ guint numlock_modifier;
- };
-
-+typedef struct
-+{
-+ guint keycode;
-+ GdkModifierType non_virtual_modifiers;
-+ guint numlock_modifier;
-+} XfceXGrab;
-+
-+typedef guint XfceXGrabRefcount;
-+
-
-
- G_DEFINE_TYPE (XfceShortcutsGrabber, xfce_shortcuts_grabber, G_TYPE_OBJECT)
-@@ -117,6 +131,45 @@ xfce_shortcuts_grabber_class_init (XfceShortcutsGrabberClass *klass)
-
-
-
-+static void
-+free_key (gpointer data)
-+{
-+ XfceKey *key = data;
-+ g_free (key->keys);
-+ g_free (key);
-+}
-+
-+static gboolean
-+xgrab_equal (gconstpointer data1, gconstpointer data2)
-+{
-+ const XfceXGrab *a = data1;
-+ const XfceXGrab *b = data2;
-+
-+ if (a == b)
-+ return TRUE;
-+
-+ return a->keycode == b->keycode &&
-+ a->non_virtual_modifiers == b->non_virtual_modifiers &&
-+ a->numlock_modifier == b->numlock_modifier;
-+}
-+
-+static void
-+xgrab_free (gpointer data)
-+{
-+ XfceXGrab *g = data;
-+ g_free (g);
-+}
-+
-+static guint
-+xgrab_hash (gconstpointer data)
-+{
-+ const XfceXGrab *g = data;
-+ return g->keycode ^ g->non_virtual_modifiers ^ g->numlock_modifier;
-+}
-+
-+
-+
-+
- static void
- xfce_shortcuts_grabber_init (XfceShortcutsGrabber *grabber)
- {
-@@ -124,7 +177,8 @@ xfce_shortcuts_grabber_init (XfceShortcutsGrabber *grabber)
- GdkKeymap *keymap;
-
- grabber->priv = XFCE_SHORTCUTS_GRABBER_GET_PRIVATE (grabber);
-- grabber->priv->keys = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
-+ grabber->priv->keys = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_key);
-+ grabber->priv->grabbed_keycodes = g_hash_table_new_full (xgrab_hash, xgrab_equal, xgrab_free, g_free);
-
- /* Workaround: Make sure modmap is up to date
- * There is possibly a bug in GTK+ where virtual modifiers are not
-@@ -173,6 +227,7 @@ xfce_shortcuts_grabber_finalize (GObject *object)
-
- xfce_shortcuts_grabber_ungrab_all (grabber);
- g_hash_table_unref (grabber->priv->keys);
-+ g_hash_table_unref (grabber->priv->grabbed_keycodes);
-
- (*G_OBJECT_CLASS (xfce_shortcuts_grabber_parent_class)->finalize) (object);
- }
-@@ -187,29 +242,73 @@ xfce_shortcuts_grabber_keys_changed (GdkKeymap *keymap,
-
- TRACE ("Keys changed, regrabbing");
-
-- xfce_shortcuts_grabber_grab_all (grabber);
-+ xfce_shortcuts_grabber_regrab_all (grabber);
- }
-
-
-
- static gboolean
--grab_key (const gchar *shortcut,
-- XfceKey *key,
-- XfceShortcutsGrabber *grabber)
-+xfce_shortcuts_grabber_xgrab (XfceXGrab g, gboolean grab)
- {
-- xfce_shortcuts_grabber_grab (grabber, key, TRUE);
-- return FALSE;
--}
-+ GdkDisplay *display = gdk_display_get_default ();
-+ Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-+ Window root_window;
-+ guint k;
-+ gboolean success = TRUE;
-+
-+ /* Ignorable modifiers */
-+ const guint mod_masks [] = {
-+ 0,
-+ GDK_MOD2_MASK,
-+ g.numlock_modifier | GDK_MOD2_MASK,
-+ GDK_LOCK_MASK,
-+ g.numlock_modifier | GDK_LOCK_MASK,
-+ GDK_MOD5_MASK,
-+ g.numlock_modifier | GDK_MOD5_MASK,
-+ GDK_MOD2_MASK | GDK_LOCK_MASK,
-+ g.numlock_modifier | GDK_MOD2_MASK | GDK_LOCK_MASK,
-+ GDK_MOD2_MASK | GDK_MOD5_MASK,
-+ g.numlock_modifier | GDK_MOD2_MASK | GDK_MOD5_MASK,
-+ GDK_LOCK_MASK | GDK_MOD5_MASK,
-+ g.numlock_modifier | GDK_LOCK_MASK | GDK_MOD5_MASK,
-+ GDK_MOD2_MASK | GDK_LOCK_MASK | GDK_MOD5_MASK,
-+ g.numlock_modifier | GDK_MOD2_MASK | GDK_LOCK_MASK | GDK_MOD5_MASK,
-+ };
-+
-+ /* Retrieve the root window of the screen */
-+ root_window = GDK_WINDOW_XID (gdk_screen_get_root_window (gdk_display_get_default_screen (display)));
-+
-+ TRACE ("%s keycode %u, non_virtual_modifiers 0x%x",
-+ grab ? "Grabbing" : "Ungrabbing",
-+ g.keycode, g.non_virtual_modifiers);
-
-+ gdk_x11_display_error_trap_push (display);
-
-+ for (k = 0; k < G_N_ELEMENTS (mod_masks); k++)
-+ {
-+ /* Take ignorable modifiers into account when grabbing/ungrabbing */
-+ if (grab)
-+ XGrabKey (xdisplay,
-+ g.keycode,
-+ g.non_virtual_modifiers | mod_masks [k],
-+ root_window,
-+ False, GrabModeAsync, GrabModeAsync);
-+ else
-+ XUngrabKey (xdisplay,
-+ g.keycode,
-+ g.non_virtual_modifiers | mod_masks [k],
-+ root_window);
-+ }
-
--static void
--xfce_shortcuts_grabber_grab_all (XfceShortcutsGrabber *grabber)
--{
-- g_return_if_fail (XFCE_IS_SHORTCUTS_GRABBER (grabber));
-- g_hash_table_foreach (grabber->priv->keys,
-- (GHFunc) (void (*)(void)) grab_key,
-- grabber);
-+ gdk_display_flush (display);
-+ if (gdk_x11_display_error_trap_pop (display))
-+ {
-+ g_warning ("Failed to %s keycode %u",
-+ grab ? "grab" : "ungrab", g.keycode);
-+ success = FALSE;
-+ }
-+
-+ return success;
- }
-
-
-@@ -219,7 +318,7 @@ ungrab_key (const gchar *shortcut,
- XfceKey *key,
- XfceShortcutsGrabber *grabber)
- {
-- xfce_shortcuts_grabber_grab (grabber, key, FALSE);
-+ xfce_shortcuts_grabber_ungrab (grabber, key, TRUE);
- return FALSE;
- }
-
-@@ -236,155 +335,358 @@ xfce_shortcuts_grabber_ungrab_all (XfceShortcutsGrabber *grabber)
-
-
-
-+static gboolean
-+get_entries_for_keyval (GdkKeymap *keymap,
-+ guint keyval,
-+ GdkKeymapKey **keys,
-+ gint *n_keys)
-+{
-+ /* Get all keys generating keyval */
-+ if (!gdk_keymap_get_entries_for_keyval (keymap, keyval, keys, n_keys))
-+ {
-+ TRACE ("Got no keys for keyval");
-+ return FALSE;
-+ }
-+
-+ if (G_UNLIKELY (*n_keys <= 0))
-+ {
-+ g_free (*keys);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+
-+
-+static gboolean
-+map_virtual_modifiers (GdkKeymap *keymap,
-+ GdkModifierType virtual_modifiers,
-+ GdkModifierType *non_virtual_modifiers)
-+{
-+ /* Map virtual modifiers to non-virtual modifiers */
-+ GdkModifierType non_virtual = virtual_modifiers;
-+ if (!gdk_keymap_map_virtual_modifiers (keymap, &non_virtual))
-+ return FALSE;
-+
-+ if (non_virtual == virtual_modifiers &&
-+ (GDK_SUPER_MASK | GDK_HYPER_MASK | GDK_META_MASK) & non_virtual)
-+ {
-+ TRACE ("Failed to map virtual modifiers");
-+ return FALSE;
-+ }
-+
-+ *non_virtual_modifiers = non_virtual;
-+ return TRUE;
-+}
-+
-+
-+
-+
- static void
--xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber,
-- XfceKey *key,
-- gboolean grab)
-+xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
- {
-- GdkModifierType numlock_modifier;
-- GdkKeymapKey *keys;
-- GdkDisplay *display;
-- GdkKeymap *keymap;
-- gchar *shortcut_name;
-- guint modifiers;
-- guint k;
-- gint i;
-- gint j;
-- gint n_keys;
-- gint screens;
-+ GdkDisplay *display;
-+ Display *xdisplay;
-+ GdkKeymap *keymap;
-+ guint numlock_modifier;
-+ GHashTable *grabbed_keycodes;
-+ GHashTableIter iter;
-+ gpointer hash_value;
-+ guint n_already_grabbed = 0;
-+ guint n_regrab = 0;
-+ XfceKey **regrab; /* list of keys to re-grab */
-+ guint i;
-
- g_return_if_fail (XFCE_IS_SHORTCUTS_GRABBER (grabber));
-- g_return_if_fail (key != NULL);
--
-- if (key->grab_state == (grab ? GRABBED : NOT_GRABBED)) {
-- TRACE (grab ? "Key already grabbed" : "Key already ungrabbed");
-- return;
-- }
-- key->grab_state = UNDEFINED_GRAB_STATE;
-
- display = gdk_display_get_default ();
-- screens = 1;
-+ xdisplay = GDK_DISPLAY_XDISPLAY (display);
- keymap = gdk_keymap_get_for_display (display);
-+ numlock_modifier = XkbKeysymToModifiers (xdisplay, GDK_KEY_Num_Lock);
-+ grabbed_keycodes = grabber->priv->grabbed_keycodes;
-+
-+ regrab = g_malloc (g_hash_table_size (grabber->priv->keys) * sizeof (*regrab));
-+
-+ /* Phase 1: Ungrab all keys that need to be re-grabbed
-+ * and collect them into the 'regrab' list */
-+ g_hash_table_iter_init (&iter, grabber->priv->keys);
-+ while (g_hash_table_iter_next (&iter, NULL, &hash_value))
-+ {
-+ XfceKey *const key = hash_value;
-+ GdkKeymapKey *keys;
-+ GdkModifierType non_virtual_modifiers;
-+ gint n_keys;
-+ gboolean already_grabbed;
-+
-+ if (!map_virtual_modifiers (keymap, key->modifiers, &non_virtual_modifiers))
-+ continue;
-+ if (!get_entries_for_keyval (keymap, key->keyval, &keys, &n_keys))
-+ continue;
-+
-+ already_grabbed = TRUE;
-+ if (key->n_keys == (guint) n_keys &&
-+ key->non_virtual_modifiers == non_virtual_modifiers &&
-+ key->numlock_modifier == numlock_modifier)
-+ {
-+ gint j;
-+ for (j = 0; j < n_keys; j++)
-+ if (memcmp (&key->keys[j], &keys[j], sizeof(*keys)) != 0)
-+ {
-+ already_grabbed = FALSE;
-+ break;
-+ }
-+ }
-+ else
-+ already_grabbed = FALSE;
-+
-+ if (already_grabbed)
-+ {
-+ n_already_grabbed++;
-+ g_free (keys);
-+ }
-+ else
-+ {
-+ /* Undo current X11 grabs of the key */
-+ xfce_shortcuts_grabber_ungrab (grabber, key, FALSE);
-+
-+ /* Set key->keys to the keycodes that need to be grabbed in phase 2 */
-+ if (G_UNLIKELY (key->keys))
-+ {
-+ g_free (key->keys);
-+ key->keys = NULL;
-+ }
-+ key->n_keys = n_keys;
-+ if (n_keys != 0)
-+ key->keys = keys;
-+ else
-+ g_free (keys);
-+ key->non_virtual_modifiers = non_virtual_modifiers;
-+ key->numlock_modifier = numlock_modifier;
-+
-+ /* Remember to grab the key in phase 2 */
-+ regrab[n_regrab++] = key;
-+ }
-+ }
-
-- /* Map virtual modifiers to non-virtual modifiers */
-- modifiers = key->modifiers;
-- gdk_keymap_map_virtual_modifiers (keymap, &modifiers);
-+ TRACE ("n_already_grabbed=%u, n_regrab=%u", n_already_grabbed, n_regrab);
-+
-+ /* Phase 2: Grab all keys that have been stored in the 'regrab' list */
-+ for (i = 0; i < n_regrab; i++)
-+ {
-+ XfceKey *const key = regrab[i];
-+ guint j;
-+
-+#ifdef DEBUG_TRACE
-+ gchar *shortcut_name = gtk_accelerator_name (key->keyval, key->non_virtual_modifiers);
-+ TRACE (key->n_keys==0 ? "Grabbing %s" : "Regrabbing %s", shortcut_name);
-+ TRACE (" key->keyval: %d", key->keyval);
-+ TRACE (" key->modifiers: 0x%x", key->modifiers);
-+ TRACE (" key->non_virtual_modifiers: 0x%x", key->non_virtual_modifiers);
-+ TRACE (" key->n_keys: %d", key->n_keys);
-+ g_free (shortcut_name);
-+ shortcut_name = NULL;
-+#endif
-
-- /* Debugging information */
-- shortcut_name = gtk_accelerator_name (key->keyval, modifiers);
-+ /* Grab all hardware keys generating keyval */
-+ for (j = 0; j < key->n_keys;)
-+ {
-+ XfceXGrab g;
-+ gpointer refcount;
-+
-+ g.keycode = key->keys[j].keycode;
-+ g.non_virtual_modifiers = key->non_virtual_modifiers;
-+ g.numlock_modifier = key->numlock_modifier;
-+ if (!g_hash_table_lookup_extended (grabbed_keycodes, &g, NULL, &refcount))
-+ {
-+ if (xfce_shortcuts_grabber_xgrab (g, TRUE))
-+ {
-+ XfceXGrab *g1 = g_new (XfceXGrab, 1);
-+ XfceXGrabRefcount *refcount1 = g_new (XfceXGrabRefcount, 1);
-+ *g1 = g;
-+ *refcount1 = 1;
-+ g_hash_table_insert (grabbed_keycodes, g1, refcount1);
-+ j++;
-+ }
-+ else
-+ /* Failed to grab key->keys[j], remove it from key->keys */
-+ key->keys[j] = key->keys[--key->n_keys];
-+ }
-+ else
-+ {
-+ // 'g' has already been grabbed, increment its refcount only
-+ XfceXGrabRefcount *refcount1 = refcount;
-+ (*refcount1)++;
-+ TRACE ("keycode %u, non_virtual_modifiers 0x%x: ++refcount = %u",
-+ g.keycode, g.non_virtual_modifiers, *refcount1);
-+ j++;
-+ }
-+ }
-+
-+ if (key->n_keys == 0 && key->keys != NULL)
-+ {
-+ g_free (key->keys);
-+ key->keys = NULL;
-+ }
-+ }
-
-- TRACE (grab ? "Grabbing %s" : "Ungrabbing %s", shortcut_name);
-- TRACE ("Keyval: %d", key->keyval);
-- TRACE ("Modifiers: 0x%x", modifiers);
-+ g_free (regrab);
-+}
-
-+
-+
-+static void
-+xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber, XfceKey *key)
-+{
-+ GdkDisplay *display;
-+ Display *xdisplay;
-+ GdkKeymap *keymap;
-+ guint numlock_modifier;
-+ GHashTable *grabbed_keycodes;
-+ GdkKeymapKey *keys;
-+ GdkModifierType non_virtual_modifiers;
-+ gint i, n_keys;
-+#ifdef DEBUG_TRACE
-+ gchar *shortcut_name;
-+#endif
-+
-+ display = gdk_display_get_default ();
-+ xdisplay = GDK_DISPLAY_XDISPLAY (display);
-+ keymap = gdk_keymap_get_for_display (display);
-+ numlock_modifier = XkbKeysymToModifiers (xdisplay, GDK_KEY_Num_Lock);
-+ grabbed_keycodes = grabber->priv->grabbed_keycodes;
-+
-+ if (!map_virtual_modifiers (keymap, key->modifiers, &non_virtual_modifiers))
-+ return;
-+ if (!get_entries_for_keyval (keymap, key->keyval, &keys, &n_keys))
-+ return;
-+
-+#ifdef DEBUG_TRACE
-+ shortcut_name = gtk_accelerator_name (key->keyval, non_virtual_modifiers);
-+ TRACE (key->n_keys==0 ? "Grabbing %s" : "Regrabbing %s", shortcut_name);
-+ TRACE (" key->keyval: %d", key->keyval);
-+ TRACE (" key->modifiers: 0x%x", key->modifiers);
-+ TRACE (" non_virtual_modifiers: 0x%x", non_virtual_modifiers);
-+ TRACE (" n_keys: %d", n_keys);
- g_free (shortcut_name);
-+ shortcut_name = NULL;
-+#endif
-
-- if (modifiers == key->modifiers &&
-- (GDK_SUPER_MASK | GDK_HYPER_MASK | GDK_META_MASK) & modifiers)
-+ /* Undo old grabs (just in case there are some old grabs) */
-+ if (G_UNLIKELY (key->n_keys != 0))
- {
-- TRACE ("Failed to map virtual modifiers");
-- return;
-+ g_warning ("keyval %u already grabbed", key->keyval);
-+ xfce_shortcuts_grabber_ungrab (grabber, key, TRUE);
- }
-
-- /* Get all keys generating keyval */
-- if (!gdk_keymap_get_entries_for_keyval (keymap,key->keyval,
-- &keys, &n_keys))
-+ /* Grab all hardware keys generating keyval */
-+ for (i = 0; i < n_keys;)
- {
-- TRACE ("Got no keys for keyval");
-- return;
-+ XfceXGrab g;
-+ gpointer refcount;
-+
-+ g.keycode = keys[i].keycode;
-+ g.non_virtual_modifiers = non_virtual_modifiers;
-+ g.numlock_modifier = numlock_modifier;
-+ if (!g_hash_table_lookup_extended (grabbed_keycodes, &g, NULL, &refcount))
-+ {
-+ if (xfce_shortcuts_grabber_xgrab (g, TRUE))
-+ {
-+ XfceXGrab *g1 = g_new (XfceXGrab, 1);
-+ XfceXGrabRefcount *refcount1 = g_new (XfceXGrabRefcount, 1);
-+ *g1 = g;
-+ *refcount1 = 1;
-+ g_hash_table_insert (grabbed_keycodes, g1, refcount1);
-+ TRACE ("[group %d] keycode %u, non_virtual_modifiers 0x%x: refcount := %u",
-+ keys[i].group, g.keycode, g.non_virtual_modifiers, *refcount1);
-+ i++;
-+ }
-+ else
-+ /* Failed to grab keys[i], remove it from keys */
-+ keys[i] = keys[--n_keys];
-+ }
-+ else
-+ {
-+ // 'g' has already been grabbed, increment its refcount only
-+ XfceXGrabRefcount *refcount1 = refcount;
-+ (*refcount1)++;
-+ TRACE ("[group %d] keycode %u, non_virtual_modifiers 0x%x: ++refcount = %u",
-+ keys[i].group, g.keycode, g.non_virtual_modifiers, *refcount1);
-+ i++;
-+ }
- }
-
-- if (n_keys == 0)
-- {
-- g_free (keys);
-+ /* Set key->keys to the list of keys that been succesfully grabbed */
-+ g_free (key->keys);
-+ key->keys = NULL;
-+ key->n_keys = n_keys;
-+ if (n_keys != 0)
-+ key->keys = keys;
-+ else
-+ g_free (keys);
-+ key->non_virtual_modifiers = non_virtual_modifiers;
-+ key->numlock_modifier = numlock_modifier;
-+}
-
-- TRACE ("Got 0 keys for keyval");
-- return;
-- }
-+static void
-+xfce_shortcuts_grabber_ungrab (XfceShortcutsGrabber *grabber, XfceKey *key,
-+ gboolean trace)
-+{
-+ GHashTable *grabbed_keycodes;
-+ guint i;
-
-- numlock_modifier =
-- XkbKeysymToModifiers (GDK_DISPLAY_XDISPLAY (display), GDK_KEY_Num_Lock);
-+ grabbed_keycodes = grabber->priv->grabbed_keycodes;
-
-- key->grab_state = (grab ? GRABBED : NOT_GRABBED);
-- for (i = 0; i < n_keys; i ++)
-+ if (trace)
- {
-- /* Grab all hardware keys generating keyval */
-+ gchar *shortcut_name = gtk_accelerator_name (key->keyval, key->non_virtual_modifiers);
-+ TRACE ("Ungrabbing %s", shortcut_name);
-+ TRACE (" key->keyval: %d", key->keyval);
-+ TRACE (" key->modifiers: 0x%x", key->modifiers);
-+ TRACE (" key->non_virtual_modifiers: 0x%x", key->non_virtual_modifiers);
-+ TRACE (" key->n_keys: %u", key->n_keys);
-+ g_free (shortcut_name);
-+ }
-
-- TRACE ("Keycode: %d", keys[i].keycode);
-+ for (i = 0; i < key->n_keys; i++)
-+ {
-+ XfceXGrab g;
-+ gpointer refcount;
-
-- for (j = 0; j < screens; j++)
-+ g.keycode = key->keys[i].keycode;
-+ g.non_virtual_modifiers = key->non_virtual_modifiers;
-+ g.numlock_modifier = key->numlock_modifier;
-+ if (G_LIKELY (g_hash_table_lookup_extended (grabbed_keycodes, &g, NULL, &refcount)))
- {
-- /* Do the grab on all screens */
-- Window root_window;
--
-- /* Ignorable modifiers */
-- guint mod_masks [] = {
-- 0,
-- GDK_MOD2_MASK,
-- numlock_modifier | GDK_MOD2_MASK,
-- GDK_LOCK_MASK,
-- numlock_modifier | GDK_LOCK_MASK,
-- GDK_MOD5_MASK,
-- numlock_modifier | GDK_MOD5_MASK,
-- GDK_MOD2_MASK | GDK_LOCK_MASK,
-- numlock_modifier | GDK_MOD2_MASK | GDK_LOCK_MASK,
-- GDK_MOD2_MASK | GDK_MOD5_MASK,
-- numlock_modifier | GDK_MOD2_MASK | GDK_MOD5_MASK,
-- GDK_LOCK_MASK | GDK_MOD5_MASK,
-- numlock_modifier | GDK_LOCK_MASK | GDK_MOD5_MASK,
-- GDK_MOD2_MASK | GDK_LOCK_MASK | GDK_MOD5_MASK,
-- numlock_modifier | GDK_MOD2_MASK | GDK_LOCK_MASK | GDK_MOD5_MASK,
-- };
--
-- /* Retrieve the root window of the screen */
-- root_window = GDK_WINDOW_XID (gdk_screen_get_root_window (gdk_display_get_default_screen (display)));
-- gdk_x11_display_error_trap_push (display);
--
-- for (k = 0; k < G_N_ELEMENTS (mod_masks); k++)
-+ XfceXGrabRefcount *refcount1 = refcount;
-+ if (G_LIKELY (*refcount1 != 0))
- {
-- /* Take ignorable modifiers into account when grabbing */
-- if (grab)
-- XGrabKey (GDK_DISPLAY_XDISPLAY (display),
-- keys[i].keycode,
-- modifiers | mod_masks [k],
-- root_window,
-- False,
-- GrabModeAsync,
-- GrabModeAsync);
-- else
-+ (*refcount1)--;
-+ if (trace)
-+ TRACE ("[group %d] keycode %u, non_virtual_modifiers 0x%x: --refcount = %u",
-+ key->keys[i].group, g.keycode, g.non_virtual_modifiers, *refcount1);
-+ if(*refcount1 == 0)
- {
-- if (i >= (gint) key->keycodes->len)
-- break;
-- XUngrabKey (GDK_DISPLAY_XDISPLAY (display),
-- g_array_index (key->keycodes, guint, i),
-- modifiers | mod_masks [k],
-- root_window);
-+ xfce_shortcuts_grabber_xgrab (g, FALSE);
-+ g_hash_table_remove (grabbed_keycodes, &g);
- }
- }
--
-- gdk_display_flush (display);
--
-- if (gdk_x11_display_error_trap_pop (display))
-+ else
- {
-- TRACE (grab ? "Failed to grab" : "Failed to ungrab");
-- key->grab_state = UNDEFINED_GRAB_STATE;
-+ g_warning ("corrupted refcount");
- }
- }
-- /* Remember the old keycode, as we need it to ungrab. */
-- if (grab)
-- g_array_append_val (key->keycodes, keys[i].keycode);
- else
-- g_array_index (key->keycodes, guint, i) = UINT_MAX;
-- }
--
-- /* Cleanup elements containing UINT_MAX from the key->keycodes array */
-- for (i = key->keycodes->len - 1; i >= 0; i --)
-- {
-- if (g_array_index (key->keycodes, guint, i) == UINT_MAX)
-- g_array_remove_index_fast (key->keycodes, i);
-+ {
-+ g_warning ("corrupted hashtable");
-+ }
- }
-
-- g_free (keys);
-+ g_free (key->keys);
-+ key->keys = NULL;
-+ key->n_keys = 0;
-+ key->non_virtual_modifiers = 0;
-+ key->numlock_modifier = 0;
- }
-
-
-@@ -451,8 +753,7 @@ xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
- if (grabber->priv->xkbStateGroup != e->state.group)
- {
- grabber->priv->xkbStateGroup = e->state.group;
-- xfce_shortcuts_grabber_ungrab_all (grabber);
-- xfce_shortcuts_grabber_grab_all (grabber);
-+ xfce_shortcuts_grabber_regrab_all (grabber);
- }
- }
- }
-@@ -553,19 +854,18 @@ xfce_shortcuts_grabber_add (XfceShortcutsGrabber *grabber,
- g_return_if_fail (shortcut != NULL);
-
- key = g_new0 (XfceKey, 1);
-- key->keycodes = g_array_new (FALSE, TRUE, sizeof (guint));
-
- gtk_accelerator_parse (shortcut, &key->keyval, &key->modifiers);
-+ TRACE ("parse %s -> keyval=0x%x, modifiers=0x%x", shortcut, key->keyval, key->modifiers);
-
- if (G_LIKELY (key->keyval != 0))
- {
-- xfce_shortcuts_grabber_grab (grabber, key, TRUE);
-+ xfce_shortcuts_grabber_grab (grabber, key);
- g_hash_table_insert (grabber->priv->keys, g_strdup (shortcut), key);
- }
- else
- {
-- g_array_free (key->keycodes, TRUE);
-- g_free (key);
-+ free_key (key);
- }
- }
-
-@@ -584,7 +884,7 @@ xfce_shortcuts_grabber_remove (XfceShortcutsGrabber *grabber,
-
- if (G_LIKELY (key != NULL))
- {
-- xfce_shortcuts_grabber_grab (grabber, key, FALSE);
-+ xfce_shortcuts_grabber_ungrab (grabber, key, TRUE);
- g_hash_table_remove (grabber->priv->keys, shortcut);
- }
- }
---
-GitLab
-
-
-From 609b60be1ea7db9140a1d96ad4dccf7d9512b7fd Mon Sep 17 00:00:00 2001
-From: Jan Ziak <0xe2.0x9a.0x9b@gmail.com>
-Date: Sat, 27 Feb 2021 17:34:41 +0100
-Subject: [PATCH 5/5] shortcuts-grabber: Filter grabbing by key group
-
-Closes: https://gitlab.xfce.org/xfce/libxfce4ui/-/issues/33
----
- libxfce4kbd-private/xfce-shortcuts-grabber.c | 162 ++++++++++++-------
- 1 file changed, 106 insertions(+), 56 deletions(-)
-
-diff --git a/libxfce4kbd-private/xfce-shortcuts-grabber.c b/libxfce4kbd-private/xfce-shortcuts-grabber.c
-index 1de5929..4d21e4a 100644
---- libxfce4kbd-private/xfce-shortcuts-grabber.c
-+++ libxfce4kbd-private/xfce-shortcuts-grabber.c
-@@ -59,8 +59,7 @@ static void xfce_shortcuts_grabber_ungrab_all (XfceShortcutsGra
- static void xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber,
- XfceKey *key);
- static void xfce_shortcuts_grabber_ungrab (XfceShortcutsGrabber *grabber,
-- XfceKey *key,
-- gboolean trace);
-+ XfceKey *key);
- static GdkFilterReturn xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
- GdkEvent *event,
- gpointer data);
-@@ -318,7 +317,7 @@ ungrab_key (const gchar *shortcut,
- XfceKey *key,
- XfceShortcutsGrabber *grabber)
- {
-- xfce_shortcuts_grabber_ungrab (grabber, key, TRUE);
-+ xfce_shortcuts_grabber_ungrab (grabber, key);
- return FALSE;
- }
-
-@@ -337,23 +336,67 @@ xfce_shortcuts_grabber_ungrab_all (XfceShortcutsGrabber *grabber)
-
- static gboolean
- get_entries_for_keyval (GdkKeymap *keymap,
-+ gint group,
- guint keyval,
- GdkKeymapKey **keys,
-- gint *n_keys)
-+ guint *n_keys)
- {
-- /* Get all keys generating keyval */
-- if (!gdk_keymap_get_entries_for_keyval (keymap, keyval, keys, n_keys))
-+ GdkKeymapKey *keys1;
-+ gint n_keys1;
-+
-+ *keys = NULL;
-+ *n_keys = 0;
-+
-+ /* Get all keys generating keyval */
-+ if (!gdk_keymap_get_entries_for_keyval (keymap, keyval, &keys1, &n_keys1))
- {
- TRACE ("Got no keys for keyval");
- return FALSE;
- }
-
-- if (G_UNLIKELY (*n_keys <= 0))
-+ if (G_UNLIKELY (n_keys1 <= 0))
- {
-- g_free (*keys);
-+ g_free (keys1);
- return FALSE;
- }
-
-+ /* Filter keys by group */
-+ {
-+ gboolean group0_only;
-+ gint i, n_matches;
-+
-+ /* For keys such as F12:
-+ * keys1[i].group is always 0 (even if n_keys1 >= 2)
-+ * and thus n_matches will be zero if group != 0 */
-+
-+ group0_only = TRUE;
-+ n_matches = 0;
-+ for (i = 0; i < n_keys1; i++)
-+ {
-+ group0_only &= (keys1[i].group == 0) ? TRUE : FALSE;
-+ if (keys1[i].group == group)
-+ n_matches++;
-+ }
-+
-+ if (!group0_only || n_matches != 0)
-+ {
-+ /* Remove keys that do not match the group*/
-+ for (i = 0; i < n_keys1;)
-+ if (keys1[i].group == group)
-+ i++;
-+ else
-+ keys1[i] = keys1[--n_keys1];
-+ }
-+ }
-+
-+ if (G_UNLIKELY (n_keys1 == 0))
-+ {
-+ g_free (keys1);
-+ keys1 = NULL;
-+ }
-+
-+ *keys = keys1;
-+ *n_keys = n_keys1;
- return TRUE;
- }
-
-@@ -397,6 +440,7 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
- guint n_regrab = 0;
- XfceKey **regrab; /* list of keys to re-grab */
- guint i;
-+ gint group;
-
- g_return_if_fail (XFCE_IS_SHORTCUTS_GRABBER (grabber));
-
-@@ -405,6 +449,9 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
- keymap = gdk_keymap_get_for_display (display);
- numlock_modifier = XkbKeysymToModifiers (xdisplay, GDK_KEY_Num_Lock);
- grabbed_keycodes = grabber->priv->grabbed_keycodes;
-+ group = grabber->priv->xkbStateGroup;
-+ if (G_UNLIKELY (group == -1))
-+ group = 0;
-
- regrab = g_malloc (g_hash_table_size (grabber->priv->keys) * sizeof (*regrab));
-
-@@ -416,20 +463,20 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
- XfceKey *const key = hash_value;
- GdkKeymapKey *keys;
- GdkModifierType non_virtual_modifiers;
-- gint n_keys;
-+ guint n_keys;
- gboolean already_grabbed;
-
- if (!map_virtual_modifiers (keymap, key->modifiers, &non_virtual_modifiers))
- continue;
-- if (!get_entries_for_keyval (keymap, key->keyval, &keys, &n_keys))
-+ if (!get_entries_for_keyval (keymap, group, key->keyval, &keys, &n_keys))
- continue;
-
- already_grabbed = TRUE;
-- if (key->n_keys == (guint) n_keys &&
-+ if (key->n_keys == n_keys &&
- key->non_virtual_modifiers == non_virtual_modifiers &&
- key->numlock_modifier == numlock_modifier)
- {
-- gint j;
-+ guint j;
- for (j = 0; j < n_keys; j++)
- if (memcmp (&key->keys[j], &keys[j], sizeof(*keys)) != 0)
- {
-@@ -448,7 +495,8 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
- else
- {
- /* Undo current X11 grabs of the key */
-- xfce_shortcuts_grabber_ungrab (grabber, key, FALSE);
-+ if (key->n_keys != 0)
-+ xfce_shortcuts_grabber_ungrab (grabber, key);
-
- /* Set key->keys to the keycodes that need to be grabbed in phase 2 */
- if (G_UNLIKELY (key->keys))
-@@ -465,7 +513,8 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
- key->numlock_modifier = numlock_modifier;
-
- /* Remember to grab the key in phase 2 */
-- regrab[n_regrab++] = key;
-+ if (n_keys != 0)
-+ regrab[n_regrab++] = key;
- }
- }
-
-@@ -478,14 +527,15 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
- guint j;
-
- #ifdef DEBUG_TRACE
-- gchar *shortcut_name = gtk_accelerator_name (key->keyval, key->non_virtual_modifiers);
-- TRACE (key->n_keys==0 ? "Grabbing %s" : "Regrabbing %s", shortcut_name);
-- TRACE (" key->keyval: %d", key->keyval);
-- TRACE (" key->modifiers: 0x%x", key->modifiers);
-- TRACE (" key->non_virtual_modifiers: 0x%x", key->non_virtual_modifiers);
-- TRACE (" key->n_keys: %d", key->n_keys);
-- g_free (shortcut_name);
-- shortcut_name = NULL;
-+ {
-+ gchar *shortcut_name = gtk_accelerator_name (key->keyval, key->non_virtual_modifiers);
-+ TRACE (key->n_keys==0 ? "Grabbing %s" : "Regrabbing %s", shortcut_name);
-+ TRACE (" key->keyval: %d", key->keyval);
-+ TRACE (" key->modifiers: 0x%x", key->modifiers);
-+ TRACE (" key->non_virtual_modifiers: 0x%x", key->non_virtual_modifiers);
-+ TRACE (" key->n_keys: %u", key->n_keys);
-+ g_free (shortcut_name);
-+ }
- #endif
-
- /* Grab all hardware keys generating keyval */
-@@ -545,38 +595,40 @@ xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber, XfceKey *key)
- GHashTable *grabbed_keycodes;
- GdkKeymapKey *keys;
- GdkModifierType non_virtual_modifiers;
-- gint i, n_keys;
--#ifdef DEBUG_TRACE
-- gchar *shortcut_name;
--#endif
-+ guint i, n_keys;
-+ gint group;
-
- display = gdk_display_get_default ();
- xdisplay = GDK_DISPLAY_XDISPLAY (display);
- keymap = gdk_keymap_get_for_display (display);
- numlock_modifier = XkbKeysymToModifiers (xdisplay, GDK_KEY_Num_Lock);
- grabbed_keycodes = grabber->priv->grabbed_keycodes;
-+ group = grabber->priv->xkbStateGroup;
-+ if (G_UNLIKELY (group == -1))
-+ group = 0;
-
- if (!map_virtual_modifiers (keymap, key->modifiers, &non_virtual_modifiers))
- return;
-- if (!get_entries_for_keyval (keymap, key->keyval, &keys, &n_keys))
-+ if (!get_entries_for_keyval (keymap, group, key->keyval, &keys, &n_keys))
- return;
-
- #ifdef DEBUG_TRACE
-- shortcut_name = gtk_accelerator_name (key->keyval, non_virtual_modifiers);
-- TRACE (key->n_keys==0 ? "Grabbing %s" : "Regrabbing %s", shortcut_name);
-- TRACE (" key->keyval: %d", key->keyval);
-- TRACE (" key->modifiers: 0x%x", key->modifiers);
-- TRACE (" non_virtual_modifiers: 0x%x", non_virtual_modifiers);
-- TRACE (" n_keys: %d", n_keys);
-- g_free (shortcut_name);
-- shortcut_name = NULL;
-+ {
-+ char *shortcut_name = gtk_accelerator_name (key->keyval, non_virtual_modifiers);
-+ TRACE (key->n_keys==0 ? "Grabbing %s" : "Regrabbing %s", shortcut_name);
-+ TRACE (" key->keyval: %d", key->keyval);
-+ TRACE (" key->modifiers: 0x%x", key->modifiers);
-+ TRACE (" non_virtual_modifiers: 0x%x", non_virtual_modifiers);
-+ TRACE (" n_keys: %u", n_keys);
-+ g_free (shortcut_name);
-+ }
- #endif
-
- /* Undo old grabs (just in case there are some old grabs) */
- if (G_UNLIKELY (key->n_keys != 0))
- {
- g_warning ("keyval %u already grabbed", key->keyval);
-- xfce_shortcuts_grabber_ungrab (grabber, key, TRUE);
-+ xfce_shortcuts_grabber_ungrab (grabber, key);
- }
-
- /* Grab all hardware keys generating keyval */
-@@ -597,7 +649,7 @@ xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber, XfceKey *key)
- *g1 = g;
- *refcount1 = 1;
- g_hash_table_insert (grabbed_keycodes, g1, refcount1);
-- TRACE ("[group %d] keycode %u, non_virtual_modifiers 0x%x: refcount := %u",
-+ TRACE ("group %d, keycode %u, non_virtual_modifiers 0x%x: refcount := %u",
- keys[i].group, g.keycode, g.non_virtual_modifiers, *refcount1);
- i++;
- }
-@@ -610,7 +662,7 @@ xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber, XfceKey *key)
- // 'g' has already been grabbed, increment its refcount only
- XfceXGrabRefcount *refcount1 = refcount;
- (*refcount1)++;
-- TRACE ("[group %d] keycode %u, non_virtual_modifiers 0x%x: ++refcount = %u",
-+ TRACE ("group %d, keycode %u, non_virtual_modifiers 0x%x: ++refcount = %u",
- keys[i].group, g.keycode, g.non_virtual_modifiers, *refcount1);
- i++;
- }
-@@ -629,24 +681,24 @@ xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber, XfceKey *key)
- }
-
- static void
--xfce_shortcuts_grabber_ungrab (XfceShortcutsGrabber *grabber, XfceKey *key,
-- gboolean trace)
-+xfce_shortcuts_grabber_ungrab (XfceShortcutsGrabber *grabber, XfceKey *key)
- {
- GHashTable *grabbed_keycodes;
- guint i;
-
- grabbed_keycodes = grabber->priv->grabbed_keycodes;
-
-- if (trace)
-- {
-- gchar *shortcut_name = gtk_accelerator_name (key->keyval, key->non_virtual_modifiers);
-- TRACE ("Ungrabbing %s", shortcut_name);
-- TRACE (" key->keyval: %d", key->keyval);
-- TRACE (" key->modifiers: 0x%x", key->modifiers);
-- TRACE (" key->non_virtual_modifiers: 0x%x", key->non_virtual_modifiers);
-- TRACE (" key->n_keys: %u", key->n_keys);
-- g_free (shortcut_name);
-- }
-+#ifdef DEBUG_TRACE
-+ {
-+ gchar *shortcut_name = gtk_accelerator_name (key->keyval, key->non_virtual_modifiers);
-+ TRACE ("Ungrabbing %s", shortcut_name);
-+ TRACE (" key->keyval: %d", key->keyval);
-+ TRACE (" key->modifiers: 0x%x", key->modifiers);
-+ TRACE (" key->non_virtual_modifiers: 0x%x", key->non_virtual_modifiers);
-+ TRACE (" key->n_keys: %u", key->n_keys);
-+ g_free (shortcut_name);
-+ }
-+#endif
-
- for (i = 0; i < key->n_keys; i++)
- {
-@@ -662,9 +714,8 @@ xfce_shortcuts_grabber_ungrab (XfceShortcutsGrabber *grabber, XfceKey *key,
- if (G_LIKELY (*refcount1 != 0))
- {
- (*refcount1)--;
-- if (trace)
-- TRACE ("[group %d] keycode %u, non_virtual_modifiers 0x%x: --refcount = %u",
-- key->keys[i].group, g.keycode, g.non_virtual_modifiers, *refcount1);
-+ TRACE ("group %d, keycode %u, non_virtual_modifiers 0x%x: --refcount = %u",
-+ key->keys[i].group, g.keycode, g.non_virtual_modifiers, *refcount1);
- if(*refcount1 == 0)
- {
- xfce_shortcuts_grabber_xgrab (g, FALSE);
-@@ -746,12 +797,11 @@ xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
- if (xevent->type == grabber->priv->xkbEventType)
- {
- const XkbEvent *e = (const XkbEvent*) xevent;
-- TRACE ("xkb event: any.xkb_type=%d", e->any.xkb_type);
- if (e->any.xkb_type == XkbStateNotify)
- {
-- TRACE ("xkb event: any.xkb_type=XkbStateNotify, state.group=%d", e->state.group);
- if (grabber->priv->xkbStateGroup != e->state.group)
- {
-+ TRACE ("xkb event: any.xkb_type=XkbStateNotify, state.group=%d", e->state.group);
- grabber->priv->xkbStateGroup = e->state.group;
- xfce_shortcuts_grabber_regrab_all (grabber);
- }
-@@ -884,7 +934,7 @@ xfce_shortcuts_grabber_remove (XfceShortcutsGrabber *grabber,
-
- if (G_LIKELY (key != NULL))
- {
-- xfce_shortcuts_grabber_ungrab (grabber, key, TRUE);
-+ xfce_shortcuts_grabber_ungrab (grabber, key);
- g_hash_table_remove (grabber->priv->keys, shortcut);
- }
- }
---
-GitLab
-
diff --git a/x11/libxfce4menu/pkg-plist b/x11/libxfce4menu/pkg-plist
index a28920ed01f5..5e17f2fbbb65 100644
--- a/x11/libxfce4menu/pkg-plist
+++ b/x11/libxfce4menu/pkg-plist
@@ -1,6 +1,8 @@
bin/xfce4-about
etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
include/xfce4/libxfce4kbd-private-3/libxfce4kbd-private/xfce-shortcut-dialog.h
+include/xfce4/libxfce4kbd-private-3/libxfce4kbd-private/xfce-shortcuts-editor-dialog.h
+include/xfce4/libxfce4kbd-private-3/libxfce4kbd-private/xfce-shortcuts-editor.h
include/xfce4/libxfce4kbd-private-3/libxfce4kbd-private/xfce-shortcuts-grabber.h
include/xfce4/libxfce4kbd-private-3/libxfce4kbd-private/xfce-shortcuts-provider.h
include/xfce4/libxfce4kbd-private-3/libxfce4kbd-private/xfce-shortcuts-xfwm4.h
@@ -41,6 +43,7 @@ share/icons/hicolor/scalable/apps/xfce4-logo.svg
%%NLS%%share/locale/am/LC_MESSAGES/libxfce4ui.mo
%%NLS%%share/locale/ar/LC_MESSAGES/libxfce4ui.mo
%%NLS%%share/locale/ast/LC_MESSAGES/libxfce4ui.mo
+%%NLS%%share/locale/az/LC_MESSAGES/libxfce4ui.mo
%%NLS%%share/locale/be/LC_MESSAGES/libxfce4ui.mo
%%NLS%%share/locale/bg/LC_MESSAGES/libxfce4ui.mo
%%NLS%%share/locale/bn/LC_MESSAGES/libxfce4ui.mo
diff --git a/x11/libxfce4util/Makefile b/x11/libxfce4util/Makefile
index 7bbc76d6f20e..b2dc9a8f19de 100644
--- a/x11/libxfce4util/Makefile
+++ b/x11/libxfce4util/Makefile
@@ -1,5 +1,5 @@
PORTNAME= libxfce4util
-PORTVERSION= 4.16.0
+PORTVERSION= 4.18.0
CATEGORIES= x11 xfce
MASTER_SITES= XFCE
DIST_SUBDIR= xfce4
diff --git a/x11/libxfce4util/distinfo b/x11/libxfce4util/distinfo
index 53ac743f6d7f..4929bac7c7e7 100644
--- a/x11/libxfce4util/distinfo
+++ b/x11/libxfce4util/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1608682260
-SHA256 (xfce4/libxfce4util-4.16.0.tar.bz2) = 60598d745d1fc81ff5ad3cecc3a8d1b85990dd22023e7743f55abd87d8b55b83
-SIZE (xfce4/libxfce4util-4.16.0.tar.bz2) = 508328
+TIMESTAMP = 1671097440
+SHA256 (xfce4/libxfce4util-4.18.0.tar.bz2) = 1157ca717fd3dd1da7724a6432a4fb24af9cd922f738e971fd1fd36dfaeac3c9
+SIZE (xfce4/libxfce4util-4.18.0.tar.bz2) = 511384
diff --git a/x11/libxfce4util/pkg-descr b/x11/libxfce4util/pkg-descr
index 7c7cf5e63cde..39188c733c06 100644
--- a/x11/libxfce4util/pkg-descr
+++ b/x11/libxfce4util/pkg-descr
@@ -1 +1,2 @@
-Xfce 4 library providing basic utilities.
+libxfce4util is used to share commonly used non-GTK utilities among
+the Xfce applications.
diff --git a/x11/libxfce4util/pkg-plist b/x11/libxfce4util/pkg-plist
index e21e7933bd3f..1f693701919c 100644
--- a/x11/libxfce4util/pkg-plist
+++ b/x11/libxfce4util/pkg-plist
@@ -3,6 +3,7 @@ include/xfce4/libxfce4util/libxfce4util.h
include/xfce4/libxfce4util/xfce-debug.h
include/xfce4/libxfce4util/xfce-fileutils.h
include/xfce4/libxfce4util/xfce-generics.h
+include/xfce4/libxfce4util/xfce-gio-extensions.h
include/xfce4/libxfce4util/xfce-i18n.h
include/xfce4/libxfce4util/xfce-kiosk.h
include/xfce4/libxfce4util/xfce-license.h
@@ -10,6 +11,7 @@ include/xfce4/libxfce4util/xfce-miscutils.h
include/xfce4/libxfce4util/xfce-posix-signal-handler.h
include/xfce4/libxfce4util/xfce-rc.h
include/xfce4/libxfce4util/xfce-resource.h
+include/xfce4/libxfce4util/xfce-string.h
include/xfce4/libxfce4util/xfce-utf8.h
%%GIR%%lib/girepository-1.0/Libxfce4util-1.0.typelib
lib/libxfce4util.so
@@ -21,6 +23,7 @@ sbin/xfce4-kiosk-query
%%NLS%%share/locale/am/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/ar/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/ast/LC_MESSAGES/libxfce4util.mo
+%%NLS%%share/locale/az/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/be/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/bg/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/bn/LC_MESSAGES/libxfce4util.mo
@@ -50,6 +53,7 @@ sbin/xfce4-kiosk-query
%%NLS%%share/locale/is/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/it/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/ja/LC_MESSAGES/libxfce4util.mo
+%%NLS%%share/locale/ka/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/kk/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/ko/LC_MESSAGES/libxfce4util.mo
%%NLS%%share/locale/lt/LC_MESSAGES/libxfce4util.mo
diff --git a/x11/xfce4-conf/Makefile b/x11/xfce4-conf/Makefile
index 28bf9668c797..0f183f5d2bb6 100644
--- a/x11/xfce4-conf/Makefile
+++ b/x11/xfce4-conf/Makefile
@@ -1,5 +1,5 @@
PORTNAME= xfce4-conf
-PORTVERSION= 4.16.0
+PORTVERSION= 4.18.0
CATEGORIES= x11 xfce
MASTER_SITES= XFCE
DISTNAME= xfconf-${DISTVERSIONFULL}
diff --git a/x11/xfce4-conf/distinfo b/x11/xfce4-conf/distinfo
index 092fcdf08a05..292ad275909c 100644
--- a/x11/xfce4-conf/distinfo
+++ b/x11/xfce4-conf/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1608682404
-SHA256 (xfce4/xfconf-4.16.0.tar.bz2) = 652a119007c67d9ba6c0bc7a740c923d33f32d03dc76dfc7ba682584e72a5425
-SIZE (xfce4/xfconf-4.16.0.tar.bz2) = 634858
+TIMESTAMP = 1671097854
+SHA256 (xfce4/xfconf-4.18.0.tar.bz2) = 2e8c50160bf800a807aea094fc9dad81f9f361f42db56607508ed5b4855d2906
+SIZE (xfce4/xfconf-4.18.0.tar.bz2) = 625755
diff --git a/x11/xfce4-conf/pkg-descr b/x11/xfce4-conf/pkg-descr
index 7aa95bc79d6e..aced1894ccc3 100644
--- a/x11/xfce4-conf/pkg-descr
+++ b/x11/xfce4-conf/pkg-descr
@@ -1 +1,2 @@
-D-Bus-based configuration storage system.
+Xfconf is a flexible, easy-to-use configuration management system
+for the Xfce desktop.
diff --git a/x11/xfce4-conf/pkg-plist b/x11/xfce4-conf/pkg-plist
index ec744d9de765..89aa9e5c95bf 100644
--- a/x11/xfce4-conf/pkg-plist
+++ b/x11/xfce4-conf/pkg-plist
@@ -32,6 +32,7 @@ share/dbus-1/services/org.xfce.Xfconf.service
%%NLS%%share/locale/fr/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/gl/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/he/LC_MESSAGES/xfconf.mo
+%%NLS%%share/locale/hi/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/hr/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/hu/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/hy_AM/LC_MESSAGES/xfconf.mo
@@ -40,6 +41,7 @@ share/dbus-1/services/org.xfce.Xfconf.service
%%NLS%%share/locale/is/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/it/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/ja/LC_MESSAGES/xfconf.mo
+%%NLS%%share/locale/kab/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/kk/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/ko/LC_MESSAGES/xfconf.mo
%%NLS%%share/locale/lt/LC_MESSAGES/xfconf.mo
diff --git a/x11/xfce4-goodies/Makefile b/x11/xfce4-goodies/Makefile
index 71298137d90b..4471f20fe34e 100644
--- a/x11/xfce4-goodies/Makefile
+++ b/x11/xfce4-goodies/Makefile
@@ -1,6 +1,5 @@
PORTNAME= xfce4-goodies
-PORTVERSION= 4.16
-PORTREVISION= 1
+PORTVERSION= 4.18
CATEGORIES= x11
MAINTAINER= xfce@FreeBSD.org