summaryrefslogtreecommitdiff
path: root/cwmcc/root_props.c
blob: 7339cbbac2a102de2868409088201decfb4b2960 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "cwmcc_internal.h"
#include "atom.h"
#include "prop.h"
#include "client_props.h"
#include "render/render.h"

#include <X11/Xutil.h>
#ifdef HAVE_STRING_H
#  include <string.h>
#endif

void cwmcc_root_get_supported(Window win, Atom **atoms)
{
    gulong num;

    if (!prop_get_array32(win, CWMCC_ATOM(root, net_supported),
                          CWMCC_ATOM(type, atom), atoms, &num)) {
        g_warning("Failed to read NET_SUPPORTED from 0x%lx", win);
        *atoms = NULL;
    }
}

void cwmcc_root_get_client_list(Window win, Window **windows)
{
    gulong num;

    if (!prop_get_array32(win, CWMCC_ATOM(root, net_client_list),
                          CWMCC_ATOM(type, window), windows, &num)) {
        g_warning("Failed to read NET_CLIENT_LIST from 0x%lx", win);
        *windows = NULL;
    }
}

void cwmcc_root_get_client_list_stacking(Window win, Window **windows)
{
    gulong num;

    if (!prop_get_array32(win, CWMCC_ATOM(root, net_client_list_stacking),
                          CWMCC_ATOM(type, window), windows, &num)) {
        g_warning("Failed to read NET_CLIENT_LIST_STACKING from 0x%lx", win);
        *windows = NULL;
    }
}

void cwmcc_root_get_number_of_desktops(Window win, gulong *desktops)
{
    if (!prop_get32(win, CWMCC_ATOM(root, net_number_of_desktops),
                    CWMCC_ATOM(type, cardinal), desktops)) {
        g_warning("Failed to read NET_NUMBER_OF_DESKTOPS from 0x%lx", win);
        *desktops = 1;
    }
}

void cwmcc_root_get_desktop_geometry(Window win, gulong *w, gulong *h)
{
    gulong *data = NULL, num;

    if (!prop_get_array32(win, CWMCC_ATOM(root, net_desktop_geometry),
                    CWMCC_ATOM(type, cardinal), &data, &num)) {
        g_warning("Failed to read NET_DESKTOP_GEOMETRY from 0x%lx", win);
        *w = *h = 0;
    } else if (num != 2) {
        g_warning("Read invalid NET_DESKTOP_GEOMETRY from 0x%lx", win);
        *w = *h = 0;
    } else {
	*w = data[0];
        *h = data[1];
    }
    g_free(data);
}

void cwmcc_root_get_desktop_viewport(Window win, gulong *x, gulong *y)
{
    gulong *data = NULL, num;

    if (!prop_get_array32(win, CWMCC_ATOM(root, net_desktop_viewport),
                    CWMCC_ATOM(type, cardinal), &data, &num)) {
        g_warning("Failed to read NET_DESKTOP_VIEWPORT from 0x%lx", win);
        *x = *y = 0;
    } else if (num != 2) {
        g_warning("Read invalid NET_DESKTOP_VIEWPORT from 0x%lx", win);
        *x = *y = 0;
    } else {
	*x = data[0];
        *y = data[1];
    }
    g_free(data);
}

void cwmcc_root_get_current_desktop(Window win, gulong *desktop)
{
    if (!prop_get32(win, CWMCC_ATOM(root, net_current_desktop),
                    CWMCC_ATOM(type, cardinal), desktop)) {
        g_warning("Failed to read NET_CURRENT_DESKTOP from 0x%lx", win);
        *desktop = 0;
    }
}

void cwmcc_root_get_desktop_names(Window win, char ***names)
{
    if (!prop_get_strings_utf8(win,
                               CWMCC_ATOM(root, net_desktop_names), names)) {
        g_warning("Failed to read NET_DESKTOP_NAMES from 0x%lx", win);
        *names = NULL;
    }
}

void cwmcc_root_get_active_window(Window win, Window *window)
{
    if (!prop_get32(win, CWMCC_ATOM(root, net_active_window),
                    CWMCC_ATOM(type, window), window)) {
        g_warning("Failed to read NET_ACTIVE_WINDOW from 0x%lx", win);
        *window = None;
    }
}