From afe2e8a4dda42401bbb3cc0ef7b5ba437c15df8a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org>
Date: Sun, 22 Dec 2024 05:17:58 +0100
Subject: [PATCH] Exit early in unsupported windowing environments

Reinstated 75243250, since xfce4-screensaver really can't do anything in
an environment where support has been disabled.
---
 savers/floaters.c                   | 12 ++++++++++++
 savers/popsquares.c                 | 12 ++++++++++++
 savers/slideshow.c                  | 12 ++++++++++++
 src/xfce4-screensaver-dialog.c      | 12 ++++++++++++
 src/xfce4-screensaver-preferences.c | 12 ++++++++++++
 src/xfce4-screensaver.c             | 22 +++++++++++++++++++++-
 6 files changed, 81 insertions(+), 1 deletion(-)

diff --git a/savers/floaters.c b/savers/floaters.c
index b1212f7..c7539eb 100644
--- a/savers/floaters.c
+++ b/savers/floaters.c
@@ -1138,6 +1138,18 @@ main (int argc,
         return EX_SOFTWARE;
     }
 
+#if defined(ENABLE_X11) && !defined(ENABLE_WAYLAND)
+    if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EX_SOFTWARE;
+    }
+#elif defined(ENABLE_WAYLAND) && !defined(ENABLE_X11)
+    if (!GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EX_SOFTWARE;
+    }
+#endif
+
     if (filenames == NULL || filenames[0] == NULL || filenames[1] != NULL) {
         g_printerr (_("You must specify one image.  See --help for usage "
                       "information.\n"));
diff --git a/savers/popsquares.c b/savers/popsquares.c
index f2030bc..90496b6 100644
--- a/savers/popsquares.c
+++ b/savers/popsquares.c
@@ -57,6 +57,18 @@ main (int argc,
         return EXIT_FAILURE;
     }
 
+#if defined(ENABLE_X11) && !defined(ENABLE_WAYLAND)
+    if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#elif defined(ENABLE_WAYLAND) && !defined(ENABLE_X11)
+    if (!GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#endif
+
 #ifdef ENABLE_X11
     if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
         window = gtk_plug_new (strtoul (g_getenv ("XSCREENSAVER_WINDOW"), NULL, 0));
diff --git a/savers/slideshow.c b/savers/slideshow.c
index f0d2f64..a37190c 100644
--- a/savers/slideshow.c
+++ b/savers/slideshow.c
@@ -83,6 +83,18 @@ main (int argc, char **argv) {
         return EXIT_FAILURE;
     }
 
+#if defined(ENABLE_X11) && !defined(ENABLE_WAYLAND)
+    if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#elif defined(ENABLE_WAYLAND) && !defined(ENABLE_X11)
+    if (!GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#endif
+
     g_chdir (g_get_home_dir ());
 
     g_set_prgname ("slideshow");
diff --git a/src/xfce4-screensaver-dialog.c b/src/xfce4-screensaver-dialog.c
index 14febd4..1338af1 100644
--- a/src/xfce4-screensaver-dialog.c
+++ b/src/xfce4-screensaver-dialog.c
@@ -532,6 +532,18 @@ main (int argc,
         return EXIT_SUCCESS;
     }
 
+#if defined(ENABLE_X11) && !defined(ENABLE_WAYLAND)
+    if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#elif defined(ENABLE_WAYLAND) && !defined(ENABLE_X11)
+    if (!GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#endif
+
     if (!xfconf_init (&error)) {
         g_error ("Failed to connect to xfconf daemon: %s.", error->message);
         g_error_free (error);
diff --git a/src/xfce4-screensaver-preferences.c b/src/xfce4-screensaver-preferences.c
index 39d17d3..1ae7f2f 100644
--- a/src/xfce4-screensaver-preferences.c
+++ b/src/xfce4-screensaver-preferences.c
@@ -2076,6 +2076,18 @@ main (int argc,
         return EXIT_FAILURE;
     }
 
+#if defined(ENABLE_X11) && !defined(ENABLE_WAYLAND)
+    if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#elif defined(ENABLE_WAYLAND) && !defined(ENABLE_X11)
+    if (!GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#endif
+
     /* hook to make sure the libxfce4ui library is linked */
     if (xfce_titled_dialog_get_type () == 0)
         return EXIT_FAILURE;
diff --git a/src/xfce4-screensaver.c b/src/xfce4-screensaver.c
index 451bf13..799f46e 100644
--- a/src/xfce4-screensaver.c
+++ b/src/xfce4-screensaver.c
@@ -31,7 +31,15 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
-//
+
+#ifdef ENABLE_X11
+#include <gdk/gdkx.h>
+#endif
+
+#ifdef ENABLE_WAYLAND
+#include <gdk/gdkwayland.h>
+#endif
+
 #include <gtk/gtk.h>
 #include <libxfce4util/libxfce4util.h>
 #include <xfconf/xfconf.h>
@@ -78,6 +86,18 @@ main (int argc,
         return EXIT_SUCCESS;
     }
 
+#if defined(ENABLE_X11) && !defined(ENABLE_WAYLAND)
+    if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#elif defined(ENABLE_WAYLAND) && !defined(ENABLE_X11)
+    if (!GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) {
+        g_warning ("Unsupported windowing environment");
+        return EXIT_FAILURE;
+    }
+#endif
+
     if (!xfconf_init (&error)) {
         g_error ("Failed to connect to xfconf daemon: %s.", error->message);
         g_error_free (error);
-- 
GitLab