Beispiel #1
0
gboolean has_atom_property(Display* dsp, Window w, Atom prop)
{
    gulong items;
    void* data = get_window_property(dsp, w, prop, &items);
    if (data == NULL) {
        return FALSE;
    } else {
        g_free(data);
        return TRUE;
    }
}
Beispiel #2
0
Drawable get_blurred_background()
{
    gulong n_item;
    gpointer data = get_window_property(gdk_x11_get_default_xdisplay(),
                                        GDK_ROOT_WINDOW(), _BG_ATOM, &n_item);
    if (data == NULL) {
        return 0;
    }
    Drawable bg = X_FETCH_32(data, 0);
    XFree(data);
    return bg;
}
Beispiel #3
0
gboolean get_atom_value_by_atom(Display* dsp, Window window_id, Atom atom,
                                gpointer res, CallbackFunc callback,
                                gulong index)
{
    gulong n_item;
    gpointer data = get_window_property(dsp, window_id, atom, &n_item);
    if (data == NULL) {
        return FALSE;
    }

    g_assert(callback != NULL);

    callback(data, n_item, res, index);

    XFree(data);
    return TRUE;
}
Beispiel #4
0
void get_workarea_size(int* x, int* y, int* width, int* height)
{
    Display *dpy = gdk_x11_get_default_xdisplay();
    Atom property = XInternAtom(dpy, "_NET_WORKAREA", False);
    gulong items;
    gulong* data = get_window_property(dpy, GDK_ROOT_WINDOW(), property,
                                       &items);

    if (data && items == 4) {
        *x = X_FETCH_32(data, 0);
        *y = X_FETCH_32(data, 1);
        *width = X_FETCH_32(data, 2);
        *height = X_FETCH_32(data, 3);
        XFree(data);
    } else {
        x = y = width = height = 0;
    }
}
Beispiel #5
0
int _is_maximized_window(Window win)
{
    gulong items;
    Atom ATOM_WINDOW_NET_STATE = gdk_x11_get_xatom_by_name("_NET_WM_STATE");
    Atom ATOM_WINDOW_MAXIMIZED_VERT = gdk_x11_get_xatom_by_name("_NET_WM_STATE_MAXIMIZED_VERT");
    Display* _dsp = GDK_DISPLAY_XDISPLAY(gdk_display_get_default());
    long* data = get_window_property(_dsp, win, ATOM_WINDOW_NET_STATE, &items);

    if (data != NULL) {
        for (guint i=0; i<items; i++) {
            if ((Atom)X_FETCH_32(data, i) == ATOM_WINDOW_MAXIMIZED_VERT) {
                XFree(data);
                return 1;
            }
        }
        XFree(data);
    }
    return 0;
}
Beispiel #6
0
gboolean dock_has_maximize_client()
{
    Atom ATOM_CLIENT_LIST = gdk_x11_get_xatom_by_name("_NET_CLIENT_LIST");
    Display* _dsp = GDK_DISPLAY_XDISPLAY(gdk_display_get_default());
    gulong items;
    Window root = GDK_ROOT_WINDOW();
    void* data = get_window_property(_dsp, root, ATOM_CLIENT_LIST, &items);

    gboolean has = FALSE;

    if (data == NULL) return has;

    for (guint i=0; i<items; i++) {
        Window xid = X_FETCH_32(data, i);
        if (_is_maximized_window(xid)) {
            has = TRUE;
            break;
        }
    }

    XFree(data);

    return has;
}