You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lxqt-config-packaging/liblxqt-config-cursor/cfgfile.cpp

123 lines
3.5 KiB

/* coded by Ketmar // Vampire Avalon (psyc://ketmar.no-ip.org/~Ketmar)
* (c)DWTFYW
*
* This program is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What The Fuck You Want
* To Public License, Version 2, as published by Sam Hocevar. See
* http://sam.zoy.org/wtfpl/COPYING for more details.
*/
#include "cfgfile.h"
#include <QDir>
#include <QFile>
#include <QStringList>
#include <QTextStream>
QMultiMap<QString, QString> loadCfgFile(const QString &fname, bool forceLoCase)
{
QMultiMap<QString, QString> res;
QFile fl(fname);
if (fl.open(QIODevice::ReadOnly))
{
QTextStream stream;
stream.setDevice(&fl);
stream.setCodec("UTF-8");
QString curPath = "/";
while (1)
{
QString s = stream.readLine();
if (s.isNull()) break;
s = s.trimmed();
if (s.isEmpty() || s[0] == '#' || s[0] == ';') continue;
if (s[0] == '[')
{
// new path
int len = s.length()-1;
if (s[len] == ']') len--;
s = s.mid(1, len).simplified();
s += '/';
curPath = s;
continue;
}
int eqp = s.indexOf('=');
if (eqp < 0) continue; // invalid entry
QString name = s.left(eqp).simplified();
QString value = s.mid(eqp+1).simplified();
if (name.isEmpty()) continue; // invalid entry
name.prepend(curPath);
if (forceLoCase) name = name.toLower();
res.insert(name, value);
}
fl.close();
}
return res;
}
void fixXDefaults(const QString &themeName)
{
QStringList lst;
{
QFile fl(QDir::home().path()+"/.Xdefaults");
if (fl.open(QIODevice::ReadOnly))
{
QTextStream stream;
stream.setDevice(&fl);
while (1)
{
QString s = stream.readLine();
if (s.isNull())
break;
// if the line does not contain Xcursor?theme, save it to a list
if (!(s.startsWith(QLatin1String("Xcursor")) && s.midRef(8).startsWith(QLatin1String("theme"))))
lst << s;
}
fl.close();
}
}
while (lst.size() > 0)
{
QString s(lst[lst.size()-1]);
if (!s.trimmed().isEmpty()) break;
lst.removeAt(lst.size()-1);
}
{
//QByteArray ba(themeName.toUtf8());
QFile fl(QDir::home().path()+"/.Xdefaults");
if (fl.open(QIODevice::WriteOnly))
{
QTextStream stream;
stream.setDevice(&fl);
foreach (const QString &s, lst)
{
stream << s << "\n";
}
stream << "\nXcursor.theme: " << themeName << "\n";
fl.close();
}
}
}
const QString findDefaultTheme()
{
QString res = "default";
QFile fl(QDir::home().path()+"/.Xdefaults");
if (fl.open(QIODevice::ReadOnly))
{
QTextStream stream;
stream.setDevice(&fl);
while (1)
{
QString s = stream.readLine();
if (s.isNull()) break;
if (!s.startsWith("Xcursor.theme:")) continue;
s.remove(0, 14);
s = s.trimmed();
if (s.isEmpty()) s = "default";
res = s;
}
fl.close();
}
return res;
}