Signed-off-by: Frediano Ziglio <fzig...@redhat.com>
---
 src/Makefile.am               |  2 ++
 src/spice-streaming-agent.cpp |  1 +
 src/xorg-utils.cpp            | 33 +++++++++++++++++++++++++++++++++
 src/xorg-utils.hpp            |  8 ++++++++
 4 files changed, 44 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 8d5c5bd..bbfaa35 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -53,6 +53,8 @@ spice_streaming_agent_SOURCES = \
        static-plugin.hpp \
        concrete-agent.cpp \
        concrete-agent.hpp \
+       xorg-utils.cpp \
+       xorg-utils.hpp \
        mjpeg-fallback.cpp \
        jpeg.cpp \
        jpeg.hpp \
diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
index 94d9d25..a688d1f 100644
--- a/src/spice-streaming-agent.cpp
+++ b/src/spice-streaming-agent.cpp
@@ -33,6 +33,7 @@
 #include <spice-streaming-agent/plugin.hpp>
 
 #include "hexdump.h"
+#include "xorg-utils.hpp"
 #include "concrete-agent.hpp"
 
 using namespace std;
diff --git a/src/xorg-utils.cpp b/src/xorg-utils.cpp
new file mode 100644
index 0000000..184ca63
--- /dev/null
+++ b/src/xorg-utils.cpp
@@ -0,0 +1,33 @@
+#include <exception>
+#include <stdexcept>
+#include <X11/Xatom.h>
+
+#include "xorg-utils.hpp"
+
+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..b5916de
--- /dev/null
+++ b/src/xorg-utils.hpp
@@ -0,0 +1,8 @@
+#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.14.3

_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to