Posted to tcl by patthoyts at Tue Sep 19 22:21:05 GMT 2006view raw

  1. /* whatwm.c -
  2. *
  3. * Print the window manager name.
  4. *
  5. * See:
  6. * http://standards.freedesktop.org/wm-spec/wm-spec-latest.html#id2510530
  7. */
  8.  
  9. #include <X11/Xlib.h>
  10. #include <stdio.h>
  11.  
  12. int
  13. main(int argc, char *const argv[])
  14. {
  15. Display *display;
  16. Atom aWmCheck, aWmName, aType;
  17. Window *windowPtr = NULL;
  18. int format = 0;
  19. unsigned long cReturned = 0, cbReturned = 0;
  20. char *name = NULL;
  21.  
  22. display = XOpenDisplay(NULL);
  23. if (display == NULL) {
  24. printf("failed to connect to X display\n");
  25. return 1;
  26. }
  27.  
  28. aWmCheck = XInternAtom(display, "_NET_SUPPORTING_WM_CHECK", False);
  29. aWmName = XInternAtom(display, "_NET_WM_NAME", False);
  30. XGetWindowProperty(display, DefaultRootWindow(display),
  31. aWmCheck, 0, 8, False, AnyPropertyType,
  32. &aType, &format, &cReturned,
  33. &cbReturned, (unsigned char **)&windowPtr);
  34. if (cReturned < 1) {
  35. printf("wm name not supported\n");
  36. } else {
  37. Window *childPtr = NULL;
  38. XGetWindowProperty(display, *windowPtr,
  39. aWmCheck, 0, 8, False, AnyPropertyType,
  40. &aType, &format, &cReturned,
  41. &cbReturned, (unsigned char **)&childPtr);
  42. if (cReturned < 1) {
  43. printf("no supporting window manager available\n");
  44. } else {
  45. XGetWindowProperty(display, *windowPtr,
  46. aWmName, 0, 128, False, AnyPropertyType,
  47. &aType, &format, &cReturned,
  48. &cbReturned, (unsigned char **)&name);
  49. if (cReturned == 0) {
  50. printf("no wm name provided\n");
  51. } else {
  52. printf("%s\n", name);
  53. XFree(name);
  54. }
  55. XFree(childPtr);
  56. }
  57. XFree(windowPtr);
  58. }
  59. XCloseDisplay(display);
  60. return 0;
  61. }