[Pkg-xfce-commits] [Git][xfce-team/desktop/libxfce4ui][upstream/latest] New upstream version 4.19.3.

Unit 193 (@unit193) gitlab at salsa.debian.org
Fri Nov 10 01:45:52 GMT 2023



Unit 193 pushed to branch upstream/latest at xfce / desktop / libxfce4ui


Commits:
ad0da535 by Unit 193 at 2023-11-09T20:35:48-05:00
New upstream version 4.19.3.
- - - - -


28 changed files:

- ChangeLog
- NEWS
- configure
- configure.ac
- docs/reference/html/XfceTitledDialog.html
- docs/reference/html/api-index-deprecated.html
- docs/reference/html/index.html
- docs/reference/html/libxfce4ui-libxfce4ui-config.html
- docs/reference/html/libxfce4ui.devhelp2
- docs/reference/html/style.css
- libxfce4kbd-private/xfce-shortcut-dialog.c
- libxfce4kbd-private/xfce-shortcuts-grabber.c
- libxfce4ui/libxfce4ui-config.h
- libxfce4ui/xfce-spawn.c
- libxfce4ui/xfce-titled-dialog.c
- libxfce4ui/xfce-titled-dialog.h
- po/da.gmo
- po/da.po
- po/el.gmo
- po/el.po
- po/libxfce4ui.pot
- po/pt_BR.gmo
- po/pt_BR.po
- xfce4-about/about-dialog-ui.h
- xfce4-about/main.c
- xfce4-about/system-info.c
- xfce4-about/system-info.h
- xfce4-about/xfce4-about-dialog.glade


Changes:

=====================================
ChangeLog
=====================================
@@ -1,3 +1,235 @@
+commit 87033dac4532b6a222c657e34c785fa4c568b9a3
+Author: Elliot <cheeseeboi at mailo.com>
+Date:   Thu Oct 12 14:43:25 2023 +0000
+
+    titled-dialog: Ensure a single icon on the left when CSD is used (#92)
+
+commit 56d8fb63c05989028eebef05dff783d2db621709
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Mon Oct 9 12:12:04 2023 +0200
+
+    wayland: Reduce verbosity
+
+commit 138e2fca04820c731b8f0b36917ea15f33132db2
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Oct 5 15:55:21 2023 +0200
+
+    Remove remaining uses of xfce_titled_dialog_create_action_area()
+    
+    Completes: !108
+
+commit 6153be02aef821ef0a9561f811c7e49b419ad40b
+Author: Irfan Bagus <irfanbagus at gmail.com>
+Date:   Tue Oct 3 13:53:26 2023 +0000
+
+    titled-dialog : Deprecate xfce_titled_dialog_create_action_area()
+    
+    Optimize XfceTitledDialog action area related code.
+    xfce_titled_dialog_create_action_area() no longer needed and can be
+    deprecated. xfce_titled_dialog_repack_dialog() also not needed anymore.
+    
+    Fixes: #94
+    Completes: !107
+
+commit a9ce3cf86768428b752329904ea1092ec7ac61f2
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Sun Oct 1 13:02:22 2023 +0200
+
+    titled-dialog: Ensure action area is shown when using CSD
+    
+    Another necessary thing after b84f25b0. Signal disconnection avoids a
+    warning about adding widgets to the action area.
+    
+    Related: !107
+
+commit 01d67a5e8cdd599fc9da8e7d53c0dee5f5b24592
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Sep 28 18:05:46 2023 +0200
+
+    titled-dialog: Ensure action widget can default
+    
+    Necessary after b84f25b0 for some reason, e.g. with the "add item" panel
+    dialog.
+    
+    Related: !107
+
+commit b84f25b0f8ec0c3cf8b2b8eb8ddfebb097cac6dd
+Author: Irfan Bagus <irfanbagus at gmail.com>
+Date:   Thu Sep 28 10:39:25 2023 +0000
+
+    Fix xfce_titled_dialog action area margin
+    
+    Buttons created with xfce_titled_dialog_add_button have smaller margin.
+    xfce_titled_dialog creates its own action_area but does not create
+    action_box, and does not apply default margin settings. We can avoid
+    creating new action area and use gtk_dialog action area instead.
+    
+    Fixes: #93
+
+commit 5890f873e57fe72792784a00991f773d3a10561a
+Author: Anonymous <noreply at xfce.org>
+Date:   Wed Sep 13 00:45:22 2023 +0200
+
+    I18n: Update translation da (100%).
+    
+    208 translated messages.
+    
+    Transifex (https://explore.transifex.com/xfce/).
+
+commit 273bfdaa2e7f5fbfd12d6b32bd03f32c4c8b5033
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Sep 7 17:54:55 2023 +0200
+
+    shortcuts-grabber: Implement refcounted grabs as a set
+
+commit 4c671b3c5e8f259347e1a65ec6a39812487df3ec
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Sep 7 16:32:17 2023 +0200
+
+    shortcuts-grabber: Formatting
+
+commit 04a42334285ed1a5d5cbb57a6c75f41ef151582b
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Sep 7 16:26:17 2023 +0200
+
+    shortcuts-grabber: Remove dead code, useless casts and declarations
+
+commit 746c1e02ffb6a51aab2e19fd100f2586be0d16e9
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Sep 7 16:15:48 2023 +0200
+
+    shortcuts-grabber: Variable renaming
+
+commit 26037503b743fe0453f3b06343b7f1b8a4ff5bd8
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Sep 7 16:06:01 2023 +0200
+
+    shortcuts-grabber: Clarify keys management in _grab*() funcs
+    
+    get_entries_for_keyval() and _xfce_shortcuts_grabber_grab() ensures that
+    n_keys == 0 iff keys == NULL.
+
+commit 492f50e8906b8bbe36e8629c7e73a13ad60aacf1
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Sep 7 15:59:22 2023 +0200
+
+    shortcuts-grabber: Avoid duplicate code in _grab*() funcs
+
+commit a8b89e2226776e3506120659149a9ac9744a6111
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Sep 7 13:49:44 2023 +0200
+
+    shortcuts-grabber: Remove constructed()
+    
+    There's no reason why init() can't do what constructed() does here. This
+    also avoids forgetting to chain-up to parent in constructed(), as was
+    the case.
+
+commit 1410976b427c725a8ea9abdd4c3a0133d9d9accd
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Thu Sep 7 13:29:32 2023 +0200
+
+    shortcuts-grabber: Isolate layout-related code more clearly
+
+commit eab0fcba817b337bf2f15c0814a071dc4ffd2ecf
+Author: Elliot <cheeseeboi at mailo.com>
+Date:   Sat Sep 9 11:44:16 2023 +0000
+
+    Display distribution logo in xfce4-about (Fixes #54)
+
+commit b2e1dac24e4393badbf0d9ede344f1096b5d8c82
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Wed Sep 6 13:01:31 2023 +0200
+
+    shortcuts-grabber: Fix filtering by level
+    
+    a0203505 introduced a regression, see
+    https://gitlab.xfce.org/xfce/libxfce4ui/-/merge_requests/104#note_79217
+    
+    It seems that a reliable way to filter by level, taking into account the
+    modifiers from gtk_accelerator_parse(), is to apply the inverse
+    transformation to gdk_keymap_get_entries_for_keyval(), i.e.
+    gdk_keymap_translate_keyboard_state(), and see if the keyval matches.
+    
+    Fixes: a0203505201af43a8ccc063e536f1353b8c5daa4
+    Related: xfce4-settings#442
+
+commit c82e0123090dd822b48956f6cd90db6be1b95cae
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Wed Sep 6 12:49:55 2023 +0200
+
+    shortcuts-grabber: Simplify filtering by group
+    
+    If (group0_only && n_matches > 0) then n_matches == n_keys, so we keep
+    all keys regardless of n_matches value.
+
+commit daabed0cdd7e766176d4be5a5080865b92bab04c
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Wed Sep 6 12:34:59 2023 +0200
+
+    shortcuts-grabber: Variable renaming
+
+commit a0203505201af43a8ccc063e536f1353b8c5daa4
+Author: Theo Linkspfeifer <lastonestanding at tutanota.com>
+Date:   Mon Mar 13 15:12:01 2023 +0100
+
+    shortcuts-grabber: Filter grabbing by key level
+    
+    The idea is to look at the "level" value from GdkKeymapKey and see if
+    there is a mismatch with the set modifiers for a shortcut.
+    
+    Fixes: xfce4-settings#442
+
+commit f35d7bd8a62d903b0d19cf3f7554a8736d6cdad1
+Author: Elliot <cheeseeboi at mailo.com>
+Date:   Wed Aug 9 21:06:55 2023 +0000
+
+    Detect keyboard shortcuts with only single modifier keys on key release
+    
+    Fixes: #1
+
+commit c187464bf7a80a414723a7d6131e430e4cda8613
+Author: Anonymous <noreply at xfce.org>
+Date:   Sun Jul 9 21:36:14 2023 +0200
+
+    I18n: Update translation pt_BR (100%).
+    
+    208 translated messages.
+    
+    Transifex (https://explore.transifex.com/xfce/).
+
+commit 8194ffdd5f90fb54b6d9dd8d3542483f6e292350
+Author: Anonymous <noreply at xfce.org>
+Date:   Sat Jun 3 12:45:28 2023 +0200
+
+    I18n: Update translation el (100%).
+    
+    208 translated messages.
+    
+    Transifex (https://explore.transifex.com/xfce/).
+
+commit 6072fd9ed1fd3b4fbcac71b53fc53b2f8a58702a
+Author: Anonymous <noreply at xfce.org>
+Date:   Fri Jun 2 12:45:20 2023 +0200
+
+    I18n: Update translation el (100%).
+    
+    208 translated messages.
+    
+    Transifex (https://explore.transifex.com/xfce/).
+
+commit e63e6b39c0fb6bd1cb9158bb03cfa79fda833409
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Mon May 29 17:53:57 2023 +0200
+
+    Back to development
+
+commit 5e4b3daae5da8b0b0f2d5879281f9f607e595413
+Author: Gaël Bonithon <gael at xfce.org>
+Date:   Mon May 29 17:53:13 2023 +0200
+
+    Updates for release
+
 commit 1678d6082c5032a8bf9da591c7251ee8452e7250
 Author: Gaël Bonithon <gael at xfce.org>
 Date:   Wed May 17 11:00:59 2023 +0200


=====================================
NEWS
=====================================
@@ -1,3 +1,30 @@
+4.19.3 (2023-10-14)
+======
+- titled-dialog: Ensure a single icon on the left when CSD is used (#92)
+- wayland: Reduce verbosity
+- Remove remaining uses of xfce_titled_dialog_create_action_area()
+- titled-dialog : Deprecate xfce_titled_dialog_create_action_area()
+- titled-dialog: Ensure action area is shown when using CSD
+- titled-dialog: Ensure action widget can default
+- Fix xfce_titled_dialog action area margin
+- shortcuts-grabber: Implement refcounted grabs as a set
+- shortcuts-grabber: Formatting
+- shortcuts-grabber: Remove dead code, useless casts and declarations
+- shortcuts-grabber: Variable renaming
+- shortcuts-grabber: Clarify keys management in _grab*() funcs
+- shortcuts-grabber: Avoid duplicate code in _grab*() funcs
+- shortcuts-grabber: Remove constructed()
+- shortcuts-grabber: Isolate layout-related code more clearly
+- Display distribution logo in xfce4-about (Fixes #54)
+- shortcuts-grabber: Fix filtering by level
+- shortcuts-grabber: Simplify filtering by group
+- shortcuts-grabber: Variable renaming
+- shortcuts-grabber: Filter grabbing by key level
+- Detect keyboard shortcuts with only single modifier keys on key 
+release
+- Translation Updates:
+  Danish, Greek, Portuguese (Brazil)
+
 4.19.2 (2023-05-29)
 ======
 - screensaver: Prevent recursive calling of lock command


=====================================
configure
=====================================
@@ -1,7 +1,7 @@
 #! /bin/sh
 # From configure.ac .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for libxfce4ui 4.19.2.
+# Generated by GNU Autoconf 2.71 for libxfce4ui 4.19.3.
 #
 # Report bugs to <https://gitlab.xfce.org/xfce/libxfce4ui/-/issues>.
 #
@@ -624,8 +624,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='libxfce4ui'
 PACKAGE_TARNAME='libxfce4ui'
-PACKAGE_VERSION='4.19.2'
-PACKAGE_STRING='libxfce4ui 4.19.2'
+PACKAGE_VERSION='4.19.3'
+PACKAGE_STRING='libxfce4ui 4.19.3'
 PACKAGE_BUGREPORT='https://gitlab.xfce.org/xfce/libxfce4ui/-/issues'
 PACKAGE_URL=''
 
@@ -1539,7 +1539,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libxfce4ui 4.19.2 to adapt to many kinds of systems.
+\`configure' configures libxfce4ui 4.19.3 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1615,7 +1615,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libxfce4ui 4.19.2:";;
+     short | recursive ) echo "Configuration of libxfce4ui 4.19.3:";;
    esac
   cat <<\_ACEOF
 
@@ -1799,7 +1799,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libxfce4ui configure 4.19.2
+libxfce4ui configure 4.19.3
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2152,7 +2152,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libxfce4ui $as_me 4.19.2, which was
+It was created by libxfce4ui $as_me 4.19.3, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3543,7 +3543,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libxfce4ui'
- VERSION='4.19.2'
+ VERSION='4.19.3'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -14365,7 +14365,7 @@ LIBXFCE4UI_VERINFO=0:0:0
 LIBXFCE4UI_VERSION_API=2
 LIBXFCE4UI_VERSION_MAJOR=4
 LIBXFCE4UI_VERSION_MINOR=19
-LIBXFCE4UI_VERSION_MICRO=2
+LIBXFCE4UI_VERSION_MICRO=3
 LIBXFCE4KBD_PRIVATE_VERINFO=0:0:0
 LIBXFCE4KBD_PRIVATE_VERSION_API=3
 
@@ -21716,7 +21716,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libxfce4ui $as_me 4.19.2, which was
+This file was extended by libxfce4ui $as_me 4.19.3, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -21784,7 +21784,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libxfce4ui config.status 4.19.2
+libxfce4ui config.status 4.19.3
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 


=====================================
configure.ac
=====================================
@@ -5,7 +5,7 @@ dnl
 dnl ***************************
 dnl *** Version information ***
 dnl ***************************
-XDT_VERSION_INIT([4.19.2])
+XDT_VERSION_INIT([4.19.3])
 
 m4_define([libxfce4ui_verinfo], [0:0:0])
 m4_define([libxfce4ui_version_api], [2])


=====================================
docs/reference/html/XfceTitledDialog.html
=====================================
@@ -318,11 +318,8 @@ the buttons to use an optional named or stock icon.</p>
 <a name="xfce-titled-dialog-create-action-area"></a><h3>xfce_titled_dialog_create_action_area ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 xfce_titled_dialog_create_action_area (<em class="parameter"><code><a class="link" href="XfceTitledDialog.html" title="XfceTitledDialog"><span class="type">XfceTitledDialog</span></a> *titled_dialog</code></em>);</pre>
-<p>This function creates a custom action area (of type <a href="/usr/share/gtk-doc/html/gtk3/GtkButtonBox.html#GtkButtonBox-struct"><span class="type">GtkButtonBox</span></a>) and has to
-be used in combination with <a class="link" href="XfceTitledDialog.html#xfce-titled-dialog-add-action-widget" title="xfce_titled_dialog_add_action_widget ()"><span class="type">xfce_titled_dialog_add_action_widget</span></a>.</p>
-<p>When using the XfceTitledDialogClass directly to create dialogs this function is
-useful to keep action widgets out of the <a href="/usr/share/gtk-doc/html/gtk3/GtkHeaderBar.html#GtkHeaderBar-struct"><span class="type">GtkHeaderBar</span></a> in which they would
-normally end up by calling <a href="/usr/share/gtk-doc/html/gtk3/GtkDialog.html#gtk-dialog-add-action-widget"><span class="type">gtk_dialog_add_action_widget</span></a>.</p>
+<div class="warning"><p><code class="literal">xfce_titled_dialog_create_action_area</code> has been deprecated since version 4.19.3 and should not be used in newly-written code.</p></div>
+<p>This function is a no-op since 4.19.3.</p>
 <div class="refsect3">
 <a name="xfce-titled-dialog-create-action-area.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -347,8 +344,7 @@ normally end up by calling <a href="/usr/share/gtk-doc/html/gtk3/GtkDialog.html#
 xfce_titled_dialog_add_button (<em class="parameter"><code><a class="link" href="XfceTitledDialog.html" title="XfceTitledDialog"><span class="type">XfceTitledDialog</span></a> *titled_dialog</code></em>,
                                <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *button_text</code></em>,
                                <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> response_id</code></em>);</pre>
-<p>This function is a replacement for <a href="/usr/share/gtk-doc/html/gtk3/GtkDialog.html#gtk-dialog-add-button"><span class="type">gtk_dialog_add_button</span></a> and assumes that
-you have called <a class="link" href="XfceTitledDialog.html#xfce-titled-dialog-create-action-area" title="xfce_titled_dialog_create_action_area ()"><span class="type">xfce_titled_dialog_create_action_area</span></a> before.</p>
+<p>This function is a replacement for <a href="/usr/share/gtk-doc/html/gtk3/GtkDialog.html#gtk-dialog-add-button"><span class="type">gtk_dialog_add_button</span></a>.</p>
 <p>Buttons with <a href="/usr/share/gtk-doc/html/gtk3/GtkDialog.html#GTK-RESPONSE-HELP:CAPS"><span class="type">GTK_RESPONSE_HELP</span></a> will be added to the secondary group of children
 (see <a href="/usr/share/gtk-doc/html/gtk3/GtkButtonBox.html#gtk-button-box-set-child-secondary"><span class="type">gtk_button_box_set_child_secondary</span></a> for reference).</p>
 <div class="refsect3">
@@ -393,8 +389,7 @@ you have called <a class="link" href="XfceTitledDialog.html#xfce-titled-dialog-c
 xfce_titled_dialog_add_action_widget (<em class="parameter"><code><a class="link" href="XfceTitledDialog.html" title="XfceTitledDialog"><span class="type">XfceTitledDialog</span></a> *titled_dialog</code></em>,
                                       <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk3/GtkWidget.html#GtkWidget-struct"><span class="type">GtkWidget</span></a> *child</code></em>,
                                       <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span class="type">gint</span></a> response_id</code></em>);</pre>
-<p>This function is a replacement for <a href="/usr/share/gtk-doc/html/gtk3/GtkDialog.html#gtk-dialog-add-action-widget"><span class="type">gtk_dialog_add_action_widget</span></a> and assumes that
-you have called <a class="link" href="XfceTitledDialog.html#xfce-titled-dialog-create-action-area" title="xfce_titled_dialog_create_action_area ()"><span class="type">xfce_titled_dialog_create_action_area</span></a> before.</p>
+<p>This function is a replacement for <a href="/usr/share/gtk-doc/html/gtk3/GtkDialog.html#gtk-dialog-add-action-widget"><span class="type">gtk_dialog_add_action_widget</span></a>.</p>
 <p>Children with <a href="/usr/share/gtk-doc/html/gtk3/GtkDialog.html#GTK-RESPONSE-HELP:CAPS"><span class="type">GTK_RESPONSE_HELP</span></a> will be added to the secondary group of children
 (see <a href="/usr/share/gtk-doc/html/gtk3/GtkButtonBox.html#gtk-button-box-set-child-secondary"><span class="type">gtk_button_box_set_child_secondary</span></a> for reference).</p>
 <div class="refsect3">


=====================================
docs/reference/html/api-index-deprecated.html
=====================================
@@ -35,6 +35,10 @@
 <dd></dd>
 <a name="idxT"></a><h3 class="title">T</h3>
 <dt>
+<a class="link" href="XfceTitledDialog.html#xfce-titled-dialog-create-action-area" title="xfce_titled_dialog_create_action_area ()">xfce_titled_dialog_create_action_area</a>, function in <a class="link" href="XfceTitledDialog.html" title="XfceTitledDialog">XfceTitledDialog</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="XfceTitledDialog.html#xfce-titled-dialog-new-with-buttons" title="xfce_titled_dialog_new_with_buttons ()">xfce_titled_dialog_new_with_buttons</a>, function in <a class="link" href="XfceTitledDialog.html" title="XfceTitledDialog">XfceTitledDialog</a>
 </dt>
 <dd></dd>


=====================================
docs/reference/html/index.html
=====================================
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libxfce4ui Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      For libxfce4ui 4.19.2.
+      For libxfce4ui 4.19.3.
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="https://developer.xfce.org/libxfce4ui/index.html" target="_top">https://developer.xfce.org/libxfce4ui/</a>.
     </p></div>


=====================================
docs/reference/html/libxfce4ui-libxfce4ui-config.html
=====================================
@@ -210,7 +210,7 @@ function is available.</p>
 </tr>
 <tr>
 <td class="parameter_name"><p>micro</p></td>
-<td class="parameter_description"><p>The micro release of the library, i.e. 2</p></td>
+<td class="parameter_description"><p>The micro release of the library, i.e. 3</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
@@ -259,7 +259,7 @@ that can be used by the C pre-processor.</p>
 <hr>
 <div class="refsect2">
 <a name="LIBXFCE4UI-MICRO-VERSION:CAPS"></a><h3>LIBXFCE4UI_MICRO_VERSION</h3>
-<pre class="programlisting">#define LIBXFCE4UI_MICRO_VERSION (2)
+<pre class="programlisting">#define LIBXFCE4UI_MICRO_VERSION (3)
 </pre>
 <p>A macro that evaluates to the micro version of libxfce4ui, in a format
 that can be used by the C pre-processor.</p>


=====================================
docs/reference/html/libxfce4ui.devhelp2
=====================================
@@ -100,7 +100,7 @@
     <keyword type="function" name="xfce_titled_dialog_new ()" link="XfceTitledDialog.html#xfce-titled-dialog-new"/>
     <keyword type="function" name="xfce_titled_dialog_new_with_buttons ()" link="XfceTitledDialog.html#xfce-titled-dialog-new-with-buttons" deprecated="4.16: Use #xfce_titled_dialog_new_with_mixed_buttons instead."/>
     <keyword type="function" name="xfce_titled_dialog_new_with_mixed_buttons ()" link="XfceTitledDialog.html#xfce-titled-dialog-new-with-mixed-buttons" since="4.14"/>
-    <keyword type="function" name="xfce_titled_dialog_create_action_area ()" link="XfceTitledDialog.html#xfce-titled-dialog-create-action-area" since="4.16"/>
+    <keyword type="function" name="xfce_titled_dialog_create_action_area ()" link="XfceTitledDialog.html#xfce-titled-dialog-create-action-area" deprecated="4.19.3" since="4.16"/>
     <keyword type="function" name="xfce_titled_dialog_add_button ()" link="XfceTitledDialog.html#xfce-titled-dialog-add-button" since="4.16"/>
     <keyword type="function" name="xfce_titled_dialog_add_action_widget ()" link="XfceTitledDialog.html#xfce-titled-dialog-add-action-widget" since="4.16"/>
     <keyword type="function" name="xfce_titled_dialog_set_default_response ()" link="XfceTitledDialog.html#xfce-titled-dialog-set-default-response" since="4.16"/>


=====================================
docs/reference/html/style.css
=====================================
@@ -473,6 +473,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
 .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
 .gd { color: #A00000 } /* Generic.Deleted */
 .ge { font-style: italic } /* Generic.Emph */
+.ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
 .gr { color: #E40000 } /* Generic.Error */
 .gh { color: #000080; font-weight: bold } /* Generic.Heading */
 .gi { color: #008400 } /* Generic.Inserted */


=====================================
libxfce4kbd-private/xfce-shortcut-dialog.c
=====================================
@@ -241,8 +241,6 @@ xfce_shortcut_dialog_create_contents (XfceShortcutDialog *dialog,
   gtk_window_set_title (GTK_WINDOW (dialog), title);
   gtk_window_set_icon_name (GTK_WINDOW (dialog), icon_name);
 
-  xfce_titled_dialog_create_action_area (XFCE_TITLED_DIALOG (dialog));
-
   /* Create clear button for xfwm4 */
   if (g_utf8_collate (provider, "xfwm4") == 0)
     {


=====================================
libxfce4kbd-private/xfce-shortcuts-grabber.c
=====================================
@@ -41,9 +41,6 @@
 
 
 
-#define MODIFIERS_ERROR ((GdkModifierType)(-1))
-#define MODIFIERS_NONE 0
-
 /*
  * It is not clear what the correct behavior is in this regard, so this is disabled rather
  * than removed, in order to preserve the changes that took place during cycle 4.17 and to
@@ -63,7 +60,6 @@ typedef struct _XfceKey XfceKey;
 
 
 
-static void            xfce_shortcuts_grabber_constructed      (GObject                   *object);
 static void            xfce_shortcuts_grabber_finalize         (GObject                   *object);
 static void            xfce_shortcuts_grabber_keys_changed     (GdkKeymap                 *keymap,
                                                                 XfceShortcutsGrabber      *grabber);
@@ -84,11 +80,13 @@ struct _XfceShortcutsGrabberPrivate
   /* Maps a shortcut string to a pointer to XfceKey */
   GHashTable *keys;
 
-  /* Maps an XfceXGrab to a reference count.
+  /* Set of reference counted XfceXGrab.
    * The reference count tracks the number of shortcuts that grab the XfceXGrab. */
   GHashTable *grabbed_keycodes;
 
+#if TRACK_LAYOUT_CHANGE
   gint xkbEventType, xkbStateGroup;
+#endif
 };
 
 struct _XfceKey
@@ -103,15 +101,14 @@ struct _XfceKey
   guint            numlock_modifier;
 };
 
-typedef struct
+typedef struct _XfceXGrab
 {
   guint            keycode;
   GdkModifierType  non_virtual_modifiers;
   guint            numlock_modifier;
+  guint            refcount;
 } XfceXGrab;
 
-typedef guint XfceXGrabRefcount;
-
 
 
 G_DEFINE_TYPE_WITH_PRIVATE (XfceShortcutsGrabber, xfce_shortcuts_grabber, G_TYPE_OBJECT)
@@ -124,7 +121,6 @@ xfce_shortcuts_grabber_class_init (XfceShortcutsGrabberClass *klass)
   GObjectClass *gobject_class;
 
   gobject_class = G_OBJECT_CLASS (klass);
-  gobject_class->constructed = xfce_shortcuts_grabber_constructed;
   gobject_class->finalize = xfce_shortcuts_grabber_finalize;
 
   g_signal_new ("shortcut-activated",
@@ -149,8 +145,11 @@ free_key (gpointer data)
   g_free (key);
 }
 
+
+
 static gboolean
-xgrab_equal (gconstpointer data1, gconstpointer data2)
+xgrab_equal (gconstpointer data1,
+             gconstpointer data2)
 {
   const XfceXGrab *a = data1;
   const XfceXGrab *b = data2;
@@ -163,12 +162,7 @@ xgrab_equal (gconstpointer data1, gconstpointer data2)
          a->numlock_modifier == b->numlock_modifier;
 }
 
-static void
-xgrab_free (gpointer data)
-{
-  XfceXGrab *g = data;
-  g_free (g);
-}
+
 
 static guint
 xgrab_hash (gconstpointer data)
@@ -179,50 +173,30 @@ xgrab_hash (gconstpointer data)
 
 
 
-
 static void
 xfce_shortcuts_grabber_init (XfceShortcutsGrabber *grabber)
 {
-  GdkDisplay      *display;
-  GdkKeymap       *keymap;
+  Display *xdisplay = gdk_x11_get_default_xdisplay ();
+  GdkKeymap *keymap = gdk_keymap_get_for_display (gdk_display_get_default ());
 
   grabber->priv = xfce_shortcuts_grabber_get_instance_private (grabber);
   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);
+  grabber->priv->grabbed_keycodes = g_hash_table_new_full (xgrab_hash, xgrab_equal, g_free, NULL);
 
   /* Workaround: Make sure modmap is up to date
    * There is possibly a bug in GTK+ where virtual modifiers are not
    * mapped because the modmap is not updated. The following function
    * updates it.
    */
-  display = gdk_display_get_default ();
-  keymap = gdk_keymap_get_for_display (display);
-  (void) gdk_keymap_have_bidi_layouts (keymap);
-}
-
+  gdk_keymap_have_bidi_layouts (keymap);
 
-
-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 TRACK_LAYOUT_CHANGE
   if (G_UNLIKELY (!XkbQueryExtension (xdisplay, 0, &grabber->priv->xkbEventType, 0, 0, 0)))
     grabber->priv->xkbEventType = -1;
-#if TRACK_LAYOUT_CHANGE
   grabber->priv->xkbStateGroup = -1;
-#else
-  grabber->priv->xkbStateGroup = 0;
 #endif
 
   /* Flush events before adding the event filter */
@@ -262,13 +236,12 @@ xfce_shortcuts_grabber_keys_changed (GdkKeymap            *keymap,
 
 
 static gboolean
-xfce_shortcuts_grabber_xgrab (XfceXGrab g, gboolean grab)
+xfce_shortcuts_grabber_xgrab (XfceXGrab g,
+                              gboolean grab)
 {
   GdkDisplay *display = gdk_display_get_default ();
   Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-  Window root_window;
-  guint k;
-  gboolean success = TRUE;
+  Window root_window = gdk_x11_get_default_root_xwindow ();
 
   /* Ignorable modifiers */
   const guint mod_masks [] = {
@@ -289,16 +262,13 @@ xfce_shortcuts_grabber_xgrab (XfceXGrab g, gboolean grab)
     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++)
+  for (guint k = 0; k < G_N_ELEMENTS (mod_masks); k++)
     {
       /* Take ignorable modifiers into account when grabbing/ungrabbing */
       if (grab)
@@ -319,21 +289,20 @@ xfce_shortcuts_grabber_xgrab (XfceXGrab g, gboolean grab)
     {
       g_warning ("Failed to %s keycode %u",
                  grab ? "grab" : "ungrab", g.keycode);
-      success = FALSE;
+      return FALSE;
     }
 
-  return success;
+  return TRUE;
 }
 
 
 
-static gboolean
-ungrab_key (const gchar          *shortcut,
-            XfceKey              *key,
-            XfceShortcutsGrabber *grabber)
+static void
+ungrab_key (gpointer shortcut,
+            gpointer key,
+            gpointer grabber)
 {
   xfce_shortcuts_grabber_ungrab (grabber, key);
-  return FALSE;
 }
 
 
@@ -341,77 +310,94 @@ ungrab_key (const gchar          *shortcut,
 static void
 xfce_shortcuts_grabber_ungrab_all (XfceShortcutsGrabber *grabber)
 {
-  g_return_if_fail (XFCE_IS_SHORTCUTS_GRABBER (grabber));
-  g_hash_table_foreach (grabber->priv->keys,
-                        (GHFunc) (void (*)(void)) ungrab_key,
-                        grabber);
+  g_hash_table_foreach (grabber->priv->keys, ungrab_key, grabber);
 }
 
 
 
 static gboolean
-get_entries_for_keyval (GdkKeymap     *keymap,
-                        gint           group,
-                        guint          keyval,
-                        GdkKeymapKey **keys,
-                        guint         *n_keys)
+get_entries_for_keyval (GdkKeymap        *keymap,
+                        gint              group,
+                        guint             keyval,
+                        GdkModifierType   modifiers,
+                        GdkKeymapKey    **keys_out,
+                        guint            *n_keys_out)
 {
-  GdkKeymapKey *keys1;
-  gint n_keys1;
+  GdkKeymapKey *keys;
+  gint n_keys;
 
-  *keys = NULL;
-  *n_keys = 0;
+  *keys_out = NULL;
+  *n_keys_out = 0;
 
    /* Get all keys generating keyval */
-  if (!gdk_keymap_get_entries_for_keyval (keymap, keyval, &keys1, &n_keys1))
+  if (!gdk_keymap_get_entries_for_keyval (keymap, keyval, &keys, &n_keys))
     {
       TRACE ("Got no keys for keyval");
       return FALSE;
     }
 
-  if (G_UNLIKELY (n_keys1 <= 0))
+  if (G_UNLIKELY (n_keys <= 0))
     {
-      g_free (keys1);
+      g_free (keys);
       return FALSE;
     }
 
   /* Filter keys by group */
   {
-    gboolean group0_only;
-    gint i, n_matches;
+    gboolean group0_only = TRUE;
 
     /* 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++)
+    for (gint i = 0; i < n_keys; i++)
       {
-        group0_only &= (keys1[i].group == 0) ? TRUE : FALSE;
-        if (keys1[i].group == group)
-          n_matches++;
+        if (keys[i].group != 0)
+          {
+            group0_only = FALSE;
+            break;
+          }
       }
 
-    if (!group0_only || n_matches != 0)
+    if (!group0_only)
       {
         /* Remove keys that do not match the group*/
-        for (i = 0; i < n_keys1;)
-          if (keys1[i].group == group)
+        for (gint i = 0; i < n_keys;)
+          if (keys[i].group == group)
             i++;
           else
-            keys1[i] = keys1[--n_keys1];
+            keys[i] = keys[--n_keys];
       }
   }
 
-  if (G_UNLIKELY (n_keys1 == 0))
+  /* Filter keys by level */
+  {
+    guint keyval_trans;
+    GdkModifierType modifiers_levelled;
+
+    /* Remove keys that do not match the level for the given modifiers */
+    for (gint i = 0; i < n_keys;)
+      {
+        modifiers_levelled = modifiers;
+        if (keys[i].level == 0)
+          modifiers_levelled &= ~(GDK_SHIFT_MASK | GDK_MOD5_MASK);
+
+        gdk_keymap_translate_keyboard_state (keymap, keys[i].keycode, modifiers_levelled,
+                                             keys[i].group, &keyval_trans, NULL, NULL, NULL);
+        if (keyval == keyval_trans)
+          i++;
+        else
+          keys[i] = keys[--n_keys];
+      }
+  }
+
+  if (G_UNLIKELY (n_keys == 0))
     {
-      g_free (keys1);
+      g_free (keys);
       return FALSE;
     }
 
-  *keys = keys1;
-  *n_keys = n_keys1;
+  *keys_out = keys;
+  *n_keys_out = n_keys;
   return TRUE;
 }
 
@@ -420,62 +406,109 @@ get_entries_for_keyval (GdkKeymap     *keymap,
 static gboolean
 map_virtual_modifiers (GdkKeymap       *keymap,
                        GdkModifierType  virtual_modifiers,
-                       GdkModifierType *non_virtual_modifiers)
+                       GdkModifierType *non_virtual_modifiers_out)
 {
+  GdkModifierType non_virtual_modifiers = virtual_modifiers;
+
   /* Map virtual modifiers to non-virtual modifiers */
-  GdkModifierType non_virtual = virtual_modifiers;
-  if (!gdk_keymap_map_virtual_modifiers (keymap, &non_virtual))
+  if (!gdk_keymap_map_virtual_modifiers (keymap, &non_virtual_modifiers))
     return FALSE;
 
-  if (non_virtual == virtual_modifiers &&
-      (GDK_SUPER_MASK | GDK_HYPER_MASK | GDK_META_MASK) & non_virtual)
+  if (non_virtual_modifiers == virtual_modifiers &&
+      (GDK_SUPER_MASK | GDK_HYPER_MASK | GDK_META_MASK) & non_virtual_modifiers)
     {
       TRACE ("Failed to map virtual modifiers");
       return FALSE;
     }
 
-  *non_virtual_modifiers = non_virtual;
+  *non_virtual_modifiers_out = non_virtual_modifiers;
   return TRUE;
 }
 
 
 
-
 static void
-xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
+_xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber,
+                              XfceKey *key,
+                              GdkModifierType non_virtual_modifiers,
+                              guint numlock_modifier,
+                              GdkKeymapKey **keys,
+                              guint *n_keys)
 {
-  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;
-  gint            group;
+#ifdef DEBUG_TRACE
+  gchar *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
 
-  g_return_if_fail (XFCE_IS_SHORTCUTS_GRABBER (grabber));
+  /* Grab all hardware keys generating keyval */
+  for (guint i = 0; i < *n_keys;)
+    {
+      XfceXGrab g;
+      XfceXGrab *pg;
 
-  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;
+      g.keycode = (*keys)[i].keycode;
+      g.non_virtual_modifiers = non_virtual_modifiers;
+      g.numlock_modifier = numlock_modifier;
+      g.refcount = 1;
+      if (!g_hash_table_lookup_extended (grabber->priv->grabbed_keycodes, &g, (gpointer *) &pg, NULL))
+        {
+          if (xfce_shortcuts_grabber_xgrab (g, TRUE))
+            {
+              pg = g_new (XfceXGrab, 1);
+              *pg = g;
+              g_hash_table_add (grabber->priv->grabbed_keycodes, pg);
+              TRACE ("group %d, keycode %u, non_virtual_modifiers 0x%x: refcount := %u",
+                     (*keys)[i].group, g.keycode, g.non_virtual_modifiers, pg->refcount);
+              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 */
+          pg->refcount++;
+          TRACE ("group %d, keycode %u, non_virtual_modifiers 0x%x: ++refcount = %u",
+                 (*keys)[i].group, g.keycode, g.non_virtual_modifiers, pg->refcount);
+          i++;
+        }
+    }
 
-  regrab = g_new (XfceKey *, g_hash_table_size (grabber->priv->keys));
+  if (*n_keys == 0)
+    {
+      g_free (*keys);
+      *keys = NULL;
+    }
+}
+
+
+
+static void
+xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
+{
+  GdkKeymap *keymap = gdk_keymap_get_for_display (gdk_display_get_default ());
+  GHashTableIter iter;
+  XfceKey *key;
+  guint n_already_grabbed = 0;
+  guint n_regrab = 0;
+  XfceKey **regrab = g_new (XfceKey *, g_hash_table_size (grabber->priv->keys));
+  guint numlock_modifier = XkbKeysymToModifiers (gdk_x11_get_default_xdisplay (), GDK_KEY_Num_Lock);
+  gint group = 0;
+#if TRACK_LAYOUT_CHANGE
+  group = MAX (0, grabber->priv->xkbStateGroup);
+#endif
 
   /* 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))
+  while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &key))
   {
-    XfceKey         *const key = hash_value;
     GdkKeymapKey    *keys;
     GdkModifierType  non_virtual_modifiers;
     guint            n_keys;
@@ -483,7 +516,7 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
 
     if (!map_virtual_modifiers (keymap, key->modifiers, &non_virtual_modifiers))
       continue;
-    if (!get_entries_for_keyval (keymap, group, key->keyval, &keys, &n_keys))
+    if (!get_entries_for_keyval (keymap, group, key->keyval, key->modifiers, &keys, &n_keys))
       continue;
 
     already_grabbed = TRUE;
@@ -491,8 +524,7 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
         key->non_virtual_modifiers == non_virtual_modifiers &&
         key->numlock_modifier == numlock_modifier)
       {
-        guint j;
-        for (j = 0; j < n_keys; j++)
+        for (guint j = 0; j < n_keys; j++)
           if (memcmp (&key->keys[j], &keys[j], sizeof(*keys)) != 0)
             {
               already_grabbed = FALSE;
@@ -511,89 +543,29 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
       {
         /* Undo current X11 grabs of the key */
         if (key->n_keys != 0)
-          xfce_shortcuts_grabber_ungrab (grabber, key);
+          {
+            xfce_shortcuts_grabber_ungrab (grabber, key);
+            g_free (key->keys);
+          }
 
         /* 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->keys = keys;
         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 */
-        if (n_keys != 0)
-          regrab[n_regrab++] = key;
+        regrab[n_regrab++] = key;
       }
   }
 
   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
+  for (guint i = 0; i < n_regrab; i++)
     {
-      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);
+      key = regrab[i];
+      _xfce_shortcuts_grabber_grab (grabber, key, key->non_virtual_modifiers,
+                                    numlock_modifier, &key->keys, &key->n_keys);
     }
-#endif
-
-    /* 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;
-      }
-  }
 
   g_free (regrab);
 }
@@ -601,140 +573,68 @@ xfce_shortcuts_grabber_regrab_all (XfceShortcutsGrabber *grabber)
 
 
 static void
-xfce_shortcuts_grabber_grab (XfceShortcutsGrabber *grabber, XfceKey *key)
+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;
-  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;
+  GdkKeymap *keymap = gdk_keymap_get_for_display (gdk_display_get_default ());
+  GdkKeymapKey *keys;
+  GdkModifierType non_virtual_modifiers;
+  guint numlock_modifier = XkbKeysymToModifiers (gdk_x11_get_default_xdisplay (), GDK_KEY_Num_Lock);
+  guint n_keys;
+  gint group = 0;
+#if TRACK_LAYOUT_CHANGE
+  group = MAX (0, grabber->priv->xkbStateGroup);
+#endif
 
   if (!map_virtual_modifiers (keymap, key->modifiers, &non_virtual_modifiers))
     return;
-  if (!get_entries_for_keyval (keymap, group, key->keyval, &keys, &n_keys))
+  if (!get_entries_for_keyval (keymap, group, key->keyval, key->modifiers, &keys, &n_keys))
     return;
 
-#ifdef DEBUG_TRACE
-  {
-    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);
-    }
-
-  /* Grab all hardware keys generating keyval */
-  for (i = 0; i < n_keys;)
-    {
-      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++;
-        }
-    }
+  _xfce_shortcuts_grabber_grab (grabber, key, non_virtual_modifiers, numlock_modifier, &keys, &n_keys);
 
   /* Set key->keys to the list of keys that been succesfully grabbed */
-  g_free (key->keys);
-  key->keys = NULL;
+  key->keys = keys;
   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;
 }
 
-static void
-xfce_shortcuts_grabber_ungrab (XfceShortcutsGrabber *grabber, XfceKey *key)
-{
-  GHashTable *grabbed_keycodes;
-  guint       i;
 
-  grabbed_keycodes = grabber->priv->grabbed_keycodes;
 
+static void
+xfce_shortcuts_grabber_ungrab (XfceShortcutsGrabber *grabber,
+                               XfceKey *key)
+{
 #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);
-  }
+  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++)
+  for (guint i = 0; i < key->n_keys; i++)
     {
       XfceXGrab g;
-      gpointer  refcount;
+      XfceXGrab *pg;
 
       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)))
+      if (G_LIKELY (g_hash_table_lookup_extended (grabber->priv->grabbed_keycodes, &g, (gpointer *) &pg, NULL)))
         {
-          XfceXGrabRefcount *refcount1 = refcount;
-          if (G_LIKELY (*refcount1 != 0))
+          if (G_LIKELY (pg->refcount != 0))
             {
-              (*refcount1)--;
+              pg->refcount--;
               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)
+                     key->keys[i].group, g.keycode, g.non_virtual_modifiers, pg->refcount);
+              if (pg->refcount == 0)
                 {
                   xfce_shortcuts_grabber_xgrab (g, FALSE);
-                  g_hash_table_remove (grabbed_keycodes, &g);
+                  g_hash_table_remove (grabber->priv->grabbed_keycodes, pg);
                 }
             }
           else
@@ -790,24 +690,49 @@ find_event_key (const gchar                *shortcut,
 
 
 
+static gboolean
+is_modifier_key (struct EventKeyFindContext context)
+{
+  if (context.modifiers == 0)
+    {
+      switch (context.keyval)
+        {
+          case GDK_KEY_Control_L:
+          case GDK_KEY_Control_R:
+          case GDK_KEY_Alt_L:
+          case GDK_KEY_Alt_R:
+          case GDK_KEY_Super_L:
+          case GDK_KEY_Super_R:
+            return TRUE;
+        }
+    }
+
+  return FALSE;
+}
+
+
+
 static GdkFilterReturn
 xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
                                      GdkEvent  *event,
                                      gpointer   data)
 {
-  XfceShortcutsGrabber       *const grabber = data;
+  XfceShortcutsGrabber       *grabber = data;
   struct EventKeyFindContext  context;
-  GdkKeymap                  *keymap;
   GdkModifierType             consumed, modifiers;
   GdkDisplay                 *display;
-  XEvent                     *xevent;
+  XEvent                     *xevent = (XEvent *) gdk_xevent;
   guint                       keyval, mod_mask;
   gchar                      *raw_shortcut_name;
   gint                        timestamp;
+  gint                        group = 0;
 
-  g_return_val_if_fail (XFCE_IS_SHORTCUTS_GRABBER (grabber), GDK_FILTER_CONTINUE);
+  /* We only activate single modifier keys on release event to allow combinations
+   * such as Super to open a menu and Super+T to open a terminal: see
+   * https://gitlab.xfce.org/xfce/libxfce4ui/-/issues/1 */
+  static gboolean             single_modifier_down = FALSE;
 
-  xevent = (XEvent *) gdk_xevent;
+  g_return_val_if_fail (XFCE_IS_SHORTCUTS_GRABBER (grabber), GDK_FILTER_CONTINUE);
 
 #if TRACK_LAYOUT_CHANGE
   if (xevent->type == grabber->priv->xkbEventType)
@@ -823,9 +748,10 @@ xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
             }
         }
     }
+  group = grabber->priv->xkbStateGroup;
 #endif
 
-  if (xevent->type != KeyPress)
+  if (xevent->type != KeyPress && !(xevent->type == KeyRelease && single_modifier_down))
     return GDK_FILTER_CONTINUE;
 
   context.result = NULL;
@@ -834,13 +760,15 @@ xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
   /* Get the keyboard state */
   display = gdk_display_get_default ();
   gdk_x11_display_error_trap_push (display);
-  keymap = gdk_keymap_get_for_display (display);
   mod_mask = gtk_accelerator_get_default_mod_mask ();
   modifiers = xevent->xkey.state;
 
-  gdk_keymap_translate_keyboard_state (keymap, xevent->xkey.keycode,
-                                       modifiers,
-                                       grabber->priv->xkbStateGroup,
+  /* Remove modifier added to single modifier key on release event */
+  if (xevent->type == KeyRelease && single_modifier_down)
+    modifiers = 0;
+
+  gdk_keymap_translate_keyboard_state (gdk_keymap_get_for_display (display),
+                                       xevent->xkey.keycode, modifiers, group,
                                        &keyval, NULL, NULL, &consumed);
 
   /* We want Alt + Print to be Alt + Print not SysReq. See bug #7897 */
@@ -886,14 +814,23 @@ xfce_shortcuts_grabber_event_filter (GdkXEvent *gdk_xevent,
   TRACE ("Looking for %s", raw_shortcut_name);
   g_free (raw_shortcut_name);
 
-  g_hash_table_find (grabber->priv->keys,
-                     (GHRFunc) (void (*)(void)) find_event_key,
-                     &context);
+  g_hash_table_find (grabber->priv->keys, (GHRFunc) find_event_key, &context);
 
+  single_modifier_down = FALSE;
   if (G_LIKELY (context.result != NULL))
-    /* We had a positive match */
-    g_signal_emit_by_name (grabber, "shortcut-activated",
-                           context.result, timestamp);
+    {
+      /* We had a positive match */
+      if (xevent->type == KeyPress && is_modifier_key (context))
+        {
+          /* Will be activated on release event */
+          single_modifier_down = TRUE;
+        }
+      else
+        {
+          g_signal_emit_by_name (grabber, "shortcut-activated",
+                                 context.result, timestamp);
+        }
+    }
 
   gdk_display_flush (display);
   gdk_x11_display_error_trap_pop_ignored (display);


=====================================
libxfce4ui/libxfce4ui-config.h
=====================================
@@ -53,13 +53,13 @@ G_BEGIN_DECLS
  * that can be used by the C pre-processor.
  *
  */
-#define LIBXFCE4UI_MICRO_VERSION (2)
+#define LIBXFCE4UI_MICRO_VERSION (3)
 
 /**
  * LIBXFCE4UI_CHECK_VERSION:
  * @major : The major version of the library, i.e. 4
  * @minor : The minor version of the library, i.e. 19
- * @micro : The micro release of the library, i.e. 2
+ * @micro : The micro release of the library, i.e. 3
  *
  * A macro to compare libxfce4ui versions to determine if a particular
  * function is available.


=====================================
libxfce4ui/xfce-spawn.c
=====================================
@@ -305,7 +305,7 @@ xfce_spawn_process (GdkScreen    *screen,
       if (startup_notify == TRUE)
         {
           /* 'sn_display_new' crashes when used via wayland, so no startup notification support here */
-          g_warning ("startup notification not supported for wayland sessions");
+          g_warning_once ("startup notification not supported for wayland sessions");
           startup_notify = FALSE;
         }
     }


=====================================
libxfce4ui/xfce-titled-dialog.c
=====================================
@@ -61,6 +61,7 @@ enum
 static GObject *xfce_titled_dialog_constructor    (GType                   type,
                                                    guint                   n_construct_params,
                                                    GObjectConstructParam  *construct_params);
+static void     xfce_titled_dialog_constructed    (GObject                *object);
 static void     xfce_titled_dialog_finalize       (GObject                *object);
 static void     xfce_titled_dialog_get_property   (GObject                *object,
                                                    guint                   prop_id,
@@ -72,18 +73,18 @@ static void     xfce_titled_dialog_set_property   (GObject                *objec
                                                    GParamSpec             *pspec);
 static void     xfce_titled_dialog_close          (GtkDialog              *dialog);
 static void     xfce_titled_dialog_update_window  (XfceTitledDialog       *titled_dialog);
-static void     xfce_titled_dialog_update_icon    (XfceTitledDialog       *titled_dialog);
+static void     xfce_titled_dialog_update_layout  (GObject                *settings,
+                                                   GParamSpec             *pspec,
+                                                   XfceTitledDialog       *titled_dialog);
 
 
 
 struct _XfceTitledDialogPrivate
 {
   GtkWidget *headerbar;
-  GtkWidget *icon;
   GtkWidget *action_area;
   GtkWidget *subtitle_label;
   GtkWidget *subtitle_separator;
-  GdkPixbuf *pixbuf;
   gchar     *subtitle;
   gboolean   use_header;
 };
@@ -110,6 +111,7 @@ xfce_titled_dialog_class_init (XfceTitledDialogClass *klass)
 
   gobject_class = G_OBJECT_CLASS (klass);
   gobject_class->constructor = xfce_titled_dialog_constructor;
+  gobject_class->constructed = xfce_titled_dialog_constructed;
   gobject_class->get_property = xfce_titled_dialog_get_property;
   gobject_class->set_property = xfce_titled_dialog_set_property;
   gobject_class->finalize = xfce_titled_dialog_finalize;
@@ -166,6 +168,10 @@ xfce_titled_dialog_init (XfceTitledDialog *titled_dialog)
   settings = gtk_settings_get_default ();
   g_object_get (settings, "gtk-dialogs-use-header", &titled_dialog->priv->use_header, NULL);
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+  titled_dialog->priv->action_area = gtk_dialog_get_action_area (GTK_DIALOG (titled_dialog));
+G_GNUC_END_IGNORE_DEPRECATIONS
+
   if (titled_dialog->priv->use_header)
     {
       g_object_set (G_OBJECT (titled_dialog), "use-header-bar", TRUE, NULL);
@@ -177,19 +183,14 @@ xfce_titled_dialog_init (XfceTitledDialog *titled_dialog)
       /* Don't reserve vertical space for subtitles */
       gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (titled_dialog->priv->headerbar), FALSE);
 
-      /* Pack the window icon into the headerbar */
-      titled_dialog->priv->icon = gtk_image_new ();
-      gtk_header_bar_pack_start (GTK_HEADER_BAR (titled_dialog->priv->headerbar), titled_dialog->priv->icon);
-      gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (titled_dialog->priv->headerbar), TRUE);
-      gtk_widget_show (titled_dialog->priv->icon);
-      titled_dialog->priv->pixbuf = NULL;
-
       /* Adjust window buttons and window placement */
+      gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (titled_dialog->priv->headerbar), TRUE);
       g_signal_connect (G_OBJECT (titled_dialog), "notify::window", G_CALLBACK (xfce_titled_dialog_update_window), NULL);
 
-      /* Make sure to update the icon whenever one of the relevant window properties changes */
-      g_signal_connect (G_OBJECT (titled_dialog), "notify::icon", G_CALLBACK (xfce_titled_dialog_update_icon), NULL);
-      g_signal_connect (G_OBJECT (titled_dialog), "notify::icon-name", G_CALLBACK (xfce_titled_dialog_update_icon), NULL);
+      /* Add icon to the layout if needed */
+      xfce_titled_dialog_update_layout (G_OBJECT (settings), NULL, titled_dialog);
+      g_signal_connect_object (settings, "notify::gtk-decoration-layout",
+                               G_CALLBACK (xfce_titled_dialog_update_layout), titled_dialog, 0);
     }
   else
     {
@@ -224,19 +225,63 @@ xfce_titled_dialog_init (XfceTitledDialog *titled_dialog)
 
 
 static void
-xfce_titled_dialog_finalize (GObject *object)
+xfce_titled_dialog_constructed (GObject *object)
 {
   XfceTitledDialog *titled_dialog = XFCE_TITLED_DIALOG (object);
+  GList *children = NULL;
 
-  /* release the subtitle */
-  g_free (titled_dialog->priv->subtitle);
+  /* remove and save all buttons from action area */
+  if (titled_dialog->priv->use_header)
+    {
+      children = gtk_container_get_children (GTK_CONTAINER (titled_dialog->priv->action_area));
+
+      for (GList *l = children; l != NULL; l = l->next)
+        {
+          g_object_ref (l->data);
+          gtk_container_remove (GTK_CONTAINER (titled_dialog->priv->action_area), l->data);
+        }
+    }
+
+  G_OBJECT_CLASS (xfce_titled_dialog_parent_class)->constructed (object);
 
-  /* release the pixbuf */
-  if (titled_dialog->priv->pixbuf)
+  if (titled_dialog->priv->use_header)
     {
-      g_object_unref (titled_dialog->priv->pixbuf);
-      titled_dialog->priv->pixbuf = NULL;
+      /* undo some unwanted GTK actions in constructed() */
+      GtkWidget *action_box = gtk_widget_get_parent (titled_dialog->priv->action_area);
+      gtk_widget_set_no_show_all (action_box, FALSE);
+      gtk_widget_show (action_box);
+      g_signal_handlers_disconnect_matched (titled_dialog->priv->action_area,
+                                            G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_DATA,
+                                            g_signal_lookup ("add", GTK_TYPE_CONTAINER),
+                                            0, NULL, NULL, titled_dialog);
+
+      /* putting back buttons to action area */
+      for (GList *l = children; l != NULL; l = l->next)
+        {
+          ResponseData *rd = g_object_get_data (l->data, "gtk-dialog-response-data");
+          gint response_id = rd != NULL ? rd->response_id : GTK_RESPONSE_NONE;
+
+          gtk_container_add (GTK_CONTAINER (titled_dialog->priv->action_area), l->data);
+          g_object_unref (l->data);
+
+          /* always add help button as secondary */
+          if (response_id == GTK_RESPONSE_HELP)
+            gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (titled_dialog->priv->action_area), l->data, TRUE);
+        }
+
+      g_list_free (children);
     }
+}
+
+
+
+static void
+xfce_titled_dialog_finalize (GObject *object)
+{
+  XfceTitledDialog *titled_dialog = XFCE_TITLED_DIALOG (object);
+
+  /* release the subtitle */
+  g_free (titled_dialog->priv->subtitle);
 
   (*G_OBJECT_CLASS (xfce_titled_dialog_parent_class)->finalize) (object);
 }
@@ -323,27 +368,29 @@ xfce_titled_dialog_update_window (XfceTitledDialog *titled_dialog)
 
 
 static void
-xfce_titled_dialog_update_icon (XfceTitledDialog *titled_dialog)
+xfce_titled_dialog_update_layout (GObject *settings,
+                                  GParamSpec *pspec,
+                                  XfceTitledDialog *titled_dialog)
 {
-  const gchar *icon_name;
+  gchar *layout;
 
-  icon_name = gtk_window_get_icon_name (GTK_WINDOW (titled_dialog));
+  g_object_get (settings, "gtk-decoration-layout", &layout, NULL);
 
-  if (icon_name)
-    {
-      gtk_image_set_from_icon_name (GTK_IMAGE (titled_dialog->priv->icon), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR);
-      gtk_image_set_pixel_size (GTK_IMAGE (titled_dialog->priv->icon), 24);
-    }
-  else
+  /* add icon on the far left of the header bar if not already present */
+  if (g_strstr_len (layout, -1, "icon") == NULL)
     {
-      if (titled_dialog->priv->pixbuf)
-          g_object_unref (titled_dialog->priv->pixbuf);
-      titled_dialog->priv->pixbuf = gtk_window_get_icon (GTK_WINDOW (titled_dialog));
-      gtk_image_set_from_pixbuf (GTK_IMAGE (titled_dialog->priv->icon), titled_dialog->priv->pixbuf);
+      const gchar *separator = (g_strstr_len (layout, -1, ":") == NULL) ? ":" : ",";
+      gchar *layout_with_icon = g_strconcat ("icon", separator, layout, NULL);
+      g_free (layout);
+      layout = layout_with_icon;
     }
+
+  gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR (titled_dialog->priv->headerbar), layout);
+  g_free (layout);
 }
 
 
+
 /* Borrowed from gtkdialog.c */
 static void
 response_data_free (gpointer data)
@@ -418,28 +465,6 @@ add_response_data (GtkDialog *dialog,
 
 
 
-/* Repack all the buttons that would normally end up in the headerbar to the action area */
-static void
-xfce_titled_dialog_repack_dialog (GtkWidget *action_area,
-                                  GtkWidget *headerbar,
-                                  GtkWidget *button,
-                                  gint       response_id)
-{
-  g_return_if_fail (GTK_IS_WIDGET (action_area));
-  g_return_if_fail (GTK_IS_WIDGET (headerbar));
-  g_return_if_fail (GTK_IS_WIDGET (button));
-
-  g_object_ref (G_OBJECT (button));
-  gtk_container_remove (GTK_CONTAINER (headerbar), button);
-  gtk_container_add (GTK_CONTAINER (action_area), button);
-  g_object_unref (G_OBJECT (button));
-  /* always add help buttons as secondary */
-  if (response_id == GTK_RESPONSE_HELP)
-    gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (action_area), button, TRUE);
-}
-
-
-
 /**
  * xfce_titled_dialog_new:
  *
@@ -480,8 +505,6 @@ xfce_titled_dialog_new_with_buttons (const gchar    *title,
   const gchar *button_text;
   GtkWidget   *dialog;
   GtkWidget   *button;
-  GtkWidget   *headerbar;
-  GtkWidget   *action_area;
   va_list      args;
   gint         response_id;
 
@@ -496,11 +519,6 @@ xfce_titled_dialog_new_with_buttons (const gchar    *title,
   if (G_LIKELY (parent != NULL))
     gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
 
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-  action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog));
-G_GNUC_END_IGNORE_DEPRECATIONS
-  headerbar = gtk_dialog_get_header_bar (GTK_DIALOG (dialog));
-
   /* add all additional buttons */
   va_start (args, first_button_text);
   for (button_text = first_button_text; button_text != NULL; )
@@ -509,9 +527,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
       button = gtk_button_new_from_stock (button_text);
 G_GNUC_END_IGNORE_DEPRECATIONS
-      gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, response_id);
-      if (XFCE_TITLED_DIALOG (dialog)->priv->use_header)
-        xfce_titled_dialog_repack_dialog (action_area, headerbar, button, response_id);
+      xfce_titled_dialog_add_action_widget (XFCE_TITLED_DIALOG (dialog), button, response_id);
       button_text = va_arg (args, const gchar *);
     }
   va_end (args);
@@ -549,8 +565,6 @@ xfce_titled_dialog_new_with_mixed_buttons (const gchar    *title,
   const gchar *icon_name;
   const gchar *button_text;
   GtkWidget   *dialog;
-  GtkWidget   *headerbar;
-  GtkWidget   *action_area;
   va_list      args;
   gint         response_id;
 
@@ -565,11 +579,6 @@ xfce_titled_dialog_new_with_mixed_buttons (const gchar    *title,
   if (G_LIKELY (parent != NULL))
     gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
 
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-  action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog));
-G_GNUC_END_IGNORE_DEPRECATIONS
-  headerbar = gtk_dialog_get_header_bar (GTK_DIALOG (dialog));
-
   /* add all additional buttons */
   icon_name = first_button_icon_name;
   button_text = first_button_text;
@@ -586,9 +595,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
       button = xfce_gtk_button_new_mixed (icon_name, button_text);
       gtk_widget_set_can_default (button, TRUE);
 
-      gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, response_id);
-      if (XFCE_TITLED_DIALOG (dialog)->priv->use_header)
-        xfce_titled_dialog_repack_dialog (action_area, headerbar, button, response_id);
+      xfce_titled_dialog_add_action_widget (XFCE_TITLED_DIALOG (dialog), button, response_id);
       gtk_widget_show (button);
 
       /* this is to pickup for the next button.
@@ -602,10 +609,6 @@ G_GNUC_END_IGNORE_DEPRECATIONS
     }
   va_end (args);
 
-  /* since we just removed all buttons from the headerbar we have to show the close button again explicitly */
-  if (XFCE_TITLED_DIALOG (dialog)->priv->use_header)
-    gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headerbar), TRUE);
-
   return dialog;
 }
 
@@ -615,33 +618,15 @@ G_GNUC_END_IGNORE_DEPRECATIONS
  * xfce_titled_dialog_create_action_area:
  * @titled_dialog : a #XfceTitledDialog.
  *
- * This function creates a custom action area (of type #GtkButtonBox) and has to
- * be used in combination with #xfce_titled_dialog_add_action_widget.
- *
- * When using the XfceTitledDialogClass directly to create dialogs this function is
- * useful to keep action widgets out of the #GtkHeaderBar in which they would
- * normally end up by calling #gtk_dialog_add_action_widget.
+ * This function is a no-op since 4.19.3.
  *
  * Since: 4.16
  *
+ * Deprecated: 4.19.3
  **/
 void
 xfce_titled_dialog_create_action_area (XfceTitledDialog *titled_dialog)
 {
-  GtkWidget *dialog_vbox;
-
-  g_return_if_fail (XFCE_IS_TITLED_DIALOG (titled_dialog));
-
-  /* Create new buttonbox to act as custom action area for the dialog */
-  titled_dialog->priv->action_area = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
-  gtk_button_box_set_layout (GTK_BUTTON_BOX (titled_dialog->priv->action_area), GTK_BUTTONBOX_END);
-  gtk_box_set_spacing (GTK_BOX (titled_dialog->priv->action_area), 6);
-
-  /* Pack the buttonbox in the dialog's main vbox */
-  dialog_vbox = gtk_bin_get_child (GTK_BIN (titled_dialog));
-  gtk_box_pack_end (GTK_BOX (dialog_vbox), titled_dialog->priv->action_area, FALSE, TRUE, 0);
-  gtk_box_reorder_child (GTK_BOX (dialog_vbox), titled_dialog->priv->action_area, 0);
-  gtk_widget_show (titled_dialog->priv->action_area);
 }
 
 
@@ -652,8 +637,7 @@ xfce_titled_dialog_create_action_area (XfceTitledDialog *titled_dialog)
  * @button_text   : text of button.
  * @response_id   : response ID for @child.
  *
- * This function is a replacement for #gtk_dialog_add_button and assumes that
- * you have called #xfce_titled_dialog_create_action_area before.
+ * This function is a replacement for #gtk_dialog_add_button.
  *
  * Buttons with #GTK_RESPONSE_HELP will be added to the secondary group of children
  * (see #gtk_button_box_set_child_secondary for reference).
@@ -690,8 +674,7 @@ xfce_titled_dialog_add_button (XfceTitledDialog *titled_dialog,
  * @child         : an activatable widget.
  * @response_id   : response ID for @child.
  *
- * This function is a replacement for #gtk_dialog_add_action_widget and assumes that
- * you have called #xfce_titled_dialog_create_action_area before.
+ * This function is a replacement for #gtk_dialog_add_action_widget.
  *
  * Children with #GTK_RESPONSE_HELP will be added to the secondary group of children
  * (see #gtk_button_box_set_child_secondary for reference).
@@ -738,17 +721,12 @@ void
 xfce_titled_dialog_set_default_response (XfceTitledDialog *titled_dialog,
                                          gint              response_id)
 {
-  GtkWidget *action_area;
   GList     *children;
   GList     *tmp_list;
 
   g_return_if_fail (XFCE_IS_TITLED_DIALOG (titled_dialog));
 
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-  action_area = gtk_dialog_get_action_area (GTK_DIALOG (titled_dialog));
-G_GNUC_END_IGNORE_DEPRECATIONS
-
-  children = gtk_container_get_children (GTK_CONTAINER (action_area));
+  children = gtk_container_get_children (GTK_CONTAINER (titled_dialog->priv->action_area));
   tmp_list = children;
   while (tmp_list != NULL)
     {
@@ -756,7 +734,10 @@ G_GNUC_END_IGNORE_DEPRECATIONS
       ResponseData *rd = get_response_data (widget, FALSE);
 
       if (rd && rd->response_id == response_id)
-        gtk_window_set_default (GTK_WINDOW (titled_dialog), widget);
+        {
+          gtk_widget_set_can_default (widget, TRUE);
+          gtk_window_set_default (GTK_WINDOW (titled_dialog), widget);
+        }
 
       tmp_list = tmp_list->next;
     }


=====================================
libxfce4ui/xfce-titled-dialog.h
=====================================
@@ -82,7 +82,7 @@ GtkWidget            *xfce_titled_dialog_new_with_mixed_buttons (const gchar
                                                                  const gchar    *first_button_text,
                                                                  ...) G_GNUC_MALLOC;
 
-void                  xfce_titled_dialog_create_action_area   (XfceTitledDialog *titled_dialog);
+void                  xfce_titled_dialog_create_action_area   (XfceTitledDialog *titled_dialog) G_GNUC_DEPRECATED;
 GtkWidget            *xfce_titled_dialog_add_button           (XfceTitledDialog *titled_dialog,
                                                                const gchar      *button_text,
                                                                gint              response_id);


=====================================
po/da.gmo
=====================================
Binary files a/po/da.gmo and b/po/da.gmo differ


=====================================
po/da.po
=====================================
@@ -11,14 +11,14 @@
 # olegb <olegb at omgwtf.dk>, 2008
 # olegb <olegb at omgwtf.dk>, 2008
 # Per Kongstad <p_kongstad at op.pl>, 2009
-# scootergrisen, 2016-2022
+# scootergrisen, 2016-2023
 msgid ""
 msgstr ""
 "Project-Id-Version: Libxfce4ui\n"
 "Report-Msgid-Bugs-To: https://gitlab.xfce.org/\n"
-"POT-Creation-Date: 2023-04-06 12:45+0200\n"
+"POT-Creation-Date: 2023-05-30 00:45+0200\n"
 "PO-Revision-Date: 2013-07-02 20:33+0000\n"
-"Last-Translator: scootergrisen, 2016-2022\n"
+"Last-Translator: scootergrisen, 2016-2023\n"
 "Language-Team: Danish (http://app.transifex.com/xfce/libxfce4ui/language/da/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -224,7 +224,7 @@ msgstr "Genvejsredigering"
 
 #: libxfce4kbd-private/xfce-shortcuts-editor.c:380
 msgid "The current shortcut. Click to edit..."
-msgstr ""
+msgstr "Nuværende genvej. Klik for at redigere ..."
 
 #: libxfce4kbd-private/xfce-shortcuts-editor.c:391
 msgid "Clear the shortcut"
@@ -394,19 +394,19 @@ msgstr "Fuldskærm til/fra"
 
 #: libxfce4kbd-private/xfce-shortcuts-xfwm4.c:63
 msgid "Move window to lower monitor"
-msgstr ""
+msgstr "Flyt vindue til skærm nedenfor"
 
 #: libxfce4kbd-private/xfce-shortcuts-xfwm4.c:64
 msgid "Move window to left monitor"
-msgstr ""
+msgstr "Flyt vindue til venstre skærm"
 
 #: libxfce4kbd-private/xfce-shortcuts-xfwm4.c:65
 msgid "Move window to right monitor"
-msgstr ""
+msgstr "Flyt vindue til højre skærm"
 
 #: libxfce4kbd-private/xfce-shortcuts-xfwm4.c:66
 msgid "Move window to upper monitor"
-msgstr ""
+msgstr "Flyt vindue til skærm ovenfor"
 
 #: libxfce4kbd-private/xfce-shortcuts-xfwm4.c:67
 msgid "Move window to upper workspace"
@@ -791,10 +791,6 @@ msgstr "Oversættere"
 msgid "Previous contributors"
 msgstr "Tidligere bidragydere"
 
-#: xfce4-about/xfce4-about.desktop.in:6
-msgid "org.xfce.about"
-msgstr ""
-
 #: xfce4-about/xfce4-about.desktop.in:11
 msgid "About Xfce"
 msgstr "Om Xfce"
@@ -854,11 +850,11 @@ msgstr "Xfce-version"
 
 #: xfce4-about/xfce4-about-dialog.glade:564
 msgid "GTK Version"
-msgstr ""
+msgstr "GTK-version"
 
 #: xfce4-about/xfce4-about-dialog.glade:589
 msgid "Kernel Version"
-msgstr ""
+msgstr "Kernelversion"
 
 #: xfce4-about/xfce4-about-dialog.glade:615
 msgid "CPU"


=====================================
po/el.gmo
=====================================
Binary files a/po/el.gmo and b/po/el.gmo differ


=====================================
po/el.po
=====================================
@@ -17,9 +17,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Libxfce4ui\n"
 "Report-Msgid-Bugs-To: https://gitlab.xfce.org/\n"
-"POT-Creation-Date: 2023-04-06 12:45+0200\n"
+"POT-Creation-Date: 2023-05-30 00:45+0200\n"
 "PO-Revision-Date: 2013-07-02 20:33+0000\n"
-"Last-Translator: Πέτρος Σαμαράς <psamaras1 at gmail.com>, 2017\n"
+"Last-Translator: Ioannis LM, 2022-2023\n"
 "Language-Team: Greek (http://app.transifex.com/xfce/libxfce4ui/language/el/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -792,10 +792,6 @@ msgstr "Μεταφραστές"
 msgid "Previous contributors"
 msgstr "Προηγούμενοι συντελεστές"
 
-#: xfce4-about/xfce4-about.desktop.in:6
-msgid "org.xfce.about"
-msgstr ""
-
 #: xfce4-about/xfce4-about.desktop.in:11
 msgid "About Xfce"
 msgstr "Περί του Xfce"


=====================================
po/libxfce4ui.pot
=====================================
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: libxfce4ui 4.19.2\n"
+"Project-Id-Version: libxfce4ui 4.19.3\n"
 "Report-Msgid-Bugs-To: https://gitlab.xfce.org/xfce/libxfce4ui/-/issues\n"
-"POT-Creation-Date: 2023-05-29 17:47+0200\n"
+"POT-Creation-Date: 2023-10-14 09:43+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -38,7 +38,7 @@ msgstr ""
 
 #. Create cancel button
 #: libxfce4ui/xfce-dialogs.c:275 libxfce4ui/xfce-dialogs.c:533
-#: libxfce4kbd-private/xfce-shortcut-dialog.c:256
+#: libxfce4kbd-private/xfce-shortcut-dialog.c:254
 msgid "_Cancel"
 msgstr ""
 
@@ -262,20 +262,20 @@ msgstr ""
 msgid "Shortcut"
 msgstr ""
 
-#: libxfce4kbd-private/xfce-shortcut-dialog.c:250
+#: libxfce4kbd-private/xfce-shortcut-dialog.c:248
 msgid "Clear"
 msgstr ""
 
-#: libxfce4kbd-private/xfce-shortcut-dialog.c:273
+#: libxfce4kbd-private/xfce-shortcut-dialog.c:271
 #, c-format
 msgid "Press keyboard keys to trigger the %s '%s'."
 msgstr ""
 
-#: libxfce4kbd-private/xfce-shortcut-dialog.c:295
+#: libxfce4kbd-private/xfce-shortcut-dialog.c:293
 msgid "Please press a key"
 msgstr ""
 
-#: libxfce4kbd-private/xfce-shortcut-dialog.c:350
+#: libxfce4kbd-private/xfce-shortcut-dialog.c:348
 msgid "Could not grab the keyboard."
 msgstr ""
 
@@ -599,120 +599,120 @@ msgstr ""
 msgid "Version information"
 msgstr ""
 
-#: xfce4-about/main.c:128
+#: xfce4-about/main.c:154
 msgid "GPUs"
 msgstr ""
 
-#: xfce4-about/main.c:146
+#: xfce4-about/main.c:172
 msgid "Window Manager"
 msgstr ""
 
-#: xfce4-about/main.c:147
+#: xfce4-about/main.c:173
 msgid "Handles the placement of windows on the screen."
 msgstr ""
 
-#: xfce4-about/main.c:151
+#: xfce4-about/main.c:177
 msgid "Panel"
 msgstr ""
 
-#: xfce4-about/main.c:152
+#: xfce4-about/main.c:178
 msgid "Provides a home for window buttons, launchers, app menu and more."
 msgstr ""
 
-#: xfce4-about/main.c:156
+#: xfce4-about/main.c:182
 msgid "Desktop Manager"
 msgstr ""
 
-#: xfce4-about/main.c:157
+#: xfce4-about/main.c:183
 msgid "Sets desktop backgrounds, handles icons and more."
 msgstr ""
 
-#: xfce4-about/main.c:161
+#: xfce4-about/main.c:187
 msgid "File Manager"
 msgstr ""
 
-#: xfce4-about/main.c:162
+#: xfce4-about/main.c:188
 msgid "Manages your files in a modern, easy-to-use and fast way."
 msgstr ""
 
-#: xfce4-about/main.c:166
+#: xfce4-about/main.c:192
 msgid "Volume Manager"
 msgstr ""
 
-#: xfce4-about/main.c:167
+#: xfce4-about/main.c:193
 msgid "Manages removable drives and media for Thunar."
 msgstr ""
 
-#: xfce4-about/main.c:171
+#: xfce4-about/main.c:197
 msgid "Session Manager"
 msgstr ""
 
-#: xfce4-about/main.c:172
+#: xfce4-about/main.c:198
 msgid ""
 "Saves and restores your session, handles startup, autostart and shutdown."
 msgstr ""
 
-#: xfce4-about/main.c:176
+#: xfce4-about/main.c:202
 msgid "Settings Manager"
 msgstr ""
 
-#: xfce4-about/main.c:177
+#: xfce4-about/main.c:203
 msgid "Configures appearance, display, keyboard and mouse settings."
 msgstr ""
 
-#: xfce4-about/main.c:181
+#: xfce4-about/main.c:207
 msgid "Application Finder"
 msgstr ""
 
-#: xfce4-about/main.c:182
+#: xfce4-about/main.c:208
 msgid "Quickly finds and launches applications installed on your system."
 msgstr ""
 
-#: xfce4-about/main.c:186
+#: xfce4-about/main.c:212
 msgid "Settings Daemon"
 msgstr ""
 
-#: xfce4-about/main.c:187
+#: xfce4-about/main.c:213
 msgid "Stores your settings in a D-Bus-based configuration system."
 msgstr ""
 
-#: xfce4-about/main.c:191
+#: xfce4-about/main.c:217
 msgid "A Menu Library"
 msgstr ""
 
-#: xfce4-about/main.c:192
+#: xfce4-about/main.c:218
 msgid "Implements a freedesktop.org compliant menu based on GLib and GIO."
 msgstr ""
 
-#: xfce4-about/main.c:196
+#: xfce4-about/main.c:222
 msgid "Thumbnails Service"
 msgstr ""
 
-#: xfce4-about/main.c:197
+#: xfce4-about/main.c:223
 msgid "Implements the thumbnail management D-Bus specification."
 msgstr ""
 
-#: xfce4-about/main.c:251
+#: xfce4-about/main.c:277
 msgid "Please see <https://www.xfce.org/about/credits>"
 msgstr ""
 
-#: xfce4-about/main.c:312
+#: xfce4-about/main.c:338
 msgid ""
 "If you know of anyone missing from this list; don't hesitate and file a bug "
 "on <https://gitlab.xfce.org/xfce/libxfce4ui/-/issues> ."
 msgstr ""
 
-#: xfce4-about/main.c:316
+#: xfce4-about/main.c:342
 msgid "Thanks to all who helped making this software available!"
 msgstr ""
 
-#: xfce4-about/main.c:333
+#: xfce4-about/main.c:359
 msgid ""
 "Xfce 4 is copyright Olivier Fourdan (fourdan at xfce.org). The different "
 "components are copyrighted by their respective authors."
 msgstr ""
 
-#: xfce4-about/main.c:338
+#: xfce4-about/main.c:364
 msgid ""
 "The libxfce4ui, libxfce4util and exo packages are distributed under the "
 "terms of the GNU Library General Public License as published by the Free "
@@ -720,7 +720,7 @@ msgid ""
 "any later version."
 msgstr ""
 
-#: xfce4-about/main.c:345
+#: xfce4-about/main.c:371
 msgid ""
 "The packages thunar, xfce4-appfinder, xfce4-panel, xfce4-session, xfce4-"
 "settings, xfconf, xfdesktop and xfwm4 are distributed under the terms of the "
@@ -728,25 +728,25 @@ msgid ""
 "either version 2 of the License, or (at your option) any later version."
 msgstr ""
 
-#: xfce4-about/main.c:491
+#: xfce4-about/main.c:517
 #, c-format
 msgid "Type '%s --help' for usage information."
 msgstr ""
 
-#: xfce4-about/main.c:497
+#: xfce4-about/main.c:523
 msgid "Unable to initialize GTK+."
 msgstr ""
 
-#: xfce4-about/main.c:506
+#: xfce4-about/main.c:532
 msgid "The Xfce development team. All rights reserved."
 msgstr ""
 
-#: xfce4-about/main.c:507
+#: xfce4-about/main.c:533
 #, c-format
 msgid "Please report bugs to <%s>."
 msgstr ""
 
-#: xfce4-about/main.c:517
+#: xfce4-about/main.c:543
 msgid "Failed to load interface"
 msgstr ""
 


=====================================
po/pt_BR.gmo
=====================================
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ


=====================================
po/pt_BR.po
=====================================
@@ -1,21 +1,26 @@
 # SOME DESCRIPTIVE TITLE.
 # Copyright (C) YEAR Xfce
-# This file is distributed under the same license as the libxfce4ui.xfce-4-18 package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# This file is distributed under the same license as the libxfce4ui.master package.
 # 
 # Translators:
-# Xfce Bot <transifex at xfce.org>, 2023
-# Michael Martins <michaelfm21 at gmail.com>, 2023
-# 
-#, fuzzy
+# Andre Miranda <andre at andreldm.com>, 2017,2019,2021-2022
+# Andre Miranda <andre at andreldm.com>, 2016
+# Andre Miranda <andre at andreldm.com>, 2015
+# C. E., 2020
+# Fábio Nogueira <deb-user-ba at ubuntu.com>, 2008
+# Lucas Wilm <lucaswilm at gmail.com>, 2020
+# Michael Martins <michaelfm21 at gmail.com>, 2019-2020
+# Rafael Fontenelle <rffontenelle at gmail.com>, 2019
+# The Cat, 2020
+# Wellington Almeida <wsalmeida6 at gmail.com>, 2021
 msgid ""
 msgstr ""
-"Project-Id-Version: libxfce4ui.xfce-4-18\n"
+"Project-Id-Version: Libxfce4ui\n"
 "Report-Msgid-Bugs-To: https://gitlab.xfce.org/\n"
-"POT-Creation-Date: 2023-04-06 12:45+0200\n"
-"PO-Revision-Date: 2023-02-20 11:56+0000\n"
-"Last-Translator: Michael Martins <michaelfm21 at gmail.com>, 2023\n"
-"Language-Team: Portuguese (Brazil) (https://app.transifex.com/xfce/teams/16840/pt_BR/)\n"
+"POT-Creation-Date: 2023-05-30 00:45+0200\n"
+"PO-Revision-Date: 2013-07-02 20:33+0000\n"
+"Last-Translator: Andre Miranda <andre at andreldm.com>, 2017,2019,2021-2022\n"
+"Language-Team: Portuguese (Brazil) (http://app.transifex.com/xfce/libxfce4ui/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -29,7 +34,7 @@ msgstr "Falha ao abrir o navegador web para mostrar a documentação online"
 #: libxfce4ui/xfce-dialogs.c:265
 #, c-format
 msgid "Do you want to read the %s manual online?"
-msgstr "Você quer ler o manual online do %s?"
+msgstr "Você quer ler online o manual do %s?"
 
 #: libxfce4ui/xfce-dialogs.c:267
 msgid "Do you want to read the manual online?"
@@ -39,9 +44,7 @@ msgstr "Você quer ler o manual online?"
 msgid ""
 "You will be redirected to the documentation website where the help pages are"
 " maintained and translated."
-msgstr ""
-"Você será redirecionado ao site de documentação, onde as páginas de ajuda "
-"são mantidas e traduzidas."
+msgstr "Você será redirecionado ao site de documentação, onde as páginas de ajuda são mantidas e traduzidas."
 
 #. Create cancel button
 #: libxfce4ui/xfce-dialogs.c:275 libxfce4ui/xfce-dialogs.c:533
@@ -82,18 +85,14 @@ msgstr "Fechar janela com várias abas?"
 msgid ""
 "This window has multiple tabs open. Closing this window will also close all "
 "its tabs."
-msgstr ""
-"Esta janela possui múltiplas abas abertas. Fechar esta janela também fechará"
-" todas as suas abas."
+msgstr "Esta janela possui múltiplas abas abertas. Fechar esta janela também fechará todas as suas abas."
 
 #: libxfce4ui/xfce-dialogs.c:523
 #, c-format
 msgid ""
 "This window has %d tabs open. Closing this window will also close all its "
 "tabs."
-msgstr ""
-"Esta janela tem %d abas abertas. Fechar esta janela também fechará todas as "
-"suas abas."
+msgstr "Esta janela tem %d abas abertas. Fechar esta janela também fechará todas as suas abas."
 
 #: libxfce4ui/xfce-dialogs.c:529
 msgid "Warning"
@@ -146,9 +145,7 @@ msgstr "O gerenciador de sessão não retornou um ID de cliente válido"
 msgid ""
 "Working directory \"%s\" does not exist. It won't be used when spawning "
 "\"%s\"."
-msgstr ""
-"O diretório de trabalho \"%s\" não existe. Ele não será usado quando gerando"
-" \"%s\"."
+msgstr "O diretório de trabalho \"%s\" não existe. Ele não será usado quando gerando \"%s\"."
 
 #. retrieve the error and warning messages
 #: libxfce4ui/xfce-filename-input.c:232
@@ -192,8 +189,7 @@ msgstr "Manter \"%s\""
 msgid ""
 "This shortcut is already being used for the command '%s'. Which action do "
 "you want to use?"
-msgstr ""
-"Este atalho já está em uso pelo comando \"%s\". Qual ação você deseja usar?"
+msgstr "Este atalho já está em uso pelo comando \"%s\". Qual ação você deseja usar?"
 
 #: libxfce4kbd-private/xfce-shortcuts.c:55
 #, c-format
@@ -631,9 +627,7 @@ msgstr "Painel"
 
 #: xfce4-about/main.c:152
 msgid "Provides a home for window buttons, launchers, app menu and more."
-msgstr ""
-"Fornece um lugar para os botões de janela, lançadores, menu de aplicações e "
-"mais."
+msgstr "Fornece um lugar para os botões de janela, lançadores, menu de aplicações e mais."
 
 #: xfce4-about/main.c:156
 msgid "Desktop Manager"
@@ -666,9 +660,7 @@ msgstr "Gerenciador de sessão"
 #: xfce4-about/main.c:172
 msgid ""
 "Saves and restores your session, handles startup, autostart and shutdown."
-msgstr ""
-"Salva e restaura sua sessão, controla inicialização, início automático e "
-"desligamento."
+msgstr "Salva e restaura sua sessão, controla inicialização, início automático e desligamento."
 
 #: xfce4-about/main.c:176
 msgid "Settings Manager"
@@ -692,8 +684,7 @@ msgstr "Daemon de configurações"
 
 #: xfce4-about/main.c:187
 msgid "Stores your settings in a D-Bus-based configuration system."
-msgstr ""
-"Armazena suas configurações em um sistema de configuração baseado em D-Bus."
+msgstr "Armazena suas configurações em um sistema de configuração baseado em D-Bus."
 
 #: xfce4-about/main.c:191
 msgid "A Menu Library"
@@ -701,8 +692,7 @@ msgstr "Uma Biblioteca de Menus"
 
 #: xfce4-about/main.c:192
 msgid "Implements a freedesktop.org compliant menu based on GLib and GIO."
-msgstr ""
-"Implementa um menu compatível com freedesktop.org baseado em GLib e GIO."
+msgstr "Implementa um menu compatível com freedesktop.org baseado em GLib e GIO."
 
 #: xfce4-about/main.c:196
 msgid "Thumbnails Service"
@@ -720,22 +710,17 @@ msgstr "Consulte <https://www.xfce.org/about/credits>"
 msgid ""
 "If you know of anyone missing from this list; don't hesitate and file a bug "
 "on <https://gitlab.xfce.org/xfce/libxfce4ui/-/issues> ."
-msgstr ""
-"Se você conhece alguém que está faltando nesta lista, não hesite e registre "
-"um relatório de erro em <https://gitlab.xfce.org/xfce/libxfce4ui/-/issues>"
+msgstr "Se você conhece alguém que está faltando nesta lista, não hesite e registre um relatório de erro em <https://gitlab.xfce.org/xfce/libxfce4ui/-/issues>"
 
 #: xfce4-about/main.c:316
 msgid "Thanks to all who helped making this software available!"
-msgstr ""
-"Obrigado a todos aqueles que ajudaram tornar este software disponível."
+msgstr "Obrigado a todos aqueles que ajudaram tornar este software disponível."
 
 #: xfce4-about/main.c:333
 msgid ""
 "Xfce 4 is copyright Olivier Fourdan (fourdan at xfce.org). The different "
 "components are copyrighted by their respective authors."
-msgstr ""
-"O Xfce 4 é uma marca registrada de Olivier Fourdan (fourdan at xfce.org). Os "
-"componentes diferentes são marcas registradas de seus respectivos autores."
+msgstr "O Xfce 4 é uma marca registrada de Olivier Fourdan (fourdan at xfce.org). Os componentes diferentes são marcas registradas de seus respectivos autores."
 
 #: xfce4-about/main.c:338
 msgid ""
@@ -743,11 +728,7 @@ msgid ""
 "terms of the GNU Library General Public License as published by the Free "
 "Software Foundation; either version 2 of the License, or (at your option) "
 "any later version."
-msgstr ""
-"Os pacotes libxfce4ui, libxfce4util e exo são distribuídos sob os termos da "
-"Licença Pública Geral de Biblioteca GNU como publicado pela Free Software "
-"Foundation, assim como a versão 2 da licença ou (à sua opção) qualquer "
-"versão posterior."
+msgstr "Os pacotes libxfce4ui, libxfce4util e exo são distribuídos sob os termos da Licença Pública Geral de Biblioteca GNU como publicado pela Free Software Foundation, assim como a versão 2 da licença ou (à sua opção) qualquer versão posterior."
 
 #: xfce4-about/main.c:345
 msgid ""
@@ -756,12 +737,7 @@ msgid ""
 "of the GNU General Public License as published by the Free Software "
 "Foundation; either version 2 of the License, or (at your option) any later "
 "version."
-msgstr ""
-"Os pacotes thunar, xfce4-appfinder, xfce4-panel, xfce4-session, "
-"xfce4-settings, xfce-xfconf, xfdesktop e xfwm4 são distribuídos sob os "
-"termos da Licença Pública Geral GNU como publicado pela Free Software "
-"Foundation, assim como a versão 2 da licença ou (à sua opção) qualquer "
-"versão posterior."
+msgstr "Os pacotes thunar, xfce4-appfinder, xfce4-panel, xfce4-session, xfce4-settings, xfce-xfconf, xfdesktop e xfwm4 são distribuídos sob os termos da Licença Pública Geral GNU como publicado pela Free Software Foundation, assim como a versão 2 da licença ou (à sua opção) qualquer versão posterior."
 
 #: xfce4-about/main.c:491
 #, c-format
@@ -816,10 +792,6 @@ msgstr "Tradutores"
 msgid "Previous contributors"
 msgstr "Contribuidores anteriores"
 
-#: xfce4-about/xfce4-about.desktop.in:6
-msgid "org.xfce.about"
-msgstr ""
-
 #: xfce4-about/xfce4-about.desktop.in:11
 msgid "About Xfce"
 msgstr "Sobre o Xfce"
@@ -905,9 +877,7 @@ msgstr "Sistema"
 msgid ""
 "Xfce is a collection of programs that together provide a full-featured desktop environment.\n"
 "The following programs are part of the Xfce core:"
-msgstr ""
-"O Xfce é uma coleção de programas que juntos fornecem um ambiente de desktop completo.\n"
-"Os programas seguintes fazem parte do núcleo do Xfce:"
+msgstr "O Xfce é uma coleção de programas que juntos fornecem um ambiente de desktop completo.\nOs programas seguintes fazem parte do núcleo do Xfce:"
 
 #: xfce4-about/xfce4-about-dialog.glade:779
 msgid ""
@@ -918,14 +888,7 @@ msgid ""
 "Thank you for your interest in Xfce.\n"
 "\n"
 "\t- The Xfce Development Team"
-msgstr ""
-"O Xfce também é uma plataforma de desenvolvimento que fornece várias bibliotecas que ajudam os programadores a criar aplicativos que se encaixam bem no ambiente de desktop.\n"
-"\n"
-"Os componentes do Xfce são licenciados sob licenças gratuitas ou de código aberto; GPL ou BSDL para aplicativos e LGPL ou BSDL para bibliotecas. Veja a documentação, o código fonte ou o site do Xfce (<a href=\"https://www.xfce.org\">https://www.xfce.org</a>) para mais informação.\n"
-"\n"
-"Agradecemos seu interesse pelo Xfce.\n"
-"\n"
-"\t- A equipe de desenvolvimento do Xfce"
+msgstr "O Xfce também é uma plataforma de desenvolvimento que fornece várias bibliotecas que ajudam os programadores a criar aplicativos que se encaixam bem no ambiente de desktop.\n\nOs componentes do Xfce são licenciados sob licenças gratuitas ou de código aberto; GPL ou BSDL para aplicativos e LGPL ou BSDL para bibliotecas. Veja a documentação, o código fonte ou o site do Xfce (<a href=\"https://www.xfce.org\">https://www.xfce.org</a>) para mais informação.\n\nAgradecemos seu interesse pelo Xfce.\n\n\t- A equipe de desenvolvimento do Xfce"
 
 #: xfce4-about/xfce4-about-dialog.glade:809
 msgid "About"
@@ -984,9 +947,7 @@ msgstr "%s; Build ID: %s"
 msgid ""
 "A file named \"%s\" already exists in this directory, the file hasn't been "
 "added."
-msgstr ""
-"Um arquivo chamado \"%s\" já existe neste diretório, o arquivo não foi "
-"adicionado."
+msgstr "Um arquivo chamado \"%s\" já existe neste diretório, o arquivo não foi adicionado."
 
 #: tests/test-ui.c:122
 msgid "Failed to migrate the old panel configuration"


=====================================
xfce4-about/about-dialog-ui.h
=====================================
@@ -654,262 +654,262 @@ static const char xfce_about_dialog_ui[] =
   ">start</property><property name=\"margin_left\">12</property><property "
   "name=\"margin_right\">12</property><property name=\"margin_top\">18</pr"
   "operty><property name=\"margin_bottom\">12</property><property name=\"s"
-  "pacing\">36</property><child><object class=\"GtkImage\"><property name="
-  "\"visible\">True</property><property name=\"can_focus\">False</property"
-  "><property name=\"valign\">start</property><property name=\"pixel_size\""
-  ">128</property><property name=\"icon_name\">computer</property><propert"
-  "y name=\"icon_size\">6</property></object><packing><property name=\"exp"
-  "and\">False</property><property name=\"fill\">True</property><property "
-  "name=\"position\">0</property></packing></child><child><object class=\""
-  "GtkGrid\" id=\"about-system\"><property name=\"visible\">True</property"
-  "><property name=\"can_focus\">False</property><property name=\"valign\""
-  ">center</property><property name=\"row_spacing\">6</property><property "
-  "name=\"column_spacing\">12</property><child><object class=\"GtkLabel\">"
-  "<property name=\"visible\">True</property><property name=\"sensitive\">"
-  "False</property><property name=\"can_focus\">False</property><property "
-  "name=\"label\" translatable=\"yes\">Device</property><property name=\"x"
-  "align\">1</property></object><packing><property name=\"left_attach\">0<"
-  "/property><property name=\"top_attach\">0</property></packing></child><"
-  "child><object class=\"GtkLabel\" id=\"device\"><property name=\"visible"
-  "\">True</property><property name=\"can_focus\">False</property><propert"
-  "y name=\"label\" translatable=\"yes\">label</property><property name=\""
-  "xalign\">0</property></object><packing><property name=\"left_attach\">1"
-  "</property><property name=\"top_attach\">0</property></packing></child>"
-  "<child><object class=\"GtkLabel\"><property name=\"visible\">True</prop"
-  "erty><property name=\"sensitive\">False</property><property name=\"can_"
-  "focus\">False</property><property name=\"label\" translatable=\"yes\">O"
-  "S Name</property><property name=\"xalign\">1</property></object><packin"
-  "g><property name=\"left_attach\">0</property><property name=\"top_attac"
-  "h\">1</property></packing></child><child><object class=\"GtkLabel\" id="
-  "\"osname\"><property name=\"visible\">True</property><property name=\"c"
-  "an_focus\">False</property><property name=\"label\" translatable=\"yes\""
-  ">label</property><property name=\"xalign\">0</property></object><packin"
-  "g><property name=\"left_attach\">1</property><property name=\"top_attac"
-  "h\">1</property></packing></child><child><object class=\"GtkLabel\"><pr"
-  "operty name=\"visible\">True</property><property name=\"sensitive\">Fal"
-  "se</property><property name=\"can_focus\">False</property><property nam"
-  "e=\"label\" translatable=\"yes\">OS Type</property><property name=\"xal"
-  "ign\">1</property></object><packing><property name=\"left_attach\">0</p"
-  "roperty><property name=\"top_attach\">2</property></packing></child><ch"
-  "ild><object class=\"GtkLabel\" id=\"ostype\"><property name=\"visible\""
+  "pacing\">36</property><child><object class=\"GtkImage\" id=\"os-logo\">"
+  "<property name=\"visible\">True</property><property name=\"can_focus\">"
+  "False</property><property name=\"valign\">start</property><property nam"
+  "e=\"pixel_size\">128</property><property name=\"icon_name\">computer</p"
+  "roperty><property name=\"icon_size\">6</property></object><packing><pro"
+  "perty name=\"expand\">False</property><property name=\"fill\">True</pro"
+  "perty><property name=\"position\">0</property></packing></child><child>"
+  "<object class=\"GtkGrid\" id=\"about-system\"><property name=\"visible\""
   ">True</property><property name=\"can_focus\">False</property><property "
-  "name=\"label\" translatable=\"yes\">label</property><property name=\"xa"
-  "lign\">0</property></object><packing><property name=\"left_attach\">1</"
-  "property><property name=\"top_attach\">2</property></packing></child><c"
-  "hild><object class=\"GtkLabel\" id=\"vendor-info-label\"><property name"
-  "=\"visible\">True</property><property name=\"sensitive\">False</propert"
-  "y><property name=\"can_focus\">False</property><property name=\"label\""
-  " translatable=\"yes\">Distributor</property><property name=\"xalign\">1"
-  "</property></object><packing><property name=\"left_attach\">0</property"
-  "><property name=\"top_attach\">3</property></packing></child><child><ob"
-  "ject class=\"GtkLabel\" id=\"vendor-info\"><property name=\"visible\">T"
-  "rue</property><property name=\"can_focus\">False</property><property na"
-  "me=\"label\" translatable=\"yes\">label</property><property name=\"xali"
-  "gn\">0</property></object><packing><property name=\"left_attach\">1</pr"
-  "operty><property name=\"top_attach\">3</property></packing></child><chi"
-  "ld><object class=\"GtkLabel\"><property name=\"visible\">True</property"
-  "><property name=\"sensitive\">False</property><property name=\"can_focu"
-  "s\">False</property><property name=\"margin_top\">12</property><propert"
-  "y name=\"label\" translatable=\"yes\">Xfce Version</property><property "
-  "name=\"xalign\">1</property></object><packing><property name=\"left_att"
-  "ach\">0</property><property name=\"top_attach\">4</property></packing><"
-  "/child><child><object class=\"GtkLabel\" id=\"xfce-version\"><property "
-  "name=\"visible\">True</property><property name=\"can_focus\">False</pro"
-  "perty><property name=\"margin_top\">12</property><property name=\"label"
-  "\" translatable=\"yes\">label</property><property name=\"xalign\">0</pr"
-  "operty></object><packing><property name=\"left_attach\">1</property><pr"
-  "operty name=\"top_attach\">4</property></packing></child><child><object"
-  " class=\"GtkLabel\"><property name=\"visible\">True</property><property"
-  " name=\"sensitive\">False</property><property name=\"can_focus\">False<"
-  "/property><property name=\"label\" translatable=\"yes\">GTK Version</pr"
-  "operty><property name=\"xalign\">1</property></object><packing><propert"
-  "y name=\"left_attach\">0</property><property name=\"top_attach\">5</pro"
-  "perty></packing></child><child><object class=\"GtkLabel\" id=\"gtk-vers"
-  "ion\"><property name=\"visible\">True</property><property name=\"can_fo"
-  "cus\">False</property><property name=\"label\" translatable=\"yes\">lab"
-  "el</property><property name=\"xalign\">0</property></object><packing><p"
-  "roperty name=\"left_attach\">1</property><property name=\"top_attach\">"
-  "5</property></packing></child><child><object class=\"GtkLabel\"><proper"
-  "ty name=\"visible\">True</property><property name=\"sensitive\">False</"
-  "property><property name=\"can_focus\">False</property><property name=\""
-  "label\" translatable=\"yes\">Kernel Version</property><property name=\""
-  "xalign\">1</property></object><packing><property name=\"left_attach\">0"
-  "</property><property name=\"top_attach\">6</property></packing></child>"
-  "<child><object class=\"GtkLabel\" id=\"kernel-version\"><property name="
-  "\"visible\">True</property><property name=\"can_focus\">False</property"
-  "><property name=\"label\" translatable=\"yes\">label</property><propert"
-  "y name=\"xalign\">0</property></object><packing><property name=\"left_a"
-  "ttach\">1</property><property name=\"top_attach\">6</property></packing"
-  "></child><child><object class=\"GtkLabel\"><property name=\"visible\">T"
-  "rue</property><property name=\"sensitive\">False</property><property na"
-  "me=\"can_focus\">False</property><property name=\"margin_top\">12</prop"
-  "erty><property name=\"label\" translatable=\"yes\">CPU</property><prope"
-  "rty name=\"xalign\">1</property></object><packing><property name=\"left"
-  "_attach\">0</property><property name=\"top_attach\">7</property></packi"
-  "ng></child><child><object class=\"GtkLabel\" id=\"cpu\"><property name="
-  "\"visible\">True</property><property name=\"can_focus\">False</property"
-  "><property name=\"margin_top\">12</property><property name=\"label\" tr"
-  "anslatable=\"yes\">label</property><property name=\"xalign\">0</propert"
-  "y></object><packing><property name=\"left_attach\">1</property><propert"
-  "y name=\"top_attach\">7</property></packing></child><child><object clas"
+  "name=\"valign\">center</property><property name=\"row_spacing\">6</prop"
+  "erty><property name=\"column_spacing\">12</property><child><object clas"
   "s=\"GtkLabel\"><property name=\"visible\">True</property><property name"
   "=\"sensitive\">False</property><property name=\"can_focus\">False</prop"
-  "erty><property name=\"label\" translatable=\"yes\">Memory</property><pr"
+  "erty><property name=\"label\" translatable=\"yes\">Device</property><pr"
   "operty name=\"xalign\">1</property></object><packing><property name=\"l"
-  "eft_attach\">0</property><property name=\"top_attach\">8</property></pa"
-  "cking></child><child><object class=\"GtkLabel\" id=\"memory\"><property"
+  "eft_attach\">0</property><property name=\"top_attach\">0</property></pa"
+  "cking></child><child><object class=\"GtkLabel\" id=\"device\"><property"
   " name=\"visible\">True</property><property name=\"can_focus\">False</pr"
   "operty><property name=\"label\" translatable=\"yes\">label</property><p"
   "roperty name=\"xalign\">0</property></object><packing><property name=\""
-  "left_attach\">1</property><property name=\"top_attach\">8</property></p"
-  "acking></child><child><object class=\"GtkLabel\" id=\"gpu-label\"><prop"
-  "erty name=\"visible\">True</property><property name=\"sensitive\">False"
-  "</property><property name=\"can_focus\">False</property><property name="
-  "\"label\" translatable=\"yes\">GPU</property><property name=\"xalign\">"
-  "1</property></object><packing><property name=\"left_attach\">0</propert"
-  "y><property name=\"top_attach\">9</property></packing></child><child><o"
-  "bject class=\"GtkLabel\" id=\"gpu\"><property name=\"visible\">True</pr"
-  "operty><property name=\"can_focus\">False</property><property name=\"la"
-  "bel\" translatable=\"yes\">label</property><property name=\"xalign\">0<"
-  "/property></object><packing><property name=\"left_attach\">1</property>"
-  "<property name=\"top_attach\">9</property></packing></child></object><p"
-  "acking><property name=\"expand\">True</property><property name=\"fill\""
-  ">True</property><property name=\"position\">1</property></packing></chi"
-  "ld></object></child><child type=\"tab\"><object class=\"GtkLabel\" id=\""
-  "system\"><property name=\"visible\">True</property><property name=\"can"
-  "_focus\">False</property><property name=\"label\" translatable=\"yes\">"
-  "System</property></object><packing><property name=\"tab_fill\">False</p"
-  "roperty></packing></child><child><object class=\"GtkScrolledWindow\" id"
-  "=\"scrolledwindow1\"><property name=\"visible\">True</property><propert"
-  "y name=\"can_focus\">True</property><property name=\"hscrollbar_policy\""
-  ">never</property><child><object class=\"GtkViewport\"><property name=\""
-  "visible\">True</property><property name=\"can_focus\">False</property><"
-  "property name=\"shadow_type\">none</property><child><object class=\"Gtk"
-  "Box\" id=\"about-xfce-box\"><property name=\"visible\">True</property><"
-  "property name=\"can_focus\">False</property><property name=\"border_wid"
-  "th\">18</property><property name=\"orientation\">vertical</property><pr"
-  "operty name=\"spacing\">12</property><child><object class=\"GtkImage\">"
-  "<property name=\"visible\">True</property><property name=\"can_focus\">"
-  "False</property><property name=\"margin_top\">12</property><property na"
-  "me=\"margin_bottom\">12</property><property name=\"pixel_size\">128</pr"
-  "operty><property name=\"icon_name\">xfce4-logo</property></object><pack"
-  "ing><property name=\"expand\">False</property><property name=\"fill\">T"
-  "rue</property><property name=\"position\">0</property></packing></child"
-  "><child><object class=\"GtkLabel\"><property name=\"visible\">True</pro"
-  "perty><property name=\"can_focus\">False</property><property name=\"lab"
-  "el\" translatable=\"yes\">Xfce is a collection of programs that togethe"
-  "r provide a full-featured desktop environment.\nThe following programs "
-  "are part of the Xfce core:</property><property name=\"wrap\">True</prop"
+  "left_attach\">1</property><property name=\"top_attach\">0</property></p"
+  "acking></child><child><object class=\"GtkLabel\"><property name=\"visib"
+  "le\">True</property><property name=\"sensitive\">False</property><prope"
+  "rty name=\"can_focus\">False</property><property name=\"label\" transla"
+  "table=\"yes\">OS Name</property><property name=\"xalign\">1</property><"
+  "/object><packing><property name=\"left_attach\">0</property><property n"
+  "ame=\"top_attach\">1</property></packing></child><child><object class=\""
+  "GtkLabel\" id=\"osname\"><property name=\"visible\">True</property><pro"
+  "perty name=\"can_focus\">False</property><property name=\"label\" trans"
+  "latable=\"yes\">label</property><property name=\"xalign\">0</property><"
+  "/object><packing><property name=\"left_attach\">1</property><property n"
+  "ame=\"top_attach\">1</property></packing></child><child><object class=\""
+  "GtkLabel\"><property name=\"visible\">True</property><property name=\"s"
+  "ensitive\">False</property><property name=\"can_focus\">False</property"
+  "><property name=\"label\" translatable=\"yes\">OS Type</property><prope"
+  "rty name=\"xalign\">1</property></object><packing><property name=\"left"
+  "_attach\">0</property><property name=\"top_attach\">2</property></packi"
+  "ng></child><child><object class=\"GtkLabel\" id=\"ostype\"><property na"
+  "me=\"visible\">True</property><property name=\"can_focus\">False</prope"
+  "rty><property name=\"label\" translatable=\"yes\">label</property><prop"
+  "erty name=\"xalign\">0</property></object><packing><property name=\"lef"
+  "t_attach\">1</property><property name=\"top_attach\">2</property></pack"
+  "ing></child><child><object class=\"GtkLabel\" id=\"vendor-info-label\">"
+  "<property name=\"visible\">True</property><property name=\"sensitive\">"
+  "False</property><property name=\"can_focus\">False</property><property "
+  "name=\"label\" translatable=\"yes\">Distributor</property><property nam"
+  "e=\"xalign\">1</property></object><packing><property name=\"left_attach"
+  "\">0</property><property name=\"top_attach\">3</property></packing></ch"
+  "ild><child><object class=\"GtkLabel\" id=\"vendor-info\"><property name"
+  "=\"visible\">True</property><property name=\"can_focus\">False</propert"
+  "y><property name=\"label\" translatable=\"yes\">label</property><proper"
+  "ty name=\"xalign\">0</property></object><packing><property name=\"left_"
+  "attach\">1</property><property name=\"top_attach\">3</property></packin"
+  "g></child><child><object class=\"GtkLabel\"><property name=\"visible\">"
+  "True</property><property name=\"sensitive\">False</property><property n"
+  "ame=\"can_focus\">False</property><property name=\"margin_top\">12</pro"
+  "perty><property name=\"label\" translatable=\"yes\">Xfce Version</prope"
+  "rty><property name=\"xalign\">1</property></object><packing><property n"
+  "ame=\"left_attach\">0</property><property name=\"top_attach\">4</proper"
+  "ty></packing></child><child><object class=\"GtkLabel\" id=\"xfce-versio"
+  "n\"><property name=\"visible\">True</property><property name=\"can_focu"
+  "s\">False</property><property name=\"margin_top\">12</property><propert"
+  "y name=\"label\" translatable=\"yes\">label</property><property name=\""
+  "xalign\">0</property></object><packing><property name=\"left_attach\">1"
+  "</property><property name=\"top_attach\">4</property></packing></child>"
+  "<child><object class=\"GtkLabel\"><property name=\"visible\">True</prop"
+  "erty><property name=\"sensitive\">False</property><property name=\"can_"
+  "focus\">False</property><property name=\"label\" translatable=\"yes\">G"
+  "TK Version</property><property name=\"xalign\">1</property></object><pa"
+  "cking><property name=\"left_attach\">0</property><property name=\"top_a"
+  "ttach\">5</property></packing></child><child><object class=\"GtkLabel\""
+  " id=\"gtk-version\"><property name=\"visible\">True</property><property"
+  " name=\"can_focus\">False</property><property name=\"label\" translatab"
+  "le=\"yes\">label</property><property name=\"xalign\">0</property></obje"
+  "ct><packing><property name=\"left_attach\">1</property><property name=\""
+  "top_attach\">5</property></packing></child><child><object class=\"GtkLa"
+  "bel\"><property name=\"visible\">True</property><property name=\"sensit"
+  "ive\">False</property><property name=\"can_focus\">False</property><pro"
+  "perty name=\"label\" translatable=\"yes\">Kernel Version</property><pro"
+  "perty name=\"xalign\">1</property></object><packing><property name=\"le"
+  "ft_attach\">0</property><property name=\"top_attach\">6</property></pac"
+  "king></child><child><object class=\"GtkLabel\" id=\"kernel-version\"><p"
+  "roperty name=\"visible\">True</property><property name=\"can_focus\">Fa"
+  "lse</property><property name=\"label\" translatable=\"yes\">label</prop"
   "erty><property name=\"xalign\">0</property></object><packing><property "
-  "name=\"expand\">False</property><property name=\"fill\">True</property>"
-  "<property name=\"position\">1</property></packing></child><child><objec"
-  "t class=\"GtkBox\" id=\"components-box\"><property name=\"visible\">Tru"
-  "e</property><property name=\"can_focus\">False</property><property name"
-  "=\"border_width\">12</property><property name=\"orientation\">vertical<"
-  "/property><property name=\"spacing\">12</property><child><placeholder/>"
-  "</child><child><placeholder/></child><child><placeholder/></child></obj"
-  "ect><packing><property name=\"expand\">False</property><property name=\""
-  "fill\">True</property><property name=\"position\">2</property></packing"
-  "></child><child><object class=\"GtkLabel\"><property name=\"visible\">T"
-  "rue</property><property name=\"can_focus\">False</property><property na"
-  "me=\"label\" translatable=\"yes\">Xfce is also a development platform p"
-  "roviding several libraries that help programmers create applications th"
-  "at fit in well with the desktop environment.\n\nXfce components are lic"
-  "ensed under free or open source licences; GPL or BSDL for applications "
-  "and LGPL or BSDL for libraries. Look at the documentation, the source c"
-  "ode or the Xfce website (<a href=\"https://www.xfce.org\">https:/"
-  "/www.xfce.org</a>) for more information.\n\nThank you for your in"
-  "terest in Xfce.\n\n\t- The Xfce Development Team</property><property na"
-  "me=\"use_markup\">True</property><property name=\"wrap\">True</property"
-  "><property name=\"xalign\">0</property></object><packing><property name"
-  "=\"expand\">False</property><property name=\"fill\">True</property><pro"
-  "perty name=\"position\">3</property></packing></child></object></child>"
-  "</object></child></object><packing><property name=\"position\">1</prope"
-  "rty></packing></child><child type=\"tab\"><object class=\"GtkLabel\" id"
-  "=\"label1\"><property name=\"visible\">True</property><property name=\""
-  "can_focus\">False</property><property name=\"label\" translatable=\"yes"
-  "\">About</property></object><packing><property name=\"position\">1</pro"
-  "perty><property name=\"tab_fill\">False</property></packing></child><ch"
-  "ild><object class=\"GtkScrolledWindow\" id=\"scrolledwindow2\"><propert"
-  "y name=\"visible\">True</property><property name=\"can_focus\">True</pr"
-  "operty><property name=\"shadow_type\">etched-in</property><child><objec"
-  "t class=\"GtkTextView\" id=\"credits-textview\"><property name=\"visibl"
-  "e\">True</property><property name=\"can_focus\">True</property><propert"
-  "y name=\"border_width\">12</property><property name=\"editable\">False<"
-  "/property><property name=\"wrap_mode\">word</property><property name=\""
-  "left_margin\">3</property><property name=\"right_margin\">3</property><"
-  "property name=\"cursor_visible\">False</property><property name=\"buffe"
-  "r\">credits-buffer</property></object></child></object><packing><proper"
-  "ty name=\"position\">2</property></packing></child><child type=\"tab\">"
-  "<object class=\"GtkLabel\" id=\"label2\"><property name=\"visible\">Tru"
-  "e</property><property name=\"can_focus\">False</property><property name"
-  "=\"label\" translatable=\"yes\">Credits</property></object><packing><pr"
-  "operty name=\"position\">2</property><property name=\"tab_fill\">False<"
-  "/property></packing></child><child><object class=\"GtkScrolledWindow\" "
-  "id=\"vendor-tab\"><property name=\"can_focus\">True</property><property"
-  " name=\"shadow_type\">etched-in</property><child><object class=\"GtkTex"
-  "tView\" id=\"vendor-textview\"><property name=\"visible\">True</propert"
-  "y><property name=\"can_focus\">True</property><property name=\"border_w"
-  "idth\">12</property><property name=\"editable\">False</property><proper"
-  "ty name=\"wrap_mode\">word</property><property name=\"left_margin\">3</"
-  "property><property name=\"right_margin\">3</property><property name=\"c"
-  "ursor_visible\">False</property><property name=\"buffer\">vendor-buffer"
-  "</property></object></child></object><packing><property name=\"position"
-  "\">3</property></packing></child><child type=\"tab\"><object class=\"Gt"
-  "kLabel\" id=\"vendor-label\"><property name=\"visible\">True</property>"
-  "<property name=\"can_focus\">False</property><property name=\"label\">V"
-  "endor</property></object><packing><property name=\"position\">3</proper"
-  "ty><property name=\"tab_fill\">False</property></packing></child><child"
-  "><object class=\"GtkBox\"><property name=\"visible\">True</property><pr"
-  "operty name=\"can_focus\">False</property><property name=\"orientation\""
-  ">vertical</property><child><object class=\"GtkScrolledWindow\" id=\"scr"
-  "olledwindow3\"><property name=\"visible\">True</property><property name"
-  "=\"can_focus\">True</property><property name=\"shadow_type\">etched-in<"
-  "/property><child><object class=\"GtkTextView\" id=\"copyright-textview\""
-  "><property name=\"visible\">True</property><property name=\"can_focus\""
-  ">True</property><property name=\"border_width\">6</property><property n"
-  "ame=\"editable\">False</property><property name=\"wrap_mode\">word</pro"
-  "perty><property name=\"left_margin\">3</property><property name=\"right"
-  "_margin\">3</property><property name=\"cursor_visible\">False</property"
-  "><property name=\"buffer\">copyright-buffer</property></object></child>"
+  "name=\"left_attach\">1</property><property name=\"top_attach\">6</prope"
+  "rty></packing></child><child><object class=\"GtkLabel\"><property name="
+  "\"visible\">True</property><property name=\"sensitive\">False</property"
+  "><property name=\"can_focus\">False</property><property name=\"margin_t"
+  "op\">12</property><property name=\"label\" translatable=\"yes\">CPU</pr"
+  "operty><property name=\"xalign\">1</property></object><packing><propert"
+  "y name=\"left_attach\">0</property><property name=\"top_attach\">7</pro"
+  "perty></packing></child><child><object class=\"GtkLabel\" id=\"cpu\"><p"
+  "roperty name=\"visible\">True</property><property name=\"can_focus\">Fa"
+  "lse</property><property name=\"margin_top\">12</property><property name"
+  "=\"label\" translatable=\"yes\">label</property><property name=\"xalign"
+  "\">0</property></object><packing><property name=\"left_attach\">1</prop"
+  "erty><property name=\"top_attach\">7</property></packing></child><child"
+  "><object class=\"GtkLabel\"><property name=\"visible\">True</property><"
+  "property name=\"sensitive\">False</property><property name=\"can_focus\""
+  ">False</property><property name=\"label\" translatable=\"yes\">Memory</"
+  "property><property name=\"xalign\">1</property></object><packing><prope"
+  "rty name=\"left_attach\">0</property><property name=\"top_attach\">8</p"
+  "roperty></packing></child><child><object class=\"GtkLabel\" id=\"memory"
+  "\"><property name=\"visible\">True</property><property name=\"can_focus"
+  "\">False</property><property name=\"label\" translatable=\"yes\">label<"
+  "/property><property name=\"xalign\">0</property></object><packing><prop"
+  "erty name=\"left_attach\">1</property><property name=\"top_attach\">8</"
+  "property></packing></child><child><object class=\"GtkLabel\" id=\"gpu-l"
+  "abel\"><property name=\"visible\">True</property><property name=\"sensi"
+  "tive\">False</property><property name=\"can_focus\">False</property><pr"
+  "operty name=\"label\" translatable=\"yes\">GPU</property><property name"
+  "=\"xalign\">1</property></object><packing><property name=\"left_attach\""
+  ">0</property><property name=\"top_attach\">9</property></packing></chil"
+  "d><child><object class=\"GtkLabel\" id=\"gpu\"><property name=\"visible"
+  "\">True</property><property name=\"can_focus\">False</property><propert"
+  "y name=\"label\" translatable=\"yes\">label</property><property name=\""
+  "xalign\">0</property></object><packing><property name=\"left_attach\">1"
+  "</property><property name=\"top_attach\">9</property></packing></child>"
   "</object><packing><property name=\"expand\">True</property><property na"
   "me=\"fill\">True</property><property name=\"position\">1</property></pa"
-  "cking></child><child><object class=\"GtkButtonBox\"><property name=\"vi"
+  "cking></child></object></child><child type=\"tab\"><object class=\"GtkL"
+  "abel\" id=\"system\"><property name=\"visible\">True</property><propert"
+  "y name=\"can_focus\">False</property><property name=\"label\" translata"
+  "ble=\"yes\">System</property></object><packing><property name=\"tab_fil"
+  "l\">False</property></packing></child><child><object class=\"GtkScrolle"
+  "dWindow\" id=\"scrolledwindow1\"><property name=\"visible\">True</prope"
+  "rty><property name=\"can_focus\">True</property><property name=\"hscrol"
+  "lbar_policy\">never</property><child><object class=\"GtkViewport\"><pro"
+  "perty name=\"visible\">True</property><property name=\"can_focus\">Fals"
+  "e</property><property name=\"shadow_type\">none</property><child><objec"
+  "t class=\"GtkBox\" id=\"about-xfce-box\"><property name=\"visible\">Tru"
+  "e</property><property name=\"can_focus\">False</property><property name"
+  "=\"border_width\">18</property><property name=\"orientation\">vertical<"
+  "/property><property name=\"spacing\">12</property><child><object class="
+  "\"GtkImage\"><property name=\"visible\">True</property><property name=\""
+  "can_focus\">False</property><property name=\"margin_top\">12</property>"
+  "<property name=\"margin_bottom\">12</property><property name=\"pixel_si"
+  "ze\">128</property><property name=\"icon_name\">xfce4-logo</property></"
+  "object><packing><property name=\"expand\">False</property><property nam"
+  "e=\"fill\">True</property><property name=\"position\">0</property></pac"
+  "king></child><child><object class=\"GtkLabel\"><property name=\"visible"
+  "\">True</property><property name=\"can_focus\">False</property><propert"
+  "y name=\"label\" translatable=\"yes\">Xfce is a collection of programs "
+  "that together provide a full-featured desktop environment.\nThe followi"
+  "ng programs are part of the Xfce core:</property><property name=\"wrap\""
+  ">True</property><property name=\"xalign\">0</property></object><packing"
+  "><property name=\"expand\">False</property><property name=\"fill\">True"
+  "</property><property name=\"position\">1</property></packing></child><c"
+  "hild><object class=\"GtkBox\" id=\"components-box\"><property name=\"vi"
   "sible\">True</property><property name=\"can_focus\">False</property><pr"
-  "operty name=\"halign\">center</property><property name=\"homogeneous\">"
-  "True</property><property name=\"layout_style\">start</property><child><"
-  "object class=\"GtkButton\" id=\"gpl-button\"><property name=\"label\" t"
-  "ranslatable=\"yes\">GPL</property><property name=\"visible\">True</prop"
-  "erty><property name=\"can_focus\">True</property><property name=\"recei"
-  "ves_default\">True</property></object><packing><property name=\"expand\""
-  ">False</property><property name=\"fill\">False</property><property name"
-  "=\"position\">0</property></packing></child><child><object class=\"GtkB"
-  "utton\" id=\"lgpl-button\"><property name=\"label\" translatable=\"yes\""
-  ">LGPL</property><property name=\"visible\">True</property><property nam"
-  "e=\"can_focus\">True</property><property name=\"receives_default\">True"
-  "</property></object><packing><property name=\"expand\">False</property>"
-  "<property name=\"fill\">False</property><property name=\"position\">1</"
-  "property></packing></child><child><object class=\"GtkButton\" id=\"bsd-"
-  "button\"><property name=\"label\" translatable=\"yes\">BSD</property><p"
-  "roperty name=\"visible\">True</property><property name=\"can_focus\">Tr"
-  "ue</property><property name=\"receives_default\">True</property></objec"
-  "t><packing><property name=\"expand\">False</property><property name=\"f"
-  "ill\">False</property><property name=\"position\">2</property></packing"
-  "></child><style><class name=\"inline-toolbar\"/></style></object><packi"
-  "ng><property name=\"expand\">False</property><property name=\"fill\">Tr"
-  "ue</property><property name=\"position\">2</property></packing></child>"
-  "</object><packing><property name=\"position\">4</property></packing></c"
-  "hild><child type=\"tab\"><object class=\"GtkLabel\" id=\"label3\"><prop"
-  "erty name=\"visible\">True</property><property name=\"can_focus\">False"
-  "</property><property name=\"label\" translatable=\"yes\">Copyright</pro"
-  "perty></object><packing><property name=\"position\">4</property><proper"
-  "ty name=\"tab_fill\">False</property></packing></child></object><packin"
-  "g><property name=\"expand\">True</property><property name=\"fill\">True"
-  "</property><property name=\"position\">1</property></packing></child></"
-  "object></child><action-widgets><action-widget response=\"0\">help-butto"
-  "n</action-widget><action-widget response=\"0\">close-button</action-wid"
-  "get></action-widgets></object></interface>"
+  "operty name=\"border_width\">12</property><property name=\"orientation\""
+  ">vertical</property><property name=\"spacing\">12</property><child><pla"
+  "ceholder/></child><child><placeholder/></child><child><placeholder/></c"
+  "hild></object><packing><property name=\"expand\">False</property><prope"
+  "rty name=\"fill\">True</property><property name=\"position\">2</propert"
+  "y></packing></child><child><object class=\"GtkLabel\"><property name=\""
+  "visible\">True</property><property name=\"can_focus\">False</property><"
+  "property name=\"label\" translatable=\"yes\">Xfce is also a development"
+  " platform providing several libraries that help programmers create appl"
+  "ications that fit in well with the desktop environment.\n\nXfce compone"
+  "nts are licensed under free or open source licences; GPL or BSDL for ap"
+  "plications and LGPL or BSDL for libraries. Look at the documentation, t"
+  "he source code or the Xfce website (<a href=\"https://www.xfce.org\""
+  ">https://www.xfce.org</a>) for more information.\n\nThank you "
+  "for your interest in Xfce.\n\n\t- The Xfce Development Team</property><"
+  "property name=\"use_markup\">True</property><property name=\"wrap\">Tru"
+  "e</property><property name=\"xalign\">0</property></object><packing><pr"
+  "operty name=\"expand\">False</property><property name=\"fill\">True</pr"
+  "operty><property name=\"position\">3</property></packing></child></obje"
+  "ct></child></object></child></object><packing><property name=\"position"
+  "\">1</property></packing></child><child type=\"tab\"><object class=\"Gt"
+  "kLabel\" id=\"label1\"><property name=\"visible\">True</property><prope"
+  "rty name=\"can_focus\">False</property><property name=\"label\" transla"
+  "table=\"yes\">About</property></object><packing><property name=\"positi"
+  "on\">1</property><property name=\"tab_fill\">False</property></packing>"
+  "</child><child><object class=\"GtkScrolledWindow\" id=\"scrolledwindow2"
+  "\"><property name=\"visible\">True</property><property name=\"can_focus"
+  "\">True</property><property name=\"shadow_type\">etched-in</property><c"
+  "hild><object class=\"GtkTextView\" id=\"credits-textview\"><property na"
+  "me=\"visible\">True</property><property name=\"can_focus\">True</proper"
+  "ty><property name=\"border_width\">12</property><property name=\"editab"
+  "le\">False</property><property name=\"wrap_mode\">word</property><prope"
+  "rty name=\"left_margin\">3</property><property name=\"right_margin\">3<"
+  "/property><property name=\"cursor_visible\">False</property><property n"
+  "ame=\"buffer\">credits-buffer</property></object></child></object><pack"
+  "ing><property name=\"position\">2</property></packing></child><child ty"
+  "pe=\"tab\"><object class=\"GtkLabel\" id=\"label2\"><property name=\"vi"
+  "sible\">True</property><property name=\"can_focus\">False</property><pr"
+  "operty name=\"label\" translatable=\"yes\">Credits</property></object><"
+  "packing><property name=\"position\">2</property><property name=\"tab_fi"
+  "ll\">False</property></packing></child><child><object class=\"GtkScroll"
+  "edWindow\" id=\"vendor-tab\"><property name=\"can_focus\">True</propert"
+  "y><property name=\"shadow_type\">etched-in</property><child><object cla"
+  "ss=\"GtkTextView\" id=\"vendor-textview\"><property name=\"visible\">Tr"
+  "ue</property><property name=\"can_focus\">True</property><property name"
+  "=\"border_width\">12</property><property name=\"editable\">False</prope"
+  "rty><property name=\"wrap_mode\">word</property><property name=\"left_m"
+  "argin\">3</property><property name=\"right_margin\">3</property><proper"
+  "ty name=\"cursor_visible\">False</property><property name=\"buffer\">ve"
+  "ndor-buffer</property></object></child></object><packing><property name"
+  "=\"position\">3</property></packing></child><child type=\"tab\"><object"
+  " class=\"GtkLabel\" id=\"vendor-label\"><property name=\"visible\">True"
+  "</property><property name=\"can_focus\">False</property><property name="
+  "\"label\">Vendor</property></object><packing><property name=\"position\""
+  ">3</property><property name=\"tab_fill\">False</property></packing></ch"
+  "ild><child><object class=\"GtkBox\"><property name=\"visible\">True</pr"
+  "operty><property name=\"can_focus\">False</property><property name=\"or"
+  "ientation\">vertical</property><child><object class=\"GtkScrolledWindow"
+  "\" id=\"scrolledwindow3\"><property name=\"visible\">True</property><pr"
+  "operty name=\"can_focus\">True</property><property name=\"shadow_type\""
+  ">etched-in</property><child><object class=\"GtkTextView\" id=\"copyrigh"
+  "t-textview\"><property name=\"visible\">True</property><property name=\""
+  "can_focus\">True</property><property name=\"border_width\">6</property>"
+  "<property name=\"editable\">False</property><property name=\"wrap_mode\""
+  ">word</property><property name=\"left_margin\">3</property><property na"
+  "me=\"right_margin\">3</property><property name=\"cursor_visible\">False"
+  "</property><property name=\"buffer\">copyright-buffer</property></objec"
+  "t></child></object><packing><property name=\"expand\">True</property><p"
+  "roperty name=\"fill\">True</property><property name=\"position\">1</pro"
+  "perty></packing></child><child><object class=\"GtkButtonBox\"><property"
+  " name=\"visible\">True</property><property name=\"can_focus\">False</pr"
+  "operty><property name=\"halign\">center</property><property name=\"homo"
+  "geneous\">True</property><property name=\"layout_style\">start</propert"
+  "y><child><object class=\"GtkButton\" id=\"gpl-button\"><property name=\""
+  "label\" translatable=\"yes\">GPL</property><property name=\"visible\">T"
+  "rue</property><property name=\"can_focus\">True</property><property nam"
+  "e=\"receives_default\">True</property></object><packing><property name="
+  "\"expand\">False</property><property name=\"fill\">False</property><pro"
+  "perty name=\"position\">0</property></packing></child><child><object cl"
+  "ass=\"GtkButton\" id=\"lgpl-button\"><property name=\"label\" translata"
+  "ble=\"yes\">LGPL</property><property name=\"visible\">True</property><p"
+  "roperty name=\"can_focus\">True</property><property name=\"receives_def"
+  "ault\">True</property></object><packing><property name=\"expand\">False"
+  "</property><property name=\"fill\">False</property><property name=\"pos"
+  "ition\">1</property></packing></child><child><object class=\"GtkButton\""
+  " id=\"bsd-button\"><property name=\"label\" translatable=\"yes\">BSD</p"
+  "roperty><property name=\"visible\">True</property><property name=\"can_"
+  "focus\">True</property><property name=\"receives_default\">True</proper"
+  "ty></object><packing><property name=\"expand\">False</property><propert"
+  "y name=\"fill\">False</property><property name=\"position\">2</property"
+  "></packing></child><style><class name=\"inline-toolbar\"/></style></obj"
+  "ect><packing><property name=\"expand\">False</property><property name=\""
+  "fill\">True</property><property name=\"position\">2</property></packing"
+  "></child></object><packing><property name=\"position\">4</property></pa"
+  "cking></child><child type=\"tab\"><object class=\"GtkLabel\" id=\"label"
+  "3\"><property name=\"visible\">True</property><property name=\"can_focu"
+  "s\">False</property><property name=\"label\" translatable=\"yes\">Copyr"
+  "ight</property></object><packing><property name=\"position\">4</propert"
+  "y><property name=\"tab_fill\">False</property></packing></child></objec"
+  "t><packing><property name=\"expand\">True</property><property name=\"fi"
+  "ll\">True</property><property name=\"position\">1</property></packing><"
+  "/child></object></child><action-widgets><action-widget response=\"0\">h"
+  "elp-button</action-widget><action-widget response=\"0\">close-button</a"
+  "ction-widget></action-widgets></object></interface>"
 };
 
-static const unsigned xfce_about_dialog_ui_length = 62515u;
+static const unsigned xfce_about_dialog_ui_length = 62528u;
 


=====================================
xfce4-about/main.c
=====================================
@@ -68,6 +68,7 @@ xfce_about_system (GtkBuilder *builder)
   GObject *vendor_info;
   glibtop_mem mem;
   const glibtop_sysinfo *info;
+  g_autofree char *os_logo = NULL;
   g_autofree char *device_text = NULL;
   g_autofree char *cpu_text = NULL;
   g_autofree char *gpu_text = NULL;
@@ -78,6 +79,31 @@ xfce_about_system (GtkBuilder *builder)
   g_autofree char *os_type_text = NULL;
   guint num_gpus = 0;
 
+  os_logo = get_os_logo ();
+  if (os_logo)
+    {
+      GObject *image = gtk_builder_get_object (builder, "os-logo");
+
+      if (gtk_icon_theme_has_icon (gtk_icon_theme_get_default (), os_logo))
+        gtk_image_set_from_icon_name (GTK_IMAGE (image), os_logo,
+                                      gtk_image_get_pixel_size (GTK_IMAGE (image)));
+      else
+        {
+          const gchar *extensions[] = {"svg", "png"};
+          g_autofree gchar *pixmap_path = g_strconcat ("/usr/share/pixmaps/", os_logo, ".", NULL);
+
+          for (guint i = 0; i < G_N_ELEMENTS (extensions); i++)
+            {
+              g_autofree gchar *path = g_strconcat (pixmap_path, extensions[i], NULL);
+              if (g_file_test (path, G_FILE_TEST_EXISTS))
+                {
+                  gtk_image_set_from_file (GTK_IMAGE (image), path);
+                  break;
+                }
+            }
+        }
+    }
+
   label = gtk_builder_get_object (builder, "device");
   device_text = get_system_info (DEVICE_NAME);
   gtk_label_set_text (GTK_LABEL (label), device_text ? device_text : "");


=====================================
xfce4-about/system-info.c
=====================================
@@ -737,3 +737,28 @@ get_os_name (void)
 
   return result;
 }
+
+
+
+char *
+get_os_logo (void)
+{
+  GHashTable *os_info;
+  gchar *os_logo;
+
+  os_info = get_os_info ();
+
+  /* If we're not on Linux we return NULL */
+  if (!os_info)
+    return NULL;
+
+  os_logo = g_strdup (g_hash_table_lookup (os_info, "LOGO"));
+  if (xfce_str_is_empty (os_logo))
+    {
+      g_free (os_logo);
+      os_logo = g_strconcat (g_hash_table_lookup (os_info, "ID"), "-logo", NULL);
+    }
+
+  g_clear_pointer (&os_info, g_hash_table_destroy);
+  return os_logo;
+}


=====================================
xfce4-about/system-info.h
=====================================
@@ -51,4 +51,4 @@ char *get_system_info (guint infotype);
 char *get_cpu_info (const glibtop_sysinfo *info);
 char *get_gpu_info (guint *num_gpus);
 char *get_os_name (void);
-char *get_renderer (void);
+char *get_os_logo (void);


=====================================
xfce4-about/xfce4-about-dialog.glade
=====================================
@@ -408,7 +408,7 @@ NO WARRANTY
                 <property name="margin_bottom">12</property>
                 <property name="spacing">36</property>
                 <child>
-                  <object class="GtkImage">
+                  <object class="GtkImage" id="os-logo">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="valign">start</property>



View it on GitLab: https://salsa.debian.org/xfce-team/desktop/libxfce4ui/-/commit/ad0da5357290cc9964c11fbb83240e4e1e4194a4

-- 
View it on GitLab: https://salsa.debian.org/xfce-team/desktop/libxfce4ui/-/commit/ad0da5357290cc9964c11fbb83240e4e1e4194a4
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-xfce-commits/attachments/20231110/8dba2e70/attachment-0001.htm>


More information about the Pkg-xfce-commits mailing list