Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package xfce4-panel for openSUSE:Factory 
checked in at 2026-03-04 21:11:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xfce4-panel (Old)
 and      /work/SRC/openSUSE:Factory/.xfce4-panel.new.561 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xfce4-panel"

Wed Mar  4 21:11:46 2026 rev:91 rq:1336554 version:4.20.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/xfce4-panel/xfce4-panel.changes  2026-01-02 
14:31:29.983835901 +0100
+++ /work/SRC/openSUSE:Factory/.xfce4-panel.new.561/xfce4-panel.changes 
2026-03-04 21:12:08.393588384 +0100
@@ -1,0 +2,21 @@
+Tue Mar  3 14:58:27 UTC 2026 - Manfred Hollstein <[email protected]>
+
+- Update to version 4.20.7
+  * tasklist: Destroy group menu item if window is closed
+  * panel: Make non-GObject internal plugins resident
+  * Revert "plugins: Do not use g_intern_static_string"
+  * panel: Do not fall through when internal plugin failed to load
+  * wayland: panel: Track set_anchor_default source id
+  * plugins: Do not use g_intern_static_string
+  * panel: Fix wrong memory management
+  * panel: Be sure to set plugin properties when appropriate
+  * Set application name so internal plugins can't override it
+  * plugins: Reset workspace group when needed
+  * wayland: Guard layer-shell related code also at runtime
+  * wayland: Review screen layout change management
+  * common: Only remap widget if visible
+  * wayland: autohide: Fix autohide of floating panel
+  * wayland: Handle null workspace group list when a group is destroyed
+  * wayland: panel: Delay hiding panel window when screen layout changes
+
+-------------------------------------------------------------------

Old:
----
  xfce4-panel-4.20.6.tar.bz2

New:
----
  xfce4-panel-4.20.7.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xfce4-panel.spec ++++++
--- /var/tmp/diff_new_pack.AV8Z5P/_old  2026-03-04 21:12:09.077616642 +0100
+++ /var/tmp/diff_new_pack.AV8Z5P/_new  2026-03-04 21:12:09.081616808 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package xfce4-panel
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %define libname libxfce4panel-2_0-4
 
 Name:           xfce4-panel
-Version:        4.20.6
+Version:        4.20.7
 Release:        0
 Summary:        Panel for the Xfce Desktop Environment
 License:        GPL-2.0-or-later AND LGPL-2.1-or-later

++++++ xfce4-panel-4.20.6.tar.bz2 -> xfce4-panel-4.20.7.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/ChangeLog 
new/xfce4-panel-4.20.7/ChangeLog
--- old/xfce4-panel-4.20.6/ChangeLog    2025-12-29 17:33:11.000000000 +0100
+++ new/xfce4-panel-4.20.7/ChangeLog    2026-03-02 10:55:54.000000000 +0100
@@ -1,3 +1,198 @@
+commit f4e21b14a389fa6b7cc4fd756cb92e0a822ed3e5
+Author: Gaël Bonithon <[email protected]>
+Date:   Mon Mar 2 10:53:21 2026 +0100
+
+    Updates for release
+
+commit 796f7cf457f829c6c561b6d7a8d048de7cce11f5
+Author: Gaël Bonithon <[email protected]>
+Date:   Fri Feb 20 18:10:47 2026 +0100
+
+    tasklist: Destroy group menu item if window is closed
+    
+    Fixes: #971
+    (cherry picked from commit 3fd181fd532ed7a4f277595019b11f3837f59fad)
+
+commit 7cb081d057be97ba103305327bec599ad1a98e99
+Author: Gaël Bonithon <[email protected]>
+Date:   Wed Jan 28 10:42:11 2026 +0100
+
+    panel: Make non-GObject internal plugins resident
+    
+    This seems to be the proper way to run these plugins in-process.
+    
+    (cherry picked from commit f3158265814b196f87fa9981bdc4c74a29478e94)
+
+commit fe13b29db0fc1c0c9227ffa20f86dc9db2ce9d32
+Author: Gaël Bonithon <[email protected]>
+Date:   Wed Jan 28 10:10:45 2026 +0100
+
+    Revert "plugins: Do not use g_intern_static_string"
+    
+    This reverts commit e772d4b4989bbab3d1892f0392f84bac712038ae.
+    
+    Actually not necessary for these plugins that use
+    XFCE_PANEL_DEFINE_PLUGIN, and I'm going to make other internal plugins
+    resident to avoid these static allocation issues.
+    
+    (cherry picked from commit 110cb1c654108b98735b48c661387453928a64ed)
+
+commit abb845b58690ba13fb4168d1fb00e5a050493979
+Author: Gaël Bonithon <[email protected]>
+Date:   Wed Jan 28 00:00:25 2026 +0100
+
+    panel: Do not fall through when internal plugin failed to load
+    
+    This makes check func in XFCE_PANEL_PLUGIN_REGISTER_WITH_CHECK check
+    twice, so typically a user dialog show twice, and it also causes
+    g_type_module_unuse() to be called twice, hence a critical warning.
+    If a plugin failed to load as internal, it should be set external by
+    regular means.
+    
+    (cherry picked from commit effe93848569df0b8cf0c4b6d3404e7375171970)
+
+commit c83f7da4c433a539a1a99e684dc81b3c0bea65ed
+Author: Gaël Bonithon <[email protected]>
+Date:   Tue Jan 27 23:18:09 2026 +0100
+
+    wayland: panel: Track set_anchor_default source id
+    
+    This can cause critical warning when deleting a panel.
+    
+    Amends: 16f715b3b82cc57dadd54e1eef4894ae298dee13
+    (cherry picked from commit 2a3e8db2ae3ca5124bb12514630e5c65947dec17)
+
+commit 7aba3e7a96b5fd1f07213ae08ad5b6a4f5445666
+Author: Gaël Bonithon <[email protected]>
+Date:   Tue Jan 27 16:20:57 2026 +0100
+
+    plugins: Do not use g_intern_static_string
+    
+    If plugin is run as internal and is removed, these interned strings
+    become invalid for the whole panel, while they could be used by other
+    object signals.
+    
+    (cherry picked from commit e772d4b4989bbab3d1892f0392f84bac712038ae)
+
+commit edd1bf1d5a891ef691f02722e22d444902f2393a
+Author: Gaël Bonithon <[email protected]>
+Date:   Tue Jan 27 09:50:30 2026 +0100
+
+    panel: Fix wrong memory management
+    
+    Fixes: bf69d537db38769977767a7f982fb164c15d11ac
+    (cherry picked from commit 054b3f174be83ab04cf2be1d6fb2dd79caddab5b)
+
+commit 2ff59e4d6f17616060aba6dc2bbbde2d9d0e7065
+Author: Gaël Bonithon <[email protected]>
+Date:   Sun Jan 25 23:52:58 2026 +0100
+
+    panel: Be sure to set plugin properties when appropriate
+    
+    Fixes: #967
+    (cherry picked from commit 1485e63e4e229c4a18023b8720d159634f458a7b)
+
+commit 6f9fecae486ef241d4e50201de4d9ede0f5a2f76
+Author: Gaël Bonithon <[email protected]>
+Date:   Mon Jan 26 18:15:03 2026 +0100
+
+    Set application name so internal plugins can't override it
+    
+    (cherry picked from commit 92a73afef4aef850bc416d8c575ce93b136c4e97)
+
+commit 878f1d0dfc514c0dbcca84d1d5ac0f412023a601
+Author: Gaël Bonithon <[email protected]>
+Date:   Sun Jan 25 19:18:42 2026 +0100
+
+    plugins: Reset workspace group when needed
+    
+    Fixes: 9c829ae45981274c26436268dd373ba97847ef44
+    Closes: #966
+    (cherry picked from commit 29d1ea798f6e51ea12989b3637d43482543a3aef)
+
+commit 71e963780b30f95c9d50c9c708e3cca1184a25cd
+Author: Gaël Bonithon <[email protected]>
+Date:   Sun Jan 25 18:30:38 2026 +0100
+
+    wayland: Guard layer-shell related code also at runtime
+    
+    Fixes: 16f715b3b82cc57dadd54e1eef4894ae298dee13
+    Closes: #965
+    (cherry picked from commit c59391cabd1634718e91363a2215df20735a77eb)
+
+commit fbf42721ecbc249793d962feb0934e3541928b79
+Author: Gaël Bonithon <[email protected]>
+Date:   Fri Jan 16 19:17:11 2026 +0100
+
+    wayland: Review screen layout change management
+    
+    This minimizes the use of delayed code when handling
+    GdkScreen::{monitors-changed,size-changed} signals, in particular by
+    hiding the panel before calling gtk_layer_set_monitor(), to avoid any
+    remapping internal to gtk-layer-shell. Only the final gtk_widget_show()
+    cannot currently (gtk-layer-shell 0.10.0) be performed in this signal
+    handler without causing an infinite loop or protocol errors.
+    
+    Not all compositors necessarily produce the same errors in the same
+    place in the code, and it also depends on whether or not they add a fake
+    output when changing tty. For example, the set_anchor_id check is only
+    necessary on wayfire 0.10.0 (#962), not on labwc 0.9.3 (#940). But
+    overall, this seems to fix pretty much all the problems encountered so
+    far.
+    
+    Fixes: #962
+    Related: #940, https://github.com/wmww/gtk-layer-shell/issues/217
+    Amends: d2fb4e093588d3322f1c54ae2fc9e4e6d6471aab
+    (cherry picked from commit 16f715b3b82cc57dadd54e1eef4894ae298dee13)
+
+commit e72ab7465e2ced2da297defaa1d5f5a2c79801c9
+Author: Gaël Bonithon <[email protected]>
+Date:   Wed Jan 21 19:07:16 2026 +0100
+
+    common: Only remap widget if visible
+    
+    (cherry picked from commit b3f557af76e049ce45c07d8e8f125ef11bddc735)
+
+commit c27ac82a2652d26a18994ffa47e28c9fb9f750a3
+Author: Gaël Bonithon <[email protected]>
+Date:   Sun Jan 18 23:26:29 2026 +0100
+
+    wayland: autohide: Fix autohide of floating panel
+    
+    This caused protocol error or flickering when panel was between two
+    monitors, and therefore considered as floating.
+    
+    (cherry picked from commit 040ac3b3df687edf6a14643162f7ff04ed5260d2)
+
+commit cfc964494bdb006db47335e3bf96e2bddf1174ee
+Author: Gaël Bonithon <[email protected]>
+Date:   Thu Jan 8 20:13:26 2026 +0100
+
+    wayland: Handle null workspace group list when a group is destroyed
+    
+    Fixes: 9c829ae45981274c26436268dd373ba97847ef44
+    Closes: #963
+    (cherry picked from commit 41abfb0b1f9929c905297d05f0ff1a2e3449b59e)
+
+commit bf348a988ed0c97f4d8332ac9b7fb64430c2ce96
+Author: Gaël Bonithon <[email protected]>
+Date:   Mon Jul 28 14:15:00 2025 +0200
+
+    wayland: panel: Delay hiding panel window when screen layout changes
+    
+    I strongly suspect the protocol error in #940 is related to internal
+    tinkering with gtk-layer-shell, unless it's coming from gtk, in any case
+    there doesn't seem to be any other solution at our level.
+    
+    Fixes: #940
+    (cherry picked from commit d2fb4e093588d3322f1c54ae2fc9e4e6d6471aab)
+
+commit b822a23684d925671dc7a33d61bc41a9d85f4faa
+Author: Gaël Bonithon <[email protected]>
+Date:   Mon Dec 29 17:44:49 2025 +0100
+
+    Back to development
+
 commit 686840c0b5b2d3df4ca0a6dbbf9edbbc3143ddea
 Author: Gaël Bonithon <[email protected]>
 Date:   Mon Dec 29 17:30:53 2025 +0100
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/NEWS new/xfce4-panel-4.20.7/NEWS
--- old/xfce4-panel-4.20.6/NEWS 2025-12-29 17:30:37.000000000 +0100
+++ new/xfce4-panel-4.20.7/NEWS 2026-03-02 10:53:15.000000000 +0100
@@ -1,3 +1,22 @@
+4.20.7 (2026-03-02)
+======
+- tasklist: Destroy group menu item if window is closed
+- panel: Make non-GObject internal plugins resident
+- Revert "plugins: Do not use g_intern_static_string"
+- panel: Do not fall through when internal plugin failed to load
+- wayland: panel: Track set_anchor_default source id
+- plugins: Do not use g_intern_static_string
+- panel: Fix wrong memory management
+- panel: Be sure to set plugin properties when appropriate
+- Set application name so internal plugins can't override it
+- plugins: Reset workspace group when needed
+- wayland: Guard layer-shell related code also at runtime
+- wayland: Review screen layout change management
+- common: Only remap widget if visible
+- wayland: autohide: Fix autohide of floating panel
+- wayland: Handle null workspace group list when a group is destroyed
+- wayland: panel: Delay hiding panel window when screen layout changes
+
 4.20.6 (2025-12-29)
 ======
 - arrow-fix: Restoring the button size after the arrow disappears
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/common/panel-utils.c 
new/xfce4-panel-4.20.7/common/panel-utils.c
--- old/xfce4-panel-4.20.6/common/panel-utils.c 2025-12-29 17:25:53.000000000 
+0100
+++ new/xfce4-panel-4.20.7/common/panel-utils.c 2026-03-02 10:43:18.000000000 
+0100
@@ -257,8 +257,11 @@
 void
 panel_utils_widget_remap (GtkWidget *widget)
 {
-  gtk_widget_hide (GTK_WIDGET (widget));
-  gtk_widget_show (GTK_WIDGET (widget));
+  if (gtk_widget_get_visible (widget))
+    {
+      gtk_widget_hide (GTK_WIDGET (widget));
+      gtk_widget_show (GTK_WIDGET (widget));
+    }
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/configure 
new/xfce4-panel-4.20.7/configure
--- old/xfce4-panel-4.20.6/configure    2025-12-29 17:32:14.000000000 +0100
+++ new/xfce4-panel-4.20.7/configure    2026-03-02 10:54:47.000000000 +0100
@@ -1,11 +1,11 @@
 #! /bin/sh
 # From configure.ac .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for xfce4-panel 4.20.6.
+# Generated by GNU Autoconf 2.72 for xfce4-panel 4.20.7.
 #
 # Report bugs to <https://gitlab.xfce.org/xfce/xfce4-panel/-/issues>.
 #
-# Copyright (c) 2004-2025 The Xfce development team. All rights reserved.
+# Copyright (c) 2004-2026 The Xfce development team. All rights reserved.
 #   Written for Xfce by Jasper Huijsmans <[email protected]> and Nick Schermer 
<[email protected]>.
 #
 #
@@ -618,8 +618,8 @@
 # Identity of this package.
 PACKAGE_NAME='xfce4-panel'
 PACKAGE_TARNAME='xfce4-panel'
-PACKAGE_VERSION='4.20.6'
-PACKAGE_STRING='xfce4-panel 4.20.6'
+PACKAGE_VERSION='4.20.7'
+PACKAGE_STRING='xfce4-panel 4.20.7'
 PACKAGE_BUGREPORT='https://gitlab.xfce.org/xfce/xfce4-panel/-/issues'
 PACKAGE_URL=''
 
@@ -1558,7 +1558,7 @@
   # 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 xfce4-panel 4.20.6 to adapt to many kinds of systems.
+'configure' configures xfce4-panel 4.20.7 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1629,7 +1629,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of xfce4-panel 4.20.6:";;
+     short | recursive ) echo "Configuration of xfce4-panel 4.20.7:";;
    esac
   cat <<\_ACEOF
 
@@ -1797,14 +1797,14 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-xfce4-panel configure 4.20.6
+xfce4-panel configure 4.20.7
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 
-Copyright (c) 2004-2025 The Xfce development team. All rights reserved.
+Copyright (c) 2004-2026 The Xfce development team. All rights reserved.
   Written for Xfce by Jasper Huijsmans <[email protected]> and Nick Schermer 
<[email protected]>.
 _ACEOF
   exit
@@ -2107,7 +2107,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by xfce4-panel $as_me 4.20.6, which was
+It was created by xfce4-panel $as_me 4.20.7, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -2888,7 +2888,7 @@
 
 printf "%s\n" "#define VERSION_FULL PACKAGE_VERSION" >>confdefs.h
 
-COPYRIGHT_YEAR=2025
+COPYRIGHT_YEAR=2026
 
 printf "%s\n" "#define COPYRIGHT_YEAR \"$COPYRIGHT_YEAR\"" >>confdefs.h
 
@@ -3600,7 +3600,7 @@
 
 # Define the identity of the package.
  PACKAGE='xfce4-panel'
- VERSION='4.20.6'
+ VERSION='4.20.7'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -15391,11 +15391,11 @@
 LIBXFCE4PANEL_VERINFO=4:0:0
 
 
-LIBXFCE4PANEL_VERSION=4.20.6
+LIBXFCE4PANEL_VERSION=4.20.7
 LIBXFCE4PANEL_VERSION_API=2.0
 LIBXFCE4PANEL_VERSION_MAJOR=4
 LIBXFCE4PANEL_VERSION_MINOR=20
-LIBXFCE4PANEL_VERSION_MICRO=6
+LIBXFCE4PANEL_VERSION_MICRO=7
 
 printf "%s\n" "#define LIBXFCE4PANEL_VERSION_API \"2.0\"" >>confdefs.h
 
@@ -27419,7 +27419,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by xfce4-panel $as_me 4.20.6, which was
+This file was extended by xfce4-panel $as_me 4.20.7, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -27487,7 +27487,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-xfce4-panel config.status 4.20.6
+xfce4-panel config.status 4.20.7
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/configure.ac 
new/xfce4-panel-4.20.7/configure.ac
--- old/xfce4-panel-4.20.6/configure.ac 2025-12-29 17:30:30.000000000 +0100
+++ new/xfce4-panel-4.20.7/configure.ac 2026-03-02 10:52:29.000000000 +0100
@@ -11,8 +11,8 @@
 m4_define([libxfce4panel_verinfo], [4:0:0]) dnl current:revision:age
 m4_define([libxfce4panel_version_api], [2.0])
 m4_define([xfce4_panel_config_version], [2])
-m4_define([copyright_year], [2025])
-XDT_VERSION_INIT([4.20.6])
+m4_define([copyright_year], [2026])
+XDT_VERSION_INIT([4.20.7])
 
 dnl minimum required versions
 m4_define([glib_minimum_version], [2.72.0])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/docs/reference/html/index.html 
new/xfce4-panel-4.20.7/docs/reference/html/index.html
--- old/xfce4-panel-4.20.6/docs/reference/html/index.html       2025-12-29 
17:35:13.000000000 +0100
+++ new/xfce4-panel-4.20.7/docs/reference/html/index.html       2026-03-02 
10:57:45.000000000 +0100
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" 
cellspacing="0"><tr><th valign="middle"><p class="title">xfce4-panel Reference 
Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for xfce4-panel 4.20.6.
+      for xfce4-panel 4.20.7.
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://[SERVER]/xfce4-panel/index.html"; 
target="_top">http://[SERVER]/xfce4-panel/</a>.
     </p></div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xfce4-panel-4.20.6/docs/reference/html/libxfce4panel-Version-Information.html
 
new/xfce4-panel-4.20.7/docs/reference/html/libxfce4panel-Version-Information.html
--- 
old/xfce4-panel-4.20.6/docs/reference/html/libxfce4panel-Version-Information.html
   2025-12-29 17:35:13.000000000 +0100
+++ 
new/xfce4-panel-4.20.7/docs/reference/html/libxfce4panel-Version-Information.html
   2026-03-02 10:57:45.000000000 +0100
@@ -262,7 +262,7 @@
 <hr>
 <div class="refsect2">
 <a name="LIBXFCE4PANEL-VERSION:CAPS"></a><h3>LIBXFCE4PANEL_VERSION</h3>
-<pre class="programlisting">#define LIBXFCE4PANEL_VERSION ("4.20.6")
+<pre class="programlisting">#define LIBXFCE4PANEL_VERSION ("4.20.7")
 </pre>
 <p>String with the full version of the panel.</p>
 <p class="since">Since: <a class="link" 
href="api-index-4-8.html#api-index-4.8">4.8</a></p>
@@ -292,7 +292,7 @@
 <hr>
 <div class="refsect2">
 <a 
name="LIBXFCE4PANEL-MICRO-VERSION:CAPS"></a><h3>LIBXFCE4PANEL_MICRO_VERSION</h3>
-<pre class="programlisting">#define LIBXFCE4PANEL_MICRO_VERSION (6)
+<pre class="programlisting">#define LIBXFCE4PANEL_MICRO_VERSION (7)
 </pre>
 <p>The micro version number of the libxfce4panel library.
 Like libxfce4panel_micro_version, but from the headers used at
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xfce4-panel-4.20.6/libxfce4panel/libxfce4panel-config.h 
new/xfce4-panel-4.20.7/libxfce4panel/libxfce4panel-config.h
--- old/xfce4-panel-4.20.6/libxfce4panel/libxfce4panel-config.h 2025-12-29 
17:32:56.000000000 +0100
+++ new/xfce4-panel-4.20.7/libxfce4panel/libxfce4panel-config.h 2026-03-02 
10:55:45.000000000 +0100
@@ -34,7 +34,7 @@
  *
  * Since: 4.8
  **/
-#define LIBXFCE4PANEL_VERSION ("4.20.6")
+#define LIBXFCE4PANEL_VERSION ("4.20.7")
 
 /**
  * LIBXFCE4PANEL_MAJOR_VERSION:
@@ -70,7 +70,7 @@
  *
  * Since: 4.8
  **/
-#define LIBXFCE4PANEL_MICRO_VERSION (6)
+#define LIBXFCE4PANEL_MICRO_VERSION (7)
 
 /**
  * LIBXFCE4PANEL_CHECK_VERSION:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/meson.build 
new/xfce4-panel-4.20.7/meson.build
--- old/xfce4-panel-4.20.6/meson.build  2025-12-29 17:30:33.000000000 +0100
+++ new/xfce4-panel-4.20.7/meson.build  2026-03-02 10:52:43.000000000 +0100
@@ -1,7 +1,7 @@
 project(
   'xfce4-panel',
   'c',
-version : '4.20.6',
+version : '4.20.7',
   license : 'GPL-2.0-or-later',
   meson_version : '>= 0.56.0',
   default_options : ['c_std=gnu11', 'buildtype=debugoptimized', 
'warning_level=2']
@@ -9,7 +9,7 @@
 
 project_namespace = 'xfce'
 pkgdatadir = get_option('prefix') / get_option('datadir') / 
meson.project_name()
-copyright_year = '2025'
+copyright_year = '2026'
 libxfce4panel_version_api = '2.0'
 xfce4_panel_config_version = '2'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/panel/panel-application.c 
new/xfce4-panel-4.20.7/panel/panel-application.c
--- old/xfce4-panel-4.20.6/panel/panel-application.c    2025-12-29 
17:25:54.000000000 +0100
+++ new/xfce4-panel-4.20.7/panel/panel-application.c    2026-03-02 
10:43:18.000000000 +0100
@@ -202,6 +202,9 @@
   application->drop_occurred = FALSE;
   application->autohide_block = 0;
 
+  /* set application name so internal plugins can't override it */
+  g_set_application_name (PACKAGE_NAME);
+
   /* get the xfconf channel (singleton) */
   application->xfconf = xfconf_channel_get (XFCE_PANEL_CHANNEL_NAME);
 
@@ -867,7 +870,8 @@
                         GTK_WIDGET (provider), position);
 
   /* send all the needed info about the panel to the plugin */
-  panel_window_set_provider_info (window, provider, FALSE);
+  if (gtk_widget_get_realized (GTK_WIDGET (window)))
+    panel_window_set_provider_info (window, provider, FALSE);
 
   /* show the plugin */
   gtk_widget_show (provider);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xfce4-panel-4.20.6/panel/panel-gdbus-exported-service.c 
new/xfce4-panel-4.20.7/panel/panel-gdbus-exported-service.c
--- old/xfce4-panel-4.20.6/panel/panel-gdbus-exported-service.c 2025-12-29 
17:34:39.000000000 +0100
+++ new/xfce4-panel-4.20.7/panel/panel-gdbus-exported-service.c 2026-03-02 
10:56:57.000000000 +0100
@@ -1470,7 +1470,7 @@
 gboolean
 xfce_panel_exported_service_call_plugin_event_finish (
     XfcePanelExportedService *proxy,
-    gboolean *out_succeed,
+    gboolean* out_succeed,
     GAsyncResult *res,
     GError **error)
 {
@@ -1508,7 +1508,7 @@
     const gchar *arg_plugin_name,
     const gchar *arg_name,
     GVariant *arg_value,
-    gboolean *out_succeed,
+    gboolean* out_succeed,
     GCancellable *cancellable,
     GError **error)
 {
@@ -2317,8 +2317,14 @@
 {
   XfcePanelExportedServiceSkeleton *skeleton = 
XFCE_PANEL_EXPORTED_SERVICE_SKELETON (object);
   g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) 
_changed_property_free);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  /* coverity[missing_lock : SUPPRESS] */
+  g_clear_pointer (&skeleton->priv->changed_properties_idle_source, 
g_source_destroy);
+#else
   if (skeleton->priv->changed_properties_idle_source != NULL)
     g_source_destroy (skeleton->priv->changed_properties_idle_source);
+skeleton->priv->changed_properties_idle_source = NULL;
+#endif
   g_main_context_unref (skeleton->priv->context);
   g_mutex_clear (&skeleton->priv->lock);
   G_OBJECT_CLASS (xfce_panel_exported_service_skeleton_parent_class)->finalize 
(object);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xfce4-panel-4.20.6/panel/panel-gdbus-exported-service.h 
new/xfce4-panel-4.20.7/panel/panel-gdbus-exported-service.h
--- old/xfce4-panel-4.20.6/panel/panel-gdbus-exported-service.h 2025-12-29 
17:34:39.000000000 +0100
+++ new/xfce4-panel-4.20.7/panel/panel-gdbus-exported-service.h 2026-03-02 
10:56:57.000000000 +0100
@@ -185,7 +185,7 @@
 
 gboolean xfce_panel_exported_service_call_plugin_event_finish (
     XfcePanelExportedService *proxy,
-    gboolean *out_succeed,
+    gboolean* out_succeed,
     GAsyncResult *res,
     GError **error);
 
@@ -194,7 +194,7 @@
     const gchar *arg_plugin_name,
     const gchar *arg_name,
     GVariant *arg_value,
-    gboolean *out_succeed,
+    gboolean* out_succeed,
     GCancellable *cancellable,
     GError **error);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/panel/panel-module-factory.c 
new/xfce4-panel-4.20.7/panel/panel-module-factory.c
--- old/xfce4-panel-4.20.6/panel/panel-module-factory.c 2025-12-29 
17:25:54.000000000 +0100
+++ new/xfce4-panel-4.20.7/panel/panel-module-factory.c 2026-03-02 
10:43:18.000000000 +0100
@@ -215,7 +215,7 @@
         {
           const gchar *const *sys_datadirs = g_get_system_data_dirs ();
           const gchar *user_datadir = g_get_user_data_dir ();
-          GHashTable *unique = g_hash_table_new (g_str_hash, g_str_equal);
+          GHashTable *unique = g_hash_table_new_full (g_str_hash, g_str_equal, 
g_free, NULL);
 
           for (const gchar *const *p = sys_datadirs; *p != NULL; p++)
             {
@@ -234,8 +234,6 @@
                     build_dirs_added = TRUE;
                   g_free (prefix);
                 }
-
-              g_free (path);
             }
 
           g_hash_table_destroy (unique);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/panel/panel-module.c 
new/xfce4-panel-4.20.7/panel/panel-module.c
--- old/xfce4-panel-4.20.6/panel/panel-module.c 2025-12-29 17:25:54.000000000 
+0100
+++ new/xfce4-panel-4.20.7/panel/panel-module.c 2026-03-02 10:43:18.000000000 
+0100
@@ -221,15 +221,24 @@
       if (make_resident)
         g_module_make_resident (module->library);
     }
-  else if (!g_module_symbol (module->library, "xfce_panel_module_construct",
-                             (gpointer) &module->construct_func))
+  else
     {
-      g_critical ("Module \"%s\" lacks a plugin register function.",
-                  module->filename);
-
-      panel_module_unload (type_module);
-
-      return FALSE;
+      if (g_module_symbol (module->library, "xfce_panel_module_construct",
+                           (gpointer) &module->construct_func))
+        {
+          /* avoid static memory allocation issues when removing the plugin, 
with e.g
+           * g_intern_static_string() or G_PARAM_STATIC_STRINGS in 
signals/properties
+           * declarations, and keep plugin types in memory so plugin can be 
re-added
+           * after being removed */
+          if (module->mode == PANEL_MODULE_RUN_MODE_INTERNAL)
+            g_module_make_resident (module->library);
+        }
+      else
+        {
+          g_critical ("Module \"%s\" lacks a plugin register function.", 
module->filename);
+          panel_module_unload (type_module);
+          return FALSE;
+        }
     }
 
   return TRUE;
@@ -447,16 +456,10 @@
               debug_type = "construct-func";
             }
 
-          if (G_LIKELY (plugin != NULL))
-            break;
-          else
+          if (G_UNLIKELY (plugin == NULL))
             g_type_module_unuse (G_TYPE_MODULE (module));
         }
-
-      /* fall-through (make wrapper plugin), probably a plugin with
-       * preinit_func which is not supported for internal plugins
-       * note: next comment tells GCC7 to ignore the fallthrough */
-      /* fall through */
+      break;
 
     case PANEL_MODULE_RUN_MODE_EXTERNAL:
       plugin = panel_plugin_external_wrapper_new (module, unique_id, 
arguments);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xfce4-panel-4.20.6/panel/panel-plugin-external-wrapper-exported.c 
new/xfce4-panel-4.20.7/panel/panel-plugin-external-wrapper-exported.c
--- old/xfce4-panel-4.20.6/panel/panel-plugin-external-wrapper-exported.c       
2025-12-29 17:34:39.000000000 +0100
+++ new/xfce4-panel-4.20.7/panel/panel-plugin-external-wrapper-exported.c       
2026-03-02 10:56:58.000000000 +0100
@@ -1660,8 +1660,14 @@
 {
   XfcePanelPluginWrapperExportedSkeleton *skeleton = 
XFCE_PANEL_PLUGIN_WRAPPER_EXPORTED_SKELETON (object);
   g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) 
_changed_property_free);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  /* coverity[missing_lock : SUPPRESS] */
+  g_clear_pointer (&skeleton->priv->changed_properties_idle_source, 
g_source_destroy);
+#else
   if (skeleton->priv->changed_properties_idle_source != NULL)
     g_source_destroy (skeleton->priv->changed_properties_idle_source);
+skeleton->priv->changed_properties_idle_source = NULL;
+#endif
   g_main_context_unref (skeleton->priv->context);
   g_mutex_clear (&skeleton->priv->lock);
   G_OBJECT_CLASS 
(xfce_panel_plugin_wrapper_exported_skeleton_parent_class)->finalize (object);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/panel/panel-window.c 
new/xfce4-panel-4.20.7/panel/panel-window.c
--- old/xfce4-panel-4.20.6/panel/panel-window.c 2025-12-29 17:25:54.000000000 
+0100
+++ new/xfce4-panel-4.20.7/panel/panel-window.c 2026-03-02 10:43:18.000000000 
+0100
@@ -389,6 +389,12 @@
   gboolean floating;
   guint span_monitors : 1;
   gchar *output_name;
+#ifdef HAVE_GTK_LAYER_SHELL
+  guint show_id;
+  guint set_anchor_default_id;
+  gboolean in_screen_layout_changed;
+  gulong set_anchor_id;
+#endif
 
   /* allocated position of the panel */
   GdkRectangle alloc;
@@ -1036,6 +1042,13 @@
   if (G_UNLIKELY (window->opacity_timeout_id != 0))
     g_source_remove (window->opacity_timeout_id);
 
+#ifdef HAVE_GTK_LAYER_SHELL
+  if (G_UNLIKELY (window->show_id != 0))
+    g_source_remove (window->show_id);
+  if (window->set_anchor_default_id != 0)
+    g_source_remove (window->set_anchor_default_id);
+#endif
+
   /* destroy the autohide window */
   if (window->autohide_window != NULL)
     gtk_widget_destroy (window->autohide_window);
@@ -1422,27 +1435,38 @@
 static void
 set_anchor (PanelWindow *window)
 {
-  g_signal_handlers_disconnect_by_func (window, set_anchor, NULL);
+  g_signal_handler_disconnect (G_OBJECT (window), window->set_anchor_id);
+  window->set_anchor_id = 0;
   panel_window_layer_set_anchor (window);
 }
 
 
 
 static gboolean
-set_anchor_default (gpointer window)
+set_anchor_default (gpointer data)
 {
+  PanelWindow *window = data;
+
   /*
    * Disable left/right or top/bottom anchor pairs during allocation, so that 
the panel
    * is not stretched between the two anchors, preventing it from shrinking. 
Quite an
    * ugly hack but it works until it gets better. This must be done around a 
full allocation,
    * however, not in the middle, otherwise protocol errors may occur 
(allocation limits are
    * not the same depending on whether the layer-shell surface has three 
anchors or only two).
+   * It may also be necessary to disable it if a _screen_layout_change() 
occurs in the
+   * meantime and the panel needs to be remapped, in order to avoid a protocol 
error or an
+   * infinite loop in gtk-layer-shell.
    */
-  gtk_layer_set_anchor (window, GTK_LAYER_SHELL_EDGE_TOP, TRUE);
-  gtk_layer_set_anchor (window, GTK_LAYER_SHELL_EDGE_BOTTOM, FALSE);
-  gtk_layer_set_anchor (window, GTK_LAYER_SHELL_EDGE_LEFT, TRUE);
-  gtk_layer_set_anchor (window, GTK_LAYER_SHELL_EDGE_RIGHT, FALSE);
-  g_signal_connect (window, "size-allocate", G_CALLBACK (set_anchor), NULL);
+  if (window->set_anchor_id == 0)
+    {
+      gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_TOP, 
TRUE);
+      gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_BOTTOM, 
FALSE);
+      gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_LEFT, 
TRUE);
+      gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_RIGHT, 
FALSE);
+      window->set_anchor_id = g_signal_connect (window, "size-allocate", 
G_CALLBACK (set_anchor), NULL);
+    }
+
+  window->set_anchor_default_id = 0;
   return FALSE;
 }
 #endif
@@ -1499,7 +1523,9 @@
           && window->snap_position != SNAP_POSITION_NONE
           && n_width != window->alloc.width)
         {
-          g_idle_add (set_anchor_default, window);
+          if (window->set_anchor_default_id != 0)
+            g_source_remove (window->set_anchor_default_id);
+          window->set_anchor_default_id = g_idle_add (set_anchor_default, 
window);
         }
 #endif
     }
@@ -1563,7 +1589,9 @@
           && window->snap_position != SNAP_POSITION_NONE
           && n_height != window->alloc.height)
         {
-          g_idle_add (set_anchor_default, window);
+          if (window->set_anchor_default_id != 0)
+            g_source_remove (window->set_anchor_default_id);
+          window->set_anchor_default_id = g_idle_add (set_anchor_default, 
window);
         }
 #endif
     }
@@ -1616,8 +1644,10 @@
                   && (window->autohide_state == AUTOHIDE_HIDDEN
                       || window->autohide_state == AUTOHIDE_POPUP)))
     {
+      gboolean autohide_running = window->autohide_timeout_id != 0 || 
window->popdown_progress != -G_MAXINT;
+
       /* autohide timeout is already running, so let's wait with hiding the 
panel */
-      if ((window->autohide_timeout_id != 0 || window->popdown_progress != 
-G_MAXINT)
+      if (autohide_running
           /* may be false on wayland where gtk_widget_queue_resize() does not
            * always trigger size_allocate() */
           && gtk_widget_get_visible (window->autohide_window))
@@ -1687,8 +1717,8 @@
         window->floating = TRUE;
 
       /* make the panel invisible without animation */
-      if (window->floating
-          || window->popdown_speed == 0)
+      if (!autohide_running
+          && (window->floating || window->popdown_speed == 0))
         {
           /* cancel any pending animations */
           if (window->autohide_ease_out_id != 0)
@@ -2057,6 +2087,21 @@
 
 
 
+static gboolean
+set_all_provider_info (gpointer data)
+{
+  PanelWindow *window = data;
+  GtkWidget *itembar = gtk_bin_get_child (GTK_BIN (window));
+  GList *plugins = gtk_container_get_children (GTK_CONTAINER (itembar));
+  for (GList *lp = plugins; lp != NULL; lp = lp->next)
+    panel_window_set_provider_info (window, lp->data, FALSE);
+
+  g_list_free (plugins);
+  return FALSE;
+}
+
+
+
 static void
 panel_window_realize (GtkWidget *widget)
 {
@@ -2075,6 +2120,9 @@
 
   /* redirect some corner cases (see issue #227) */
   gdk_window_add_filter (gdkwindow, panel_window_filter, window);
+
+  /* be sure to set all provider infos if the panel was hidden at startup */
+  g_idle_add (set_all_provider_info, window);
 }
 
 
@@ -2618,6 +2666,42 @@
 
 
 
+#ifdef HAVE_GTK_LAYER_SHELL
+static gboolean
+panel_window_show (gpointer data)
+{
+  PanelWindow *window = data;
+
+  /* showing the panel here should not trigger _screen_layout_changed(), but 
it does when
+   * things go wrong, so let's at least minimize the damage also in this case 
*/
+  window->in_screen_layout_changed = TRUE;
+
+  /*
+   * The panel window may be hidden if the output to which it is assigned is 
disconnected,
+   * and must be shown when that output is reconnected. This is always true on 
X11, but on
+   * Wayland it should only be done if the window has not been autohidden, or 
if it's shown
+   * for the first time.
+   */
+  if (!gtk_widget_get_visible (GTK_WIDGET (window))
+      && (window->autohide_behavior == AUTOHIDE_BEHAVIOR_NEVER
+          || window->autohide_state == AUTOHIDE_VISIBLE
+          || !gtk_widget_get_realized (GTK_WIDGET (window))))
+    {
+      /* see comment in set_anchor_default() */
+      if (window->set_anchor_id != 0)
+        set_anchor (window);
+
+      gtk_widget_show (GTK_WIDGET (window));
+    }
+
+  window->in_screen_layout_changed = FALSE;
+  window->show_id = 0;
+  return FALSE;
+}
+#endif
+
+
+
 static void
 panel_window_screen_layout_changed (GdkScreen *screen,
                                     PanelWindow *window)
@@ -2637,10 +2721,40 @@
   if (window->base_x == -1 && window->base_y == -1)
     return;
 
+#ifdef HAVE_GTK_LAYER_SHELL
+  /* avoid any recursion when remapping the panel, here or in gtk-layer-shell 
*/
+  if (gtk_layer_is_supported ())
+    {
+      if (window->in_screen_layout_changed)
+        return;
+      window->in_screen_layout_changed = TRUE;
+
+      if (G_UNLIKELY (window->show_id != 0))
+        {
+          g_source_remove (window->show_id);
+          window->show_id = 0;
+        }
+    }
+#endif
+
   /* n_monitors == 0 should be a temporary state, it can happen on Wayland */
   n_monitors = gdk_display_get_n_monitors (window->display);
   if (n_monitors == 0)
-    return;
+    {
+      panel_debug (PANEL_DEBUG_POSITIONING, "%p: no monitor found, hiding 
window", window);
+
+      /* hide the panel first, so it is not remapped by gtk-layer-shell */
+      gtk_widget_hide (GTK_WIDGET (window));
+
+#ifdef HAVE_GTK_LAYER_SHELL
+      if (gtk_layer_is_supported ())
+        {
+          gtk_layer_set_monitor (GTK_WINDOW (window), NULL);
+          window->in_screen_layout_changed = FALSE;
+        }
+#endif
+      return;
+    }
 
   /* print the display layout when debugging is enabled */
   if (G_UNLIKELY (panel_debug_has_domain (PANEL_DEBUG_YES)))
@@ -2683,8 +2797,6 @@
 
       a.width -= a.x;
       a.height -= a.y;
-
-      panel_return_if_fail (a.width > 0 && a.height > 0);
     }
   else
     {
@@ -2695,7 +2807,6 @@
           monitor = gdk_display_get_monitor_at_point (window->display, 
window->base_x,
                                                       window->base_y);
           gdk_monitor_get_geometry (monitor, &a);
-          panel_return_if_fail (a.width > 0 && a.height > 0);
         }
       else if (g_strcmp0 (window->output_name, "Primary") == 0)
         {
@@ -2705,7 +2816,6 @@
             monitor = gdk_display_get_monitor (window->display, 0);
 
           gdk_monitor_get_geometry (monitor, &a);
-          panel_return_if_fail (a.width > 0 && a.height > 0);
         }
       else
         {
@@ -2751,31 +2861,28 @@
                     }
                 }
             }
-
-          if (G_UNLIKELY (a.height == 0 && a.width == 0))
-            {
-              panel_debug (PANEL_DEBUG_POSITIONING,
-                           "%p: monitor %s not found, hiding window",
-                           window, window->output_name);
-
-              /* hide the panel if the monitor was not found */
-              if (gtk_widget_get_visible (GTK_WIDGET (window)))
-                gtk_widget_hide (GTK_WIDGET (window));
-              return;
-            }
         }
     }
 
-#ifdef HAVE_GTK_LAYER_SHELL
-  /* the compositor does not manage to display the panel on the right monitor
-   * by itself in general */
-  if (gtk_layer_is_supported () && !window->span_monitors)
+  /* monitor was not found or is an unusable fake monitor on wayland */
+  if (G_UNLIKELY (a.height == 0 || a.width == 0))
     {
-      gtk_layer_set_monitor (GTK_WINDOW (window), monitor);
-      if (window->autohide_behavior != AUTOHIDE_BEHAVIOR_NEVER)
-        gtk_layer_set_monitor (GTK_WINDOW (window->autohide_window), monitor);
-    }
+      panel_debug (PANEL_DEBUG_POSITIONING,
+                   "%p: monitor %s not found, hiding window",
+                   window, window->output_name);
+
+      /* hide the panel first, so it is not remapped by gtk-layer-shell */
+      gtk_widget_hide (GTK_WIDGET (window));
+
+#ifdef HAVE_GTK_LAYER_SHELL
+      if (gtk_layer_is_supported ())
+        {
+          gtk_layer_set_monitor (GTK_WINDOW (window), NULL);
+          window->in_screen_layout_changed = FALSE;
+        }
 #endif
+      return;
+    }
 
   /* set the new working area of the panel */
   window->area = a;
@@ -2795,18 +2902,38 @@
   if (force_struts_update)
     panel_window_screen_struts_set (window);
 
-  /*
-   * The panel window may be hidden if the output to which it is assigned is 
disconnected,
-   * and must be shown when that output is reconnected. This is always true on 
X11, but on
-   * Wayland it should only be done if the window has not been autohidden, or 
if it's shown
-   * for the first time.
-   */
-  if (!gtk_widget_get_visible (GTK_WIDGET (window))
-      && (!gtk_layer_is_supported ()
-          || window->autohide_behavior == AUTOHIDE_BEHAVIOR_NEVER
-          || window->autohide_state == AUTOHIDE_VISIBLE
-          || !gtk_widget_get_realized (GTK_WIDGET (window))))
-    gtk_widget_show (GTK_WIDGET (window));
+#ifdef HAVE_GTK_LAYER_SHELL
+  if (gtk_layer_is_supported ())
+    {
+      /* we need to set this properly so it is consistent with e.g. 
"length-max" */
+      if (monitor != gtk_layer_get_monitor (GTK_WINDOW (window)))
+        {
+          /* hide the panel first, so it is not remapped by gtk-layer-shell */
+          gtk_widget_hide (GTK_WIDGET (window));
+
+          gtk_layer_set_monitor (GTK_WINDOW (window), monitor);
+          if (window->autohide_behavior != AUTOHIDE_BEHAVIOR_NEVER)
+            gtk_layer_set_monitor (GTK_WINDOW (window->autohide_window), 
monitor);
+        }
+
+      /*
+       * We have to delay this to avoid gtk-layer-shell infinite loop and/or 
protocol errors
+       * https://gitlab.xfce.org/xfce/xfce4-panel/-/issues/940
+       * https://gitlab.xfce.org/xfce/xfce4-panel/-/issues/962
+       * https://github.com/wmww/gtk-layer-shell/issues/217
+       */
+      window->show_id = g_idle_add (panel_window_show, window);
+
+      window->in_screen_layout_changed = FALSE;
+    }
+  else
+#endif
+    /*
+     * The panel window may be hidden if the output to which it is assigned is 
disconnected,
+     * and must be shown when that output is reconnected. This is always true 
on X11.
+     */
+    if (!gtk_widget_get_visible (GTK_WIDGET (window)))
+      gtk_widget_show (GTK_WIDGET (window));
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/plugins/pager/pager-buttons.c 
new/xfce4-panel-4.20.7/plugins/pager/pager-buttons.c
--- old/xfce4-panel-4.20.6/plugins/pager/pager-buttons.c        2025-12-29 
17:25:54.000000000 +0100
+++ new/xfce4-panel-4.20.7/plugins/pager/pager-buttons.c        2026-03-02 
10:43:18.000000000 +0100
@@ -56,6 +56,9 @@
                                           XfwWorkspace *destroyed_workspace,
                                           PagerButtons *pager);
 static void
+pager_buttons_screen_monitors_changed (XfwWorkspaceGroup *group,
+                                       PagerButtons *pager);
+static void
 pager_buttons_screen_viewports_changed (XfwWorkspaceGroup *group,
                                         PagerButtons *pager);
 static void
@@ -206,6 +209,8 @@
                     G_CALLBACK (pager_buttons_screen_workspace_created), 
pager);
   g_signal_connect (group, "workspace-removed",
                     G_CALLBACK (pager_buttons_screen_workspace_destroyed), 
pager);
+  g_signal_connect (group, "monitors-changed",
+                    G_CALLBACK (pager_buttons_screen_monitors_changed), pager);
   g_signal_connect (group, "viewports-changed",
                     G_CALLBACK (pager_buttons_screen_viewports_changed), 
pager);
 }
@@ -220,6 +225,7 @@
   g_signal_handlers_disconnect_by_func (group, 
pager_buttons_screen_workspace_changed, pager);
   g_signal_handlers_disconnect_by_func (group, 
pager_buttons_screen_workspace_created, pager);
   g_signal_handlers_disconnect_by_func (group, 
pager_buttons_screen_workspace_destroyed, pager);
+  g_signal_handlers_disconnect_by_func (group, 
pager_buttons_screen_monitors_changed, pager);
   g_signal_handlers_disconnect_by_func (group, 
pager_buttons_screen_viewports_changed, pager);
 }
 
@@ -586,6 +592,18 @@
   panel_return_if_fail (PAGER_IS_BUTTONS (pager));
 
   pager_buttons_queue_rebuild (pager);
+}
+
+
+
+static void
+pager_buttons_screen_monitors_changed (XfwWorkspaceGroup *group,
+                                       PagerButtons *pager)
+{
+  panel_return_if_fail (XFW_IS_WORKSPACE_GROUP (group));
+  panel_return_if_fail (PAGER_IS_BUTTONS (pager));
+
+  pager_buttons_queue_rebuild (pager);
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/plugins/systray/sn-watcher.c 
new/xfce4-panel-4.20.7/plugins/systray/sn-watcher.c
--- old/xfce4-panel-4.20.6/plugins/systray/sn-watcher.c 2025-12-29 
17:34:45.000000000 +0100
+++ new/xfce4-panel-4.20.7/plugins/systray/sn-watcher.c 2026-03-02 
10:57:05.000000000 +0100
@@ -1899,8 +1899,14 @@
     g_value_unset (&skeleton->priv->properties[n]);
   g_free (skeleton->priv->properties);
   g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) 
_changed_property_free);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  /* coverity[missing_lock : SUPPRESS] */
+  g_clear_pointer (&skeleton->priv->changed_properties_idle_source, 
g_source_destroy);
+#else
   if (skeleton->priv->changed_properties_idle_source != NULL)
     g_source_destroy (skeleton->priv->changed_properties_idle_source);
+skeleton->priv->changed_properties_idle_source = NULL;
+#endif
   g_main_context_unref (skeleton->priv->context);
   g_mutex_clear (&skeleton->priv->lock);
   G_OBJECT_CLASS (sn_watcher_skeleton_parent_class)->finalize (object);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xfce4-panel-4.20.6/plugins/tasklist/tasklist-widget.c 
new/xfce4-panel-4.20.7/plugins/tasklist/tasklist-widget.c
--- old/xfce4-panel-4.20.6/plugins/tasklist/tasklist-widget.c   2025-12-29 
17:25:55.000000000 +0100
+++ new/xfce4-panel-4.20.7/plugins/tasklist/tasklist-widget.c   2026-03-02 
10:43:18.000000000 +0100
@@ -1215,7 +1215,10 @@
   /* swap integers with vertical orientation */
   if (!xfce_tasklist_horizontal (tasklist))
     TRANSPOSE_AREA (area);
-  panel_return_if_fail (area.height == tasklist->size);
+
+  /* panel size has not been sent yet */
+  if (area.height != tasklist->size)
+    return;
 
   /* TODO if we compare the allocation with the requisition we can
    * do a fast path to the child allocation, i think */
@@ -1663,11 +1666,11 @@
 
 
 static void
-workspace_group_destroyed (XfwWorkspaceManager *manager,
-                           XfwWorkspaceGroup *group,
-                           XfceTasklist *tasklist)
+workspace_group_created (XfwWorkspaceManager *manager,
+                         XfwWorkspaceGroup *group,
+                         XfceTasklist *tasklist)
 {
-  if (group == tasklist->workspace_group)
+  if (tasklist->workspace_group == NULL)
     {
       tasklist->workspace_group = xfw_workspace_manager_list_workspace_groups 
(manager)->data;
       g_signal_connect (G_OBJECT (tasklist->workspace_group), 
"active-workspace-changed",
@@ -1680,6 +1683,31 @@
 
 
 static void
+workspace_group_destroyed (XfwWorkspaceManager *manager,
+                           XfwWorkspaceGroup *group,
+                           XfceTasklist *tasklist)
+{
+  if (group == tasklist->workspace_group)
+    {
+      GList *groups = xfw_workspace_manager_list_workspace_groups (manager);
+      if (groups != NULL)
+        {
+          tasklist->workspace_group = groups->data;
+          g_signal_connect (G_OBJECT (tasklist->workspace_group), 
"active-workspace-changed",
+                            G_CALLBACK 
(xfce_tasklist_active_workspace_changed), tasklist);
+          g_signal_connect (G_OBJECT (tasklist->workspace_group), 
"viewports-changed",
+                            G_CALLBACK (xfce_tasklist_viewports_changed), 
tasklist);
+        }
+      else
+        {
+          tasklist->workspace_group = NULL;
+        }
+    }
+}
+
+
+
+static void
 xfce_tasklist_connect_screen (XfceTasklist *tasklist)
 {
   GList *windows, *li;
@@ -1701,6 +1729,7 @@
   /* window button visibility based on window<->workspace association only 
works on X11,
    * where there is only one workspace group, but it can be destroyed on 
wayland, so let's
    * manage this in a minimalist way */
+  g_signal_connect_object (manager, "workspace-group-created", G_CALLBACK 
(workspace_group_created), tasklist, 0);
   g_signal_connect_object (manager, "workspace-group-destroyed", G_CALLBACK 
(workspace_group_destroyed), tasklist, 0);
   workspace_group_destroyed (manager, NULL, tasklist);
 
@@ -1788,6 +1817,7 @@
   panel_assert (tasklist->skipped_windows == NULL);
 
   g_clear_object (&tasklist->screen);
+  tasklist->workspace_group = NULL;
   tasklist->display = NULL;
 }
 
@@ -3477,6 +3507,8 @@
   g_signal_connect (G_OBJECT (mi), "button-release-event",
                     G_CALLBACK (xfce_tasklist_button_button_release_event), 
child);
 
+  g_signal_connect_object (child->window, "closed", G_CALLBACK 
(gtk_widget_destroy), mi, G_CONNECT_SWAPPED);
+
   /* TODO item dnd */
 
   return mi;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/plugins/windowmenu/windowmenu.c 
new/xfce4-panel-4.20.7/plugins/windowmenu/windowmenu.c
--- old/xfce4-panel-4.20.6/plugins/windowmenu/windowmenu.c      2025-12-29 
17:25:55.000000000 +0100
+++ new/xfce4-panel-4.20.7/plugins/windowmenu/windowmenu.c      2026-03-02 
10:43:18.000000000 +0100
@@ -407,12 +407,26 @@
 
 
 static void
+workspace_group_created (XfwWorkspaceManager *manager,
+                         XfwWorkspaceGroup *group,
+                         WindowMenuPlugin *plugin)
+{
+  if (plugin->workspace_group == NULL)
+    plugin->workspace_group = xfw_workspace_manager_list_workspace_groups 
(manager)->data;
+}
+
+
+
+static void
 workspace_group_destroyed (XfwWorkspaceManager *manager,
                            XfwWorkspaceGroup *group,
                            WindowMenuPlugin *plugin)
 {
   if (group == plugin->workspace_group)
-    plugin->workspace_group = xfw_workspace_manager_list_workspace_groups 
(manager)->data;
+    {
+      GList *groups = xfw_workspace_manager_list_workspace_groups (manager);
+      plugin->workspace_group = groups == NULL ? NULL : groups->data;
+    }
 }
 
 
@@ -445,6 +459,7 @@
       g_signal_handlers_disconnect_by_func (G_OBJECT (plugin->screen),
                                             
window_menu_plugin_active_window_changed, plugin);
       g_object_unref (plugin->screen);
+      plugin->workspace_group = NULL;
     }
 
   /* set the new screen */
@@ -453,6 +468,7 @@
 
   /* window<->workspace association only works on X11, where there is only one 
workspace group,
    * but it can be destroyed on wayland, so let's manage this in a minimalist 
way */
+  g_signal_connect_object (manager, "workspace-group-created", G_CALLBACK 
(workspace_group_created), plugin, 0);
   g_signal_connect_object (manager, "workspace-group-destroyed", G_CALLBACK 
(workspace_group_destroyed), plugin, 0);
   workspace_group_destroyed (manager, NULL, plugin);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/xfce4-panel-4.20.6/po/xfce4-panel.pot 
new/xfce4-panel-4.20.7/po/xfce4-panel.pot
--- old/xfce4-panel-4.20.6/po/xfce4-panel.pot   2025-12-29 17:35:18.000000000 
+0100
+++ new/xfce4-panel-4.20.7/po/xfce4-panel.pot   2026-03-02 10:57:54.000000000 
+0100
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: xfce4-panel 4.20.6\n"
+"Project-Id-Version: xfce4-panel 4.20.7\n"
 "Report-Msgid-Bugs-To: https://gitlab.xfce.org/xfce/xfce4-panel/-/issues\n";
-"POT-Creation-Date: 2025-12-13 18:49+0100\n"
+"POT-Creation-Date: 2026-02-20 18:17+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <[email protected]>\n"
@@ -33,7 +33,7 @@
 "menu;start;buttons;launcher;notification area;status;icons;plugins;"
 msgstr ""
 
-#: panel-preferences.desktop.in:14 panel/panel-window.c:3740
+#: panel-preferences.desktop.in:14 panel/panel-window.c:3867
 msgid "Panel"
 msgstr ""
 
@@ -111,7 +111,7 @@
 #: common/resources/tasklist-dialog.glade:93
 #: common/resources/windowmenu-dialog.glade:63
 #: libxfce4panel/xfce-panel-plugin.c:1348 panel/panel-item-dialog.c:207
-#: panel/panel-window.c:3806
+#: panel/panel-window.c:3933
 msgid "_Help"
 msgstr ""
 
@@ -302,7 +302,7 @@
 
 #. remove
 #: common/resources/panel-preferences-dialog.glade:1240
-#: libxfce4panel/xfce-panel-plugin.c:1278 panel/panel-application.c:357
+#: libxfce4panel/xfce-panel-plugin.c:1278 panel/panel-application.c:360
 #: panel/panel-plugin-external.c:424 panel/panel-preferences-dialog.c:1085
 #: plugins/launcher/launcher-dialog.c:840
 msgid "_Remove"
@@ -1126,7 +1126,7 @@
 msgstr ""
 
 #. about item
-#: libxfce4panel/xfce-panel-plugin.c:1251 panel/panel-window.c:3815
+#: libxfce4panel/xfce-panel-plugin.c:1251 panel/panel-window.c:3942
 msgid "_About"
 msgstr ""
 
@@ -1140,17 +1140,17 @@
 msgstr ""
 
 #. add new items
-#: libxfce4panel/xfce-panel-plugin.c:1304 panel/panel-window.c:3752
+#: libxfce4panel/xfce-panel-plugin.c:1304 panel/panel-window.c:3879
 msgid "Add _New Items..."
 msgstr ""
 
 #. customize panel
-#: libxfce4panel/xfce-panel-plugin.c:1315 panel/panel-window.c:3763
+#: libxfce4panel/xfce-panel-plugin.c:1315 panel/panel-window.c:3890
 msgid "Panel Pr_eferences..."
 msgstr ""
 
 #. logout item
-#: libxfce4panel/xfce-panel-plugin.c:1332 panel/panel-window.c:3790
+#: libxfce4panel/xfce-panel-plugin.c:1332 panel/panel-window.c:3917
 msgid "Log _Out"
 msgstr ""
 
@@ -1273,18 +1273,18 @@
 msgid "Execute"
 msgstr ""
 
-#: panel/panel-application.c:214
+#: panel/panel-application.c:217
 msgid "Failed to launch the migration application"
 msgstr ""
 
-#: panel/panel-application.c:347
+#: panel/panel-application.c:350
 #, c-format
 msgid ""
 "Plugin \"%s\" could not be loaded, do you want to remove it from xfce4-panel "
 "configuration?"
 msgstr ""
 
-#: panel/panel-application.c:349
+#: panel/panel-application.c:352
 #, c-format
 msgid ""
 "This plugin is in the current xfce4-panel configuration but could not be "
@@ -1294,46 +1294,46 @@
 "installation and trying to start xfce4-panel again."
 msgstr ""
 
-#: panel/panel-application.c:356
+#: panel/panel-application.c:359
 msgid "Plugin loading failure"
 msgstr ""
 
-#: panel/panel-application.c:357
+#: panel/panel-application.c:360
 msgid "_Quit"
 msgstr ""
 
-#: panel/panel-application.c:1037
+#: panel/panel-application.c:1041
 msgid ""
 "This will create a new launcher plugin on the panel and inserts the dropped "
 "files as menu items."
 msgstr ""
 
-#: panel/panel-application.c:1040
+#: panel/panel-application.c:1044
 msgid "Create _Launcher"
 msgstr ""
 
-#: panel/panel-application.c:1041
+#: panel/panel-application.c:1045
 #, c-format
 msgid "Create new launcher from %d desktop file"
 msgid_plural "Create new launcher from %d desktop files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: panel/panel-application.c:1808
+#: panel/panel-application.c:1812
 msgid ""
 "You have started X without session manager. Clicking Quit will close the X "
 "server."
 msgstr ""
 
-#: panel/panel-application.c:1811
+#: panel/panel-application.c:1815
 msgid "Quit"
 msgstr ""
 
-#: panel/panel-application.c:1811
+#: panel/panel-application.c:1815
 msgid "Are you sure you want to quit the panel?"
 msgstr ""
 
-#: panel/panel-application.c:1819
+#: panel/panel-application.c:1823
 #, c-format
 msgid "Failed to execute command \"%s\""
 msgstr ""
@@ -1499,7 +1499,7 @@
 msgid "Expert"
 msgstr ""
 
-#: panel/panel-window.c:3777
+#: panel/panel-window.c:3904
 msgid "_Lock Panel"
 msgstr ""
 
@@ -2154,7 +2154,7 @@
 msgid "Unable to open the workspace settings"
 msgstr ""
 
-#: plugins/pager/pager-buttons.c:632 plugins/windowmenu/windowmenu.c:963
+#: plugins/pager/pager-buttons.c:650 plugins/windowmenu/windowmenu.c:979
 #, c-format
 msgid "Workspace %d"
 msgstr ""
@@ -2217,32 +2217,32 @@
 "items"
 msgstr ""
 
-#: plugins/tasklist/tasklist-widget.c:3175
+#: plugins/tasklist/tasklist-widget.c:3205
 #, c-format
 msgid "Unable to start new instance of '%s'"
 msgstr ""
 
-#: plugins/tasklist/tasklist-widget.c:3202
+#: plugins/tasklist/tasklist-widget.c:3232
 msgid "Launch New Instance"
 msgstr ""
 
-#: plugins/tasklist/tasklist-widget.c:3957
+#: plugins/tasklist/tasklist-widget.c:3989
 msgid "Mi_nimize All"
 msgstr ""
 
-#: plugins/tasklist/tasklist-widget.c:3964
+#: plugins/tasklist/tasklist-widget.c:3996
 msgid "Un_minimize All"
 msgstr ""
 
-#: plugins/tasklist/tasklist-widget.c:3971
+#: plugins/tasklist/tasklist-widget.c:4003
 msgid "Ma_ximize All"
 msgstr ""
 
-#: plugins/tasklist/tasklist-widget.c:3978
+#: plugins/tasklist/tasklist-widget.c:4010
 msgid "_Unmaximize All"
 msgstr ""
 
-#: plugins/tasklist/tasklist-widget.c:3989
+#: plugins/tasklist/tasklist-widget.c:4021
 msgid "_Close All"
 msgstr ""
 
@@ -2250,28 +2250,28 @@
 msgid "Switch between open windows using buttons"
 msgstr ""
 
-#: plugins/windowmenu/windowmenu.c:742
+#: plugins/windowmenu/windowmenu.c:758
 msgid "Desktop"
 msgstr ""
 
-#: plugins/windowmenu/windowmenu.c:1358
+#: plugins/windowmenu/windowmenu.c:1374
 msgid "No Windows"
 msgstr ""
 
-#: plugins/windowmenu/windowmenu.c:1373
+#: plugins/windowmenu/windowmenu.c:1389
 msgid "Urgent Windows"
 msgstr ""
 
-#: plugins/windowmenu/windowmenu.c:1424
+#: plugins/windowmenu/windowmenu.c:1440
 msgid "Add Workspace"
 msgstr ""
 
-#: plugins/windowmenu/windowmenu.c:1446
+#: plugins/windowmenu/windowmenu.c:1462
 #, c-format
 msgid "Remove Workspace \"%s\""
 msgstr ""
 
-#: plugins/windowmenu/windowmenu.c:1448
+#: plugins/windowmenu/windowmenu.c:1464
 #, c-format
 msgid "Remove Workspace %d"
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xfce4-panel-4.20.6/wrapper/wrapper-external-exported.c 
new/xfce4-panel-4.20.7/wrapper/wrapper-external-exported.c
--- old/xfce4-panel-4.20.6/wrapper/wrapper-external-exported.c  2025-12-29 
17:34:47.000000000 +0100
+++ new/xfce4-panel-4.20.7/wrapper/wrapper-external-exported.c  2026-03-02 
10:57:09.000000000 +0100
@@ -706,7 +706,7 @@
 gboolean
 wrapper_external_exported_call_pointer_is_outside_finish (
     WrapperExternalExported *proxy,
-    gboolean *out_is_outside,
+    gboolean* out_is_outside,
     GAsyncResult *res,
     GError **error)
 {
@@ -738,7 +738,7 @@
 gboolean
 wrapper_external_exported_call_pointer_is_outside_sync (
     WrapperExternalExported *proxy,
-    gboolean *out_is_outside,
+    gboolean* out_is_outside,
     GCancellable *cancellable,
     GError **error)
 {
@@ -1446,8 +1446,14 @@
 {
   WrapperExternalExportedSkeleton *skeleton = 
WRAPPER_EXTERNAL_EXPORTED_SKELETON (object);
   g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) 
_changed_property_free);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  /* coverity[missing_lock : SUPPRESS] */
+  g_clear_pointer (&skeleton->priv->changed_properties_idle_source, 
g_source_destroy);
+#else
   if (skeleton->priv->changed_properties_idle_source != NULL)
     g_source_destroy (skeleton->priv->changed_properties_idle_source);
+skeleton->priv->changed_properties_idle_source = NULL;
+#endif
   g_main_context_unref (skeleton->priv->context);
   g_mutex_clear (&skeleton->priv->lock);
   G_OBJECT_CLASS (wrapper_external_exported_skeleton_parent_class)->finalize 
(object);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/xfce4-panel-4.20.6/wrapper/wrapper-external-exported.h 
new/xfce4-panel-4.20.7/wrapper/wrapper-external-exported.h
--- old/xfce4-panel-4.20.6/wrapper/wrapper-external-exported.h  2025-12-29 
17:34:47.000000000 +0100
+++ new/xfce4-panel-4.20.7/wrapper/wrapper-external-exported.h  2026-03-02 
10:57:09.000000000 +0100
@@ -89,13 +89,13 @@
 
 gboolean wrapper_external_exported_call_pointer_is_outside_finish (
     WrapperExternalExported *proxy,
-    gboolean *out_is_outside,
+    gboolean* out_is_outside,
     GAsyncResult *res,
     GError **error);
 
 gboolean wrapper_external_exported_call_pointer_is_outside_sync (
     WrapperExternalExported *proxy,
-    gboolean *out_is_outside,
+    gboolean* out_is_outside,
     GCancellable *cancellable,
     GError **error);
 

Reply via email to