[Spice-devel] [PATCH spice-streaming-agent 2/5] Add file with utilities for Xorg
Lukáš Hrázký
lhrazky at redhat.com
Fri Feb 2 12:56:51 UTC 2018
On Thu, 2018-02-01 at 16:40 +0000, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at 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>
Not having hands on experience, but from what I've heard and read XCB
is better and simpler than Xlib, any reason why we are using Xlib
instead of XCB here?
> +int get_win_prop_int(Display *display, Window win, Atom atom);
> +
> +#endif // STREAMING_AGENT_XORG_UTILS_HPP
More information about the Spice-devel
mailing list