diff options
| -rw-r--r-- | ChangeLog | 7 | ||||
| -rw-r--r-- | xcompmgr.c | 45 | 
2 files changed, 36 insertions, 16 deletions
| @@ -1,3 +1,10 @@ +2004-08-14  Keith Packard  <keithp@keithp.com> + +	* xcompmgr.c: (error), (usage), (main): +	Remove abort call as it's just annoying. +	Add -a flag to just use Automatic compositing.  No glitz, but no +	screen mangling either. +  2004-08-13  Keith Packard  <keithp@keithp.com>  	* xcompmgr.c: (paint_all), (repair_win), (map_win), @@ -168,6 +168,8 @@ int	fade_delta =	10;  int	fade_time =	0;  Bool	fadeWindows; +Bool	autoRedirect = False; +  int  get_time_in_milliseconds ()  { @@ -1543,7 +1545,7 @@ error (Display *dpy, XErrorEvent *ev)      printf ("error %d request %d minor %d serial %d\n",  	    ev->error_code, ev->request_code, ev->minor_code, ev->serial); -    abort (); +/*    abort ();	    this is just annoying to most people */      return 0;  } @@ -1612,7 +1614,7 @@ ev_window (XEvent *ev)  void  usage (char *program)  { -    fprintf (stderr, "usage: %s [-d display] [-n] [-s] [-c]\n", program); +    fprintf (stderr, "usage: %s [-d display] [-n] [-s] [-c] [-a]\n", program);      exit (1);  } @@ -1640,7 +1642,7 @@ main (int argc, char **argv)      char	    *display = 0;      int		    o; -    while ((o = getopt (argc, argv, "d:scnfS")) != -1) +    while ((o = getopt (argc, argv, "d:scnfaS")) != -1)      {  	switch (o) {  	case 'd': @@ -1658,6 +1660,9 @@ main (int argc, char **argv)  	case 'f':  	    fadeWindows = True;  	    break; +	case 'a': +	    autoRedirect = True; +	    break;  	case 'S':  	    synchronize = True;  	    break; @@ -1728,24 +1733,32 @@ main (int argc, char **argv)      allDamage = None;      clipChanged = True;      XGrabServer (dpy); -    XCompositeRedirectSubwindows (dpy, root, CompositeRedirectManual); -    XSelectInput (dpy, root,  -		  SubstructureNotifyMask| -		  ExposureMask| -		  StructureNotifyMask| -		  PropertyChangeMask); -    XQueryTree (dpy, root, &root_return, &parent_return, &children, &nchildren); -    for (i = 0; i < nchildren; i++) -	add_win (dpy, children[i], i ? children[i-1] : None); -    XFree (children); +    if (autoRedirect) +	XCompositeRedirectSubwindows (dpy, root, CompositeRedirectAutomatic); +    else +    { +	XCompositeRedirectSubwindows (dpy, root, CompositeRedirectManual); +	XSelectInput (dpy, root,  +		      SubstructureNotifyMask| +		      ExposureMask| +		      StructureNotifyMask| +		      PropertyChangeMask); +	XQueryTree (dpy, root, &root_return, &parent_return, &children, &nchildren); +	for (i = 0; i < nchildren; i++) +	    add_win (dpy, children[i], i ? children[i-1] : None); +	XFree (children); +    }      XUngrabServer (dpy);      ufd.fd = ConnectionNumber (dpy);      ufd.events = POLLIN; -    paint_all (dpy, None); +    if (!autoRedirect) +	paint_all (dpy, None);      for (;;)      {  	/*	dump_wins (); */  	do { +	    if (autoRedirect) +		XFlush (dpy);              if (!QLength (dpy))              {          	 if (poll (&ufd, 1, fade_timeout()) == 0) @@ -1762,7 +1775,7 @@ main (int argc, char **argv)  	    printf ("event %10.10s serial 0x%08x window 0x%08x\n",  		    ev_name(&ev), ev_serial (&ev), ev_window (&ev));  #endif -	    switch (ev.type) { +	    if (!autoRedirect) switch (ev.type) {  	    case CreateNotify:  		add_win (dpy, ev.xcreatewindow.window, 0);  		break; @@ -1850,7 +1863,7 @@ main (int argc, char **argv)  		break;  	    }  	} while (QLength (dpy)); -	if (allDamage) +	if (allDamage && !autoRedirect)  	{  	    static int	paint;  	    paint_all (dpy, allDamage); | 
