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@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/compiz