X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=tools%2Fobxprop%2Fobxprop.c;h=83ff54a17ead35e76fb17fdc3e6b5459171339b7;hb=6fec406017e0ed666a9928eafbe6835e5eb3bfb6;hp=268515440683c03374d7cac6d79fc9ee4133f1a4;hpb=6d8b7bd5f7ede1803c1259f5c1b760e5dbf4dbe3;p=chaz%2Fopenbox diff --git a/tools/obxprop/obxprop.c b/tools/obxprop/obxprop.c index 26851544..83ff54a1 100644 --- a/tools/obxprop/obxprop.c +++ b/tools/obxprop/obxprop.c @@ -12,11 +12,12 @@ 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" - " --id ID Show the properties for this window\n"); + " --id ID Show the properties for this window\n" + " --root Show the properties for the root window\n"); return 1; } @@ -27,14 +28,15 @@ gint parse_hex(gchar *s) { if (*s >= '0' && *s <='9') add = *s-'0'; else if (*s >= 'A' && *s <='F') - add = *s-'A'; + add = *s-'A'+10; else if (*s >= 'a' && *s <='f') - add = *s-'a'; + add = *s-'a'+10; else break; result *= 16; result += add; + ++s; } return result; } @@ -96,9 +98,9 @@ static gboolean get_all(Display *d, Window win, Atom prop, default: g_assert_not_reached(); /* unhandled size */ } - *num = ret_items; - ret = TRUE; } + *num = ret_items; + ret = TRUE; XFree(xdata); } return ret; @@ -226,7 +228,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; @@ -240,7 +242,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 ? val : "")); g_free(val); } @@ -256,14 +270,17 @@ int main(int argc, char **argv) Window id, userid = None; int i; char *dname = NULL; + gboolean root = FALSE; for (i = 1; i < argc; ++i) { if (!strcmp(argv[i], "--help")) { - return fail(0); + return fail(NULL); } + else if (!strcmp(argv[i], "--root")) + root = TRUE; else if (!strcmp(argv[i], "--id")) { if (++i == argc) - return fail(0); + return fail(NULL); if (argv[i][0] == '0' && argv[i][1] == 'x') { /* hex */ userid = parse_hex(argv[i]+2); @@ -272,13 +289,22 @@ int main(int argc, char **argv) /* decimal */ userid = atoi(argv[i]); } - break; + if (!userid) + return fail("Unable to parse argument to --id."); } else if (!strcmp(argv[i], "--display")) { if (++i == argc) - return fail(0); + return fail(NULL); dname = argv[i]; } + else if (*argv[i] != '-') + break; + else if (!strcmp(argv[i], "--")) { + i++; + break; + } + else + return fail(NULL); } d = XOpenDisplay(dname); @@ -287,13 +313,17 @@ int main(int argc, char **argv) "Ensure you have permission to connect to the display."); } + if (root) + 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; @@ -305,14 +335,15 @@ int main(int argc, char **argv) break; } } + id = find_client(d, userid); } - - id = find_client(d, userid); + else + id = userid; /* they picked this one */ 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);