File pasystray-PR171.patch of Package pasystray

From 8eb4d8351e859a94bb782d8479b599abadbc1db9 Mon Sep 17 00:00:00 2001
From: Mark Gallagher <mark@fts.scot>
Date: Wed, 2 Aug 2023 23:44:42 +0100
Subject: [PATCH 1/2] key grabbing: disable option when not running on X11

---
 src/options.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/options.c b/src/options.c
index 284c27f..626f1fe 100644
--- a/src/options.c
+++ b/src/options.c
@@ -22,6 +22,9 @@
 #include <stdlib.h>
 #include <glib.h>
 #include <gtk/gtk.h>
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#endif
 #include "config.h"
 #include "options.h"
 
@@ -222,5 +225,16 @@ void parse_options(settings_t* settings)
 
     settings->monitors = monitors;
     settings->key_grabbing = key_grabbing;
+#ifndef GDK_WINDOWING_X11
+    settings->key_grabbing = FALSE;
+#elif GTK_CHECK_VERSION(3,0,0)
+    if (!GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
+        settings->key_grabbing = FALSE;
+    }
+#endif
+    if (key_grabbing && !settings->key_grabbing) {
+        g_warning("--key-grabbing can only be used on X11, option ignored");
+    }
+
     settings->symbolic_icons = symbolic_icons;
 }

From ad29f459d792ea1d188913d9c1c0b0017c3f0920 Mon Sep 17 00:00:00 2001
From: Mark Gallagher <mark@fts.scot>
Date: Wed, 2 Aug 2023 23:48:02 +0100
Subject: [PATCH 2/2] Fix segfault in x11-property when running under Wayland

---
 src/x11-property.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/x11-property.c b/src/x11-property.c
index 202aea0..59b4538 100644
--- a/src/x11-property.c
+++ b/src/x11-property.c
@@ -35,6 +35,7 @@ char* x11_property_get(const char* key){ return NULL; }
 #include <string.h>
 #include <X11/Xlib.h>
 #include <X11/Xatom.h>
+#include <gtk/gtk.h>
 #include <gdk/gdkx.h>
 
 static Display* display = NULL;
@@ -42,12 +43,23 @@ static Window window;
 
 void x11_property_init()
 {
+#ifndef GDK_WINDOWING_X11
+    return;
+#elif GTK_CHECK_VERSION(3,0,0)
+    if (!GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
+        return;
+    }
+#endif
     display = gdk_x11_get_default_xdisplay();
     window = RootWindow(display, 0);
 }
 
 void x11_property_set(const char* key, const char* value)
 {
+    if (!display) {
+        g_warning("x11_property_set: call has no effect on non-X sessions");
+        return;
+    }
     g_debug("[x11-property] setting '%s' to '%s'", key, value);
 
     Atom atom = XInternAtom(display, key, False);
@@ -57,6 +69,10 @@ void x11_property_set(const char* key, const char* value)
 
 void x11_property_del(const char* key)
 {
+    if (!display) {
+        g_warning("x11_property_del: call has no effect on non-X sessions");
+        return;
+    }
     g_debug("[x11-property] deleting '%s'", key);
 
     Atom atom = XInternAtom(display, key, False);
@@ -65,6 +81,10 @@ void x11_property_del(const char* key)
 
 char* x11_property_get(const char* key)
 {
+    if (!display) {
+        g_warning("x11_property_get: call has no effect on non-X sessions");
+        return NULL;
+    }
     Atom property = XInternAtom(display, key, False);
     Atom actual_type;
     int actual_format;
openSUSE Build Service is sponsored by