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;