]> Projects - orf-overlay.git/commitdiff Test
xfce-base/xfdesktop: add Fix-the-broken-background-picture-setup-on-Wayland.patch
authorOrfeas <redacted>
Tue, 17 Feb 2026 16:16:39 +0000 (18:16 +0200)
committerOrfeas <redacted>
Tue, 17 Feb 2026 16:16:39 +0000 (18:16 +0200)
Small hack that fixes setting up the wallpaper on wayland using
xfdesktop. Taken from https://gitlab.xfce.org/xfce/xfdesktop/-/issues/413#note_109994

xfce-base/xfdesktop/files/0001-Fix-the-broken-background-picture-setup-on-Wayland.patch [new file with mode: 0644]
xfce-base/xfdesktop/xfdesktop-4.20.1.ebuild

diff --git a/xfce-base/xfdesktop/files/0001-Fix-the-broken-background-picture-setup-on-Wayland.patch b/xfce-base/xfdesktop/files/0001-Fix-the-broken-background-picture-setup-on-Wayland.patch
new file mode 100644 (file)
index 0000000..a0cde02
--- /dev/null
@@ -0,0 +1,73 @@
+From e6dd0929842a00c02953dbdfb7de470445fdf6a9 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 18 Aug 2025 13:55:18 +0200
+Subject: [PATCH] Fix the broken background picture setup on Wayland
+
+The xfdesktop-settings picks up the backdrop prefix with the monitor
+name returned from xfdesktop_get_monitor_name_from_gtk_widget(), where
+it tries to get the monitor name from gdk.  On Wayland, this returns
+the actual monitor name or model, not the connector name.
+Meanwhile, the xfdesktop itself uses the backdrop prefix with the
+connector name (e.g. "eDP-1" or "Virtual-1").  This difference made
+the setup done by xfdesktop-settings ignored.
+
+Instead of deducing the prefix name from gdk, try to guess from the
+given XfwWindow.
+
+I'm not 100% sure whether it's the correct solution, but it seems
+working in most cases.
+---
+ settings/xfdesktop-background-settings.c | 23 +++++++++++++++++++++--
+ 1 file changed, 21 insertions(+), 2 deletions(-)
+
+diff --git a/settings/xfdesktop-background-settings.c b/settings/xfdesktop-background-settings.c
+index 21315b6eaeeb..b92b53a5ac18 100644
+--- a/settings/xfdesktop-background-settings.c
++++ b/settings/xfdesktop-background-settings.c
+@@ -1447,6 +1447,25 @@ xfdesktop_settings_get_active_workspace(XfdesktopBackgroundSettings *background_
+     return workspace_num;
+ }
++static gchar *get_monitor_name(XfdesktopBackgroundSettings *background_settings,
++                             int monitor_num)
++{
++#ifdef ENABLE_WAYLAND
++    /* FIXME: gtk3 has no easy way to know the connector, so guess from xfw window instead */
++    if (xfw_windowing_get() != XFW_WINDOWING_X11) {
++      GList *monitors = xfw_screen_get_monitors(xfw_window_get_screen(background_settings->xfw_window));
++      gpointer p = g_list_nth_data(monitors, monitor_num);
++      XfwMonitor *xfw_mon = xfw_screen_get_primary_monitor(xfw_window_get_screen(background_settings->xfw_window));
++      if (p) {
++          gchar *name = xfw_monitor_get_connector(XFW_MONITOR(p));
++          if (name)
++              return g_strdup(name);
++      }
++    }
++#endif
++    return xfdesktop_get_monitor_name_from_gtk_widget(background_settings->image_iconview, monitor_num);
++}
++
+ static void
+ cb_update_background_tab(XfwWindow *xfw_window, XfdesktopBackgroundSettings *background_settings) {
+     /* If we haven't found our window return now and wait for that */
+@@ -1464,7 +1483,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
+     GdkDisplay *display = gdk_window_get_display(window);
+     GdkMonitor *monitor = gdk_display_get_monitor_at_window(display, window);
+     gint monitor_num = xfdesktop_get_monitor_num(display, monitor);
+-    gchar *monitor_name = xfdesktop_get_monitor_name_from_gtk_widget(background_settings->image_iconview, monitor_num);
++    gchar *monitor_name = get_monitor_name(background_settings, monitor_num);
+     /* Most of the time we won't change monitor, screen, or workspace so try
+      * to bail out now if we can */
+@@ -1494,7 +1513,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
+     background_settings->screen = screen_num;
+     background_settings->monitor = monitor_num;
+     g_free(background_settings->monitor_name);
+-    background_settings->monitor_name = xfdesktop_get_monitor_name_from_gtk_widget(background_settings->image_iconview, monitor_num);
++    background_settings->monitor_name = get_monitor_name(background_settings, monitor_num);
+     /* The first monitor has the option of doing the "spanning screens" style,
+      * but only if there's multiple monitors attached. Remove it in all other cases.
+-- 
+2.50.1
+
index cfecdd10ba8f0b4265fe18bbdff86fcfae515035..cb63940084797092f9667a9d6de99c93476c53ca 100644 (file)
@@ -48,6 +48,14 @@ BDEPEND="
        virtual/pkgconfig
 "
 
+PATCHES=(
+       "${FILESDIR}/0001-Fix-the-broken-background-picture-setup-on-Wayland.patch"
+)
+
+src_prepare() {
+       default
+}
+
 src_configure() {
        local emesonargs=(
                $(meson_feature wayland)