File indexing completed on 2024-05-19 03:56:32
0001 /* 0002 SPDX-FileCopyrightText: 2006 Aaron Seigo <aseigo@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include <QCommandLineParser> 0008 #include <QCoreApplication> 0009 #include <QDBusInterface> 0010 #include <QDebug> 0011 0012 int main(int argc, char *argv[]) 0013 { 0014 QCoreApplication app(argc, argv); 0015 app.setApplicationName(QStringLiteral("kquitapp")); 0016 app.setApplicationVersion(QStringLiteral("2.0")); 0017 0018 QCommandLineParser parser; 0019 parser.setApplicationDescription(QCoreApplication::translate("main", "Quit a D-Bus enabled application easily")); 0020 parser.addOption(QCommandLineOption(QStringLiteral("service"), 0021 QCoreApplication::translate("main", "Full service name, overrides application name provided"), 0022 QStringLiteral("service"))); 0023 parser.addOption(QCommandLineOption(QStringLiteral("path"), 0024 QCoreApplication::translate("main", "Path in the D-Bus interface to use"), 0025 QStringLiteral("path"), 0026 QStringLiteral("/MainApplication"))); 0027 parser.addPositionalArgument(QStringLiteral("[application]"), QCoreApplication::translate("main", "The name of the application to quit")); 0028 parser.addHelpOption(); 0029 parser.addVersionOption(); 0030 parser.process(app); 0031 0032 QString service; 0033 if (parser.isSet(QStringLiteral("service"))) { 0034 service = parser.value(QStringLiteral("service")); 0035 } else if (!parser.positionalArguments().isEmpty()) { 0036 service = QStringLiteral("org.kde.%1").arg(parser.positionalArguments().at(0)); 0037 } else { 0038 parser.showHelp(1); 0039 } 0040 0041 QString path(parser.value(QStringLiteral("path"))); 0042 0043 QDBusInterface interface(service, path); 0044 if (!interface.isValid()) { 0045 qWarning() << QCoreApplication::translate("main", "Application %1 could not be found using service %2 and path %3.") 0046 .arg(parser.positionalArguments().at(0), service, path); 0047 return 1; 0048 } 0049 interface.call(QStringLiteral("quit")); 0050 QDBusError error = interface.lastError(); 0051 if (error.type() != QDBusError::NoError) { 0052 qWarning() << QCoreApplication::translate("main", "Quitting application %1 failed. Error reported was:\n\n %2 : %3") 0053 .arg(parser.positionalArguments().join(QStringLiteral(" ")), error.name(), error.message()); 0054 return 1; 0055 } 0056 return 0; 0057 }