コード例 #1
0
static void
kconfigGetOption (CompObject *object,
		  CompOption *o,
		  const char *plugin)
{
    QString	  group (QString (plugin) + "_" +
			 kconfigObjectString (object));
    const QString name (o->name);

    KCONFIG_CORE (&core);

    kc->config->setGroup (group);

    if (kc->config->hasKey (name))
    {
	CompOptionValue value;

	if (kconfigReadOptionValue (object, kc->config, o, &value))
	{
	    (*core.setOptionForPlugin) (object, plugin, o->name, &value);
	    compFiniOptionValue (&value, o->type);
	}
    }
    else
    {
	kconfigSetOption (object, o, plugin);
    }
}
コード例 #2
0
static void
ccpSetOptionFromContext (CompObject *object,
			 CompOption *o,
			 const char *plugin)
{
    CCP_CORE (&core);

    CCSPlugin       *bsp;
    CCSSetting      *setting;
    CompOptionValue value;

    Bool screen = (object->type == COMP_OBJECT_TYPE_SCREEN);
    int  screenNum = 0;

    /* we currently only support screen and display opton types */
    if (object->type != COMP_OBJECT_TYPE_SCREEN &&
	object->type != COMP_OBJECT_TYPE_DISPLAY)
	return;
    
    if (screen)
    {
	char *name = compObjectName (object);
	if (name)
	{
	    screenNum = atoi (name);
	    free (name);
	}
    }
    
    bsp = ccsFindPlugin (cc->context, (plugin) ? plugin : CORE_VTABLE_NAME);
    if (!bsp)
	return;

    setting = ccsFindSetting (bsp, o->name, screen, screenNum);
    if (!setting)
	return;

    if (!ccpTypeCheck (setting, o))
	return;

    compInitOptionValue (&value);
    ccpSettingToValue (object, setting, &value);

    cc->applyingSettings = TRUE;
    (*core.setOptionForPlugin) (object, plugin, o->name, &value);
    cc->applyingSettings = FALSE;

    compFiniOptionValue (&value, o->type);
}
コード例 #3
0
ファイル: option.c プロジェクト: AtheistSpacePirate/compiz
void compFiniOptionValue(CompOptionValue * v, CompOptionType type)
{
	int i;

	switch (type) {
	case CompOptionTypeString:
		if (v->s)
			free(v->s);
		break;
	case CompOptionTypeMatch:
		matchFini(&v->match);
		break;
	case CompOptionTypeList:
		for (i = 0; i < v->list.nValue; i++)
			compFiniOptionValue(&v->list.value[i], v->list.type);

		if (v->list.value)
			free(v->list.value);
		break;
	default:
		break;
	}
}
コード例 #4
0
ファイル: option.c プロジェクト: AtheistSpacePirate/compiz
void compFiniOption(CompOption * o)
{
	compFiniOptionValue(&o->value, o->type);
}
コード例 #5
0
static Bool
kconfigReadOptionValue (CompObject	*object,
			KConfig		*config,
			CompOption	*o,
			CompOptionValue *value)
{
    compInitOptionValue (value);

    switch (o->type) {
    case CompOptionTypeBool:
    case CompOptionTypeBell:
	kconfigBoolToValue (config->readBoolEntry (o->name), o->type, value);
	break;
    case CompOptionTypeInt:
	value->i = config->readNumEntry (o->name);
	break;
    case CompOptionTypeFloat:
	value->f = config->readDoubleNumEntry (o->name);
	break;
    case CompOptionTypeString:
    case CompOptionTypeColor:
    case CompOptionTypeKey:
    case CompOptionTypeButton:
    case CompOptionTypeEdge:
    case CompOptionTypeMatch:
	if (!kconfigStringToValue (object,
				   config->readEntry (o->name), o->type,
				   value))
	    return FALSE;
	break;
    case CompOptionTypeList: {
	int n, i;

	value->list.value  = NULL;
	value->list.nValue = 0;
	value->list.type   = o->value.list.type;

	switch (o->value.list.type) {
	case CompOptionTypeInt: {
	    QValueList< int > list;

	    list = config->readIntListEntry (o->name);

	    n = list.size ();
	    if (n)
	    {
		value->list.value = (CompOptionValue *)
		    malloc (sizeof (CompOptionValue) * n);
		if (value->list.value)
		{
		    for (i = 0; i < n; i++)
			value->list.value[i].i = list[i];

		    value->list.nValue = n;
		}
	    }
	} break;
	case CompOptionTypeBool:
	case CompOptionTypeFloat:
	case CompOptionTypeString:
	case CompOptionTypeColor:
	case CompOptionTypeKey:
	case CompOptionTypeButton:
	case CompOptionTypeEdge:
	case CompOptionTypeBell:
	case CompOptionTypeMatch: {
	    QStringList list;

	    list = config->readListEntry (o->name);

	    n = list.size ();
	    if (n)
	    {
		value->list.value = (CompOptionValue *)
		    malloc (sizeof (CompOptionValue) * n);
		if (value->list.value)
		{
		    for (i = 0; i < n; i++)
		    {
			if (!kconfigStringToValue (object,
						   list[i],
						   value->list.type,
						   &value->list.value[i]))
			    break;

			value->list.nValue++;
		    }

		    if (value->list.nValue != n)
		    {
			compFiniOptionValue (value, o->type);
			return FALSE;
		    }
		}
	    }
	} break;
	case CompOptionTypeList:
	case CompOptionTypeAction:
	    return FALSE;
	}
    } break;
    case CompOptionTypeAction:
	return FALSE;
	break;
    }

    return TRUE;
}
コード例 #6
0
ファイル: fuse.c プロジェクト: zmike/compiz
static void
fuseSetInodeOptionUsingString(FuseInode *inode,
                              char *str)
{
   CompOption *option;

   option = fuseGetOptionFromInode(inode->parent);
   if (option)
     {
        CompOptionValue value;
        CompObject *object;
        const char *pluginName;

        if (inode->type & FUSE_INODE_TYPE_VALUE)
          {
             object = fuseGetObjectFromInode(inode->parent->parent);
             if (!object)
               return;

             if (!fuseInitValueFromString(object, &value, option->type, str))
               return;

             pluginName = inode->parent->parent->parent->name;
          }
        else if (inode->type & FUSE_INODE_TYPE_ITEM_VALUE)
          {
             int i, item, nValue = option->value.list.nValue;

             if (!sscanf(inode->name, "value%d", &item))
               return;

             if (item >= nValue)
               return;

             object = fuseGetObjectFromInode(inode->parent->parent->parent);
             if (!object)
               return;

             value.list.value = malloc(sizeof (CompOptionValue) * nValue);
             if (!value.list.value)
               return;

             value.list.type = option->value.list.type;
             value.list.nValue = 0;

             for (i = 0; i < nValue; i++)
               {
                  if (i == item)
                    {
                       if (!fuseInitValueFromString(object,
                                                    &value.list.value[i],
                                                    value.list.type,
                                                    str))
                         break;
                    }
                  else
                    {
                       if (!fuseInitValue(&value.list.value[i],
                                          value.list.type,
                                          &option->value.list.value[i]))
                         break;
                    }

                  value.list.nValue++;
               }

             /* failed */
             if (value.list.nValue < nValue)
               {
                  compFiniOptionValue(&value, option->type);
                  return;
               }

             pluginName = inode->parent->parent->parent->parent->name;
          }
        else
          {
             return;
          }

        (*core.setOptionForPlugin)(object, pluginName, option->name, &value);

        compFiniOptionValue(&value, option->type);
     }
}