From: Mikael Magnusson Date: Fri, 8 Jan 2010 20:51:04 +0000 (+0100) Subject: obxprop: Add ability to limit listing to given properties X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=54c841f7b57ad0decedeed15aadcc1f116994bba;p=chaz%2Fopenbox obxprop: Add ability to limit listing to given properties --- diff --git a/tools/obxprop/obxprop.c b/tools/obxprop/obxprop.c index 6ea8a4d3..b28b77a7 100644 --- a/tools/obxprop/obxprop.c +++ b/tools/obxprop/obxprop.c @@ -12,7 +12,7 @@ gint fail(const gchar *s) { else fprintf (stderr, - "Usage: obxprop [OPTIONS]\n\n" + "Usage: obxprop [OPTIONS] [--] [PROPERTIES ...]\n\n" "Options:\n" " --help Display this help and exit\n" " --display DISPLAY Connect to this X display\n" @@ -227,7 +227,7 @@ gboolean read_prop(Display *d, Window w, Atom prop, const gchar **type, gchar ** return FALSE; } -void show_properties(Display *d, Window w) +void show_properties(Display *d, Window w, int argc, char **argv) { Atom* props; int i, n; @@ -241,7 +241,19 @@ void show_properties(Display *d, Window w) name = XGetAtomName(d, props[i]); if (read_prop(d, w, props[i], &type, &val)) { - g_print("%s(%s) = %s\n", name, type, val); + int found = 1; + if (argc) { + int i; + + found = 0; + for (i = 0; i < argc; i++) + if (!strcmp(name, argv[i])) { + found = 1; + break; + } + } + if (found) + g_print("%s(%s) = %s\n", name, type, val); g_free(val); } @@ -283,6 +295,14 @@ int main(int argc, char **argv) return fail(0); dname = argv[i]; } + else if (*argv[i] != '-') + break; + else if (!strcmp(argv[i], "--")) { + i++; + break; + } + else + return fail(NULL); } d = XOpenDisplay(dname); @@ -295,12 +315,13 @@ int main(int argc, char **argv) userid = RootWindow(d, DefaultScreen(d)); if (userid == None) { - i = XGrabPointer(d, RootWindow(d, DefaultScreen(d)), + int j; + j = XGrabPointer(d, RootWindow(d, DefaultScreen(d)), False, ButtonPressMask, GrabModeAsync, GrabModeAsync, None, XCreateFontCursor(d, XC_crosshair), CurrentTime); - if (i != GrabSuccess) + if (j != GrabSuccess) return fail("Unable to grab the pointer device"); while (1) { XEvent ev; @@ -319,7 +340,7 @@ int main(int argc, char **argv) if (id == None) return fail("Unable to find window with the requested ID"); - show_properties(d, id); + show_properties(d, id, argc - i, &argv[i]); XCloseDisplay(d);