Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:rhabacker:branches:windows:mingw:win64
mingw64-kinit
0014-Revert-KLauncher-remove-dead-code-related-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0014-Revert-KLauncher-remove-dead-code-related-to-autosta.patch of Package mingw64-kinit
From b5c6dfcf823ecfb3d1f5809df474d9fdfe3c5f2b Mon Sep 17 00:00:00 2001 From: Ralf Habacker <ralf.habacker@freenet.de> Date: Thu, 22 Jul 2021 19:03:35 +0200 Subject: [PATCH 14/18] Revert "KLauncher: remove dead code related to autostart." This reverts commit 0d4d861ba3b91e65f398e84e5260a914c43b1857. --- CMakeLists.txt | 2 + src/klauncher/klauncher.cpp | 63 ++++++++++++++++++++++++++--- src/klauncher/klauncher.h | 15 ++++++- src/klauncher/klauncher_adaptor.cpp | 6 +++ src/klauncher/klauncher_adaptor.h | 5 +++ tests/CMakeLists.txt | 9 +++++ tests/autostarttest.cpp | 57 ++++++++++++++++++++++++++ 7 files changed, 151 insertions(+), 6 deletions(-) create mode 100644 tests/CMakeLists.txt create mode 100644 tests/autostarttest.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 791d773..19bf95d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,6 +91,8 @@ if (KF5DocTools_FOUND) add_subdirectory(docs) endif() +add_subdirectory(tests) + install( FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5InitConfig.cmake" KF5InitMacros.cmake ${CMAKE_CURRENT_BINARY_DIR}/KF5InitConfigVersion.cmake diff --git a/src/klauncher/klauncher.cpp b/src/klauncher/klauncher.cpp index 44aa76e..356bc06 100644 --- a/src/klauncher/klauncher.cpp +++ b/src/klauncher/klauncher.cpp @@ -96,10 +96,12 @@ KLauncher::KLauncher() Q_ASSERT(g_klauncher_self == nullptr); g_klauncher_self = this; + mAutoTimer.setSingleShot(true); new KLauncherAdaptor(this); mSlaveLauncherAdaptor = new KSlaveLauncherAdaptor(this); QDBusConnection::sessionBus().registerObject(QStringLiteral("/KLauncher"), this); // same as ktoolinvocation.cpp + connect(&mAutoTimer, SIGNAL(timeout()), this, SLOT(slotAutoStart())); connect(QDBusConnection::sessionBus().interface(), SIGNAL(serviceOwnerChanged(QString,QString,QString)), SLOT(slotNameOwnerChanged(QString,QString,QString))); @@ -403,6 +405,49 @@ KLauncher::slotNameOwnerChanged(const QString &appId, const QString &oldOwner, } } +void +KLauncher::autoStart(int phase) +{ + if (mAutoStart.phase() >= phase) { + return; + } + mAutoStart.setPhase(phase); + if (phase == 0) { + mAutoStart.loadAutoStartList(); + } + mAutoTimer.start(0); +} + +void +KLauncher::slotAutoStart() +{ + KService::Ptr s; + do { + QString service = mAutoStart.startService(); + qCDebug(KLAUNCHER) << "Service: " << mAutoStart.phase() << service; + if (service.isEmpty()) { + // Done + if (!mAutoStart.phaseDone()) { + mAutoStart.setPhaseDone(); + switch (mAutoStart.phase()) { + case 0: + emit autoStart0Done(); + break; + case 1: + emit autoStart1Done(); + break; + case 2: + emit autoStart2Done(); + break; + } + } + return; + } + s = new KService(service); + } while (!start_service(s, QStringList(), QStringList(), "0", false, true, QDBusMessage())); + // Loop till we find a service that we can start. +} + void KLauncher::requestDone(KLaunchRequest *request) { @@ -433,6 +478,10 @@ KLauncher::requestDone(KLaunchRequest *request) #endif } + if (request->autoStart) { + mAutoTimer.start(0); + } + if (request->transaction.type() != QDBusMessage::InvalidMessage) { if (requestResult.dbusName.isNull()) { // null strings can't be sent requestResult.dbusName.clear(); @@ -558,6 +607,7 @@ KLauncher::requestStart(KLaunchRequest *request) void KLauncher::exec_blind(const QString &name, const QStringList &arg_list, const QStringList &envs, const QString &startup_id) { KLaunchRequest *request = new KLaunchRequest; + request->autoStart = false; request->name = name; request->arg_list = arg_list; request->dbus_startup_type = KService::DBusNone; @@ -600,7 +650,7 @@ KLauncher::start_service_by_desktop_path(const QString &serviceName, const QStri cancel_service_startup_info(nullptr, startup_id.toLocal8Bit(), envs); // cancel it if any return false; } - return start_service(service, urls, envs, startup_id.toLocal8Bit(), blind, msg); + return start_service(service, urls, envs, startup_id.toLocal8Bit(), blind, false, msg); } bool @@ -614,13 +664,13 @@ KLauncher::start_service_by_desktop_name(const QString &serviceName, const QStri cancel_service_startup_info(nullptr, startup_id.toLocal8Bit(), envs); // cancel it if any return false; } - return start_service(service, urls, envs, startup_id.toLocal8Bit(), blind, msg); + return start_service(service, urls, envs, startup_id.toLocal8Bit(), blind, false, msg); } bool KLauncher::start_service(KService::Ptr service, const QStringList &_urls, const QStringList &envs, const QByteArray &startup_id, - bool blind, const QDBusMessage &msg) + bool blind, bool autoStart, const QDBusMessage &msg) { QStringList urls = _urls; bool runPermitted = KDesktopFile::isAuthorizedDesktopFile(service->entryPath()); @@ -636,6 +686,7 @@ KLauncher::start_service(KService::Ptr service, const QStringList &_urls, return false; } KLaunchRequest *request = new KLaunchRequest; + request->autoStart = autoStart; enum DiscreteGpuCheck { NotChecked, Present, Absent }; static DiscreteGpuCheck s_gpuCheck = NotChecked; @@ -678,7 +729,7 @@ KLauncher::start_service(KService::Ptr service, const QStringList &_urls, if (!startup_id2.isEmpty() && startup_id2 != "0") { startup_id2 = "0"; // can't use the same startup_id several times // krazy:exclude=doublequote_chars } - start_service(service, singleUrl, _envs, startup_id2, true, msg); + start_service(service, singleUrl, _envs, startup_id2, true, false, msg); } const QString firstURL = urls.at(0); urls.clear(); @@ -732,7 +783,7 @@ KLauncher::start_service(KService::Ptr service, const QStringList &_urls, send_service_startup_info(request, service, startup_id, _envs); // Request will be handled later. - if (!blind) { + if (!blind && !autoStart) { msg.setDelayedReply(true); request->transaction = msg; } @@ -831,6 +882,7 @@ KLauncher::kdeinit_exec(const QString &app, const QStringList &args, const QString &startup_id, bool wait, const QDBusMessage &msg) { KLaunchRequest *request = new KLaunchRequest; + request->autoStart = false; request->arg_list = args; request->name = app; request->dbus_startup_type = KService::DBusNone; @@ -1029,6 +1081,7 @@ KLauncher::requestSlave(const QString &protocol, } #endif KLaunchRequest *request = new KLaunchRequest; + request->autoStart = false; request->name = name; request->arg_list = arg_list; request->dbus_startup_type = KService::DBusNone; diff --git a/src/klauncher/klauncher.h b/src/klauncher/klauncher.h index 4e2a4ad..5a1cb36 100644 --- a/src/klauncher/klauncher.h +++ b/src/klauncher/klauncher.h @@ -8,6 +8,8 @@ #ifndef _KLAUNCHER_H_ #define _KLAUNCHER_H_ +#include "autostart.h" + #include <qplatformdefs.h> #include <config-kdeinit.h> // HAVE_X11 @@ -60,6 +62,7 @@ public: status_t status; QDBusMessage transaction; KService::DBusStartupType dbus_startup_type; + bool autoStart; bool wait; //wait until the process dies before finishing the request QString errorMsg; #if HAVE_X11 @@ -108,7 +111,7 @@ protected: bool start_service(KService::Ptr service, const QStringList &urls, const QStringList &envs, const QByteArray &startup_id, - bool blind, const QDBusMessage &msg); + bool blind, bool autoStart, const QDBusMessage &msg); void createArgs(KLaunchRequest *request, const KService::Ptr service, const QList<QUrl> &url); @@ -120,7 +123,14 @@ protected: void cancel_service_startup_info(KLaunchRequest *request, const QByteArray &startup_id, const QStringList &envs); +Q_SIGNALS: + void autoStart0Done(); + void autoStart1Done(); + void autoStart2Done(); + public: // remote methods, called by KLauncherAdaptor + void autoStart(int phase = 1); + /** * Starts a program. * 'envs' are environment variables that will be added @@ -195,6 +205,7 @@ public: // remote methods, called by KLauncherAdaptor void terminate_kdeinit(); public Q_SLOTS: + void slotAutoStart(); void slotDequeue(); void slotKDEInitData(int); void slotNameOwnerChanged(const QString &name, const QString &oldOnwer, const QString &newOwner); @@ -217,7 +228,9 @@ protected: KIO::ConnectionServer mConnectionServer; QList<QPointer<IdleSlave>> mSlaveList; QTimer mTimer; + QTimer mAutoTimer; bool bProcessingQueue; + AutoStart mAutoStart; QString mSlaveDebug; QString mSlaveValgrind; QString mSlaveValgrindSkin; diff --git a/src/klauncher/klauncher_adaptor.cpp b/src/klauncher/klauncher_adaptor.cpp index 758e695..500172e 100644 --- a/src/klauncher/klauncher_adaptor.cpp +++ b/src/klauncher/klauncher_adaptor.cpp @@ -35,6 +35,12 @@ KLauncherAdaptor::~KLauncherAdaptor() // destructor } +void KLauncherAdaptor::autoStart(int phase) +{ + // handle method call org.kde.KLauncher.autoStart + static_cast<KLauncher *>(parent())->autoStart(phase); +} + void KLauncherAdaptor::exec_blind(const QString &name, const QStringList &arg_list) { // handle method call org.kde.KLauncher.exec_blind diff --git a/src/klauncher/klauncher_adaptor.h b/src/klauncher/klauncher_adaptor.h index b04d34f..103ae29 100644 --- a/src/klauncher/klauncher_adaptor.h +++ b/src/klauncher/klauncher_adaptor.h @@ -30,6 +30,7 @@ public: public: // PROPERTIES public Q_SLOTS: // METHODS + void autoStart(int phase = 1); void exec_blind(const QString &name, const QStringList &arg_list); void exec_blind(const QString &name, const QStringList &arg_list, const QStringList &envs, const QString &startup_id); int kdeinit_exec(const QString &app, const QStringList &args, const QStringList &env, const QString &startup_id, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid); @@ -40,6 +41,10 @@ public Q_SLOTS: // METHODS int start_service_by_desktop_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid); int start_service_by_desktop_path(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg, QString &dbusServiceName, QString &error, int &pid); void terminate_kdeinit(); +Q_SIGNALS: // SIGNALS + void autoStart0Done(); + void autoStart1Done(); + void autoStart2Done(); }; #endif diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..fafc0ea --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,9 @@ +add_executable(autostart_test + autostarttest.cpp + ../src/klauncher/autostart.cpp +) + +target_link_libraries(autostart_test + Qt5::Core + KF5::Service +) diff --git a/tests/autostarttest.cpp b/tests/autostarttest.cpp new file mode 100644 index 0000000..3356fa3 --- /dev/null +++ b/tests/autostarttest.cpp @@ -0,0 +1,57 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2014 Vishesh Handa <me@vhanda.in> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include <QCoreApplication> +#include <QCommandLineParser> +#include <QDebug> +#include <QTextStream> + +#include "../src/klauncher/autostart.h" + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + QCommandLineParser parser; + parser.addPositionalArgument(QStringLiteral("phase"), QStringLiteral("autostart phase number")); + parser.process(app); + + QStringList args = parser.positionalArguments(); + if (args.size() != 1) { + parser.showHelp(1); + } + + int phase = args.first().toInt(); + AutoStart autostart; + autostart.setPhase(phase); + autostart.loadAutoStartList(); + + QTextStream out(stdout); + + while (!autostart.phaseDone()) { + QString service = autostart.startService(); + if (service.isEmpty()) { + break; + } + + out << service << "\n"; + } + + return 0; +} -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor