---
name: "DMXGetWindowAttributes"
section: "3x"
platform: "linux"
package: "libdmx-dev"
version: "1:1.0.2-2"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/DMXGetWindowAttributes/3x"
---

# DMXGetWindowAttributes(3x)

determine back-end window attributes

## NAME

DMXGetWindowAttributes - determine back-end window attributes

## SYNOPSIS

**#include \<X11/extensions/dmxext.h\>**

```
Bool DMXGetWindowAttributes(Display *dpy,
                            Window window,
                            int *screen_count,
                            int available_count,
                            DMXWindowAttributes *attr);
```

## DESCRIPTION

When calling **DMXGetWindowAttributes()**, *window* specifies the window ID of a window on the [**Xdmx**(1)](/Xdmx/1.md) server and *available\_count* specifies the length of *attr.*

The number of screens for which information is available will be returned in *screen\_count* and information about those screen will be returned in *attr*. If *screen\_count* is less than *available\_count*, then information for all of the screens will be returned.  Otherwise, information for the first *available\_count* screens will be returned.

The *DMXWindowAttributes* structure is:

```
typedef struct {
    int          screen;
    Window       window;
    XRectangle   pos, vis;
} DMXWindowAttributes;
```

For each back-end X server that displays a portion of *window*, this structure contains the physical *screen* containing that portion, the *window* ID on the back-end X server of the window containing that portion, the position and dimensions of the window on the back-end (*pos*, in screen coordinates), and the visible area of the window on the back-end (*vis*, in window-relative coordinates -- all zeros if the window is not visible on the backend).

To obtain more information about the physical screen use the **DMXGetScreenAttributes**(3X) call.

Note that DMX allows multiple back-end windows to overlap in their view of the DMX logical window.  Further, a logical window does not have to be completely covered by back-end windows -- there may be gaps.

As an example, consider a 500x500 window that spans the top two 1024x768 back-end displays (A and B) of a 2048x1536 DMX display composed of 4 1024x768 back-end displays arranged in a cube:

```
    A B
    C D
```

In this case, the DMXGetWindowAttributes call would return the following information for the 500x500 window:

```
display A: 500x500 window at 1024-250,0 (relative to back end)
           with 250x500 visible at 0,0 (relative to window origin)
display B: 500x500 window at -250,0 (relative to back end)
           with 250x500 visible at 250,0 (relative to window origin)
display C: 500x500 window at 1024-250,-768 with 0x0 visible at 0,0
display D: 500x500 window at -250,-768 with 0x0 visible at 0,0
```

## RETURN VALUE

**DMXGetWindowAttributes()** returns **True** unless there is a protocol error.

**DMXGetWindowAttributes()** can generate **BadWindow** and **BadAlloc** errors.

## NOTES

Because this call transports a great deal of information over the wire, please call **DMXGetScreenCount**(3X) first, and make sure *attr* is sufficiently large.

On a particular back-end server, it is possible that the associated window has not yet been mapped because the **XMapWindow**(3X) call that will eventually map the window had been buffered by Xlib's normal buffering system.  To avoid this race condition, please call **DMXSync**(3X) before communicating directly with the back-end X server.

## SEE ALSO

**DMXGetScreenCount**(3X),  **DMXSync**(3X),  **DMXGetScreenAttributes**(3X),  **DMX**(3X), [**Xdmx**(1)](/Xdmx/1.md)
