示例#1
0
static void
writeSetting (CCSContext *context,
              CCSSetting *setting)
{
    char        *keyName;
    IniPrivData *data;

    data = findPrivFromContext (context);
    if (!data)
        return;

    if (setting->isScreen)
        asprintf (&keyName, "s%d_%s", setting->screenNum, setting->name);
    else
        asprintf (&keyName, "as_%s", setting->name);

    if (setting->isDefault)
    {
        ccsIniRemoveEntry (data->iniFile, setting->parent->name, keyName);
        free (keyName);
        return;
    }

    switch (setting->type)
    {
    case TypeString:
    {
        char *value;
        if (ccsGetString (setting, &value))
            ccsIniSetString (data->iniFile, setting->parent->name,
                             keyName, value);
    }
    break;
    case TypeMatch:
    {
        char *value;
        if (ccsGetMatch (setting, &value))
            ccsIniSetString (data->iniFile, setting->parent->name,
                             keyName, value);
    }
    break;
    case TypeInt:
    {
        int value;
        if (ccsGetInt (setting, &value))
            ccsIniSetInt (data->iniFile, setting->parent->name,
                          keyName, value);
    }
    break;
    case TypeFloat:
    {
        float value;
        if (ccsGetFloat (setting, &value))
            ccsIniSetFloat (data->iniFile, setting->parent->name,
                            keyName, value);
    }
    break;
    case TypeBool:
    {
        Bool value;
        if (ccsGetBool (setting, &value))
            ccsIniSetBool (data->iniFile, setting->parent->name,
                           keyName, value);
    }
    break;
    case TypeColor:
    {
        CCSSettingColorValue value;
        if (ccsGetColor (setting, &value))
            ccsIniSetColor (data->iniFile, setting->parent->name,
                            keyName, value);
    }
    break;
    case TypeKey:
    {
        CCSSettingKeyValue value;
        if (ccsGetKey (setting, &value))
            ccsIniSetKey (data->iniFile, setting->parent->name,
                          keyName, value);
    }
    break;
    case TypeButton:
    {
        CCSSettingButtonValue value;
        if (ccsGetButton (setting, &value))
            ccsIniSetButton (data->iniFile, setting->parent->name,
                             keyName, value);
    }
    break;
    case TypeEdge:
    {
        unsigned int value;
        if (ccsGetEdge (setting, &value))
            ccsIniSetEdge (data->iniFile, setting->parent->name,
                           keyName, value);
    }
    break;
    case TypeBell:
    {
        Bool value;
        if (ccsGetBell (setting, &value))
            ccsIniSetBell (data->iniFile, setting->parent->name,
                           keyName, value);
    }
    break;
    case TypeList:
    {
        CCSSettingValueList value;
        if (ccsGetList (setting, &value))
            ccsIniSetList (data->iniFile, setting->parent->name,
                           keyName, value, setting->info.forList.listType);
    }
    break;
    default:
        break;
    }

    if (keyName)
        free (keyName);
}
示例#2
0
static void
writeSetting (CCSBackend *backend,
	      CCSContext *context,
	      CCSSetting *setting)
{
    char        *keyName;
    IniPrivData *data;

    data = (IniPrivData *) ccsObjectGetPrivate (backend);
    if (!data)
	return;

    if (asprintf (&keyName, "s%d_%s", ccsContextGetScreenNum (context), ccsSettingGetName (setting)) == -1)
	return;

    if (ccsSettingGetIsDefault (setting))
    {
	ccsIniRemoveEntry (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)), keyName);
	free (keyName);
	return;
    }

    switch (ccsSettingGetType (setting))
    {
    case TypeString:
	{
	    char *value;
	    if (ccsGetString (setting, (const char **) &value))
		ccsIniSetString (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
				 keyName, value);
	}
	break;
    case TypeMatch:
	{
	    char *value;
	    if (ccsGetMatch (setting, (const char **) &value))
		ccsIniSetString (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
				 keyName, value);
	}
	break;
    case TypeInt:
	{
	    int value;
	    if (ccsGetInt (setting, &value))
		ccsIniSetInt (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
			      keyName, value);
	}
	break;
    case TypeFloat:
	{
	    float value;
	    if (ccsGetFloat (setting, &value))
		ccsIniSetFloat (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
				keyName, value);
	}
	break;
    case TypeBool:
	{
	    Bool value;
	    if (ccsGetBool (setting, &value))
		ccsIniSetBool (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
			       keyName, value);
	}
	break;
    case TypeColor:
	{
	    CCSSettingColorValue value;
	    if (ccsGetColor (setting, &value))
		ccsIniSetColor (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
				keyName, value);
	}
	break;
    case TypeKey:
	{
	    CCSSettingKeyValue value;
	    if (ccsGetKey (setting, &value))
		ccsIniSetKey (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
			      keyName, value);
	}
	break;
    case TypeButton:
	{
	    CCSSettingButtonValue value;
	    if (ccsGetButton (setting, &value))
		ccsIniSetButton (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
				 keyName, value);
	}
	break;
    case TypeEdge:
	{
	    unsigned int value;
	    if (ccsGetEdge (setting, &value))
		ccsIniSetEdge (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
			       keyName, value);
	}
	break;
    case TypeBell:
	{
	    Bool value;
	    if (ccsGetBell (setting, &value))
		ccsIniSetBell (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
			       keyName, value);
	}
	break;
    case TypeList:
	{
	    CCSSettingValueList value;
	    if (ccsGetList (setting, &value))
		ccsIniSetList (data->iniFile, ccsPluginGetName (ccsSettingGetParent (setting)),
			       keyName, value, ccsSettingGetInfo (setting)->forList.listType);
	}
	break;
    default:
	break;
    }

    if (keyName)
	free (keyName);
}
Bool
ccsWriteConfig (ConfigOption option,
		char         *value)
{
    IniDictionary *iniFile;
    char          *entry = NULL;
    char          *section;
    char          *fileName;
    char          *curVal;
    Bool          changed = TRUE;

    /* don't change config if nothing changed */
    if (ccsReadConfig (option, &curVal))
    {
	changed = (strcmp (value, curVal) != 0);
	free (curVal);
    }

    if (!changed)
	return TRUE;

    iniFile = getConfigFile();
    if (!iniFile)
	return FALSE;

    switch (option)
    {
    case OptionProfile:
	entry = "profile";
	break;
    case OptionBackend:
	entry = "backend";
	break;
    case OptionIntegration:
	entry = "integration";
	break;
    case OptionAutoSort:
	entry = "plugin_list_autosort";
	break;
    default:
	break;
    }

    if (!entry)
    {
	ccsIniClose (iniFile);
	return FALSE;
    }

    section = getSectionName();
    ccsIniSetString (iniFile, section, entry, value);
    free (section);

    fileName = getConfigFileName();
    if (!fileName)
    {
	ccsIniClose (iniFile);
	return FALSE;
    }

    ccsIniSave (iniFile, fileName);
    ccsIniClose (iniFile);
    free (fileName);

    return TRUE;
}