[Spice-devel] [PATCH spice-streaming-agent v2 2/5] Add file with utilities for Xorg

Frediano Ziglio fziglio at redhat.com
Mon May 21 10:45:28 UTC 2018


Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 src/Makefile.am               |  2 ++
 src/spice-streaming-agent.cpp |  1 +
 src/xorg-utils.cpp            | 40 +++++++++++++++++++++++++++++++++++
 src/xorg-utils.hpp            | 13 ++++++++++++
 4 files changed, 56 insertions(+)
 create mode 100644 src/xorg-utils.cpp
 create mode 100644 src/xorg-utils.hpp

diff --git a/src/Makefile.am b/src/Makefile.am
index 18ed22c..276478f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -54,6 +54,8 @@ spice_streaming_agent_SOURCES = \
 	concrete-agent.hpp \
 	error.cpp \
 	error.hpp \
+	xorg-utils.cpp \
+	xorg-utils.hpp \
 	mjpeg-fallback.cpp \
 	mjpeg-fallback.hpp \
 	jpeg.cpp \
diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
index 2325119..6388bb2 100644
--- a/src/spice-streaming-agent.cpp
+++ b/src/spice-streaming-agent.cpp
@@ -9,6 +9,7 @@
 #include "mjpeg-fallback.hpp"
 #include "stream-port.hpp"
 #include "error.hpp"
+#include "xorg-utils.hpp"
 
 #include <spice/stream-device.h>
 #include <spice/enums.h>
diff --git a/src/xorg-utils.cpp b/src/xorg-utils.cpp
new file mode 100644
index 0000000..e03a51e
--- /dev/null
+++ b/src/xorg-utils.cpp
@@ -0,0 +1,40 @@
+/* Utilities dealing with Xorg server
+ *
+ * \copyright
+ * Copyright 2018 Red Hat Inc. All rights reserved.
+ */
+
+#include <config.h>
+#include "xorg-utils.hpp"
+
+#include <exception>
+#include <stdexcept>
+#include <X11/Xatom.h>
+
+int
+get_win_prop_int(Display *display, Window win, Atom atom)
+{
+    int status;
+    unsigned char *prop;
+    unsigned long bytes_after, nitems;
+    int actual_format;
+    Atom actual_type;
+
+    status = XGetWindowProperty(display, win, atom, 0, 64,
+                                False, XA_INTEGER, &actual_type,
+                                &actual_format, &nitems, &bytes_after,
+                                &prop);
+    if (status == Success && nitems > 0) {
+        switch (actual_format) {
+        case 8:
+            return *(const signed char *)prop;
+        case 16:
+            return *(const short *)prop;
+        case 32:
+            // although format is 32 is represented always as a long which
+            // could be 64 bit
+            return *(const long *)prop;
+        }
+    }
+    throw std::runtime_error("error getting property");
+}
diff --git a/src/xorg-utils.hpp b/src/xorg-utils.hpp
new file mode 100644
index 0000000..91ee930
--- /dev/null
+++ b/src/xorg-utils.hpp
@@ -0,0 +1,13 @@
+/* Utilities dealing with Xorg server
+ *
+ * \copyright
+ * Copyright 2018 Red Hat Inc. All rights reserved.
+ */
+#ifndef STREAMING_AGENT_XORG_UTILS_HPP
+#define STREAMING_AGENT_XORG_UTILS_HPP
+
+#include <X11/Xlib.h>
+
+int get_win_prop_int(Display *display, Window win, Atom atom);
+
+#endif // STREAMING_AGENT_XORG_UTILS_HPP
-- 
2.17.0



More information about the Spice-devel mailing list