[compiz] re-work option initialization

Dennis Kasprzyk onestone at beryl-project.org
Sat Mar 31 18:58:45 PDT 2007


Am Samstag, 31. März 2007 10:12 schrieb David Reveman:
> On Thu, 2007-03-29 at 17:23 +0200, Dennis Kasprzyk wrote:
> > Am Donnerstag, 29. März 2007 11:02 schrieb David Reveman:
> > > Dennis Kasprzyk and I have been discussing some changes to how options
> > > are initialized.
> > >
> > > Problems with how options are currently initialized.
> > >
> > > 1. Helper functions are not used to initialize options, which means
> > > that if we make a change to the option structure, all option
> > > initialization code needs to be updated. Using helper functions will
> > > also reduces the amount of duplicate code.
> > >
> > > 2. No convenient way to get the initial value of an option once it's
> > > been modified.
> > >
> > > 3. An option can't be initialized without compiz running.
> > >
> > >
> > > 2 and 3 are of interest to configuration backends that like to be able
> > > to do offline readout of option information and some kind of standard
> > > default value. 3, might be hard to provide for all kind of plugins as
> > > some might rely on a unique plugin loader to be present so I'm not sure
> > > that I want to recommend a configuration backend to do this. However,
> > > it's easy to provide for plugins built as shared libraries and I don't
> > > want to prevent anyone from doing this if they wish to.
> > >
> > >
> > > Here's our current idea for how we can solve these issues:
> > >
> > > Add
> > >
> > > typedef Bool (*InitPlugin(Display|Screen)OptionProc) (CompOption *o,
> > >                                                       int       
> > > index);
> > >
> > > or
> > >
> > > typedef Bool (*InitPlugin(Display|Screen)OptionsProc) (CompOption **o);
> > >
> > > and the number of display and screen options to the plugin vTable. I
> > > prefer the function prototype with the index as it's a bit more
> > > flexible.
> > >
> > > We can add a set of option initialization macros to compiz.h or helper
> > > functions to a library, which will make the initPluginOption function
> > > in each plugin minimal.
> > >
> > > Action options will be changed to contain a string or KeySym instead of
> > > the current key-code.
> > >
> > > - David
> > >
> > > _______________________________________________
> > > compiz mailing list
> > > compiz at lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/compiz
> >
> > Currently there are two types of configuration tools. Some with fixed
> > functionality and some autogenerated. To improve the quality of the
> > autogenerated tools I would like to make this proposal about additional
> > values in the CompOption struct and the plugin vtable.
> >
> > Additions to the CompOption struct:
> > char * group/char * subgroup : Ability to group sets of options and to
> > give this sets a name.
> >
> > char *hints : A semicolon separated list of string that inform the
> > configuration tool to handle this option in a special way. A string value
> > could have a hint "image" or "file" to inform the configuration tool to
> > open a file dialog when the user wants to set this option. We all could
> > workout here a set of hints, that all configuration tools would
> > understand.
> >
> > Additions to the plugin vTable:
> > char* category: A plugin can define to belong to a category like
> > "effects" or "accessibility", so that a configuration tool can group
> > plugins together. We could workout possible categories later here.
> >
> > All this values would be optional and could be exposed over the dbus
> > plugin or any other configuration system.
>
> I've read the whole thread. To summarize, there's a desire to assign
> much more meta-data than the current short/long descriptions to plugins,
> which to me seems like a very valid request.
>
> Question is how we allow this in the best possible way.
>
> Mike made a good point about the plugin writer not always being the best
> person to be responsible for providing all meta-data. However, I think
> it will be the best solution in most cases and it's always going to be
> easy to have a table of meta-data in the configuration tool that will
> override the plugin provided data so I'm not very concerned about this.
>
> Adding new fields to the plugin vTable every time someone comes up with
> some new useful meta-data seems very inconvenient.
>
> The most obvious way to provide this meta-data is to have an xml file
> paired with each plugin. That way new tags can easily be added as
> desired. I think that this is what we want in most cases but I'm still
> very interested in allowing plugins to be fully functional without any
> external file references. Imagine compiz running on a machine without a
> writable file-system and loading plugins remotely or plugins that
> dynamically create other plugins...
>
> My suggestion is that we remove the two description fields from the
> vTable and add a "char *metadata" field that contains meta information
> as xml data. A helper function that reads meta data for an option from
> an xml file could easily be provided for those plugins that like to keep
> this in an external xml file.
>
> - David

Great idea. Should we do the same for the options?

Dennis



More information about the compiz mailing list