[compiz] [PATCH] Compiz Events

David Reveman davidr at novell.com
Thu Oct 19 13:19:50 PDT 2006


Looks OK and I think it makes sense to include this.

-David

On Wed, 2006-10-18 at 20:41 +0100, Mike Dransfield wrote:
> I wrote this quick patch because I want plugins to be able to
> communicate with each other with events.  Using the option values to
> communicate with each other is a bit cumbersome if you want to monitor
> for changes or do anything which requires events.
> 
> It is just a small patch and works in the compiz way (ie by wrapping the 
> core
> event).
> 
> Some potential events that I can think of at the moment are 'option changed'
> and 'cube settle on top' (Maybe a widget plugin can use this)
> 
> Plugins can send compiz events like this.
> 
> (*d->handleCompizEvent) (d, "switcher", "NEXT_EVENT", option,
>                                           nOption);
> 
> In this case, switcher is sending the NEXT_EVENT signal.  It is probably 
> best
> to deal with strings for the events since they do not have to be defined 
> and
> are easily passed to external applications.
> 
> The option can be any type of extra information passed as a pointer to a
> CompOption as per normal.
> 
> Some sort of standard should be set out for the naming of events like this.
> plain text document attachment (pluginevents-compiz.h.diff)
> diff --git a/include/compiz.h b/include/compiz.h
> index 61a9de5..a7eff50 100644
> --- a/include/compiz.h
> +++ b/include/compiz.h
> @@ -568,6 +568,12 @@ typedef void (*FiniPluginForDisplayProc)
>  typedef void (*HandleEventProc) (CompDisplay *display,
>  				 XEvent	     *event);
>  
> +typedef void (*HandleCompizEventProc) (CompDisplay *display,
> +		   		       char       *pluginName,
> +		   		       char       *eventName,
> +				       CompOption *option,
> +				       int        nOption);
> +
>  typedef Bool (*CallBackProc) (void *closure);
>  
>  typedef void (*ForEachWindowProc) (CompWindow *window,
> @@ -749,7 +755,8 @@ struct _CompDisplay {
>      InitPluginForDisplayProc initPluginForDisplay;
>      FiniPluginForDisplayProc finiPluginForDisplay;
>  
> -    HandleEventProc handleEvent;
> +    HandleEventProc        handleEvent;
> +    HandleCompizEventProc  handleCompizEvent;
>  
>      CompPrivate *privates;
>  };
> @@ -853,6 +860,12 @@ setDisplayAction (CompDisplay     *displ
>  void
>  handleEvent (CompDisplay *display,
>  	     XEvent      *event);
> +void
> +handleCompizEvent (CompDisplay *display,
> +	           char       *pluginName,
> +	           char       *eventName,
> +	           CompOption *option,
> +	           int        nOption);
>  
>  void
>  handleSyncAlarm (CompWindow *w);
> plain text document attachment (pluginevents-display.c.diff)
> diff --git a/src/display.c b/src/display.c
> index 4abdaed..dd70c51 100644
> --- a/src/display.c
> +++ b/src/display.c
> @@ -2507,6 +2507,7 @@ #endif
>      d->finiPluginForDisplay = finiPluginForDisplay;
>  
>      d->handleEvent = handleEvent;
> +    d->handleCompizEvent = handleCompizEvent;
>  
>      d->supportedAtom	     = XInternAtom (dpy, "_NET_SUPPORTED", 0);
>      d->supportingWmCheckAtom = XInternAtom (dpy, "_NET_SUPPORTING_WM_CHECK", 0);
> plain text document attachment (pluginevents-event.c.diff)
> diff --git a/src/event.c b/src/event.c
> index 2d182be..ce92780 100644
> --- a/src/event.c
> +++ b/src/event.c
> @@ -1059,6 +1059,14 @@ handleActionEvent (CompDisplay *d,
>      return FALSE;
>  }
>  
> +void handleCompizEvent (CompDisplay *d,
> +		        char       *pluginName,
> +		        char       *eventName,
> +		        CompOption *option,
> +		        int        nOption)
> +{
> +}
> +
>  void
>  handleEvent (CompDisplay *d,
>  	     XEvent      *event)
> _______________________________________________
> compiz mailing list
> compiz at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/compiz




More information about the compiz mailing list