[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