feat: add default apps settings

pull/60/head
kate 4 years ago
parent 89666b7e98
commit 8a42ab9c53

@ -21,6 +21,7 @@ find_package(Libcrypt REQUIRED)
find_package(KF5NetworkManagerQt REQUIRED) find_package(KF5NetworkManagerQt REQUIRED)
find_package(KF5ModemManagerQt REQUIRED) find_package(KF5ModemManagerQt REQUIRED)
find_package(KF5Config)
pkg_search_module(FontConfig REQUIRED fontconfig IMPORTED_TARGET) pkg_search_module(FontConfig REQUIRED fontconfig IMPORTED_TARGET)
pkg_search_module(ICU REQUIRED icu-i18n) pkg_search_module(ICU REQUIRED icu-i18n)
@ -59,6 +60,8 @@ set(SRCS
src/vpn/nm-openvpn-service.h src/vpn/nm-openvpn-service.h
src/vpn/nm-pptp-service.h src/vpn/nm-pptp-service.h
src/networkproxy.cpp src/networkproxy.cpp
src/defaultapplications.cpp
src/desktopproperties.cpp
# src/update/updatemodel.cpp # src/update/updatemodel.cpp
) )
@ -87,6 +90,7 @@ target_link_libraries(${PROJECT_NAME}
KF5::NetworkManagerQt KF5::NetworkManagerQt
KF5::ModemManagerQt KF5::ModemManagerQt
KF5::ConfigCore
PkgConfig::FontConfig PkgConfig::FontConfig
${FREETYPE_LIBRARIES} ${FREETYPE_LIBRARIES}

@ -20,6 +20,7 @@
#include "touchpad.h" #include "touchpad.h"
#include "networkproxy.h" #include "networkproxy.h"
#include "notifications.h" #include "notifications.h"
#include "defaultapplications.h"
#include "cursor/cursorthememodel.h" #include "cursor/cursorthememodel.h"
#include "cursor/mouse.h" #include "cursor/mouse.h"
@ -81,6 +82,7 @@ Application::Application(int &argc, char **argv)
qmlRegisterType<Touchpad>(uri, 1, 0, "Touchpad"); qmlRegisterType<Touchpad>(uri, 1, 0, "Touchpad");
qmlRegisterType<NetworkProxy>(uri, 1, 0, "NetworkProxy"); qmlRegisterType<NetworkProxy>(uri, 1, 0, "NetworkProxy");
qmlRegisterType<Notifications>(uri, 1, 0, "Notifications"); qmlRegisterType<Notifications>(uri, 1, 0, "Notifications");
qmlRegisterType<DefaultApplications>(uri, 1, 0, "DefaultApplications");
qmlRegisterSingletonType<Password>(uri, 1, 0, "Password", passwordSingleton); qmlRegisterSingletonType<Password>(uri, 1, 0, "Password", passwordSingleton);

@ -0,0 +1,255 @@
/*
* Copyright (C) 2021 - 2022 CutefishOS Team.
*
* Author: Kate Leet <kate@cutefishos.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "defaultapplications.h"
#include "desktopproperties.h"
#include <QSettings>
#include <QStandardPaths>
#include <QDirIterator>
#include <QDir>
#include <QDebug>
#include <KConfig>
#include <KConfigGroup>
#include <KSharedConfig>
DefaultApplications::DefaultApplications(QObject *parent)
: QObject(parent)
{
loadApps();
}
void DefaultApplications::loadApps()
{
QDirIterator it("/usr/share/applications", { "*.desktop" },
QDir::NoFilter, QDirIterator::Subdirectories);
// Load apps
while (it.hasNext()) {
const auto fileName = it.next();
if (!QFile::exists(fileName))
continue;
DesktopProperties desktop(fileName, "Desktop Entry");
QString name = desktop.value(QString("Name[%1]").arg(QLocale::system().name())).toString();
if (name.isEmpty())
name = desktop.value("Name").toString();
AppItem item;
item.path = fileName;
item.name = name;
item.icon = desktop.value("Icon").toString();
item.mimeType = desktop.value("MimeType").toString();
item.categories = desktop.value("Categories").toString();
item.fileName = QFileInfo(fileName).fileName();
if (item.categories.contains("FileManager")
&& item.mimeType.contains("inode/directory")) {
m_fileManagerList.append(item);
} else if (item.categories.contains("WebBrowser")
&& item.mimeType.contains("x-scheme-handler/http")) {
m_browserList.append(item);
} else if (item.categories.contains("Email")
&& item.mimeType.contains("x-scheme-handler/mailto")) {
m_emailList.append(item);
} else if (item.categories.contains("TerminalEmulator")) {
m_terminalList.append(item);
}
}
// Load xdg config.
QSettings mimeApps(mimeAppsListFilePath(), QSettings::IniFormat);
mimeApps.beginGroup("Default Applications");
QSettings settings("cutefishos", "defaultApps");
QString defaultBrowser = mimeApps.value("x-scheme-handler/http").toString();
QString defaultFM = mimeApps.value("inode/directory").toString();
QString defaultEMail = mimeApps.value("x-scheme-handler/mailto").toString();
QString defaultTerminal = settings.value("terminal").toString();
// Init indexes.
for (int i = 0; i < m_browserList.size(); ++i) {
if (defaultBrowser == m_browserList.at(i).fileName) {
m_browserIndex = i;
break;
}
}
for (int i = 0; i < m_fileManagerList.size(); ++i) {
if (defaultFM == m_fileManagerList.at(i).fileName) {
m_fileManagerIndex = i;
break;
}
}
for (int i = 0; i < m_emailList.size(); ++i) {
if (defaultEMail == m_emailList.at(i).fileName) {
m_emailIndex = i;
break;
}
}
for (int i = 0; i < m_terminalList.size(); ++i) {
if (defaultTerminal == m_terminalList.at(i).fileName) {
m_terminalIndex = i;
break;
}
}
}
QVariantList DefaultApplications::browserList()
{
QVariantList list;
for (const AppItem &item : m_browserList) {
QVariantMap map;
map["name"] = item.name;
map["icon"] = item.icon;
map["path"] = item.path;
list << map;
}
return list;
}
QVariantList DefaultApplications::fileManagerList()
{
QVariantList list;
for (const AppItem &item : m_fileManagerList) {
QVariantMap map;
map["name"] = item.name;
map["icon"] = item.icon;
map["path"] = item.path;
list << map;
}
return list;
}
QVariantList DefaultApplications::emailList()
{
QVariantList list;
for (const AppItem &item : m_emailList) {
QVariantMap map;
map["name"] = item.name;
map["icon"] = item.icon;
map["path"] = item.path;
list << map;
}
return list;
}
QVariantList DefaultApplications::terminalList()
{
QVariantList list;
for (const AppItem &item : m_terminalList) {
QVariantMap map;
map["name"] = item.name;
map["icon"] = item.icon;
map["path"] = item.path;
list << map;
}
return list;
}
int DefaultApplications::browserIndex()
{
return m_browserIndex;
}
int DefaultApplications::fileManagerIndex()
{
return m_fileManagerIndex;
}
int DefaultApplications::emailIndex()
{
return m_emailIndex;
}
int DefaultApplications::terminalIndex()
{
return m_terminalIndex;
}
void DefaultApplications::setDefaultBrowser(int index)
{
if (!m_browserList.isEmpty() && m_browserList.size() < index)
return;
const QString desktop = m_browserList.at(index).fileName;
setDefaultApp("x-scheme-handler/http", desktop);
setDefaultApp("x-scheme-handler/https", desktop);
}
void DefaultApplications::setDefaultFileManager(int index)
{
if (!m_fileManagerList.isEmpty() && m_fileManagerList.size() < index)
return;
const QString desktop = m_fileManagerList.at(index).fileName;
setDefaultApp("inode/directory", desktop);
}
void DefaultApplications::setDefaultEMail(int index)
{
if (!m_emailList.isEmpty() && m_emailList.size() < index)
return;
const QString desktop = m_emailList.at(index).fileName;
setDefaultApp("x-scheme-handler/mailto", desktop);
}
void DefaultApplications::setDefaultTerminal(int index)
{
if (!m_terminalList.isEmpty() && m_terminalList.size() < index)
return;
const QString desktop = m_terminalList.at(index).fileName;
qDebug() << index << desktop;
QSettings settings("cutefishos", "defaultApps");
settings.setValue("terminal", desktop);
}
void DefaultApplications::setDefaultApp(const QString &mimeType, const QString &path)
{
KSharedConfig::Ptr profile = KSharedConfig::openConfig(QStringLiteral("mimeapps.list"),
KConfig::NoGlobals,
QStandardPaths::GenericConfigLocation);
KConfigGroup defaultApp(profile, "Default Applications");
defaultApp.writeXdgListEntry(mimeType, {path});
}
QString DefaultApplications::mimeAppsListFilePath() const
{
return QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QLatin1String("/mimeapps.list");
}

@ -0,0 +1,86 @@
/*
* Copyright (C) 2021 - 2022 CutefishOS Team.
*
* Author: Kate Leet <kate@cutefishos.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef DEFAULTAPPLICATIONS_H
#define DEFAULTAPPLICATIONS_H
#include <QObject>
class AppItem {
public:
QString path;
QString fileName;
QString name;
QString icon;
QString mimeType;
QString categories;
};
class DefaultApplications : public QObject
{
Q_OBJECT
Q_PROPERTY(QVariantList browserList READ browserList NOTIFY loadFinished)
Q_PROPERTY(QVariantList fileManagerList READ fileManagerList NOTIFY loadFinished)
Q_PROPERTY(QVariantList emailList READ emailList NOTIFY loadFinished)
Q_PROPERTY(QVariantList terminalList READ terminalList NOTIFY loadFinished)
Q_PROPERTY(int browserIndex READ browserIndex NOTIFY loadFinished)
Q_PROPERTY(int fileManagerIndex READ fileManagerIndex NOTIFY loadFinished)
Q_PROPERTY(int emailIndex READ emailIndex NOTIFY loadFinished)
Q_PROPERTY(int terminalIndex READ terminalIndex NOTIFY loadFinished)
public:
explicit DefaultApplications(QObject *parent = nullptr);
void loadApps();
QVariantList browserList();
QVariantList fileManagerList();
QVariantList emailList();
QVariantList terminalList();
int browserIndex();
int fileManagerIndex();
int emailIndex();
int terminalIndex();
Q_INVOKABLE void setDefaultBrowser(int index);
Q_INVOKABLE void setDefaultFileManager(int index);
Q_INVOKABLE void setDefaultEMail(int index);
Q_INVOKABLE void setDefaultTerminal(int index);
private:
void setDefaultApp(const QString &mimeType, const QString &path);
QString mimeAppsListFilePath() const;
signals:
void loadFinished();
private:
QList<AppItem> m_browserList;
QList<AppItem> m_fileManagerList;
QList<AppItem> m_emailList;
QList<AppItem> m_terminalList;
int m_browserIndex = -1;
int m_fileManagerIndex = -1;
int m_emailIndex = -1;
int m_terminalIndex = -1;
};
#endif // DEFAULTAPPLICATIONS_H

@ -0,0 +1,114 @@
#include "desktopproperties.h"
#include <QTextStream>
#include <QStringList>
#include <QFile>
#include <QDebug>
DesktopProperties::DesktopProperties(const QString &fileName, const QString &group)
{
if (!fileName.isEmpty()) {
load(fileName, group);
}
}
DesktopProperties::~DesktopProperties()
{
}
bool DesktopProperties::load(const QString &fileName, const QString &group)
{
// NOTE: This class is used for reading of property files instead of QSettings
// class, which considers separator ';' as comment
// Try open file
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
return false;
}
// Clear old data
data.clear();
// Indicator whether group was found or not, if name of group was not
// specified, groupFound is always true
bool groupFound = group.isEmpty();
// Read propeties
QTextStream in(&file);
while (!in.atEnd()) {
// Read new line
QString line = in.readLine();
// Skip empty line or line with invalid format
if (line.trimmed().isEmpty()) {
continue;
}
// Read group
// NOTE: symbols '[' and ']' can be found not only in group names, but
// only group can start with '['
if (!group.isEmpty() && line.trimmed().startsWith("[")) {
QString tmp = line.trimmed().replace("[", "").replace("]", "");
groupFound = group.trimmed().compare(tmp) == 0;
}
// If we are in correct group and line contains assignment then read data
int first_equal = line.indexOf('=');
if (groupFound && first_equal >= 0) {
data.insert(line.left(first_equal).trimmed(), line.mid(first_equal + 1).trimmed());
}
}
file.close();
return true;
}
bool DesktopProperties::save(const QString &fileName, const QString &group)
{
// Try open file
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
return false;
}
// Write group
QTextStream out(&file);
if (!group.isEmpty()) {
out << "[" + group + "]\n";
}
// Write data
foreach (QString key, data.keys()) {
out << key << "=" << data.value(key).toString() << "\n";
}
// Exit
file.close();
return true;
}
bool DesktopProperties::contains(const QString &key) const
{
return data.contains(key);
}
QVariant DesktopProperties::value(const QString &key, const QVariant &defaultValue)
{
return data.value(key, defaultValue);
}
void DesktopProperties::set(const QString &key, const QVariant &value)
{
if (data.contains(key)) {
data.take(key);
}
data.insert(key, value);
}
QStringList DesktopProperties::allKeys() const
{
return data.keys();
}

@ -0,0 +1,32 @@
#ifndef DESKTOPPROPERTIES_H
#define DESKTOPPROPERTIES_H
#include <QObject>
#include <QVariant>
#include <QMap>
/**
* @class DesktopProperties
* @brief Read property files
* @author Michal Rost
* @date 26.1.2013
*/
class DesktopProperties
{
public:
DesktopProperties(const QString &fileName = "", const QString &group = "");
~DesktopProperties();
QVariant value(const QString &key, const QVariant &defaultValue = QVariant());
bool load(const QString &fileName, const QString &group = "");
bool save(const QString &fileName, const QString &group = "");
void set(const QString &key, const QVariant &value);
bool contains(const QString &key) const;
QStringList allKeys() const;
protected:
QMap<QString, QVariant> data;
};
#endif

@ -0,0 +1,31 @@
/*
* Copyright (C) 2021 - 2022 CutefishOS Team.
*
* Author: Kate Leet <support@cutefishos.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import FishUI 1.0 as FishUI
import Cutefish.Settings 1.0
import "../"
ComboBox {
id: control
textRole: "name"
}

@ -20,6 +20,7 @@
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12 import QtQuick.Layouts 1.12
import FishUI 1.0 as FishUI import FishUI 1.0 as FishUI
import Cutefish.Settings 1.0 import Cutefish.Settings 1.0
import "../" import "../"
@ -27,8 +28,8 @@ import "../"
ItemPage { ItemPage {
headerTitle: qsTr("Default Applications") headerTitle: qsTr("Default Applications")
About { DefaultApplications {
id: about id: defaultApps
} }
Scrollable { Scrollable {
@ -46,34 +47,70 @@ ItemPage {
Label { Label {
text: qsTr("Web Browser") text: qsTr("Web Browser")
enabled: browserComboBox.count !== 0
} }
ComboBox { AppComboBox {
id: browserComboBox
Layout.fillWidth: true Layout.fillWidth: true
textRole: "name"
model: defaultApps.browserList
currentIndex: defaultApps.browserIndex
enabled: count !== 0
onActivated: {
defaultApps.setDefaultBrowser(browserComboBox.currentIndex)
}
} }
Label { Label {
text: qsTr("File Manager") text: qsTr("File Manager")
enabled: fileManagerComboBox.count !== 0
} }
ComboBox { AppComboBox {
id: fileManagerComboBox
Layout.fillWidth: true Layout.fillWidth: true
textRole: "name"
model: defaultApps.fileManagerList
currentIndex: defaultApps.fileManagerIndex
enabled: count !== 0
onActivated: {
defaultApps.setDefaultFileManager(fileManagerComboBox.currentIndex)
}
} }
Label { Label {
text: qsTr("Email Client") text: qsTr("Email Client")
enabled: emailComboBox.count !== 0
} }
ComboBox { AppComboBox {
id: emailComboBox
Layout.fillWidth: true Layout.fillWidth: true
textRole: "name"
model: defaultApps.emailList
currentIndex: defaultApps.emailIndex
enabled: count !== 0
onActivated: {
defaultApps.setDefaultEMail(emailComboBox.currentIndex)
}
} }
Label { Label {
text: qsTr("Terminal") text: qsTr("Terminal")
enabled: terminalComboBox.count !== 0
} }
ComboBox { AppComboBox {
id: terminalComboBox
Layout.fillWidth: true Layout.fillWidth: true
textRole: "name"
model: defaultApps.terminalList
currentIndex: defaultApps.terminalIndex
enabled: count !== 0
onActivated: {
defaultApps.setDefaultTerminal(terminalComboBox.currentIndex)
}
} }
} }
} }

@ -213,14 +213,14 @@ Item {
category: qsTr("System") category: qsTr("System")
} }
// ListElement { ListElement {
// title: qsTr("Default Applications") title: qsTr("Default Applications")
// name: "datetime" name: "datetime"
// page: "qrc:/qml/DefaultApp/Main.qml" page: "qrc:/qml/DefaultApp/Main.qml"
// iconSource: "defaultapps.svg" iconSource: "defaultapps.svg"
// iconColor: "#418CFF" iconColor: "#418CFF"
// category: qsTr("System") category: qsTr("System")
// } }
ListElement { ListElement {
title: qsTr("Language") title: qsTr("Language")

@ -145,7 +145,7 @@ ItemPage {
Layout.fillWidth: true Layout.fillWidth: true
value: Volume value: Volume
from: PulseAudio.MinimalVolume from: PulseAudio.MinimalVolume
to: PulseAudio.MaximalVolume to: PulseAudio.NormalVolume
enabled: VolumeWritable enabled: VolumeWritable
visible: HasVolume visible: HasVolume
@ -227,7 +227,7 @@ ItemPage {
Layout.fillWidth: true Layout.fillWidth: true
value: Volume value: Volume
from: PulseAudio.MinimalVolume from: PulseAudio.MinimalVolume
to: PulseAudio.MaximalVolume to: PulseAudio.NormalVolume
enabled: VolumeWritable enabled: VolumeWritable
visible: HasVolume visible: HasVolume

@ -145,5 +145,6 @@
<file>images/sidebar/dark/notifications.svg</file> <file>images/sidebar/dark/notifications.svg</file>
<file>qml/WLAN/ConnectDialog.qml</file> <file>qml/WLAN/ConnectDialog.qml</file>
<file>qml/WLAN/NewNetworkDialog.qml</file> <file>qml/WLAN/NewNetworkDialog.qml</file>
<file>qml/DefaultApp/AppComboBox.qml</file>
</qresource> </qresource>
</RCC> </RCC>

@ -253,37 +253,37 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="216"/> <location filename="../src/qml/Battery/Main.qml" line="217"/>
<source>Poor</source> <source>Poor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="241"/> <location filename="../src/qml/Battery/Main.qml" line="242"/>
<source>Normal</source> <source>Normal</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="266"/> <location filename="../src/qml/Battery/Main.qml" line="267"/>
<source>Excellent</source> <source>Excellent</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="275"/> <location filename="../src/qml/Battery/Main.qml" line="276"/>
<source>Last Charged to</source> <source>Last Charged to</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="281"/> <location filename="../src/qml/Battery/Main.qml" line="282"/>
<source>Maximum Capacity</source> <source>Maximum Capacity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="289"/> <location filename="../src/qml/Battery/Main.qml" line="290"/>
<source>Show percentage in status bar</source> <source>Show percentage in status bar</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="313"/> <location filename="../src/qml/Battery/Main.qml" line="314"/>
<source>No battery found</source> <source>No battery found</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -800,27 +800,27 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="28"/> <location filename="../src/qml/DefaultApp/Main.qml" line="29"/>
<source>Default Applications</source> <source>Default Applications</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="48"/> <location filename="../src/qml/DefaultApp/Main.qml" line="49"/>
<source>Web Browser</source> <source>Web Browser</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="56"/> <location filename="../src/qml/DefaultApp/Main.qml" line="62"/>
<source>File Manager</source> <source>File Manager</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="64"/> <location filename="../src/qml/DefaultApp/Main.qml" line="75"/>
<source>Email Client</source> <source>Email Client</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="72"/> <location filename="../src/qml/DefaultApp/Main.qml" line="88"/>
<source>Terminal</source> <source>Terminal</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1007,6 +1007,7 @@
<location filename="../src/qml/SideBar.qml" line="186"/> <location filename="../src/qml/SideBar.qml" line="186"/>
<location filename="../src/qml/SideBar.qml" line="195"/> <location filename="../src/qml/SideBar.qml" line="195"/>
<location filename="../src/qml/SideBar.qml" line="213"/> <location filename="../src/qml/SideBar.qml" line="213"/>
<location filename="../src/qml/SideBar.qml" line="222"/>
<location filename="../src/qml/SideBar.qml" line="231"/> <location filename="../src/qml/SideBar.qml" line="231"/>
<location filename="../src/qml/SideBar.qml" line="240"/> <location filename="../src/qml/SideBar.qml" line="240"/>
<location filename="../src/qml/SideBar.qml" line="249"/> <location filename="../src/qml/SideBar.qml" line="249"/>
@ -1034,6 +1035,11 @@
<source>Date &amp; Time</source> <source>Date &amp; Time</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../src/qml/SideBar.qml" line="217"/>
<source>Default Applications</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../src/qml/SideBar.qml" line="226"/> <location filename="../src/qml/SideBar.qml" line="226"/>
<source>Language</source> <source>Language</source>

@ -253,37 +253,37 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="216"/> <location filename="../src/qml/Battery/Main.qml" line="217"/>
<source>Poor</source> <source>Poor</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="241"/> <location filename="../src/qml/Battery/Main.qml" line="242"/>
<source>Normal</source> <source>Normal</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="266"/> <location filename="../src/qml/Battery/Main.qml" line="267"/>
<source>Excellent</source> <source>Excellent</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="275"/> <location filename="../src/qml/Battery/Main.qml" line="276"/>
<source>Last Charged to</source> <source>Last Charged to</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="281"/> <location filename="../src/qml/Battery/Main.qml" line="282"/>
<source>Maximum Capacity</source> <source>Maximum Capacity</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="289"/> <location filename="../src/qml/Battery/Main.qml" line="290"/>
<source>Show percentage in status bar</source> <source>Show percentage in status bar</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/Battery/Main.qml" line="313"/> <location filename="../src/qml/Battery/Main.qml" line="314"/>
<source>No battery found</source> <source>No battery found</source>
<translation></translation> <translation></translation>
</message> </message>
@ -800,27 +800,27 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="28"/> <location filename="../src/qml/DefaultApp/Main.qml" line="29"/>
<source>Default Applications</source> <source>Default Applications</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="48"/> <location filename="../src/qml/DefaultApp/Main.qml" line="49"/>
<source>Web Browser</source> <source>Web Browser</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="56"/> <location filename="../src/qml/DefaultApp/Main.qml" line="62"/>
<source>File Manager</source> <source>File Manager</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="64"/> <location filename="../src/qml/DefaultApp/Main.qml" line="75"/>
<source>Email Client</source> <source>Email Client</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/qml/DefaultApp/Main.qml" line="72"/> <location filename="../src/qml/DefaultApp/Main.qml" line="88"/>
<source>Terminal</source> <source>Terminal</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1007,6 +1007,7 @@
<location filename="../src/qml/SideBar.qml" line="186"/> <location filename="../src/qml/SideBar.qml" line="186"/>
<location filename="../src/qml/SideBar.qml" line="195"/> <location filename="../src/qml/SideBar.qml" line="195"/>
<location filename="../src/qml/SideBar.qml" line="213"/> <location filename="../src/qml/SideBar.qml" line="213"/>
<location filename="../src/qml/SideBar.qml" line="222"/>
<location filename="../src/qml/SideBar.qml" line="231"/> <location filename="../src/qml/SideBar.qml" line="231"/>
<location filename="../src/qml/SideBar.qml" line="240"/> <location filename="../src/qml/SideBar.qml" line="240"/>
<location filename="../src/qml/SideBar.qml" line="249"/> <location filename="../src/qml/SideBar.qml" line="249"/>
@ -1034,6 +1035,11 @@
<source>Date &amp; Time</source> <source>Date &amp; Time</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../src/qml/SideBar.qml" line="217"/>
<source>Default Applications</source>
<translation></translation>
</message>
<message> <message>
<location filename="../src/qml/SideBar.qml" line="226"/> <location filename="../src/qml/SideBar.qml" line="226"/>
<source>Language</source> <source>Language</source>

Loading…
Cancel
Save