#include <X11/Xlib.h>
#include <X11/X.h>
#include <X11/Xutil.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char*		cmd = NULL;
char*		progname;

Display*	dpy;
Window		win = 0;

void usage() {
   printf("\n Usage: %s [-help] [-exec command] [window_id]\n\n", progname);
   exit(1);
}

void parse_args(int argc, char *argv[]) {
    int i;

    for(i = 1; i < argc; i++) {
       if(!strcmp(argv[i], "-exec")) {
           if(i+1 < argc) {
	      argv[i] = NULL;
	      cmd = argv[++i];
	      argv[i] = NULL;
	   }
	   else
	      usage();
       }
       if(!strcmp(argv[i], "-help")) {
           usage();
       }
    }

    for(i = 1; i < argc; i++) {
       if(argv[i]) {
	 sscanf(argv[i], "0x%lx", &win);
	 return;
       }
    }
}

Window find_window_id(Window from, const char *str) {
     Window 		root,
     			parent,
			child;
     Window*		children;
     Status		ret;
     unsigned int	nchild,
     			i;
     char*		name;
     
     ret = XFetchName(dpy, from, &name);
     if(name && strstr(name, str))
        return from;
     
     ret = XQueryTree(dpy, from, &root, &parent, &children, &nchild);
     for(i = 0; i < nchild; i++) {
        child = find_window_id(children[i], str);
	if(child)
	   return child;
     }
     
     return 0;
}


int main(int argc, char *argv[]) {
   XEvent	event;
   XWMHints*	xwhints;
   Pixmap	pix, old;
   
   progname = argv[0];
    
   dpy = XOpenDisplay(NULL);
   
   parse_args(argc, argv);
   if(!win)
      win = find_window_id(DefaultRootWindow(dpy), "Netscape Mail & Newsgroups");
      
   if(!win) {
      printf("ERREUR: Ne trouve pas la fenêtre de Netscape Messenger\n");
      exit(1);
   }  
      
   xwhints = XGetWMHints(dpy, win);
   pix = old = xwhints->icon_pixmap;
   
   XSelectInput(dpy, win, PropertyChangeMask);

   for (;;) {
      XNextEvent(dpy, &event);
      
      xwhints = XGetWMHints(dpy, win);
      if(xwhints->icon_pixmap != old  &&  pix != xwhints->icon_pixmap) {
         if(cmd)
	    system(cmd);
	 else
            XBell(dpy, 50);
      }
      old = xwhints->icon_pixmap;
   }

   return 0;
}
