obxprop: Add ability to limit listing to given properties
authorMikael Magnusson <mikachu@gmail.com>
Fri, 8 Jan 2010 20:51:04 +0000 (21:51 +0100)
committerMikael Magnusson <mikachu@gmail.com>
Fri, 8 Jan 2010 20:51:04 +0000 (21:51 +0100)
tools/obxprop/obxprop.c

index 6ea8a4d..b28b77a 100644 (file)
@@ -12,7 +12,7 @@ gint fail(const gchar *s) {
     else
         fprintf
             (stderr,
     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"
              "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;
 }
 
     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;
 {
     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)) {
         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);
         }
 
             g_free(val);
         }
 
@@ -283,6 +295,14 @@ int main(int argc, char **argv)
                 return fail(0);
             dname = argv[i];
         }
                 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);
     }
 
     d = XOpenDisplay(dname);
@@ -295,12 +315,13 @@ int main(int argc, char **argv)
         userid = RootWindow(d, DefaultScreen(d));
 
     if (userid == None) {
         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);
                          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;
             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");
 
     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);
 
     
     XCloseDisplay(d);