]> Dogcows Code - chaz/openbox/commitdiff
add getting of some root properties
authorDana Jansens <danakj@orodu.net>
Fri, 11 Apr 2003 21:27:03 +0000 (21:27 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 11 Apr 2003 21:27:03 +0000 (21:27 +0000)
build/Makefile.cwmcc
cwmcc/.cvsignore
cwmcc/client_props.c
cwmcc/root_props.c [new file with mode: 0644]
cwmcc/root_props.h [new file with mode: 0644]

index 436017259888e6408263669a4f8af02a96192335..7ad7961570e6724f7ab1ba266c1831395c4a5e96 100644 (file)
@@ -6,7 +6,7 @@ CPPFLAGS += $(GLIB_CFLAGS) $(XFT_CFLAGS) -DG_LOG_DOMAIN=\"CWMCC\"
 LIBS += $(GLIB_LIBS)
 
 target = libcwmcc.la
-sources = cwmcc.c atom.c prop.c client_props.c
+sources = cwmcc.c atom.c prop.c client_props.c root_props.c
 
 srcdir := $(srcdir)/$(dir)
 target := $(addprefix $(dir)/, $(target))
index 60f9361f1056b91133b9139cea31cc4ab742821b..df68fa02a538f85e2c07a0a419ca6e57dfe9b51f 100644 (file)
@@ -4,3 +4,4 @@ libcwmcc.la
 atom.lo
 prop.lo
 client_props.lo
+root_props.lo
index e0b3941907df0a453ed8c306655a733a6809f184..34ae4ecd9107d8d3f419fefe505bff590dcd81dd 100644 (file)
@@ -15,6 +15,7 @@ void cwmcc_client_get_protocols(Window win, Atom **protocols)
 
     if (!prop_get_array32(win, CWMCC_ATOM(client, wm_protocols),
                           CWMCC_ATOM(type, atom), protocols, &num)) {
+        g_warning("Failed to read WM_PROTOCOLS from 0x%lx", win);
         *protocols = NULL;
     }
 }
@@ -212,7 +213,7 @@ void cwmcc_client_get_strut(Window win, int *l, int *t, int *r, int *b)
         *t = data[2];
         *b = data[3];
     }
-    g_free(l);
+    g_free(data);
 }
 
 static void convert_pixmap_to_icon(Pixmap pix, Pixmap mask,
diff --git a/cwmcc/root_props.c b/cwmcc/root_props.c
new file mode 100644 (file)
index 0000000..7339cbb
--- /dev/null
@@ -0,0 +1,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;
+    }
+}
+
diff --git a/cwmcc/root_props.h b/cwmcc/root_props.h
new file mode 100644 (file)
index 0000000..0bc5fef
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef __cwmcc_root_props_h
+#define __cwmcc_root_props_h
+
+void cwmcc_root_get_supported(Window win, Atom **atoms);
+
+#endif
This page took 0.030018 seconds and 4 git commands to generate.